texlive[69195] Build/source/libs/icu: icu 74.2

commits+karl at tug.org commits+karl at tug.org
Fri Dec 22 18:28:51 CET 2023


Revision: 69195
          https://tug.org/svn/texlive?view=revision&revision=69195
Author:   karl
Date:     2023-12-22 18:28:50 +0100 (Fri, 22 Dec 2023)
Log Message:
-----------
icu 74.2

Modified Paths:
--------------
    trunk/Build/source/libs/icu/ChangeLog
    trunk/Build/source/libs/icu/TLpatches/ChangeLog
    trunk/Build/source/libs/icu/TLpatches/TL-Changes
    trunk/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
    trunk/Build/source/libs/icu/TLpatches/patch-12-mingw
    trunk/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
    trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
    trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
    trunk/Build/source/libs/icu/icu-src/APIChangeReport.md
    trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
    trunk/Build/source/libs/icu/icu-src/source/acinclude.m4
    trunk/Build/source/libs/icu/icu-src/source/aclocal.m4
    trunk/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.IcuVersion.props
    trunk/Build/source/libs/icu/icu-src/source/common/BUILD.bazel
    trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
    trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
    trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
    trunk/Build/source/libs/icu/icu-src/source/common/charstrmap.h
    trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
    trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
    trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
    trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
    trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.h
    trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/hash.h
    trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/localefallback_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h
    trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/lsr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/lsr.h
    trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.h
    trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
    trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
    trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
    trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
    trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/resource.h
    trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/serv.h
    trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
    trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
    trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h
    trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/sources.txt
    trunk/Build/source/libs/icu/icu-src/source/common/static_unicode_sets.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucase.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstrieiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucln_cmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ct.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ext.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_io.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_set.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u16.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvbocu.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvdisp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvhz.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvlat1.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvsel.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucol_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucol_swp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udatamem.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udataswp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uenum.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uhash.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uidna.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulist.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulocimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/umapfile.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unames.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/casemap.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/char16ptr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/rep.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/symtable.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uconfig.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
    trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
    trunk/Build/source/libs/icu/icu-src/source/common/uniquecharstr.h
    trunk/Build/source/libs/icu/icu-src/source/common/uniset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uniset_closure.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.h
    trunk/Build/source/libs/icu/icu-src/source/common/unistr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_case.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_case_locale.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistrappender.h
    trunk/Build/source/libs/icu/icu-src/source/common/unorm.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unormcmp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unormimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uobject.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
    trunk/Build/source/libs/icu/icu-src/source/common/uprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uprops.h
    trunk/Build/source/libs/icu/icu-src/source/common/ures_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uresdata.h
    trunk/Build/source/libs/icu/icu-src/source/common/uresimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uscript.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uset_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uset_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/usetiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ushape.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/usprep.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustack.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrcase_locale.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.h
    trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustring.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrtrns.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utext.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utf_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/util.h
    trunk/Build/source/libs/icu/icu-src/source/common/util_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrace.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2.h
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2_builder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uts46.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvector.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvector.h
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.h
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.h
    trunk/Build/source/libs/icu/icu-src/source/common/wintz.cpp
    trunk/Build/source/libs/icu/icu-src/source/configure
    trunk/Build/source/libs/icu/icu-src/source/configure.ac
    trunk/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
    trunk/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
    trunk/Build/source/libs/icu/icu-src/source/data/dtd/cldr/common/dtd/ldml.dtd
    trunk/Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan-icu4x.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan-icu4x.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/uemoji.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/unames.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/makedata.mak
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/emoji-sequences.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/emoji-zwj-sequences.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/generate.sh
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/BUILD.bazel
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.cpp
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/srtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/bocsu.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/casetrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdata.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatawriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatinbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationroot.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationweights.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/curramt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dt_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/erarules.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/esctrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/funcrepl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gregoimp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrlist.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nortrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_symbolswrapper.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numparse_currency.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numparse_types.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numparse_utils.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numparse_validators.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numsys_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/pluralranges.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/quant.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regextxt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/region.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/remtrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/scientificnumberformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/search.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/selfmtimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/sources.txt
    trunk/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/strmatch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/strrepl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/titletrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucln_in.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucoleitr.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ufieldpositer.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/umsg_imp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/compactdecimalformat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/displayoptions.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udisplayoptions.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/units_data.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unumsys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uregexc.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_build.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utmscale.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/vzone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/zrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/locbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/sprintf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/sscanf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ufile.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uprintf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uprntf_p.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ustdio.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ustream.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/RunArrays.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/playout.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
    trunk/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py
    trunk/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
    trunk/Build/source/libs/icu/icu-src/source/runConfigureICU
    trunk/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/dtptngsample/dtptngsample.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccolltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccurrtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cutiltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/putiltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/sprpdata.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/tracetst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
    trunk/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/collator_compare_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/locale_util.h
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/uregex_open_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltztst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtdatadriventest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tokiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnrapi.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/stream.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontObject.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letsutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/conversion.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/dcfmtest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/numberformattestspecification.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
    trunk/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/datamap.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/testdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/tblgen.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/extract_unsafe_backwards.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/verify_uset.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.h
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rbutil.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.c
    trunk/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/package.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_icu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucln_tu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp

Added Paths:
-----------
    trunk/Build/source/libs/icu/icu-src/build_qnx/
    trunk/Build/source/libs/icu/icu-src/build_qnx/Makefile
    trunk/Build/source/libs/icu/icu-src/build_qnx/build-hooks
    trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/
    trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/GNUmakefile
    trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/
    trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/GNUmakefile
    trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/
    trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/GNUmakefile
    trunk/Build/source/libs/icu/icu-src/source/common/mlbe.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/mlbe.h
    trunk/Build/source/libs/icu/icu-src/source/common/ulocale.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulocbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ulocale.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ulocbuilder.h
    trunk/Build/source/libs/icu/icu-src/source/config/mh-darwin-ppc
    trunk/Build/source/libs/icu/icu-src/source/data/in/icudt74l.dat
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc_scf.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_scf.txt
    trunk/Build/source/libs/icu/icu-src/source/i18n/iso8601cal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/iso8601cal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_simple.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/formattednumber.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/simplenumberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattednumber.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberoptions.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/usimplenumberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ulocaletst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ulocbuildertst.c
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/calendar_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/collator_compare_fuzzer_seed_corpus.txt
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/date_format_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/list_format_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/locale_morph_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/locale_morph_fuzzer_seed_corpus.txt
    trunk/Build/source/libs/icu/icu-src/source/test/fuzzer/relative_date_time_formatter_fuzzer.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_simple.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uchar_type_build_test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/localeIdentifiers/
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/localeIdentifiers/_readme.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/_header.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/_readme.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/af.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/am.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ar.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/as.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/az.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/be.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/bg.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/bn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/bs.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ca.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/catalog.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/chr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/cs.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/cy.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/da.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/de.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/de_CH.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/dsb.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/el.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/en.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/en_AU.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/en_CA.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/en_GB.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/en_IN.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/es.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/es_419.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/es_MX.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/es_US.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/et.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/eu.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/fa.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/fi.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/fil.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/fr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/fr_CA.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ga.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/gd.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/gl.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/gu.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ha.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ha_NE.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/he.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hi.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hi_Latn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hsb.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hu.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/hy.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/id.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ig.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/is.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/it.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ja.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/jv.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ka.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/kk.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/km.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/kn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ko.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/kok.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ky.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/lo.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/lt.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/lv.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/mk.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ml.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/mn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/mr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ms.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/my.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ne.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/nl.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/nn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/no.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/or.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/pa.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/pl.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ps.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/pt.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/pt_PT.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/qu.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ro.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ru.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sc.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sd.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/si.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sk.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sl.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/so.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sq.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sr_Cyrl_BA.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sr_Latn.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sr_Latn_BA.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sv.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sw.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/sw_KE.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ta.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/te.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/tg.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/th.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ti.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/tk.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/tr.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/uk.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/ur.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/uz.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/vi.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/wo.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/yo.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/yo_BJ.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/yue.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/yue_Hans.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/zh.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/zh_Hant.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/zh_Hant_HK.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/cldr/personNameTest/zu.txt

Removed Paths:
-------------
    trunk/Build/source/libs/icu/icu-src/source/data/in/icudt72l.dat
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt

Modified: trunk/Build/source/libs/icu/ChangeLog
===================================================================
--- trunk/Build/source/libs/icu/ChangeLog	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/ChangeLog	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,3 +1,8 @@
+2023-12-22  Karl Berry  <karl at freefriends.org>
+
+	* Import 74.2.
+	(version.ac): update.
+
 2023-01-07  Karl Berry  <karl at freefriends.org>
 
 	* Import 72.1.

Modified: trunk/Build/source/libs/icu/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/ChangeLog	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/ChangeLog	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,3 +1,7 @@
+2023-12-22  Karl Berry  <karl at freefriends.org>
+
+	* Update for icu-74.2. No changes to patches.
+
 2023-01-07  Karl Berry  <karl at freefriends.org>
 
 	* Update for icu-72.1. No changes to patches.

Modified: trunk/Build/source/libs/icu/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/TL-Changes	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/TL-Changes	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,6 +1,5 @@
 Changes applied to the icu tree as obtained from:
-  github.com/unicode-org/icu/releases/download/release-72-1/icu4c-72_1-src.tgz
-        and icu4c-72_1-data.zip
+  github.com/unicode-org/icu/releases/download/release-74-2/icu4c-74_2-src.tgz
 
 cd $Build/source/libs/icu       # for whatever $Build directory
 # update version.ac
@@ -41,7 +40,7 @@
 # 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=72
+ver=74
 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
@@ -55,13 +54,20 @@
 # then remove some elements unused by the icu clients in our tree, which are
 # bibtexu (in texk/bibtex-x), upmendex, and xetex (in texk/web2c/xetexdir).
 outdat=icudt${ver}l.dat
-$icupkg -r 'curr/*' $indat $outdat && \mv $outdat $indat
-$icupkg -r 'lang/*' $indat $outdat && \mv $outdat $indat
-$icupkg -r 'region/*' $indat $outdat && \mv $outdat $indat
-$icupkg -r 'rfc*.spp' $indat $outdat && \mv $outdat $indat
-$icupkg -r 'zone/*' $indat $outdat && \mv $outdat $indat
+$icupkg -r 'curr/*' $indat $outdat && \mv -v $outdat $indat
+$icupkg -r 'lang/*' $indat $outdat && \mv -v $outdat $indat
+$icupkg -r 'region/*' $indat $outdat && \mv -v $outdat $indat
+$icupkg -r 'rfc*.spp' $indat $outdat && \mv -v $outdat $indat
+$icupkg -r 'zone/*' $indat $outdat && \mv -v $outdat $indat
 ls -l $indat $srcdat # indat should be about 2/3 the size
 cp $indat $srcdat
 
+# check that nothing besides backup files is left, back in the srcdir:
+cd $Build/source/libs/icu       # for whatever $Build directory
+svn status | grep -v '^[MAD]' | sort -k 2b
+
+# In 74.2, LICENSE became a (broken) symlink; revert to file.
+
+# if all is ok.
 # update icu/ChangeLog and icu/TLpatches/ChangeLog.
 # then commit.

Modified: trunk/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-01-configure-gcc	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/patch-01-configure-gcc	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,8 +1,8 @@
 	For TL, we do not want to prefer clang(++) for ICU
 	when the whole rest of the tree prefers gcc.
 
---- source/configure~	2022-10-18 17:53:21.000000000 -0700
-+++ source/configure	2023-01-07 15:09:32.437894684 -0800
+--- source/configure~	2023-12-11 14:27:41.000000000 -0800
++++ source/configure	2023-12-22 09:03:59.452738354 -0800
 @@ -2925,5 +2925,5 @@
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  if test -n "$ac_tool_prefix"; then

Modified: trunk/Build/source/libs/icu/TLpatches/patch-12-mingw
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-12-mingw	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/patch-12-mingw	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,7 +1,7 @@
 	We don't want this for TeX Live cross compilation.
 
---- source/config/mh-mingw~	2022-10-18 17:53:21.000000000 -0700
-+++ source/config/mh-mingw	2023-01-07 15:09:46.768812704 -0800
+--- source/config/mh-mingw~	2023-12-11 14:27:41.000000000 -0800
++++ source/config/mh-mingw	2023-12-22 09:04:46.480466115 -0800
 @@ -76,25 +76,7 @@
  STATIC_O = ao
  

Modified: trunk/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,7 +1,7 @@
 	No `s' for STATIC_PREFIX.
 
---- source/config/Makefile.inc.in~	2022-10-18 17:53:21.000000000 -0700
-+++ source/config/Makefile.inc.in	2023-01-07 15:09:50.833789452 -0800
+--- source/config/Makefile.inc.in~	2023-12-11 14:27:41.000000000 -0800
++++ source/config/Makefile.inc.in	2023-12-22 09:05:20.588268662 -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~	2022-10-18 17:53:21.000000000 -0700
-+++ source/icudefs.mk.in	2023-01-07 15:09:50.856789320 -0800
+--- source/icudefs.mk.in~	2023-12-11 14:27:41.000000000 -0800
++++ source/icudefs.mk.in	2023-12-22 09:05:20.588268662 -0800
 @@ -214,5 +214,5 @@
  ## If we can't use the shared libraries, use the static libraries
  ifneq ($(ENABLE_SHARED),YES)

Modified: trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd	2023-12-22 17:28:50 UTC (rev 69195)
@@ -2,8 +2,8 @@
 	From: Marc Baudoin <babafou at babafou.eu.org>
 	tlbuild
 
---- source/common/uposixdefs.h~	2022-10-18 17:53:21.000000000 -0700
-+++ source/common/uposixdefs.h	2023-01-07 15:09:54.231770013 -0800
+--- source/common/uposixdefs.h~	2023-12-11 14:27:41.000000000 -0800
++++ source/common/uposixdefs.h	2023-12-22 09:06:04.056017024 -0800
 @@ -75,3 +75,7 @@
  #endif
  

Modified: trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/APIChangeReport.html	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/APIChangeReport.html	2023-12-22 17:28:50 UTC (rev 69195)
@@ -5,31 +5,31 @@
 	-->
 <head>
 <META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: ICU 71 with ICU 72</title>
+<title>ICU4C API Comparison: ICU 73 with ICU 74</title>
 <link type="text/css" href="icu4c.css" rel="stylesheet">
 </head>
 <body>
 <a name="#_top"></a>
-<h1>ICU4C API Comparison: ICU 71 with ICU 72</h1>
+<h1>ICU4C API Comparison: ICU 73 with ICU 74</h1>
 <div id="toc">
 <ul>
 <li>
-<a href="#removed">Removed from ICU 71</a>
+<a href="#removed">Removed from ICU 73</a>
 </li>
 <li>
-<a href="#deprecated">Deprecated or Obsoleted in ICU 72</a>
+<a href="#deprecated">Deprecated or Obsoleted in ICU 74</a>
 </li>
 <li>
-<a href="#changed">Changed in  ICU 72</a>
+<a href="#changed">Changed in  ICU 74</a>
 </li>
 <li>
-<a href="#promoted">Promoted to stable in ICU 72</a>
+<a href="#promoted">Promoted to stable in ICU 74</a>
 </li>
 <li>
-<a href="#added">Added in ICU 72</a>
+<a href="#added">Added in ICU 74</a>
 </li>
 <li>
-<a href="#other">Other existing drafts in ICU 72</a>
+<a href="#other">Other existing drafts in ICU 74</a>
 </li>
 <li>
 <a href="#simplifications">Signature Simplifications</a>
@@ -38,674 +38,959 @@
 <hr>
 </div>
 <a name="removed"></a>
-<h2>Removed from ICU 71</h2>
+<h2>Removed from ICU 73</h2>
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
 </tr>
 </THEAD>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="deprecated"></a>
+<h2>Deprecated or Obsoleted in ICU 74</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
+</tr>
+</THEAD>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="changed"></a>
+<h2>Changed in  ICU 74 (old, new)</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
+</tr>
+</THEAD>
 <tr class="row1">
-<td class="file">calendar.h</td><td class="proto">bool icu::Calendar::isSet(EDateFields) const</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder icu::DisplayOptions::copyToBuilder() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">calendar.h</td><td class="proto">int32_t icu::Calendar::get(EDateFields, UErrorCode&) const</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">calendar.h</td><td class="proto">int32_t icu::Calendar::getActualMaximum(EDateFields, UErrorCode&) const</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">calendar.h</td><td class="proto">void icu::Calendar::clear(EDateFields)</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">calendar.h</td><td class="proto">void icu::Calendar::set(EDateFields, int32_t)</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">calendar.h</td><td class="proto">void icu::Calendar::setFirstDayOfWeek(EDaysOfWeek)</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::internalMakeInstance(const Locale&, UErrorCode&)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">gregocal.h</td><td class="proto">int32_t icu::GregorianCalendar::getActualMaximum(EDateFields) const</td><td class="">Deprecated<br>ICU 2.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">NounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const</td><td class="">Draft<br>ICU 71</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions icu::DisplayOptions::Builder::build()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">const char* icu::number::FormattedNumber::getGender(UErrorCode&) const</td><td class="">Deprecated</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">plurrule.h</td><td class="proto">int32_t icu::PluralRules::getSamples(const UnicodeString&, FixedDecimal*, int32_t, UErrorCode&)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">plurrule.h</td><td class="proto"><tt>static</tt> bool icu::PluralRules::hasOverride(const Locale&)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">tzrule.h</td><td class="proto">bool icu::InitialTimeZoneRule::getStartInYear(int32_t, int32_t, int32_t, UDate&) const</td><td class="stabchange">Stable<br>ICU 3.8</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in ICU 72</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<tr class="row0">
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
-</THEAD>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="changed"></a>
-<h2>Changed in  ICU 72 (old, new)</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<tr class="row1">
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
-</THEAD>
+<tr class="row0">
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getItem()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto"><tt>static</tt> Builder icu::DisplayOptions::builder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unitDisplayCase(StringPiece) const&</td><td class="">Internal<br>ICU 69</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">formattednumber.h</td><td class="proto">UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unitDisplayCase(StringPiece)&&</td><td class="">Internal<br>ICU 69</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::FormattedNumberRange()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto">bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const&</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&&</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<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→Stable<br>ICU 69</td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uniset.h</td><td class="proto">bool icu::UnicodeSet::hasStrings() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uset.h</td><td class="proto">bool uset_hasStrings(const USet*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uset.h</td><td class="proto">int32_t uset_getRangeCount(const USet*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">usetiter.h</td><td class="proto">UnicodeSetIterator & icu::UnicodeSetIterator::skipToStrings()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row0">
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
+<tr class="row1">
+<td class="file">unum.h</td><td class="proto">bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
+</tr>
 </table>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
 <a name="promoted"></a>
-<h2>Promoted to stable in ICU 72</h2>
+<h2>Promoted to stable in ICU 74</h2>
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getItem()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder icu::DisplayOptions::copyToBuilder() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::FormattedNumberRange()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto">bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_D</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions icu::DisplayOptions::Builder::build()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_DEVANAGARI_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KAKTOVIK_NUMERALS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KAWI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NAG_MUNDARI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto">icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">displayoptions.h</td><td class="proto"><tt>static</tt> Builder icu::DisplayOptions::builder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">formattednumber.h</td><td class="proto">UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<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→Stable<br>ICU 69</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uniset.h</td><td class="proto">bool icu::UnicodeSet::hasStrings() const</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_KAWI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NAG_MUNDARI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const&</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uset.h</td><td class="proto">bool uset_hasStrings(const USet*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&&</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uset.h</td><td class="proto">int32_t uset_getRangeCount(const USet*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">usetiter.h</td><td class="proto">UnicodeSetIterator & icu::UnicodeSetIterator::skipToStrings()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 70</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA_PREBASE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="added"></a>
-<h2>Added in ICU 72</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<tr class="row0">
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA_START</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
-</THEAD>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">Builder icu::DisplayOptions::copyToBuilder() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_VIRAMA_FINAL</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_VIRAMA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">DisplayOptions icu::DisplayOptions::Builder::build()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&) noexcept=default</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto">UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">displayoptions.h</td><td class="proto">icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">displayoptions.h</td><td class="proto"><tt>static</tt> Builder icu::DisplayOptions::builder()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const&</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&&</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_HIDDEN</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">plurrule.h</td><td class="proto">int32_t icu::PluralRules::getSamples(const UnicodeString&, DecimalQuantity*, int32_t, UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_D</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_DEVANAGARI_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KAKTOVIK_NUMERALS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KAWI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NAG_MUNDARI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto">UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto">const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">unum.h</td><td class="proto">bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 72</td>
 </tr>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="added"></a>
+<h2>Added in ICU 74</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
+</tr>
+</THEAD>
+<tr class="row1">
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGasolineEnergyDensity()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGasolineEnergyDensity(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">measure.h</td><td class="proto">bool icu::Measure::operator!=(const UObject&) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">normalizer2.h</td><td class="proto"><tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKCSimpleCasefoldInstance(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">bool icu::ExternalBreakEngine::handles(UChar32) const</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">bool icu::ExternalBreakEngine::isFor(UChar32, const char*) const</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">icu::ExternalBreakEngine::~ExternalBreakEngine()</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">int32_t icu::ExternalBreakEngine::fillBreaks(UText*, int32_t, int32_t, int32_t*, int32_t, UErrorCode&) const</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">rbbi.h</td><td class="proto"><tt>static</tt> void icu::RuleBasedBreakIterator::registerExternalBreakEngine(ExternalBreakEngine*, UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> UnicodeString& icu::TimeZone::getIanaID(const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ucal.h</td><td class="proto">int32_t ucal_getIanaTimeZoneID(const UChar*, int32_t, UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA_PREBASE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA_START</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_AKSARA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_VIRAMA_FINAL</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_VIRAMA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 74</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 74.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_IDS_UNARY_OPERATOR</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_CONTINUE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_START</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">UEnumeration* ulocale_getKeywords(const ULocale*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">UEnumeration* ulocale_getUnicodeKeywords(const ULocale*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">ULocale* ulocale_openForLanguageTag(const char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">ULocale* ulocale_openForLocaleID(const char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">bool ulocale_isBogus(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getBaseName(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getLanguage(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getLocaleID(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getRegion(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getScript(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">const char* ulocale_getVariant(const ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">int32_t ulocale_getKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udisplayoptions.h</td><td class="proto"><tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">int32_t ulocale_getUnicodeKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto">bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 72</span></span></td>
+<td class="file">ulocale.h</td><td class="proto">void ulocale_close(ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_KAWI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">ulocbuilder.h</td><td class="proto">ULocale* ulocbld_buildULocale(ULocaleBuilder*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NAG_MUNDARI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 72</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 72.">(Born Stable)</b></td>
+<td class="file">ulocbuilder.h</td><td class="proto">ULocaleBuilder* ulocbld_open()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
 </tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">bool ulocbld_copyErrorTo(const ULocaleBuilder*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">int32_t ulocbld_buildLanguageTag(ULocaleBuilder*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">int32_t ulocbld_buildLocaleID(ULocaleBuilder*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_addUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_adoptULocale(ULocaleBuilder*, ULocale*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_clear(ULocaleBuilder*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_clearExtensions(ULocaleBuilder*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_close(ULocaleBuilder*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_removeUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setExtension(ULocaleBuilder*, char, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setLanguage(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setLanguageTag(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setLocale(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setRegion(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setScript(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setUnicodeLocaleKeyword(ULocaleBuilder*, const char*, int32_t, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocbuilder.h</td><td class="proto">void ulocbld_setVariant(ULocaleBuilder*, const char*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unorm2.h</td><td class="proto">const UNormalizer2* unorm2_getNFKCSimpleCasefoldInstance(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">icu::UnicodeString& uspoof_getBidiSkeletonUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&, icu::UnicodeString&, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_getBidiSkeleton(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_getBidiSkeletonUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">uint32_t uspoof_areBidiConfusable(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, const UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">uint32_t uspoof_areBidiConfusableUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, const char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">uint32_t uspoof_areBidiConfusableUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&, const icu::UnicodeString&, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 74</span></span></td>
+</tr>
 </table>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
 <a name="other"></a>
-<h2>Other existing drafts in ICU 72</h2>
+<h2>Other existing drafts in ICU 74</h2>
 <div class="other">
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 71</th><th>ICU 72</th>
+<th>File</th><th>API</th><th>ICU 73</th><th>ICU 74</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto">const UnicodeString& icu::DateTimePatternGenerator::getDateTimeFormat(UDateFormatStyle, UErrorCode&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">calendar.h</td><td class="proto">bool icu::Calendar::inTemporalLeapYear(UErrorCode&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row0">
-<td class="file">dtptngen.h</td><td class="proto">void icu::DateTimePatternGenerator::setDateTimeFormat(UDateFormatStyle, const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">calendar.h</td><td class="proto">const char* icu::Calendar::getTemporalMonthCode(UErrorCode&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row1">
+<td class="file">calendar.h</td><td class="proto">void icu::Calendar::setTemporalMonthCode(const char*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
 <td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
 </tr>
+<tr class="row1">
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBeaufort()</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
 <tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IncrementPrecision icu::number::Precision::incrementExact(uint64_t, int16_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBeaufort(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row1">
-<td class="file">udatpg.h</td><td class="proto">const UChar* udatpg_getDateTimeFormatForStyle(const UDateTimePatternGenerator*, UDateFormatStyle, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfCeiling</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row0">
-<td class="file">udatpg.h</td><td class="proto">void udatpg_setDateTimeFormatForStyle(UDateTimePatternGenerator*, UDateFormatStyle, const UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfFloor</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_APPROXIMATELY_SIGN_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 71</td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfOdd</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
 </tr>
 <tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">FormattedNumber icu::number::SimpleNumberFormatter::format(SimpleNumber, UErrorCode&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">FormattedNumber icu::number::SimpleNumberFormatter::formatInt64(int64_t, UErrorCode&) const</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">SimpleNumber& icu::number::SimpleNumber::operator=(SimpleNumber&&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">SimpleNumberFormatter& icu::number::SimpleNumberFormatter::operator=(SimpleNumberFormatter&&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumber::SimpleNumber()=default</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumber::SimpleNumber(SimpleNumber&&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumber::~SimpleNumber()</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumberFormatter::SimpleNumberFormatter()=default</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumberFormatter::SimpleNumberFormatter(SimpleNumberFormatter&&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">icu::number::SimpleNumberFormatter::~SimpleNumberFormatter()</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto"><tt>static</tt> SimpleNumber icu::number::SimpleNumber::forInt64(int64_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto"><tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocale(const icu::Locale&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto"><tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndGroupingStrategy(const icu::Locale&, UNumberGroupingStrategy, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto"><tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndSymbolsAndGroupingStrategy(const icu::Locale&, const DecimalFormatSymbols&, UNumberGroupingStrategy, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::multiplyByPowerOfTen(int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::roundTo(int32_t, UNumberFormatRoundingMode, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::setMinimumFractionDigits(uint32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::setMinimumIntegerDigits(uint32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::setSign(USimpleNumberSign, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">simplenumberformatter.h</td><td class="proto">void icu::number::SimpleNumber::truncateStart(uint32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarDateFields::UCAL_ORDINAL_MONTH</td><td class="" colspan="2" align="center">Draft<br>ICU 73</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>
 </tr>
+<tr class="row0">
+<td class="file">uset.h</td><td class="proto"><tt>enum</tt> (anonymous)::USET_SIMPLE_CASE_INSENSITIVE</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">USimpleNumber* usnum_openForInt64(int64_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">USimpleNumberFormatter* usnumf_openForLocale(const char*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">USimpleNumberFormatter* usnumf_openForLocaleAndGroupingStrategy(const char*, UNumberGroupingStrategy, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto"><tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_MINUS_SIGN</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto"><tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_NO_SIGN</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto"><tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_PLUS_SIGN</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_close(USimpleNumber*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_multiplyByPowerOfTen(USimpleNumber*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_roundTo(USimpleNumber*, int32_t, UNumberFormatRoundingMode, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_setMinimumFractionDigits(USimpleNumber*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_setMinimumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_setSign(USimpleNumber*, USimpleNumberSign, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_setToInt64(USimpleNumber*, int64_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnum_truncateStart(USimpleNumber*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnumf_close(USimpleNumberFormatter*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row0">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnumf_format(const USimpleNumberFormatter*, USimpleNumber*, UFormattedNumber*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
+<tr class="row1">
+<td class="file">usimplenumberformatter.h</td><td class="proto">void usnumf_formatInt64(const USimpleNumberFormatter*, int64_t, UFormattedNumber*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 73</td>
+</tr>
 </table>
 </div>
 <P></P>
@@ -722,7 +1007,7 @@
 <a href="#_top">(jump back to top)</a>
 <hr>
 <p>
-<i><font size="-1">Contents generated by StableAPI tool on Thu Oct 06 11:06:39 PDT 2022<br>
+<i><font size="-1">Contents generated by StableAPI tool on Mon Oct 02 17:50:42 PDT 2023<br>
         Copyright © 2017 and later: Unicode, Inc. and others.<br>
         License & terms of use: http://www.unicode.org/copyright.html
     </font></i>

Modified: trunk/Build/source/libs/icu/icu-src/APIChangeReport.md
===================================================================
--- trunk/Build/source/libs/icu/icu-src/APIChangeReport.md	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/APIChangeReport.md	2023-12-22 17:28:50 UTC (rev 69195)
@@ -5,223 +5,334 @@
  License & terms of use: http://www.unicode.org/copyright.html
 -->
 
-# ICU4C API Comparison: ICU 71 with ICU 72
+# ICU4C API Comparison: ICU 73 with ICU 74
 
 > _Note_ Markdown format of this document is new for ICU 65.
 
-- [Removed from ICU 71](#removed)
-- [Deprecated or Obsoleted in ICU 72](#deprecated)
-- [Changed in  ICU 72](#changed)
-- [Promoted to stable in ICU 72](#promoted)
-- [Added in ICU 72](#added)
-- [Other existing drafts in ICU 72](#other)
+- [Removed from ICU 73](#removed)
+- [Deprecated or Obsoleted in ICU 74](#deprecated)
+- [Changed in  ICU 74](#changed)
+- [Promoted to stable in ICU 74](#promoted)
+- [Added in ICU 74](#added)
+- [Other existing drafts in ICU 74](#other)
 - [Signature Simplifications](#simplifications)
 
 ## Removed
 
-Removed from ICU 71
+Removed from ICU 73
   
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
-| calendar.h | bool icu::Calendar::isSet(EDateFields) const |  DeprecatedICU 2.6 | (missing)
-| calendar.h | int32_t icu::Calendar::get(EDateFields, UErrorCode&) const |  DeprecatedICU 2.6 | (missing)
-| calendar.h | int32_t icu::Calendar::getActualMaximum(EDateFields, UErrorCode&) const |  DeprecatedICU 2.6 | (missing)
-| calendar.h | void icu::Calendar::clear(EDateFields) |  DeprecatedICU 2.6 | (missing)
-| calendar.h | void icu::Calendar::set(EDateFields, int32_t) |  DeprecatedICU 2.6 | (missing)
-| calendar.h | void icu::Calendar::setFirstDayOfWeek(EDaysOfWeek) |  DeprecatedICU 2.6 | (missing)
-| dtptngen.h | <tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::internalMakeInstance(const Locale&, UErrorCode&) |  Internal | (missing)
-| gregocal.h | int32_t icu::GregorianCalendar::getActualMaximum(EDateFields) const |  DeprecatedICU 2.6 | (missing)
-| numberformatter.h | NounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const |  DraftICU 71 | (missing)
-| numberformatter.h | const char* icu::number::FormattedNumber::getGender(UErrorCode&) const |  Deprecated | (missing)
-| plurrule.h | int32_t icu::PluralRules::getSamples(const UnicodeString&, FixedDecimal*, int32_t, UErrorCode&) |  Internal | (missing)
-| plurrule.h | <tt>static</tt> bool icu::PluralRules::hasOverride(const Locale&) |  Internal | (missing)
-| tzrule.h | bool icu::InitialTimeZoneRule::getStartInYear(int32_t, int32_t, int32_t, UDate&) const |  StableICU 3.8 | (missing)
 
 ## Deprecated
 
-Deprecated or Obsoleted in ICU 72
+Deprecated or Obsoleted in ICU 74
   
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
 
 ## Changed
 
-Changed in  ICU 72 (old, new)
+Changed in  ICU 74 (old, new)
 
 
   
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getItem() |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer() |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&) |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&) |  Draft→StableICU 70
-| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::unitDisplayCase(StringPiece) const& |  InternalICU 69 | Internal
-| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::unitDisplayCase(StringPiece)&& |  InternalICU 69 | Internal
-| numberrangeformatter.h | icu::number::FormattedNumberRange::FormattedNumberRange() |  Draft→StableICU 70
-| uchar.h | bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty) |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI |  Draft→StableICU 70
-| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS |  Draft→StableICU 70
-| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS |  Draft→StableICU 70
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER_RANGE_SPAN |  Draft→StableICU 69
-| uniset.h | bool icu::UnicodeSet::hasStrings() const |  Draft→StableICU 70
-| uset.h | bool uset_hasStrings(const USet*) |  Draft→StableICU 70
-| uset.h | int32_t uset_getRangeCount(const USet*) |  Draft→StableICU 70
-| usetiter.h | UnicodeSetIterator & icu::UnicodeSetIterator::skipToStrings() |  Draft→StableICU 70
+| displayoptions.h | Builder icu::DisplayOptions::copyToBuilder() const |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling) |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions icu::DisplayOptions::Builder::build() |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&)=default |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const |  Draft→StableICU 72
+| displayoptions.h | icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default |  Draft→StableICU 72
+| displayoptions.h | <tt>static</tt> Builder icu::DisplayOptions::builder() |  Draft→StableICU 72
+| formattednumber.h | UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter() |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne() |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&) |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&) |  Draft→StableICU 72
+| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const& |  Draft→StableICU 72
+| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&& |  Draft→StableICU 72
+| udisplayoptions.h | UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory) |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED |  Draft→StableICU 72
+| unum.h | bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute) |  Draft→StableICU 72
 
 ## Promoted
 
-Promoted to stable in ICU 72
+Promoted to stable in ICU 74
   
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getItem() |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer() |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&) |  Draft→StableICU 70
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&) |  Draft→StableICU 70
-| numberrangeformatter.h | icu::number::FormattedNumberRange::FormattedNumberRange() |  Draft→StableICU 70
-| uchar.h | bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty) |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_C |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_D |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_DEVANAGARI_EXTENDED_A |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KAKTOVIK_NUMERALS |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KAWI |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_NAG_MUNDARI |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE |  Draft→StableICU 70
-| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI |  Draft→StableICU 70
-| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS |  Draft→StableICU 70
-| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS |  Draft→StableICU 70
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER_RANGE_SPAN |  Draft→StableICU 69
-| uniset.h | bool icu::UnicodeSet::hasStrings() const |  Draft→StableICU 70
-| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_KAWI |  (missing) | StableICU 72| *(Born Stable)* |
-| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_NAG_MUNDARI |  (missing) | StableICU 72| *(Born Stable)* |
-| uset.h | bool uset_hasStrings(const USet*) |  Draft→StableICU 70
-| uset.h | int32_t uset_getRangeCount(const USet*) |  Draft→StableICU 70
-| usetiter.h | UnicodeSetIterator & icu::UnicodeSetIterator::skipToStrings() |  Draft→StableICU 70
+| displayoptions.h | Builder icu::DisplayOptions::copyToBuilder() const |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory) |  Draft→StableICU 72
+| displayoptions.h | Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling) |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions icu::DisplayOptions::Builder::build() |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&)=default |  Draft→StableICU 72
+| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const |  Draft→StableICU 72
+| displayoptions.h | UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const |  Draft→StableICU 72
+| displayoptions.h | icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default |  Draft→StableICU 72
+| displayoptions.h | <tt>static</tt> Builder icu::DisplayOptions::builder() |  Draft→StableICU 72
+| formattednumber.h | UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter() |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne() |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&) |  Draft→StableICU 72
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&) |  Draft→StableICU 72
+| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const& |  Draft→StableICU 72
+| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&& |  Draft→StableICU 72
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA_PREBASE |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA_START |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_VIRAMA_FINAL |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_VIRAMA |  (missing) | StableICU 74| *(Born Stable)* |
+| udisplayoptions.h | UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass) |  Draft→StableICU 72
+| udisplayoptions.h | const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory) |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE |  Draft→StableICU 72
+| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED |  Draft→StableICU 72
+| unum.h | bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute) |  Draft→StableICU 72
 
 ## Added
 
-Added in ICU 72
+Added in ICU 74
   
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
-| displayoptions.h | Builder icu::DisplayOptions::copyToBuilder() const |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setCapitalization(UDisplayOptionsCapitalization) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setDisplayLength(UDisplayOptionsDisplayLength) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setGrammaticalCase(UDisplayOptionsGrammaticalCase) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNameStyle(UDisplayOptionsNameStyle) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setNounClass(UDisplayOptionsNounClass) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setPluralCategory(UDisplayOptionsPluralCategory) |  (missing) | DraftICU 72
-| displayoptions.h | Builder& icu::DisplayOptions::Builder::setSubstituteHandling(UDisplayOptionsSubstituteHandling) |  (missing) | DraftICU 72
-| displayoptions.h | DisplayOptions icu::DisplayOptions::Builder::build() |  (missing) | DraftICU 72
-| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(DisplayOptions&&) noexcept=default |  (missing) | DraftICU 72
-| displayoptions.h | DisplayOptions& icu::DisplayOptions::operator=(const DisplayOptions&)=default |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsCapitalization icu::DisplayOptions::getCapitalization() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsDisplayLength icu::DisplayOptions::getDisplayLength() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsGrammaticalCase icu::DisplayOptions::getGrammaticalCase() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsNameStyle icu::DisplayOptions::getNameStyle() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsNounClass icu::DisplayOptions::getNounClass() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsPluralCategory icu::DisplayOptions::getPluralCategory() const |  (missing) | DraftICU 72
-| displayoptions.h | UDisplayOptionsSubstituteHandling icu::DisplayOptions::getSubstituteHandling() const |  (missing) | DraftICU 72
-| displayoptions.h | icu::DisplayOptions::DisplayOptions(const DisplayOptions&)=default |  (missing) | DraftICU 72
-| displayoptions.h | <tt>static</tt> Builder icu::DisplayOptions::builder() |  (missing) | DraftICU 72
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuarter() |  (missing) | DraftICU 72
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTonne() |  (missing) | DraftICU 72
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuarter(UErrorCode&) |  (missing) | DraftICU 72
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createTonne(UErrorCode&) |  (missing) | DraftICU 72
-| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&) const& |  (missing) | DraftICU 72
-| numberformatter.h | Derived icu::number::NumberFormatterSettings< Derived >::displayOptions(const DisplayOptions&)&& |  (missing) | DraftICU 72
-| numberformatter.h | UDisplayOptionsNounClass icu::number::FormattedNumber::getNounClass(UErrorCode&) const |  (missing) | DraftICU 72
-| platform.h | <tt>#define</tt> U_HIDDEN |  (missing) | Internal
-| plurrule.h | int32_t icu::PluralRules::getSamples(const UnicodeString&, DecimalQuantity*, int32_t, UErrorCode&) |  (missing) | Internal
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_C |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_D |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_DEVANAGARI_EXTENDED_A |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KAKTOVIK_NUMERALS |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KAWI |  (missing) | StableICU 72| *(Born Stable)* |
-| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_NAG_MUNDARI |  (missing) | StableICU 72| *(Born Stable)* |
-| udisplayoptions.h | UDisplayOptionsGrammaticalCase udispopt_fromGrammaticalCaseIdentifier(const char*) |  (missing) | DraftICU 72
-| udisplayoptions.h | UDisplayOptionsNounClass udispopt_fromNounClassIdentifier(const char*) |  (missing) | DraftICU 72
-| udisplayoptions.h | UDisplayOptionsPluralCategory udispopt_fromPluralCategoryIdentifier(const char*) |  (missing) | DraftICU 72
-| udisplayoptions.h | const char* udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase) |  (missing) | DraftICU 72
-| udisplayoptions.h | const char* udispopt_getNounClassIdentifier(UDisplayOptionsNounClass) |  (missing) | DraftICU 72
-| udisplayoptions.h | const char* udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory) |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_BEGINNING_OF_SENTENCE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_MIDDLE_OF_SENTENCE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_STANDALONE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UI_LIST_OR_MENU |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsCapitalization::UDISPOPT_CAPITALIZATION_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_FULL |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_SHORT |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsDisplayLength::UDISPOPT_DISPLAY_LENGTH_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ABLATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ACCUSATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_COMITATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_DATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_ERGATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_GENITIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_INSTRUMENTAL |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE_COPULATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_LOCATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_NOMINATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_OBLIQUE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_PREPOSITIONAL |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_SOCIATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsGrammaticalCase::UDISPOPT_GRAMMATICAL_CASE_VOCATIVE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_DIALECT_NAMES |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_STANDARD_NAMES |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNameStyle::UDISPOPT_NAME_STYLE_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_ANIMATE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_COMMON |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_FEMININE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_INANIMATE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_MASCULINE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_NEUTER |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_OTHER |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_PERSONAL |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsNounClass::UDISPOPT_NOUN_CLASS_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_FEW |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_MANY |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ONE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_OTHER |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_TWO |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_UNDEFINED |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsPluralCategory::UDISPOPT_PLURAL_CATEGORY_ZERO |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_NO_SUBSTITUTE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_SUBSTITUTE |  (missing) | DraftICU 72
-| udisplayoptions.h | <tt>enum</tt> UDisplayOptionsSubstituteHandling::UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED |  (missing) | DraftICU 72
-| unum.h | bool unum_hasAttribute(const UNumberFormat*, UNumberFormatAttribute) |  (missing) | DraftICU 72
-| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_KAWI |  (missing) | StableICU 72| *(Born Stable)* |
-| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_NAG_MUNDARI |  (missing) | StableICU 72| *(Born Stable)* |
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGasolineEnergyDensity() |  (missing) | DraftICU 74
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGasolineEnergyDensity(UErrorCode&) |  (missing) | DraftICU 74
+| measure.h | bool icu::Measure::operator!=(const UObject&) const |  (missing) | DraftICU 74
+| normalizer2.h | <tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKCSimpleCasefoldInstance(UErrorCode&) |  (missing) | DraftICU 74
+| rbbi.h | bool icu::ExternalBreakEngine::handles(UChar32) const |  (missing) | InternalICU 74
+| rbbi.h | bool icu::ExternalBreakEngine::isFor(UChar32, const char*) const |  (missing) | InternalICU 74
+| rbbi.h | icu::ExternalBreakEngine::~ExternalBreakEngine() |  (missing) | InternalICU 74
+| rbbi.h | int32_t icu::ExternalBreakEngine::fillBreaks(UText*, int32_t, int32_t, int32_t*, int32_t, UErrorCode&) const |  (missing) | InternalICU 74
+| rbbi.h | <tt>static</tt> void icu::RuleBasedBreakIterator::registerExternalBreakEngine(ExternalBreakEngine*, UErrorCode&) |  (missing) | InternalICU 74
+| timezone.h | <tt>static</tt> UnicodeString& icu::TimeZone::getIanaID(const UnicodeString&, UnicodeString&, UErrorCode&) |  (missing) | DraftICU 74
+| ucal.h | int32_t ucal_getIanaTimeZoneID(const UChar*, int32_t, UChar*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA_PREBASE |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA_START |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_AKSARA |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_VIRAMA_FINAL |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> ULineBreak::U_LB_VIRAMA |  (missing) | StableICU 74| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDS_UNARY_OPERATOR |  (missing) | DraftICU 74
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_CONTINUE |  (missing) | DraftICU 74
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_START |  (missing) | DraftICU 74
+| ulocale.h | UEnumeration* ulocale_getKeywords(const ULocale*, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | UEnumeration* ulocale_getUnicodeKeywords(const ULocale*, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | ULocale* ulocale_openForLanguageTag(const char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | ULocale* ulocale_openForLocaleID(const char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | bool ulocale_isBogus(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getBaseName(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getLanguage(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getLocaleID(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getRegion(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getScript(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | const char* ulocale_getVariant(const ULocale*) |  (missing) | DraftICU 74
+| ulocale.h | int32_t ulocale_getKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | int32_t ulocale_getUnicodeKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocale.h | void ulocale_close(ULocale*) |  (missing) | DraftICU 74
+| ulocbuilder.h | ULocale* ulocbld_buildULocale(ULocaleBuilder*, UErrorCode*) |  (missing) | DraftICU 74
+| ulocbuilder.h | ULocaleBuilder* ulocbld_open() |  (missing) | DraftICU 74
+| ulocbuilder.h | bool ulocbld_copyErrorTo(const ULocaleBuilder*, UErrorCode*) |  (missing) | DraftICU 74
+| ulocbuilder.h | int32_t ulocbld_buildLanguageTag(ULocaleBuilder*, char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocbuilder.h | int32_t ulocbld_buildLocaleID(ULocaleBuilder*, char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_addUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_adoptULocale(ULocaleBuilder*, ULocale*) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_clear(ULocaleBuilder*) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_clearExtensions(ULocaleBuilder*) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_close(ULocaleBuilder*) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_removeUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setExtension(ULocaleBuilder*, char, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setLanguage(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setLanguageTag(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setLocale(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setRegion(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setScript(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setUnicodeLocaleKeyword(ULocaleBuilder*, const char*, int32_t, const char*, int32_t) |  (missing) | DraftICU 74
+| ulocbuilder.h | void ulocbld_setVariant(ULocaleBuilder*, const char*, int32_t) |  (missing) | DraftICU 74
+| unorm2.h | const UNormalizer2* unorm2_getNFKCSimpleCasefoldInstance(UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | icu::UnicodeString& uspoof_getBidiSkeletonUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&, icu::UnicodeString&, UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | int32_t uspoof_getBidiSkeleton(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, UChar*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | int32_t uspoof_getBidiSkeletonUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | uint32_t uspoof_areBidiConfusable(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, const UChar*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | uint32_t uspoof_areBidiConfusableUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, const char*, int32_t, UErrorCode*) |  (missing) | DraftICU 74
+| uspoof.h | uint32_t uspoof_areBidiConfusableUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&, const icu::UnicodeString&, UErrorCode*) |  (missing) | DraftICU 74
 
 ## Other
 
-Other existing drafts in ICU 72
+Other existing drafts in ICU 74
 
-| File | API | ICU 71 | ICU 72 |
+| File | API | ICU 73 | ICU 74 |
 |---|---|---|---|
-| dtptngen.h |  const UnicodeString& icu::DateTimePatternGenerator::getDateTimeFormat(UDateFormatStyle, UErrorCode&) const | DraftICU 71 | 
-| dtptngen.h |  void icu::DateTimePatternGenerator::setDateTimeFormat(UDateFormatStyle, const UnicodeString&, UErrorCode&) | DraftICU 71 | 
+| calendar.h |  bool icu::Calendar::inTemporalLeapYear(UErrorCode&) const | DraftICU 73 | 
+| calendar.h |  const char* icu::Calendar::getTemporalMonthCode(UErrorCode&) const | DraftICU 73 | 
+| calendar.h |  void icu::Calendar::setTemporalMonthCode(const char*, UErrorCode&) | DraftICU 73 | 
 | measfmt.h |  void icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&) const | DraftICU 53 | 
-| numberformatter.h |  <tt>static</tt> IncrementPrecision icu::number::Precision::incrementExact(uint64_t, int16_t) | DraftICU 71 | 
-| udatpg.h |  const UChar* udatpg_getDateTimeFormatForStyle(const UDateTimePatternGenerator*, UDateFormatStyle, int32_t*, UErrorCode*) | DraftICU 71 | 
-| udatpg.h |  void udatpg_setDateTimeFormatForStyle(UDateTimePatternGenerator*, UDateFormatStyle, const UChar*, int32_t, UErrorCode*) | DraftICU 71 | 
-| unum.h |  <tt>enum</tt> UNumberFormatFields::UNUM_APPROXIMATELY_SIGN_FIELD | DraftICU 71 | 
+| measunit.h |  <tt>static</tt> MeasureUnit icu::MeasureUnit::getBeaufort() | DraftICU 73 | 
+| measunit.h |  <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBeaufort(UErrorCode&) | DraftICU 73 | 
+| numfmt.h |  <tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfCeiling | DraftICU 73 | 
+| numfmt.h |  <tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfFloor | DraftICU 73 | 
+| numfmt.h |  <tt>enum</tt>  							icu::NumberFormat::ERoundingMode::kRoundHalfOdd | DraftICU 73 | 
+| simplenumberformatter.h |  FormattedNumber icu::number::SimpleNumberFormatter::format(SimpleNumber, UErrorCode&) const | DraftICU 73 | 
+| simplenumberformatter.h |  FormattedNumber icu::number::SimpleNumberFormatter::formatInt64(int64_t, UErrorCode&) const | DraftICU 73 | 
+| simplenumberformatter.h |  SimpleNumber& icu::number::SimpleNumber::operator=(SimpleNumber&&) | DraftICU 73 | 
+| simplenumberformatter.h |  SimpleNumberFormatter& icu::number::SimpleNumberFormatter::operator=(SimpleNumberFormatter&&) | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumber::SimpleNumber()=default | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumber::SimpleNumber(SimpleNumber&&) | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumber::~SimpleNumber() | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumberFormatter::SimpleNumberFormatter()=default | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumberFormatter::SimpleNumberFormatter(SimpleNumberFormatter&&) | DraftICU 73 | 
+| simplenumberformatter.h |  icu::number::SimpleNumberFormatter::~SimpleNumberFormatter() | DraftICU 73 | 
+| simplenumberformatter.h |  <tt>static</tt> SimpleNumber icu::number::SimpleNumber::forInt64(int64_t, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocale(const icu::Locale&, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndGroupingStrategy(const icu::Locale&, UNumberGroupingStrategy, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndSymbolsAndGroupingStrategy(const icu::Locale&, const DecimalFormatSymbols&, UNumberGroupingStrategy, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::multiplyByPowerOfTen(int32_t, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::roundTo(int32_t, UNumberFormatRoundingMode, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::setMinimumFractionDigits(uint32_t, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::setMinimumIntegerDigits(uint32_t, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::setSign(USimpleNumberSign, UErrorCode&) | DraftICU 73 | 
+| simplenumberformatter.h |  void icu::number::SimpleNumber::truncateStart(uint32_t, UErrorCode&) | DraftICU 73 | 
+| ucal.h |  <tt>enum</tt> UCalendarDateFields::UCAL_ORDINAL_MONTH | DraftICU 73 | 
 | uregex.h |  <tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ | DraftICU 2.4 | 
+| uset.h |  <tt>enum</tt> (anonymous)::USET_SIMPLE_CASE_INSENSITIVE | DraftICU 73 | 
+| usimplenumberformatter.h |  USimpleNumber* usnum_openForInt64(int64_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  USimpleNumberFormatter* usnumf_openForLocale(const char*, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  USimpleNumberFormatter* usnumf_openForLocaleAndGroupingStrategy(const char*, UNumberGroupingStrategy, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_MINUS_SIGN | DraftICU 73 | 
+| usimplenumberformatter.h |  <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_NO_SIGN | DraftICU 73 | 
+| usimplenumberformatter.h |  <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_PLUS_SIGN | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_close(USimpleNumber*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_multiplyByPowerOfTen(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_roundTo(USimpleNumber*, int32_t, UNumberFormatRoundingMode, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_setMinimumFractionDigits(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_setMinimumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_setSign(USimpleNumber*, USimpleNumberSign, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_setToInt64(USimpleNumber*, int64_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnum_truncateStart(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnumf_close(USimpleNumberFormatter*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnumf_format(const USimpleNumberFormatter*, USimpleNumber*, UFormattedNumber*, UErrorCode*) | DraftICU 73 | 
+| usimplenumberformatter.h |  void usnumf_formatInt64(const USimpleNumberFormatter*, int64_t, UFormattedNumber*, UErrorCode*) | DraftICU 73 | 
 
 ## Simplifications
 
@@ -231,7 +342,7 @@
 
 ## Colophon
 
-Contents generated by StableAPI tool on Thu Oct 06 11:06:50 PDT 2022
+Contents generated by StableAPI tool on Mon Oct 02 17:52:32 PDT 2023
 
 Copyright © 2019 and later: Unicode, Inc. and others.
 License & terms of use: http://www.unicode.org/copyright.html

Added: trunk/Build/source/libs/icu/icu-src/build_qnx/Makefile
===================================================================
--- trunk/Build/source/libs/icu/icu-src/build_qnx/Makefile	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/build_qnx/Makefile	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,54 @@
+# © 2023 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+INSTALL_TARGETS =
+
+ifeq ($(strip $(CPULIST)),)
+  INSTALL_TARGETS += install-aarch64 install-x86_64
+else
+
+ifeq ($(filter aarch64,$(CPULIST)), aarch64)
+  INSTALL_TARGETS += install-aarch64
+endif
+
+ifeq ($(filter x86_64,$(CPULIST)), x86_64)
+  INSTALL_TARGETS += install-x86_64
+endif
+endif
+
+linux_CLEANFILES_LIST := $(filter-out linux-x86_64-o/GNUmakefile, $(wildcard linux-x86_64-o/*))
+aarch64_CLEANFILES_LIST := $(filter-out nto-aarch64-le/GNUmakefile, $(wildcard nto-aarch64-le/*))
+x86_64_CLEANFILES_LIST := $(filter-out nto-x86_64-o/GNUmakefile, $(wildcard nto-x86_64-o/*))
+
+all: install
+
+install: install-linux $(INSTALL_TARGETS)
+
+hinstall:
+
+clean: clean-linux clean-aarch64 clean-x86_64
+
+clean-linux:
+ifneq ($(strip $(linux_CLEANFILES_LIST)),)
+	rm -rf $(linux_CLEANFILES_LIST)
+endif
+
+clean-aarch64:
+ifneq ($(strip $(aarch64_CLEANFILES_LIST)),)
+	rm -rf $(aarch64_CLEANFILES_LIST)
+endif
+
+clean-x86_64:
+ifneq ($(strip $(x86_64_CLEANFILES_LIST)),)
+	rm -rf  $(x86_64_CLEANFILES_LIST)
+endif
+
+install-linux:
+	$(MAKE) -C linux-x86_64-o -f GNUmakefile
+
+install-aarch64: install-linux
+	$(MAKE) -C nto-aarch64-le -f GNUmakefile install
+
+install-x86_64: install-linux
+	$(MAKE) -C nto-x86_64-o -f GNUmakefile install
+
+


Property changes on: trunk/Build/source/libs/icu/icu-src/build_qnx/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/build_qnx/build-hooks
===================================================================
--- trunk/Build/source/libs/icu/icu-src/build_qnx/build-hooks	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/build_qnx/build-hooks	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,81 @@
+# © 2023 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+function hook_preconfigure {
+	if [ "${TARGET_SYSNAME}" == "nto" ]; then
+# set the current directory for use in configure_opts
+		CURDIR="${PWD}"
+# prefix is the base path where files are installed in the target filesystem.  It is also
+# the base path for all architecture independent files
+		configure_opts="${configure_opts} --prefix=/usr"
+# exec-prefix is the base path for architecture dependent files.
+		configure_opts="${configure_opts} --exec-prefix=/${cpudir}/usr"
+		configure_opts="${configure_opts} --with-cross-build=${CURDIR}/../linux-x86_64-o"
+		configure_opts="${configure_opts} --with-data-packaging=auto"
+		configure_opts="${configure_opts} --srcdir=../../source"
+
+		CFLAGS="$CFLAGS -fPIC"
+		CPPFLAGS="$CPPFLAGS -fPIC"
+		CXXFLAGS="$CXXFLAGS -std=gnu++11"
+	else
+# prefix is the base path where architecture independent files are installed in the target filesystem
+		configure_opts="${configure_opts} --prefix=/"
+		configure_opts="${configure_opts} --srcdir=../../source"
+	fi
+}
+
+function hook_configure {
+    if [ -z "${ac_version}" ]; then
+        unset _guess
+        _pat='/[Gg]enerated.*[Aa]utoconf/s/.*\([1-9]\.[0-9][0-9]*\).*/\1/p'
+        [ "${_guess}" ] || _guess=$(../../source/configure --version | sed -n -e "${_pat}")
+        [ "${_guess}" ] || _guess=$(sed -n -e "1,10{
+            ${_pat}
+        }" <../../source/configure)
+        AutoconfVersion ${_guess}
+    fi
+    ../../source/configure \
+        ${ac_host:+"--host=${ac_host}"} \
+        ${ac_build:+"--build=${ac_build}"} \
+        ${configure_opts} \
+        ${ac_params:+${CC:+"CC=${CC}"}} \
+        ${ac_params:+${CFLAGS:+"CFLAGS=-O2 ${CFLAGS}"}} \
+        ${ac_params:+${CPPFLAGS:+"CPPFLAGS=${CPPFLAGS}"}} \
+        ${ac_params:+${LDFLAGS:+"LDFLAGS=${LDFLAGS}"}} \
+        ${ac_params:+${CXX:+"CXX=${CXX}"}} \
+        ${ac_params:+${CXXFLAGS:+"CXXFLAGS=-O2 ${CXXFLAGS}"}} \
+        ${ac_params:+${ac_autotools:+${ac_autotools}}} \
+        || Error "configure failed";
+}
+
+
+function hook_premake {
+	if [ "${TARGET_SYSNAME}" == "nto" ]; then
+		DESTDIR=${DESTDIR:-${INSTALL_ROOT_nto}}
+		export DESTDIR
+	fi
+}
+
+function hook_postmake {
+	if [ "${TARGET_SYSNAME}" == "linux" ]; then
+		make -fMakefile config/icucross.mk
+		make -fMakefile config/icucross.inc
+	fi
+
+	if [ "${TARGET_SYSNAME}" == "nto" ]; then
+		if [ -e "data/out/tmp/icudt72l.dat" ]; then
+			cp -fv data/out/tmp/icudt72l.dat "${DESTDIR}/usr/share/icu/"
+		fi
+		cd test
+		JLEVEL=4 make all-recursive
+		cd -
+		mkdir -p ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/test/testdata
+		mkdir -p ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/data/out
+		cp test/cintltst/cintltst ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests
+		cp test/intltest/intltest ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests
+		cp test/iotest/iotest ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests
+		cp -r data/out/build ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/data/out
+		cp -r test/testdata/out ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/test/testdata
+		cp -r ../../source/test/testdata ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/test
+		cp -r ../../source/data ${INSTALL_ROOT_nto}/${cpudir}/usr/bin/icu_tests/
+	fi
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/build_qnx/build-hooks
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/GNUmakefile
===================================================================
--- trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/GNUmakefile	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/GNUmakefile	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,8 @@
+# © 2023 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+
+include $(MKFILES_ROOT)/qmake-cfg.mk


Property changes on: trunk/Build/source/libs/icu/icu-src/build_qnx/linux-x86_64-o/GNUmakefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/GNUmakefile
===================================================================
--- trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/GNUmakefile	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/GNUmakefile	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,8 @@
+# © 2023 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+
+include $(MKFILES_ROOT)/qmake-cfg.mk


Property changes on: trunk/Build/source/libs/icu/icu-src/build_qnx/nto-aarch64-le/GNUmakefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/GNUmakefile
===================================================================
--- trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/GNUmakefile	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/GNUmakefile	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,8 @@
+# © 2023 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+
+include $(MKFILES_ROOT)/qmake-cfg.mk


Property changes on: trunk/Build/source/libs/icu/icu-src/build_qnx/nto-x86_64-o/GNUmakefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in	2023-12-22 17:28:50 UTC (rev 69195)
@@ -148,7 +148,7 @@
 # shortest path that makes the file name unique will be used
 # The default value is: YES.
 
-FULL_PATH_NAMES        = NO
+FULL_PATH_NAMES        = YES
 
 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
 # Stripping is only done if one of the specified strings matches the left-hand
@@ -160,7 +160,7 @@
 # will be relative from the directory where doxygen is started.
 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
 
-STRIP_FROM_PATH        =
+STRIP_FROM_PATH        = @srcdir@
 
 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
 # path mentioned in the documentation of a class, which tells the reader which
@@ -2085,8 +2085,7 @@
                          U_IN_DOXYGEN=1 \
                          U_CHAR16_IS_TYPEDEF=0 \
                          U_CPLUSPLUS_VERSION=11 \
-                         U_WCHAR_IS_UTF16 \
-                         U_FINAL=final
+                         U_WCHAR_IS_UTF16
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
 # tag can be used to specify a list of macro names that should be expanded. The

Modified: trunk/Build/source/libs/icu/icu-src/source/acinclude.m4
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/acinclude.m4	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/acinclude.m4	2023-12-22 17:28:50 UTC (rev 69195)
@@ -77,6 +77,7 @@
 *-*ibm-openedition*|*-*-os390*)	icu_cv_host_frag=mh-os390 ;;
 *-*-os400*)	icu_cv_host_frag=mh-os400 ;;
 *-apple-rhapsody*)	icu_cv_host_frag=mh-darwin ;;
+powerpc*-apple-darwin*)	icu_cv_host_frag=mh-darwin-ppc ;;
 *-apple-darwin*)	icu_cv_host_frag=mh-darwin ;;
 *-*-beos)       icu_cv_host_frag=mh-beos ;; 
 *-*-haiku)      icu_cv_host_frag=mh-haiku ;; 

Modified: trunk/Build/source/libs/icu/icu-src/source/aclocal.m4
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/aclocal.m4	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/aclocal.m4	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -67,7 +67,7 @@
 ])dnl AX_CHECK_COMPILE_FLAGS
 
 dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
-dnl serial 11 (pkg-config-0.29)
+dnl serial 11 (pkg-config-0.29.1)
 dnl
 dnl Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
 dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists at gmail.com>
@@ -109,7 +109,7 @@
 dnl See the "Since" comment for each macro you use to see what version
 dnl of the macros you require.
 m4_defun([PKG_PREREQ],
-[m4_define([PKG_MACROS_VERSION], [0.29])
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
 m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
     [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
 ])dnl PKG_PREREQ
@@ -154,7 +154,7 @@
 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 occurrence in configure.ac, so if the first place
+dnl only at the first occurence 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],

Modified: trunk/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.IcuVersion.props
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.IcuVersion.props	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.IcuVersion.props	2023-12-22 17:28:50 UTC (rev 69195)
@@ -3,6 +3,6 @@
 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <!-- This file is used to set the ICU Major Version number, which is used as a suffix on various file names in other Visual Studio projects. -->
   <PropertyGroup>
-    <IcuMajorVersion>72</IcuMajorVersion>
+    <IcuMajorVersion>74</IcuMajorVersion>
   </PropertyGroup>
 </Project>

Modified: trunk/Build/source/libs/icu/icu-src/source/common/BUILD.bazel
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/BUILD.bazel	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/BUILD.bazel	2023-12-22 17:28:50 UTC (rev 69195)
@@ -342,6 +342,7 @@
         "dictionarydata.cpp",
         "filteredbrk.cpp",
         "lstmbe.cpp",
+        "mlbe.cpp",
         "rbbi.cpp",
         "rbbi_cache.cpp",
         "rbbidata.cpp",
@@ -602,12 +603,16 @@
         "locbased.cpp",
         "locid.cpp",
         "loclikely.cpp",
+        "loclikelysubtags.cpp",
         "locmap.cpp",
+        "lsr.cpp",
         "resbund.cpp",
         "resource.cpp",
         "uloc.cpp",
         "uloc_tag.cpp",
         "uloc_keytype.cpp",
+        "ulocale.cpp",
+        "ulocbuilder.cpp",
         "uresbund.cpp",
         "uresdata.cpp",
         "wintz.cpp",

Modified: trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -25,7 +25,7 @@
 UBool
 Appendable::appendCodePoint(UChar32 c) {
     if(c<=0xffff) {
-        return appendCodeUnit((UChar)c);
+        return appendCodeUnit((char16_t)c);
     } else {
         return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c));
     }
@@ -32,9 +32,9 @@
 }
 
 UBool
-Appendable::appendString(const UChar *s, int32_t length) {
+Appendable::appendString(const char16_t *s, int32_t length) {
     if(length<0) {
-        UChar c;
+        char16_t c;
         while((c=*s++)!=0) {
             if(!appendCodeUnit(c)) {
                 return false;
@@ -41,7 +41,7 @@
             }
         }
     } else if(length>0) {
-        const UChar *limit=s+length;
+        const char16_t *limit=s+length;
         do {
             if(!appendCodeUnit(*s++)) {
                 return false;
@@ -56,14 +56,14 @@
     return true;
 }
 
-UChar *
+char16_t *
 Appendable::getAppendBuffer(int32_t minCapacity,
                             int32_t /*desiredCapacityHint*/,
-                            UChar *scratch, int32_t scratchCapacity,
+                            char16_t *scratch, int32_t scratchCapacity,
                             int32_t *resultCapacity) {
     if(minCapacity<1 || scratchCapacity<minCapacity) {
         *resultCapacity=0;
-        return NULL;
+        return nullptr;
     }
     *resultCapacity=scratchCapacity;
     return scratch;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -319,9 +319,9 @@
  * Check for sufficient length for trail unit for each surrogate pair.
  * Handle single surrogates as surrogate code points as usual in ICU.
  */
-const UChar *
-BMPSet::span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
-    UChar c, c2;
+const char16_t *
+BMPSet::span(const char16_t *s, const char16_t *limit, USetSpanCondition spanCondition) const {
+    char16_t c, c2;
 
     if(spanCondition) {
         // span
@@ -408,9 +408,9 @@
 }
 
 /* Symmetrical with span(). */
-const UChar *
-BMPSet::spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
-    UChar c, c2;
+const char16_t *
+BMPSet::spanBack(const char16_t *s, const char16_t *limit, USetSpanCondition spanCondition) const {
+    char16_t c, c2;
 
     if(spanCondition) {
         // span

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -48,7 +48,7 @@
      * It must be s<limit and spanCondition==0 or 1.
      * @return The string pointer which limits the span.
      */
-    const UChar *span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
+    const char16_t *span(const char16_t *s, const char16_t *limit, USetSpanCondition spanCondition) const;
 
     /*
      * Span the trailing substring for which each character c has spanCondition==contains(c).
@@ -55,7 +55,7 @@
      * It must be s<limit and spanCondition==0 or 1.
      * @return The string pointer which starts the span.
      */
-    const UChar *spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
+    const char16_t *spanBack(const char16_t *s, const char16_t *limit, USetSpanCondition spanCondition) const;
 
     /*
      * Span the initial substring for which each character c has spanCondition==contains(c).

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -21,6 +21,7 @@
 #include "unicode/uscript.h"
 #include "unicode/ucharstrie.h"
 #include "unicode/bytestrie.h"
+#include "unicode/rbbi.h"
 
 #include "brkeng.h"
 #include "cmemory.h"
@@ -70,19 +71,21 @@
 }
 
 UBool
-UnhandledEngine::handles(UChar32 c) const {
+UnhandledEngine::handles(UChar32 c, const char* locale) const {
+    (void)locale; // Unused
     return fHandled && fHandled->contains(c);
 }
 
 int32_t
 UnhandledEngine::findBreaks( UText *text,
-                             int32_t /* startPos */,
+                             int32_t startPos,
                              int32_t endPos,
                              UVector32 &/*foundBreaks*/,
                              UBool /* isPhraseBreaking */,
                              UErrorCode &status) const {
     if (U_FAILURE(status)) return 0;
-    UChar32 c = utext_current32(text); 
+    utext_setNativeIndex(text, startPos);
+    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.
         c = utext_current32(text);
@@ -120,41 +123,39 @@
     }
 }
 
-U_NAMESPACE_END
-U_CDECL_BEGIN
-static void U_CALLCONV _deleteEngine(void *obj) {
-    delete (const icu::LanguageBreakEngine *) obj;
+void ICULanguageBreakFactory::ensureEngines(UErrorCode& status) {
+    static UMutex gBreakEngineMutex;
+    Mutex m(&gBreakEngineMutex);
+    if (fEngines == nullptr) {
+        LocalPointer<UStack>  engines(new UStack(uprv_deleteUObject, nullptr, status), status);
+        if (U_SUCCESS(status)) {
+            fEngines = engines.orphan();
+        }
+    }
 }
-U_CDECL_END
-U_NAMESPACE_BEGIN
 
 const LanguageBreakEngine *
-ICULanguageBreakFactory::getEngineFor(UChar32 c) {
-    const LanguageBreakEngine *lbe = NULL;
+ICULanguageBreakFactory::getEngineFor(UChar32 c, const char* locale) {
+    const LanguageBreakEngine *lbe = nullptr;
     UErrorCode  status = U_ZERO_ERROR;
+    ensureEngines(status);
+    if (U_FAILURE(status) ) {
+        // Note: no way to return error code to caller.
+        return nullptr;
+    }
 
     static UMutex gBreakEngineMutex;
     Mutex m(&gBreakEngineMutex);
-
-    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.
-            return nullptr;
+    int32_t i = fEngines->size();
+    while (--i >= 0) {
+        lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i));
+        if (lbe != nullptr && lbe->handles(c, locale)) {
+            return lbe;
         }
-        fEngines = engines.orphan();
-    } else {
-        int32_t i = fEngines->size();
-        while (--i >= 0) {
-            lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i));
-            if (lbe != NULL && lbe->handles(c)) {
-                return lbe;
-            }
-        }
     }
-    
+
     // We didn't find an engine. Create one.
-    lbe = loadEngineFor(c);
+    lbe = loadEngineFor(c, locale);
     if (lbe != nullptr) {
         fEngines->push((void *)lbe, status);
     }
@@ -162,7 +163,7 @@
 }
 
 const LanguageBreakEngine *
-ICULanguageBreakFactory::loadEngineFor(UChar32 c) {
+ICULanguageBreakFactory::loadEngineFor(UChar32 c, const char*) {
     UErrorCode status = U_ZERO_ERROR;
     UScriptCode code = uscript_getScript(c, &status);
     if (U_SUCCESS(status)) {
@@ -185,7 +186,7 @@
         }
         status = U_ZERO_ERROR;  // fallback to dictionary based
         DictionaryMatcher *m = loadDictionaryMatcherFor(code);
-        if (m != NULL) {
+        if (m != nullptr) {
             switch(code) {
             case USCRIPT_THAI:
                 engine = new ThaiBreakEngine(m, status);
@@ -230,17 +231,17 @@
             default:
                 break;
             }
-            if (engine == NULL) {
+            if (engine == nullptr) {
                 delete m;
             }
             else if (U_FAILURE(status)) {
                 delete engine;
-                engine = NULL;
+                engine = nullptr;
             }
             return engine;
         }
     }
-    return NULL;
+    return nullptr;
 }
 
 DictionaryMatcher *
@@ -250,16 +251,16 @@
     UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status);
     b = ures_getByKeyWithFallback(b, "dictionaries", b, &status);
     int32_t dictnlength = 0;
-    const UChar *dictfname =
+    const char16_t *dictfname =
         ures_getStringByKeyWithFallback(b, uscript_getShortName(script), &dictnlength, &status);
     if (U_FAILURE(status)) {
         ures_close(b);
-        return NULL;
+        return nullptr;
     }
     CharString dictnbuf;
     CharString ext;
-    const UChar *extStart = u_memrchr(dictfname, 0x002e, dictnlength);  // last dot
-    if (extStart != NULL) {
+    const char16_t *extStart = u_memrchr(dictfname, 0x002e, dictnlength);  // last dot
+    if (extStart != nullptr) {
         int32_t len = (int32_t)(extStart - dictfname);
         ext.appendInvariantChars(UnicodeString(false, extStart + 1, dictnlength - len - 1), status);
         dictnlength = len;
@@ -274,7 +275,7 @@
         const int32_t *indexes = (const int32_t *)data;
         const int32_t offset = indexes[DictionaryData::IX_STRING_TRIE_OFFSET];
         const int32_t trieType = indexes[DictionaryData::IX_TRIE_TYPE] & DictionaryData::TRIE_TYPE_MASK;
-        DictionaryMatcher *m = NULL;
+        DictionaryMatcher *m = nullptr;
         if (trieType == DictionaryData::TRIE_TYPE_BYTES) {
             const int32_t transform = indexes[DictionaryData::IX_TRANSFORM];
             const char *characters = (const char *)(data + offset);
@@ -281,24 +282,88 @@
             m = new BytesDictionaryMatcher(characters, transform, file);
         }
         else if (trieType == DictionaryData::TRIE_TYPE_UCHARS) {
-            const UChar *characters = (const UChar *)(data + offset);
+            const char16_t *characters = (const char16_t *)(data + offset);
             m = new UCharsDictionaryMatcher(characters, file);
         }
-        if (m == NULL) {
+        if (m == nullptr) {
             // no matcher exists to take ownership - either we are an invalid 
             // type or memory allocation failed
             udata_close(file);
         }
         return m;
-    } else if (dictfname != NULL) {
+    } else if (dictfname != nullptr) {
         // we don't have a dictionary matcher.
-        // returning NULL here will cause us to fail to find a dictionary break engine, as expected
+        // returning nullptr here will cause us to fail to find a dictionary break engine, as expected
         status = U_ZERO_ERROR;
-        return NULL;
+        return nullptr;
     }
-    return NULL;
+    return nullptr;
 }
 
+
+void ICULanguageBreakFactory::addExternalEngine(
+        ExternalBreakEngine* external, UErrorCode& status) {
+    LocalPointer<ExternalBreakEngine> engine(external, status);
+    ensureEngines(status);
+    LocalPointer<BreakEngineWrapper> wrapper(
+        new BreakEngineWrapper(engine.orphan(), status), status);
+    static UMutex gBreakEngineMutex;
+    Mutex m(&gBreakEngineMutex);
+    fEngines->push(wrapper.getAlias(), status);
+    wrapper.orphan();
+}
+
+BreakEngineWrapper::BreakEngineWrapper(
+    ExternalBreakEngine* engine, UErrorCode &status) : delegate(engine, status) {
+}
+
+BreakEngineWrapper::~BreakEngineWrapper() {
+}
+
+UBool BreakEngineWrapper::handles(UChar32 c, const char* locale) const {
+    return delegate->isFor(c, locale);
+}
+
+int32_t BreakEngineWrapper::findBreaks(
+    UText *text,
+    int32_t startPos,
+    int32_t endPos,
+    UVector32 &foundBreaks,
+    UBool /* isPhraseBreaking */,
+    UErrorCode &status) const {
+    if (U_FAILURE(status)) return 0;
+    int32_t result = 0;
+
+    // Find the span of characters included in the set.
+    //   The span to break begins at the current position in the text, and
+    //   extends towards the start or end of the text, depending on 'reverse'.
+
+    utext_setNativeIndex(text, startPos);
+    int32_t start = (int32_t)utext_getNativeIndex(text);
+    int32_t current;
+    int32_t rangeStart;
+    int32_t rangeEnd;
+    UChar32 c = utext_current32(text);
+    while((current = (int32_t)utext_getNativeIndex(text)) < endPos && delegate->handles(c)) {
+        utext_next32(text);         // TODO:  recast loop for postincrement
+        c = utext_current32(text);
+    }
+    rangeStart = start;
+    rangeEnd = current;
+    int32_t beforeSize = foundBreaks.size();
+    int32_t additionalCapacity = rangeEnd - rangeStart + 1;
+    // enlarge to contains (rangeEnd-rangeStart+1) more items
+    foundBreaks.ensureCapacity(beforeSize+additionalCapacity, status);
+    if (U_FAILURE(status)) return 0;
+    foundBreaks.setSize(beforeSize + beforeSize+additionalCapacity);
+    result = delegate->fillBreaks(text, rangeStart, rangeEnd, foundBreaks.getBuffer()+beforeSize,
+                                  additionalCapacity, status);
+    if (U_FAILURE(status)) return 0;
+    foundBreaks.setSize(beforeSize + result);
+    utext_setNativeIndex(text, current);
+    return result;
+}
+
 U_NAMESPACE_END
 
 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -10,6 +10,7 @@
 #ifndef BRKENG_H
 #define BRKENG_H
 
+#include "unicode/umisc.h"
 #include "unicode/utypes.h"
 #include "unicode/uobject.h"
 #include "unicode/utext.h"
@@ -21,6 +22,7 @@
 class UStack;
 class UVector32;
 class DictionaryMatcher;
+class ExternalBreakEngine;
 
 /*******************************************************************
  * LanguageBreakEngine
@@ -35,7 +37,7 @@
  * <p>LanguageBreakEngines should normally be implemented so as to
  * be shared between threads without locking.</p>
  */
-class LanguageBreakEngine : public UMemory {
+class LanguageBreakEngine : public UObject {
  public:
 
   /**
@@ -54,10 +56,11 @@
   * a particular kind of break.</p>
   *
   * @param c A character which begins a run that the engine might handle
+  * @param locale The locale.
   * @return true if this engine handles the particular character and break
   * type.
   */
-  virtual UBool handles(UChar32 c) const = 0;
+  virtual UBool handles(UChar32 c, const char* locale) const = 0;
 
  /**
   * <p>Find any breaks within a run in the supplied text.</p>
@@ -81,6 +84,35 @@
 };
 
 /*******************************************************************
+ * BreakEngineWrapper
+ */
+
+/**
+ * <p>BreakEngineWrapper implement LanguageBreakEngine by
+ * a thin wrapper that delegate the task to ExternalBreakEngine
+ * </p>
+ */
+class BreakEngineWrapper : public  LanguageBreakEngine {
+ public:
+
+  BreakEngineWrapper(ExternalBreakEngine* engine, UErrorCode &status);
+
+  virtual ~BreakEngineWrapper();
+
+  virtual UBool handles(UChar32 c, const char* locale) const override;
+
+  virtual int32_t findBreaks( UText *text,
+                              int32_t startPos,
+                              int32_t endPos,
+                              UVector32 &foundBreaks,
+                              UBool isPhraseBreaking,
+                              UErrorCode &status) const override;
+
+ private:
+  LocalPointer<ExternalBreakEngine> delegate;
+};
+
+/*******************************************************************
  * LanguageBreakFactory
  */
 
@@ -125,9 +157,10 @@
   *
   * @param c A character that begins a run for which a LanguageBreakEngine is
   * sought.
+  * @param locale The locale.
   * @return A LanguageBreakEngine with the desired characteristics, or 0.
   */
-  virtual const LanguageBreakEngine *getEngineFor(UChar32 c) = 0;
+  virtual const LanguageBreakEngine *getEngineFor(UChar32 c, const char* locale) = 0;
 
 };
 
@@ -174,10 +207,11 @@
   * a particular kind of break.</p>
   *
   * @param c A character which begins a run that the engine might handle
+  * @param locale The locale.
   * @return true if this engine handles the particular character and break
   * type.
   */
-  virtual UBool handles(UChar32 c) const override;
+  virtual UBool handles(UChar32 c, const char* locale) const override;
 
  /**
   * <p>Find any breaks within a run in the supplied text.</p>
@@ -247,10 +281,19 @@
   *
   * @param c A character that begins a run for which a LanguageBreakEngine is
   * sought.
+  * @param locale The locale.
   * @return A LanguageBreakEngine with the desired characteristics, or 0.
   */
-  virtual const LanguageBreakEngine *getEngineFor(UChar32 c) override;
+  virtual const LanguageBreakEngine *getEngineFor(UChar32 c, const char* locale) override;
 
+  /**
+   * Add and adopt the engine and return an URegistryKey.
+   * @param engine The ExternalBreakEngine to be added and adopt. The caller
+   *     pass the ownership and should not release the memory after this.
+   * @param status the error code.
+   */
+  virtual void addExternalEngine(ExternalBreakEngine* engine, UErrorCode& status);
+
 protected:
  /**
   * <p>Create a LanguageBreakEngine for the set of characters to which
@@ -258,17 +301,21 @@
   *
   * @param c A character that begins a run for which a LanguageBreakEngine is
   * sought.
+  * @param locale The locale.
   * @return A LanguageBreakEngine with the desired characteristics, or 0.
   */
-  virtual const LanguageBreakEngine *loadEngineFor(UChar32 c);
+  virtual const LanguageBreakEngine *loadEngineFor(UChar32 c, const char* locale);
 
   /**
    * <p>Create a DictionaryMatcher for the specified script and break type.</p>
    * @param script An ISO 15924 script code that identifies the dictionary to be
    * created.
-   * @return A DictionaryMatcher with the desired characteristics, or NULL.
+   * @return A DictionaryMatcher with the desired characteristics, or nullptr.
    */
   virtual DictionaryMatcher *loadDictionaryMatcherFor(UScriptCode script);
+
+ private:
+  void ensureEngines(UErrorCode& status);
 };
 
 U_NAMESPACE_END

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -27,6 +27,7 @@
 #include "unicode/rbbi.h"
 #include "unicode/brkiter.h"
 #include "unicode/udata.h"
+#include "unicode/uloc.h"
 #include "unicode/ures.h"
 #include "unicode/ustring.h"
 #include "unicode/filteredbrk.h"
@@ -60,15 +61,15 @@
     char ext[4]={'\0'};
     CharString actualLocale;
     int32_t size;
-    const UChar* brkfname = NULL;
+    const char16_t* brkfname = nullptr;
     UResourceBundle brkRulesStack;
     UResourceBundle brkNameStack;
     UResourceBundle *brkRules = &brkRulesStack;
     UResourceBundle *brkName  = &brkNameStack;
-    RuleBasedBreakIterator *result = NULL;
+    RuleBasedBreakIterator *result = nullptr;
 
     if (U_FAILURE(status))
-        return NULL;
+        return nullptr;
 
     ures_initStackObject(brkRules);
     ures_initStackObject(brkName);
@@ -95,9 +96,9 @@
         if (U_SUCCESS(status) && brkfname) {
             actualLocale.append(ures_getLocaleInternal(brkName, &status), -1, status);
 
-            UChar* extStart=u_strchr(brkfname, 0x002e);
+            char16_t* extStart=u_strchr(brkfname, 0x002e);
             int len = 0;
-            if(extStart!=NULL){
+            if (extStart != nullptr){
                 len = (int)(extStart-brkfname);
                 u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff
                 u_UCharsToChars(brkfname, fnbuff, len);
@@ -112,27 +113,30 @@
     UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status);
     if (U_FAILURE(status)) {
         ures_close(b);
-        return NULL;
+        return nullptr;
     }
 
     // Create a RuleBasedBreakIterator
-    result = new RuleBasedBreakIterator(file, uprv_strstr(type, "phrase") != NULL, status);
+    result = new RuleBasedBreakIterator(file, uprv_strstr(type, "phrase") != nullptr, status);
 
     // If there is a result, set the valid locale and actual locale, and the kind
-    if (U_SUCCESS(status) && result != NULL) {
+    if (U_SUCCESS(status) && result != nullptr) {
         U_LOCALE_BASED(locBased, *(BreakIterator*)result);
+
         locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), 
                               actualLocale.data());
+        uprv_strncpy(result->requestLocale, loc.getName(), ULOC_FULLNAME_CAPACITY);
+        result->requestLocale[ULOC_FULLNAME_CAPACITY-1] = 0; // always terminate
     }
 
     ures_close(b);
 
-    if (U_FAILURE(status) && result != NULL) {  // Sometimes redundant check, but simple
+    if (U_FAILURE(status) && result != nullptr) {  // Sometimes redundant check, but simple
         delete result;
-        return NULL;
+        return nullptr;
     }
 
-    if (result == NULL) {
+    if (result == nullptr) {
         udata_close(file);
         if (U_SUCCESS(status)) {
             status = U_MEMORY_ALLOCATION_ERROR;
@@ -202,12 +206,13 @@
 
 BreakIterator::BreakIterator()
 {
-    *validLocale = *actualLocale = 0;
+    *validLocale = *actualLocale = *requestLocale = 0;
 }
 
 BreakIterator::BreakIterator(const BreakIterator &other) : UObject(other) {
     uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
     uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+    uprv_strncpy(requestLocale, other.requestLocale, sizeof(requestLocale));
 }
 
 BreakIterator &BreakIterator::operator =(const BreakIterator &other) {
@@ -214,6 +219,7 @@
     if (this != &other) {
         uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
         uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+        uprv_strncpy(requestLocale, other.requestLocale, sizeof(requestLocale));
     }
     return *this;
 }
@@ -260,7 +266,7 @@
     }
 
     virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const override {
-        LocaleKey& lkey = (LocaleKey&)key;
+        LocaleKey& lkey = static_cast<LocaleKey&>(const_cast<ICUServiceKey&>(key));
         int32_t kind = lkey.kind();
         Locale loc;
         lkey.currentLocale(loc);
@@ -280,7 +286,7 @@
 U_NAMESPACE_END
 
 static icu::UInitOnce gInitOnceBrkiter {};
-static icu::ICULocaleService* gService = NULL;
+static icu::ICULocaleService* gService = nullptr;
 
 
 
@@ -288,11 +294,11 @@
  * Release all static memory held by breakiterator.
  */
 U_CDECL_BEGIN
-static UBool U_CALLCONV breakiterator_cleanup(void) {
+static UBool U_CALLCONV breakiterator_cleanup() {
 #if !UCONFIG_NO_SERVICE
     if (gService) {
         delete gService;
-        gService = NULL;
+        gService = nullptr;
     }
     gInitOnceBrkiter.reset();
 #endif
@@ -302,13 +308,13 @@
 U_NAMESPACE_BEGIN
 
 static void U_CALLCONV 
-initService(void) {
+initService() {
     gService = new ICUBreakIteratorService();
     ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup);
 }
 
 static ICULocaleService*
-getService(void)
+getService()
 {
     umtx_initOnce(gInitOnceBrkiter, &initService);
     return gService;
@@ -318,9 +324,9 @@
 // -------------------------------------
 
 static inline UBool
-hasService(void)
+hasService()
 {
-    return !gInitOnceBrkiter.isReset() && getService() != NULL;
+    return !gInitOnceBrkiter.isReset() && getService() != nullptr;
 }
 
 // -------------------------------------
@@ -329,9 +335,9 @@
 BreakIterator::registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status)
 {
     ICULocaleService *service = getService();
-    if (service == NULL) {
+    if (service == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     return service->registerInstance(toAdopt, locale, kind, status);
 }
@@ -353,11 +359,11 @@
 // -------------------------------------
 
 StringEnumeration* U_EXPORT2
-BreakIterator::getAvailableLocales(void)
+BreakIterator::getAvailableLocales()
 {
     ICULocaleService *service = getService();
-    if (service == NULL) {
-        return NULL;
+    if (service == nullptr) {
+        return nullptr;
     }
     return service->getAvailableLocales();
 }
@@ -369,7 +375,7 @@
 BreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status)
 {
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
 #if !UCONFIG_NO_SERVICE
@@ -386,7 +392,7 @@
         // handleDefault calls), so we don't touch it.  YES, A COMMENT
         // THIS LONG is a sign of bad code -- so the action item is to
         // revisit this in ICU 3.0 and clean it up/fix it/remove it.
-        if (U_SUCCESS(status) && (result != NULL) && *actualLoc.getName() != 0) {
+        if (U_SUCCESS(status) && (result != nullptr) && *actualLoc.getName() != 0) {
             U_LOCALE_BASED(locBased, *result);
             locBased.setLocaleIDs(actualLoc.getName(), actualLoc.getName());
         }
@@ -407,10 +413,10 @@
 {
 
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
-    BreakIterator *result = NULL;
+    BreakIterator *result = nullptr;
     switch (kind) {
     case UBRK_CHARACTER:
         {
@@ -439,8 +445,8 @@
                 uprv_strcat(lb_lw, "_");
                 uprv_strcat(lb_lw, value.data());
             }
-            // lw=phrase is only supported in Japanese.
-            if (uprv_strcmp(loc.getLanguage(), "ja") == 0) {
+            // lw=phrase is only supported in Japanese and Korean
+            if (uprv_strcmp(loc.getLanguage(), "ja") == 0 || uprv_strcmp(loc.getLanguage(), "ko") == 0) {
                 value.clear();
                 loc.getKeywordValue("lw", valueSink, kvStatus);
                 if (U_SUCCESS(kvStatus) && value == "phrase") {
@@ -485,7 +491,7 @@
     }
 
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
     return result;
@@ -493,6 +499,9 @@
 
 Locale
 BreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
+    if (type == ULOC_REQUESTED_LOCALE) {
+        return Locale(requestLocale);
+    }
     U_LOCALE_BASED(locBased, *this);
     return locBased.getLocale(type, status);
 }
@@ -499,6 +508,9 @@
 
 const char *
 BreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
+    if (type == ULOC_REQUESTED_LOCALE) {
+        return requestLocale;
+    }
     U_LOCALE_BASED(locBased, *this);
     return locBased.getLocaleID(type, status);
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -20,7 +20,7 @@
                                 int32_t* result_capacity) {
   if (min_capacity < 1 || scratch_capacity < min_capacity) {
     *result_capacity = 0;
-    return NULL;
+    return nullptr;
   }
   *result_capacity = scratch_capacity;
   return scratch;
@@ -70,7 +70,7 @@
                                             int32_t* result_capacity) {
   if (min_capacity < 1 || scratch_capacity < min_capacity) {
     *result_capacity = 0;
-    return NULL;
+    return nullptr;
   }
   int32_t available = capacity_ - size_;
   if (available >= min_capacity) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -68,7 +68,7 @@
 UStringTrieResult
 BytesTrie::current() const {
     const uint8_t *pos=pos_;
-    if(pos==NULL) {
+    if(pos==nullptr) {
         return USTRINGTRIE_NO_MATCH;
     } else {
         int32_t node;
@@ -182,7 +182,7 @@
 UStringTrieResult
 BytesTrie::next(int32_t inByte) {
     const uint8_t *pos=pos_;
-    if(pos==NULL) {
+    if(pos==nullptr) {
         return USTRINGTRIE_NO_MATCH;
     }
     if(inByte<0) {
@@ -212,7 +212,7 @@
         return current();
     }
     const uint8_t *pos=pos_;
-    if(pos==NULL) {
+    if(pos==nullptr) {
         return USTRINGTRIE_NO_MATCH;
     }
     int32_t length=remainingMatchLength_;  // Actual remaining match length minus 1.
@@ -317,8 +317,8 @@
                                      UBool haveUniqueValue, int32_t &uniqueValue) {
     while(length>kMaxBranchLinearSubNodeLength) {
         ++pos;  // ignore the comparison byte
-        if(NULL==findUniqueValueFromBranch(jumpByDelta(pos), length>>1, haveUniqueValue, uniqueValue)) {
-            return NULL;
+        if(nullptr==findUniqueValueFromBranch(jumpByDelta(pos), length>>1, haveUniqueValue, uniqueValue)) {
+            return nullptr;
         }
         length=length-(length>>1);
         pos=skipDelta(pos);
@@ -333,7 +333,7 @@
         if(isFinal) {
             if(haveUniqueValue) {
                 if(value!=uniqueValue) {
-                    return NULL;
+                    return nullptr;
                 }
             } else {
                 uniqueValue=value;
@@ -341,7 +341,7 @@
             }
         } else {
             if(!findUniqueValue(pos+value, haveUniqueValue, uniqueValue)) {
-                return NULL;
+                return nullptr;
             }
             haveUniqueValue=true;
         }
@@ -358,7 +358,7 @@
                 node=*pos++;
             }
             pos=findUniqueValueFromBranch(pos, node+1, haveUniqueValue, uniqueValue);
-            if(pos==NULL) {
+            if(pos==nullptr) {
                 return false;
             }
             haveUniqueValue=true;
@@ -387,7 +387,7 @@
 int32_t
 BytesTrie::getNextBytes(ByteSink &out) const {
     const uint8_t *pos=pos_;
-    if(pos==NULL) {
+    if(pos==nullptr) {
         return 0;
     }
     if(remainingMatchLength_>=0) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -127,13 +127,13 @@
 }
 
 BytesTrieBuilder::BytesTrieBuilder(UErrorCode &errorCode)
-        : strings(NULL), elements(NULL), elementsCapacity(0), elementsLength(0),
-          bytes(NULL), bytesCapacity(0), bytesLength(0) {
+        : strings(nullptr), elements(nullptr), elementsCapacity(0), elementsLength(0),
+          bytes(nullptr), bytesCapacity(0), bytesLength(0) {
     if(U_FAILURE(errorCode)) {
         return;
     }
     strings=new CharString();
-    if(strings==NULL) {
+    if(strings==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
     }
 }
@@ -162,7 +162,7 @@
             newCapacity=4*elementsCapacity;
         }
         BytesTrieElement *newElements=new BytesTrieElement[newCapacity];
-        if(newElements==NULL) {
+        if(newElements==nullptr) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             return *this; // error instead of dereferencing null
         }
@@ -192,13 +192,13 @@
 BytesTrie *
 BytesTrieBuilder::build(UStringTrieBuildOption buildOption, UErrorCode &errorCode) {
     buildBytes(buildOption, errorCode);
-    BytesTrie *newTrie=NULL;
+    BytesTrie *newTrie=nullptr;
     if(U_SUCCESS(errorCode)) {
         newTrie=new BytesTrie(bytes, bytes+(bytesCapacity-bytesLength));
-        if(newTrie==NULL) {
+        if(newTrie==nullptr) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
         } else {
-            bytes=NULL;  // The new trie now owns the array.
+            bytes=nullptr;  // The new trie now owns the array.
             bytesCapacity=0;
         }
     }
@@ -220,7 +220,7 @@
     if(U_FAILURE(errorCode)) {
         return;
     }
-    if(bytes!=NULL && bytesLength>0) {
+    if(bytes!=nullptr && bytesLength>0) {
         // Already built.
         return;
     }
@@ -256,7 +256,7 @@
     if(bytesCapacity<capacity) {
         uprv_free(bytes);
         bytes=static_cast<char *>(uprv_malloc(capacity));
-        if(bytes==NULL) {
+        if(bytes==nullptr) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             bytesCapacity=0;
             return;
@@ -264,7 +264,7 @@
         bytesCapacity=capacity;
     }
     StringTrieBuilder::build(buildOption, elementsLength, errorCode);
-    if(bytes==NULL) {
+    if(bytes==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
     }
 }
@@ -282,7 +282,7 @@
     return elements[i].getStringLength(*strings);
 }
 
-UChar
+char16_t
 BytesTrieBuilder::getElementUnit(int32_t i, int32_t byteIndex) const {
     return (uint8_t)elements[i].charAt(byteIndex, *strings);
 }
@@ -329,7 +329,7 @@
 }
 
 int32_t
-BytesTrieBuilder::indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, UChar byte) const {
+BytesTrieBuilder::indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const {
     char b=(char)byte;
     while(b==elements[i].charAt(byteIndex, *strings)) {
         ++i;
@@ -351,13 +351,13 @@
     if(!LinearMatchNode::operator==(other)) {
         return false;
     }
-    const BTLinearMatchNode &o=(const BTLinearMatchNode &)other;
+    const BTLinearMatchNode &o=static_cast<const BTLinearMatchNode &>(other);
     return 0==uprv_memcmp(s, o.s, length);
 }
 
 void
 BytesTrieBuilder::BTLinearMatchNode::write(StringTrieBuilder &builder) {
-    BytesTrieBuilder &b=(BytesTrieBuilder &)builder;
+    BytesTrieBuilder &b=static_cast<BytesTrieBuilder &>(builder);
     next->write(builder);
     b.write(s, length);
     offset=b.write(b.getMinLinearMatch()+length-1);
@@ -374,7 +374,7 @@
 
 UBool
 BytesTrieBuilder::ensureCapacity(int32_t length) {
-    if(bytes==NULL) {
+    if(bytes==nullptr) {
         return false;  // previous memory allocation had failed
     }
     if(length>bytesCapacity) {
@@ -383,10 +383,10 @@
             newCapacity*=2;
         } while(newCapacity<=length);
         char *newBytes=static_cast<char *>(uprv_malloc(newCapacity));
-        if(newBytes==NULL) {
+        if(newBytes==nullptr) {
             // unable to allocate memory
             uprv_free(bytes);
-            bytes=NULL;
+            bytes=nullptr;
             bytesCapacity=0;
             return false;
         }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -27,7 +27,7 @@
         : bytes_(static_cast<const uint8_t *>(trieBytes)),
           pos_(bytes_), initialPos_(bytes_),
           remainingMatchLength_(-1), initialRemainingMatchLength_(-1),
-          str_(NULL), maxLength_(maxStringLength), value_(0), stack_(NULL) {
+          str_(nullptr), maxLength_(maxStringLength), value_(0), stack_(nullptr) {
     if(U_FAILURE(errorCode)) {
         return;
     }
@@ -39,7 +39,7 @@
     // cost is minimal.
     str_=new CharString();
     stack_=new UVector32(errorCode);
-    if(U_SUCCESS(errorCode) && (str_==NULL || stack_==NULL)) {
+    if(U_SUCCESS(errorCode) && (str_==nullptr || stack_==nullptr)) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
     }
 }
@@ -49,7 +49,7 @@
         : bytes_(trie.bytes_), pos_(trie.pos_), initialPos_(trie.pos_),
           remainingMatchLength_(trie.remainingMatchLength_),
           initialRemainingMatchLength_(trie.remainingMatchLength_),
-          str_(NULL), maxLength_(maxStringLength), value_(0), stack_(NULL) {
+          str_(nullptr), maxLength_(maxStringLength), value_(0), stack_(nullptr) {
     if(U_FAILURE(errorCode)) {
         return;
     }
@@ -58,7 +58,7 @@
     if(U_FAILURE(errorCode)) {
         return;
     }
-    if(str_==NULL || stack_==NULL) {
+    if(str_==nullptr || stack_==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -96,7 +96,7 @@
 }
 
 UBool
-BytesTrie::Iterator::hasNext() const { return pos_!=NULL || !stack_->isEmpty(); }
+BytesTrie::Iterator::hasNext() const { return pos_!=nullptr || !stack_->isEmpty(); }
 
 UBool
 BytesTrie::Iterator::next(UErrorCode &errorCode) {
@@ -104,7 +104,7 @@
         return false;
     }
     const uint8_t *pos=pos_;
-    if(pos==NULL) {
+    if(pos==nullptr) {
         if(stack_->isEmpty()) {
             return false;
         }
@@ -118,7 +118,7 @@
         length=(int32_t)((uint32_t)length>>16);
         if(length>1) {
             pos=branchNext(pos, length, errorCode);
-            if(pos==NULL) {
+            if(pos==nullptr) {
                 return true;  // Reached a final value.
             }
         } else {
@@ -137,7 +137,7 @@
             UBool isFinal=(UBool)(node&kValueIsFinal);
             value_=readValue(pos, node>>1);
             if(isFinal || (maxLength_>0 && str_->length()==maxLength_)) {
-                pos_=NULL;
+                pos_=nullptr;
             } else {
                 pos_=skipValue(pos, node);
             }
@@ -151,7 +151,7 @@
                 node=*pos++;
             }
             pos=branchNext(pos, node+1, errorCode);
-            if(pos==NULL) {
+            if(pos==nullptr) {
                 return true;  // Reached a final value.
             }
         } else {
@@ -170,12 +170,12 @@
 
 StringPiece
 BytesTrie::Iterator::getString() const {
-    return str_ == NULL ? StringPiece() : str_->toStringPiece();
+    return str_ == nullptr ? StringPiece() : str_->toStringPiece();
 }
 
 UBool
 BytesTrie::Iterator::truncateAndStop() {
-    pos_=NULL;
+    pos_=nullptr;
     value_=-1;  // no real value for str
     return true;
 }
@@ -203,9 +203,9 @@
     stack_->addElement(((length-1)<<16)|str_->length(), errorCode);
     str_->append((char)trieByte, errorCode);
     if(isFinal) {
-        pos_=NULL;
+        pos_=nullptr;
         value_=value;
-        return NULL;
+        return nullptr;
     } else {
         return pos+value;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -68,10 +68,10 @@
  *@param source string to get results for
  */
 CanonicalIterator::CanonicalIterator(const UnicodeString &sourceStr, UErrorCode &status) :
-    pieces(NULL),
+    pieces(nullptr),
     pieces_length(0),
-    pieces_lengths(NULL),
-    current(NULL),
+    pieces_lengths(nullptr),
+    current(nullptr),
     current_length(0),
     nfd(*Normalizer2::getNFDInstance(status)),
     nfcImpl(*Normalizer2Factory::getNFCImpl(status))
@@ -87,23 +87,23 @@
 
 void CanonicalIterator::cleanPieces() {
     int32_t i = 0;
-    if(pieces != NULL) {
+    if(pieces != nullptr) {
         for(i = 0; i < pieces_length; i++) {
-            if(pieces[i] != NULL) {
+            if(pieces[i] != nullptr) {
                 delete[] pieces[i];
             }
         }
         uprv_free(pieces);
-        pieces = NULL;
+        pieces = nullptr;
         pieces_length = 0;
     }
-    if(pieces_lengths != NULL) {
+    if(pieces_lengths != nullptr) {
         uprv_free(pieces_lengths);
-        pieces_lengths = NULL;
+        pieces_lengths = nullptr;
     }
-    if(current != NULL) {
+    if(current != nullptr) {
         uprv_free(current);
-        current = NULL;
+        current = nullptr;
         current_length = 0;
     }
 }
@@ -170,7 +170,7 @@
     UChar32 cp = 0;
     int32_t start = 0;
     int32_t i = 0;
-    UnicodeString *list = NULL;
+    UnicodeString *list = nullptr;
 
     nfd.normalize(newSource, source, status);
     if(U_FAILURE(status)) {
@@ -187,7 +187,7 @@
         pieces_length = 1;
         current = (int32_t*)uprv_malloc(1 * sizeof(int32_t));
         current_length = 1;
-        if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
+        if (pieces == nullptr || pieces_lengths == nullptr || current == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
             goto CleanPartialInitialization;
         }
@@ -233,7 +233,7 @@
     pieces_lengths = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
     current = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
     current_length = list_length;
-    if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
+    if (pieces == nullptr || pieces_lengths == nullptr || current == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         goto CleanPartialInitialization;
     }
@@ -252,7 +252,7 @@
     return;
 // Common section to cleanup all local variables and reset object variables.
 CleanPartialInitialization:
-    if (list != NULL) {
+    if (list != nullptr) {
         delete[] list;
     }
     cleanPieces();
@@ -276,7 +276,7 @@
     // we check for length < 2 to keep from counting code points all the time
     if (source.length() <= 2 && source.countChar32() <= 1) {
         UnicodeString *toPut = new UnicodeString(source);
-        /* test for NULL */
+        /* test for nullptr */
         if (toPut == 0) {
             status = U_MEMORY_ALLOCATION_ERROR;
             return;
@@ -295,7 +295,7 @@
 
     for (i = 0; i < source.length(); i += U16_LENGTH(cp)) {
         cp = source.char32At(i);
-        const UHashElement *ne = NULL;
+        const UHashElement *ne = nullptr;
         int32_t el = UHASH_FIRST;
         UnicodeString subPermuteString = source;
 
@@ -321,11 +321,11 @@
 
         // prefix this character to all of them
         ne = subpermute.nextElement(el);
-        while (ne != NULL) {
+        while (ne != nullptr) {
             UnicodeString *permRes = (UnicodeString *)(ne->value.pointer);
             UnicodeString *chStr = new UnicodeString(cp);
-            //test for  NULL
-            if (chStr == NULL) {
+            //test for nullptr
+            if (chStr == nullptr) {
                 status = U_MEMORY_ALLOCATION_ERROR;
                 return;
             }
@@ -352,7 +352,7 @@
     permutations.setValueDeleter(uprv_deleteUObject);
     basic.setValueDeleter(uprv_deleteUObject);
 
-    UChar USeg[256];
+    char16_t USeg[256];
     int32_t segLen = segment.extract(USeg, 256, status);
     getEquivalents2(&basic, USeg, segLen, status);
 
@@ -360,23 +360,23 @@
     // add only the ones that are canonically equivalent
     // TODO: optimize by not permuting any class zero.
 
-    const UHashElement *ne = NULL;
+    const UHashElement *ne = nullptr;
     int32_t el = UHASH_FIRST;
     //Iterator it = basic.iterator();
     ne = basic.nextElement(el);
     //while (it.hasNext())
-    while (ne != NULL) {
+    while (ne != nullptr) {
         //String item = (String) it.next();
         UnicodeString item = *((UnicodeString *)(ne->value.pointer));
 
         permutations.removeAll();
         permute(item, CANITER_SKIP_ZEROES, &permutations, status);
-        const UHashElement *ne2 = NULL;
+        const UHashElement *ne2 = nullptr;
         int32_t el2 = UHASH_FIRST;
         //Iterator it2 = permutations.iterator();
         ne2 = permutations.nextElement(el2);
         //while (it2.hasNext())
-        while (ne2 != NULL) {
+        while (ne2 != nullptr) {
             //String possible = (String) it2.next();
             //UnicodeString *possible = new UnicodeString(*((UnicodeString *)(ne2->value.pointer)));
             UnicodeString possible(*((UnicodeString *)(ne2->value.pointer)));
@@ -403,24 +403,24 @@
     }
     // convert into a String[] to clean up storage
     //String[] finalResult = new String[result.size()];
-    UnicodeString *finalResult = NULL;
+    UnicodeString *finalResult = nullptr;
     int32_t resultCount;
     if((resultCount = result.count()) != 0) {
         finalResult = new UnicodeString[resultCount];
         if (finalResult == 0) {
             status = U_MEMORY_ALLOCATION_ERROR;
-            return NULL;
+            return nullptr;
         }
     }
     else {
         status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     //result.toArray(finalResult);
     result_len = 0;
     el = UHASH_FIRST;
     ne = result.nextElement(el);
-    while(ne != NULL) {
+    while(ne != nullptr) {
         finalResult[result_len++] = *((UnicodeString *)(ne->value.pointer));
         ne = result.nextElement(el);
     }
@@ -429,10 +429,10 @@
     return finalResult;
 }
 
-Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status) {
+Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const char16_t *segment, int32_t segLen, UErrorCode &status) {
 
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
     //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(segment)));
@@ -457,7 +457,7 @@
             UChar32 cp2 = iter.getCodepoint();
             Hashtable remainder(status);
             remainder.setValueDeleter(uprv_deleteUObject);
-            if (extract(&remainder, cp2, segment, segLen, i, status) == NULL) {
+            if (extract(&remainder, cp2, segment, segLen, i, status) == nullptr) {
                 continue;
             }
 
@@ -467,13 +467,13 @@
 
             int32_t el = UHASH_FIRST;
             const UHashElement *ne = remainder.nextElement(el);
-            while (ne != NULL) {
+            while (ne != nullptr) {
                 UnicodeString item = *((UnicodeString *)(ne->value.pointer));
                 UnicodeString *toAdd = new UnicodeString(prefix);
-                /* test for NULL */
+                /* test for nullptr */
                 if (toAdd == 0) {
                     status = U_MEMORY_ALLOCATION_ERROR;
-                    return NULL;
+                    return nullptr;
                 }
                 *toAdd += item;
                 fillinResult->put(*toAdd, toAdd, status);
@@ -487,7 +487,7 @@
 
     /* Test for buffer overflows */
     if(U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
     return fillinResult;
 }
@@ -497,13 +497,13 @@
  * (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) {
+Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const char16_t *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
 //Hashtable *CanonicalIterator::extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
     //if (PROGRESS) printf(" extract: %s, ", UToS(Tr(UnicodeString(comp))));
     //if (PROGRESS) printf("%s, %i\n", UToS(Tr(segment)), segmentPos);
 
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
     UnicodeString temp(comp);
@@ -511,13 +511,13 @@
     UnicodeString decompString;
     nfd.normalize(temp, decompString, status);
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
     if (decompString.isBogus()) {
         status = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
-    const UChar *decomp=decompString.getBuffer();
+    const char16_t *decomp=decompString.getBuffer();
     int32_t decompLen=decompString.length();
 
     // See if it matches the start of segment (at segmentPos)
@@ -561,7 +561,7 @@
         }
     }
     if (!ok)
-        return NULL; // we failed, characters left over
+        return nullptr; // we failed, characters left over
 
     //if (PROGRESS) printf("Matches\n");
 
@@ -575,7 +575,7 @@
     UnicodeString trial;
     nfd.normalize(temp, trial, status);
     if(U_FAILURE(status) || trial.compare(segment+segmentPos, segLen - segmentPos) != 0) {
-        return NULL;
+        return nullptr;
     }
 
     return getEquivalents2(fillinResult, temp.getBuffer()+inputLen, temp.length()-inputLen, status);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -67,7 +67,7 @@
 }
 
 void U_CALLCONV
-_set_addString(USet *set, const UChar *str, int32_t length) {
+_set_addString(USet *set, const char16_t *str, int32_t length) {
     ((UnicodeSet *)set)->add(icu::UnicodeString((UBool)(length<0), str, length));
 }
 
@@ -169,7 +169,7 @@
     case UPROPS_SRC_INPC:
     case UPROPS_SRC_INSC:
     case UPROPS_SRC_VO:
-        uprops_addPropertyStarts((UPropertySource)src, &sa, &errorCode);
+        uprops_addPropertyStarts(src, &sa, &errorCode);
         break;
     case UPROPS_SRC_EMOJI: {
         const icu::EmojiProps *ep = icu::EmojiProps::getSingleton(errorCode);
@@ -178,6 +178,14 @@
         }
         break;
     }
+    case UPROPS_SRC_IDSU:
+        // New in Unicode 15.1 for just two characters.
+        sa.add(sa.set, 0x2FFE);
+        sa.add(sa.set, 0x2FFF + 1);
+        break;
+    case UPROPS_SRC_ID_COMPAT_MATH:
+        uprops_addPropertyStarts(src, &sa, &errorCode);
+        break;
     default:
         errorCode = U_INTERNAL_PROGRAM_ERROR;
         break;
@@ -377,24 +385,32 @@
 
 }  // namespace
 
-U_NAMESPACE_USE
+U_NAMESPACE_BEGIN
 
-U_CAPI const USet * U_EXPORT2
-u_getBinaryPropertySet(UProperty property, UErrorCode *pErrorCode) {
-    if (U_FAILURE(*pErrorCode)) { return nullptr; }
+const UnicodeSet *CharacterProperties::getBinaryPropertySet(UProperty property, UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode)) { return nullptr; }
     if (property < 0 || UCHAR_BINARY_LIMIT <= property) {
-        *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
+        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
         return nullptr;
     }
     Mutex m(&cpMutex);
     UnicodeSet *set = sets[property];
     if (set == nullptr) {
-        sets[property] = set = makeSet(property, *pErrorCode);
+        sets[property] = set = makeSet(property, errorCode);
     }
-    if (U_FAILURE(*pErrorCode)) { return nullptr; }
-    return set->toUSet();
+    return set;
 }
 
+U_NAMESPACE_END
+
+U_NAMESPACE_USE
+
+U_CAPI const USet * U_EXPORT2
+u_getBinaryPropertySet(UProperty property, UErrorCode *pErrorCode) {
+    const UnicodeSet *set = CharacterProperties::getBinaryPropertySet(property, *pErrorCode);
+    return U_SUCCESS(*pErrorCode) ? set->toUSet() : nullptr;
+}
+
 U_CAPI const UCPMap * U_EXPORT2
 u_getIntPropertyMap(UProperty property, UErrorCode *pErrorCode) {
     if (U_FAILURE(*pErrorCode)) { return nullptr; }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -85,14 +85,14 @@
 
 // implementing first[32]PostInc() directly in a subclass should be faster
 // but these implementations make subclassing a little easier
-UChar
-CharacterIterator::firstPostInc(void) {
+char16_t
+CharacterIterator::firstPostInc() {
     setToStart();
     return nextPostInc();
 }
 
 UChar32
-CharacterIterator::first32PostInc(void) {
+CharacterIterator::first32PostInc() {
     setToStart();
     return next32PostInc();
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -26,12 +26,12 @@
 
 U_NAMESPACE_BEGIN
 
-CharString::CharString(CharString&& src) U_NOEXCEPT
+CharString::CharString(CharString&& src) noexcept
         : buffer(std::move(src.buffer)), len(src.len) {
     src.len = 0;  // not strictly necessary because we make no guarantees on the source string
 }
 
-CharString& CharString::operator=(CharString&& src) U_NOEXCEPT {
+CharString& CharString::operator=(CharString&& src) noexcept {
     buffer = std::move(src.buffer);
     len = src.len;
     src.len = 0;  // not strictly necessary because we make no guarantees on the source string
@@ -113,7 +113,7 @@
     if(U_FAILURE(errorCode)) {
         return *this;
     }
-    if(sLength<-1 || (s==NULL && sLength!=0)) {
+    if(sLength<-1 || (s==nullptr && sLength!=0)) {
         errorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return *this;
     }
@@ -181,7 +181,7 @@
                                   UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
         resultCapacity=0;
-        return NULL;
+        return nullptr;
     }
     int32_t appendCapacity=buffer.getCapacity()-len-1;  // -1 for NUL
     if(appendCapacity>=minCapacity) {
@@ -193,7 +193,7 @@
         return buffer.getAlias()+len;
     }
     resultCapacity=0;
-    return NULL;
+    return nullptr;
 }
 
 CharString &CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode) {
@@ -200,7 +200,7 @@
     return appendInvariantChars(s.getBuffer(), s.length(), errorCode);
 }
 
-CharString &CharString::appendInvariantChars(const UChar* uchars, int32_t ucharsLen, UErrorCode &errorCode) {
+CharString &CharString::appendInvariantChars(const char16_t* uchars, int32_t ucharsLen, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
         return *this;
     }
@@ -226,8 +226,8 @@
         if(desiredCapacityHint==0) {
             desiredCapacityHint=capacity+buffer.getCapacity();
         }
-        if( (desiredCapacityHint<=capacity || buffer.resize(desiredCapacityHint, len+1)==NULL) &&
-            buffer.resize(capacity, len+1)==NULL
+        if( (desiredCapacityHint<=capacity || buffer.resize(desiredCapacityHint, len+1)==nullptr) &&
+            buffer.resize(capacity, len+1)==nullptr
         ) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             return false;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -59,13 +59,13 @@
      * Move constructor; might leave src in an undefined state.
      * This string will have the same contents and state that the source string had.
      */
-    CharString(CharString &&src) U_NOEXCEPT;
+    CharString(CharString &&src) noexcept;
     /**
      * Move assignment operator; might leave src in an undefined state.
      * This string will have the same contents and state that the source string had.
      * The behavior is undefined if *this and src are the same object.
      */
-    CharString &operator=(CharString &&src) U_NOEXCEPT;
+    CharString &operator=(CharString &&src) noexcept;
 
     /**
      * Replaces this string's contents with the other string's contents.
@@ -156,7 +156,7 @@
                           UErrorCode &errorCode);
 
     CharString &appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode);
-    CharString &appendInvariantChars(const UChar* uchars, int32_t ucharsLen, UErrorCode& errorCode);
+    CharString &appendInvariantChars(const char16_t* uchars, int32_t ucharsLen, UErrorCode& errorCode);
 
     /**
      * Appends a filename/path part, e.g., a directory name.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstrmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstrmap.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstrmap.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -26,7 +26,7 @@
         map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
                              size, &errorCode);
     }
-    CharStringMap(CharStringMap &&other) U_NOEXCEPT : map(other.map) {
+    CharStringMap(CharStringMap &&other) noexcept : map(other.map) {
         other.map = nullptr;
     }
     CharStringMap(const CharStringMap &other) = delete;
@@ -34,7 +34,7 @@
         uhash_close(map);
     }
 
-    CharStringMap &operator=(CharStringMap &&other) U_NOEXCEPT {
+    CharStringMap &operator=(CharStringMap &&other) noexcept {
         map = other.map;
         other.map = nullptr;
         return *this;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -15,8 +15,8 @@
 *                     If you have a need to replace ICU allocation, this is the
 *                     place to do it.
 *
-*                     Note that uprv_malloc(0) returns a non-NULL pointer, and
-*                     that a subsequent free of that pointer value is a NOP.
+*                     Note that uprv_malloc(0) returns a non-nullptr pointer,
+*                     and that a subsequent free of that pointer value is a NOP.
 *
 ******************************************************************************
 */
@@ -103,7 +103,7 @@
 
 U_CAPI void * U_EXPORT2
 uprv_calloc(size_t num, size_t size) {
-    void *mem = NULL;
+    void *mem = nullptr;
     size *= num;
     mem = uprv_malloc(size);
     if (mem) {
@@ -118,7 +118,7 @@
     if (U_FAILURE(*status)) {
         return;
     }
-    if (a==NULL || r==NULL || f==NULL) {
+    if (a==nullptr || r==nullptr || f==nullptr) {
         *status = U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -129,10 +129,10 @@
 }
 
 
-U_CFUNC UBool cmemory_cleanup(void) {
-    pContext   = NULL;
-    pAlloc     = NULL;
-    pRealloc   = NULL;
-    pFree      = NULL;
+U_CFUNC UBool cmemory_cleanup() {
+    pContext   = nullptr;
+    pAlloc     = nullptr;
+    pRealloc   = nullptr;
+    pFree      = nullptr;
     return true;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -192,13 +192,13 @@
      * Constructor takes ownership.
      * @param p simple pointer to an array of T items that is adopted
      */
-    explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {}
+    explicit LocalMemory(T *p=nullptr) : LocalPointerBase<T>(p) {}
     /**
      * Move constructor, leaves src with isNull().
      * @param src source smart pointer
      */
-    LocalMemory(LocalMemory<T> &&src) U_NOEXCEPT : LocalPointerBase<T>(src.ptr) {
-        src.ptr=NULL;
+    LocalMemory(LocalMemory<T> &&src) noexcept : LocalPointerBase<T>(src.ptr) {
+        src.ptr=nullptr;
     }
     /**
      * Destructor deletes the memory it owns.
@@ -212,10 +212,10 @@
      * @param src source smart pointer
      * @return *this
      */
-    LocalMemory<T> &operator=(LocalMemory<T> &&src) U_NOEXCEPT {
+    LocalMemory<T> &operator=(LocalMemory<T> &&src) noexcept {
         uprv_free(LocalPointerBase<T>::ptr);
         LocalPointerBase<T>::ptr=src.ptr;
-        src.ptr=NULL;
+        src.ptr=nullptr;
         return *this;
     }
     /**
@@ -222,7 +222,7 @@
      * Swap pointers.
      * @param other other smart pointer
      */
-    void swap(LocalMemory<T> &other) U_NOEXCEPT {
+    void swap(LocalMemory<T> &other) noexcept {
         T *temp=LocalPointerBase<T>::ptr;
         LocalPointerBase<T>::ptr=other.ptr;
         other.ptr=temp;
@@ -232,7 +232,7 @@
      * @param p1 will get p2's pointer
      * @param p2 will get p1's pointer
      */
-    friend inline void swap(LocalMemory<T> &p1, LocalMemory<T> &p2) U_NOEXCEPT {
+    friend inline void swap(LocalMemory<T> &p1, LocalMemory<T> &p2) noexcept {
         p1.swap(p2);
     }
     /**
@@ -248,9 +248,9 @@
      * Deletes the array it owns, allocates a new one and reset its bytes to 0.
      * Returns the new array pointer.
      * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
+     * this method returns nullptr.
      * @param newCapacity must be >0
-     * @return the allocated array pointer, or NULL if the allocation failed
+     * @return the allocated array pointer, or nullptr if the allocation failed
      */
     inline T *allocateInsteadAndReset(int32_t newCapacity=1);
     /**
@@ -257,12 +257,12 @@
      * Deletes the array it owns and allocates a new one, copying length T items.
      * Returns the new array pointer.
      * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
+     * this method returns nullptr.
      * @param newCapacity must be >0
      * @param length number of T items to be copied from the old array to the new one;
      *               must be no more than the capacity of the old array,
      *               which the caller must track because the LocalMemory does not track it
-     * @return the allocated array pointer, or NULL if the allocation failed
+     * @return the allocated array pointer, or nullptr if the allocation failed
      */
     inline T *allocateInsteadAndCopy(int32_t newCapacity=1, int32_t length=0);
     /**
@@ -278,7 +278,7 @@
 inline T *LocalMemory<T>::allocateInsteadAndReset(int32_t newCapacity) {
     if(newCapacity>0) {
         T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
+        if(p!=nullptr) {
             uprv_memset(p, 0, newCapacity*sizeof(T));
             uprv_free(LocalPointerBase<T>::ptr);
             LocalPointerBase<T>::ptr=p;
@@ -285,7 +285,7 @@
         }
         return p;
     } else {
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -294,7 +294,7 @@
 inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t length) {
     if(newCapacity>0) {
         T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
+        if(p!=nullptr) {
             if(length>0) {
                 if(length>newCapacity) {
                     length=newCapacity;
@@ -306,7 +306,7 @@
         }
         return p;
     } else {
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -332,10 +332,10 @@
 class MaybeStackArray {
 public:
     // 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;
+    static void* U_EXPORT2 operator new(size_t) noexcept = delete;
+    static void* U_EXPORT2 operator new[](size_t) noexcept = delete;
 #if U_HAVE_PLACEMENT_NEW
-    static void* U_EXPORT2 operator new(size_t, void*) U_NOEXCEPT = delete;
+    static void* U_EXPORT2 operator new(size_t, void*) noexcept = delete;
 #endif
 
     /**
@@ -364,11 +364,11 @@
     /**
      * Move constructor: transfers ownership or copies the stack array.
      */
-    MaybeStackArray(MaybeStackArray<T, stackCapacity> &&src) U_NOEXCEPT;
+    MaybeStackArray(MaybeStackArray<T, stackCapacity> &&src) noexcept;
     /**
      * Move assignment: transfers ownership or copies the stack array.
      */
-    MaybeStackArray<T, stackCapacity> &operator=(MaybeStackArray<T, stackCapacity> &&src) U_NOEXCEPT;
+    MaybeStackArray<T, stackCapacity> &operator=(MaybeStackArray<T, stackCapacity> &&src) noexcept;
     /**
      * Returns the array capacity (number of T items).
      * @return array capacity
@@ -403,11 +403,11 @@
     /**
      * Deletes the array (if owned) and aliases another one, no transfer of ownership.
      * If the arguments are illegal, then the current array is unchanged.
-     * @param otherArray must not be NULL
+     * @param otherArray must not be nullptr
      * @param otherCapacity must be >0
      */
     void aliasInstead(T *otherArray, int32_t otherCapacity) {
-        if(otherArray!=NULL && otherCapacity>0) {
+        if(otherArray!=nullptr && otherCapacity>0) {
             releaseArray();
             ptr=otherArray;
             capacity=otherCapacity;
@@ -418,17 +418,17 @@
      * Deletes the array (if owned) and allocates a new one, copying length T items.
      * Returns the new array pointer.
      * If the allocation fails, then the current array is unchanged and
-     * this method returns NULL.
+     * this method returns nullptr.
      * @param newCapacity can be less than or greater than the current capacity;
      *                    must be >0
      * @param length number of T items to be copied from the old array to the new one
-     * @return the allocated array pointer, or NULL if the allocation failed
+     * @return the allocated array pointer, or nullptr if the allocation failed
      */
     inline T *resize(int32_t newCapacity, int32_t length=0);
     /**
      * Gives up ownership of the array if owned, or else clones it,
      * copying length T items; resets itself to the internal stack array.
-     * Returns NULL if the allocation failed.
+     * Returns nullptr if the allocation failed.
      * @param length number of T items to copy when cloning,
      *        and capacity of the clone when cloning
      * @param resultCapacity will be set to the returned array's capacity (output-only)
@@ -443,7 +443,7 @@
         if (U_FAILURE(status)) {
             return;
         }
-        if (this->resize(src.capacity, 0) == NULL) {
+        if (this->resize(src.capacity, 0) == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
             return;
         }
@@ -475,7 +475,7 @@
 
 template<typename T, int32_t stackCapacity>
 icu::MaybeStackArray<T, stackCapacity>::MaybeStackArray(
-        MaybeStackArray <T, stackCapacity>&& src) U_NOEXCEPT
+        MaybeStackArray <T, stackCapacity>&& src) noexcept
         : ptr(src.ptr), capacity(src.capacity), needToRelease(src.needToRelease) {
     if (src.ptr == src.stackArray) {
         ptr = stackArray;
@@ -487,7 +487,7 @@
 
 template<typename T, int32_t stackCapacity>
 inline MaybeStackArray <T, stackCapacity>&
-MaybeStackArray<T, stackCapacity>::operator=(MaybeStackArray <T, stackCapacity>&& src) U_NOEXCEPT {
+MaybeStackArray<T, stackCapacity>::operator=(MaybeStackArray <T, stackCapacity>&& src) noexcept {
     releaseArray();  // in case this instance had its own memory allocated
     capacity = src.capacity;
     needToRelease = src.needToRelease;
@@ -508,7 +508,7 @@
         ::fprintf(::stderr, "MaybeStackArray (resize) alloc %d * %lu\n", newCapacity, sizeof(T));
 #endif
         T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
-        if(p!=NULL) {
+        if(p!=nullptr) {
             if(length>0) {
                 if(length>capacity) {
                     length=capacity;
@@ -525,7 +525,7 @@
         }
         return p;
     } else {
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -535,7 +535,7 @@
     if(needToRelease) {
         p=ptr;
     } else if(length<=0) {
-        return NULL;
+        return nullptr;
     } else {
         if(length>capacity) {
             length=capacity;
@@ -544,8 +544,8 @@
 #if U_DEBUG && defined(UPRV_MALLOC_COUNT)
       ::fprintf(::stderr,"MaybeStacArray (orphan) alloc %d * %lu\n", length,sizeof(T));
 #endif
-        if(p==NULL) {
-            return NULL;
+        if(p==nullptr) {
+            return nullptr;
         }
         uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
     }
@@ -568,10 +568,10 @@
 class MaybeStackHeaderAndArray {
 public:
     // 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;
+    static void* U_EXPORT2 operator new(size_t) noexcept = delete;
+    static void* U_EXPORT2 operator new[](size_t) noexcept = delete;
 #if U_HAVE_PLACEMENT_NEW
-    static void* U_EXPORT2 operator new(size_t, void*) U_NOEXCEPT = delete;
+    static void* U_EXPORT2 operator new(size_t, void*) noexcept = delete;
 #endif
 
     /**
@@ -618,11 +618,11 @@
     /**
      * Deletes the memory block (if owned) and aliases another one, no transfer of ownership.
      * If the arguments are illegal, then the current memory is unchanged.
-     * @param otherArray must not be NULL
+     * @param otherArray must not be nullptr
      * @param otherCapacity must be >0
      */
     void aliasInstead(H *otherMemory, int32_t otherCapacity) {
-        if(otherMemory!=NULL && otherCapacity>0) {
+        if(otherMemory!=nullptr && otherCapacity>0) {
             releaseMemory();
             ptr=otherMemory;
             capacity=otherCapacity;
@@ -634,17 +634,17 @@
      * copying the header and length T array items.
      * Returns the new header pointer.
      * If the allocation fails, then the current memory is unchanged and
-     * this method returns NULL.
+     * this method returns nullptr.
      * @param newCapacity can be less than or greater than the current capacity;
      *                    must be >0
      * @param length number of T items to be copied from the old array to the new one
-     * @return the allocated pointer, or NULL if the allocation failed
+     * @return the allocated pointer, or nullptr if the allocation failed
      */
     inline H *resize(int32_t newCapacity, int32_t length=0);
     /**
      * Gives up ownership of the memory if owned, or else clones it,
      * copying the header and length T array items; resets itself to the internal memory.
-     * Returns NULL if the allocation failed.
+     * Returns nullptr if the allocation failed.
      * @param length number of T items to copy when cloning,
      *        and array capacity of the clone when cloning
      * @param resultCapacity will be set to the returned array's capacity (output-only)
@@ -680,7 +680,7 @@
       ::fprintf(::stderr,"MaybeStackHeaderAndArray alloc %d + %d * %ul\n", sizeof(H),newCapacity,sizeof(T));
 #endif
         H *p=(H *)uprv_malloc(sizeof(H)+newCapacity*sizeof(T));
-        if(p!=NULL) {
+        if(p!=nullptr) {
             if(length<0) {
                 length=0;
             } else if(length>0) {
@@ -699,7 +699,7 @@
         }
         return p;
     } else {
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -719,8 +719,8 @@
       ::fprintf(::stderr,"MaybeStackHeaderAndArray (orphan) alloc %ul + %d * %lu\n", sizeof(H),length,sizeof(T));
 #endif
         p=(H *)uprv_malloc(sizeof(H)+length*sizeof(T));
-        if(p==NULL) {
-            return NULL;
+        if(p==nullptr) {
+            return nullptr;
         }
         uprv_memcpy(p, ptr, sizeof(H)+(size_t)length*sizeof(T));
     }
@@ -768,12 +768,12 @@
     MemoryPool(const MemoryPool&) = delete;
     MemoryPool& operator=(const MemoryPool&) = delete;
 
-    MemoryPool(MemoryPool&& other) U_NOEXCEPT : fCount(other.fCount),
+    MemoryPool(MemoryPool&& other) noexcept : fCount(other.fCount),
                                                 fPool(std::move(other.fPool)) {
         other.fCount = 0;
     }
 
-    MemoryPool& operator=(MemoryPool&& other) U_NOEXCEPT {
+    MemoryPool& operator=(MemoryPool&& other) noexcept {
         // Since `this` may contain instances that need to be deleted, we can't
         // just throw them away and replace them with `other`. The normal way of
         // dealing with this in C++ is to swap `this` and `other`, rather than

Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj	2023-12-22 17:28:50 UTC (rev 69195)
@@ -88,6 +88,7 @@
     <ClCompile Include="brkiter.cpp" />
     <ClCompile Include="dictbe.cpp" />
     <ClCompile Include="lstmbe.cpp" />
+    <ClCompile Include="mlbe.cpp" />
     <ClCompile Include="pluralmap.cpp" />
     <ClCompile Include="rbbi.cpp" />
     <ClCompile Include="rbbidata.cpp" />
@@ -166,6 +167,7 @@
     <ClCompile Include="uidna.cpp" />
     <ClCompile Include="uts46.cpp" />
     <ClCompile Include="localebuilder.cpp" />
+    <ClCompile Include="ulocbuilder.cpp" />
     <ClCompile Include="localematcher.cpp" />
     <ClCompile Include="localeprioritylist.cpp" />
     <ClCompile Include="locavailable.cpp" />
@@ -184,6 +186,7 @@
     <ClCompile Include="ucat.cpp" />
     <ClCompile Include="uloc.cpp" />
     <ClCompile Include="uloc_tag.cpp" />
+    <ClCompile Include="ulocale.cpp" />
     <ClCompile Include="ures_cnv.cpp" />
     <ClCompile Include="uresbund.cpp" />
     <ClCompile Include="uresdata.cpp" />
@@ -282,6 +285,7 @@
     <ClInclude Include="brkeng.h" />
     <ClInclude Include="dictbe.h" />
     <ClInclude Include="lstmbe.h" />
+    <ClInclude Include="mlbe.h" />
     <ClInclude Include="rbbidata.h" />
     <ClInclude Include="rbbinode.h" />
     <ClInclude Include="rbbirb.h" />

Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters	2023-12-22 17:28:50 UTC (rev 69195)
@@ -76,6 +76,9 @@
     <ClCompile Include="lstmbe.cpp">
       <Filter>break iteration</Filter>
     </ClCompile>
+    <ClCompile Include="mlbe.cpp">
+      <Filter>break iteration</Filter>
+    </ClCompile>
     <ClCompile Include="rbbi.cpp">
       <Filter>break iteration</Filter>
     </ClCompile>
@@ -319,6 +322,9 @@
     <ClCompile Include="localebuilder.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
+    <ClCompile Include="ulocbuilder.cpp">
+      <Filter>locales & resources</Filter>
+    </ClCompile>
     <ClCompile Include="localematcher.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
@@ -370,6 +376,9 @@
     <ClCompile Include="uloc_tag.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
+    <ClCompile Include="ulocale.cpp">
+      <Filter>locales & resources</Filter>
+    </ClCompile>
     <ClCompile Include="ures_cnv.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
@@ -660,6 +669,9 @@
     <ClInclude Include="lstmbe.h">
       <Filter>break iteration</Filter>
     </ClInclude>
+    <ClInclude Include="mlbe.h">
+      <Filter>break iteration</Filter>
+    </ClInclude>
     <ClInclude Include="rbbidata.h">
       <Filter>break iteration</Filter>
     </ClInclude>
@@ -1126,6 +1138,9 @@
     <CustomBuild Include="unicode\localebuilder.h">
       <Filter>locales & resources</Filter>
     </CustomBuild>
+    <CustomBuild Include="unicode\ulocbuilder.h">
+      <Filter>locales & resources</Filter>
+    </CustomBuild>
     <CustomBuild Include="unicode\localematcher.h">
       <Filter>locales & resources</Filter>
     </CustomBuild>
@@ -1141,6 +1156,9 @@
     <CustomBuild Include="unicode\uloc.h">
       <Filter>locales & resources</Filter>
     </CustomBuild>
+    <CustomBuild Include="unicode\ulocale.h">
+      <Filter>locales & resources</Filter>
+    </CustomBuild>
     <CustomBuild Include="unicode\ures.h">
       <Filter>locales & resources</Filter>
     </CustomBuild>

Modified: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
===================================================================
(Binary files differ)

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -62,8 +62,8 @@
 
 static
 inline void
-uprv_arrayCopy(const UChar *src, int32_t srcStart,
-        UChar *dst, int32_t dstStart, int32_t count)
+uprv_arrayCopy(const char16_t *src, int32_t srcStart,
+        char16_t *dst, int32_t dstStart, int32_t count)
 { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); }
 
 /**

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -21,7 +21,7 @@
 CStr::CStr(const UnicodeString &in) {
     UErrorCode status = U_ZERO_ERROR;
 #if !UCONFIG_NO_CONVERSION || U_CHARSET_IS_UTF8
-    int32_t length = in.extract(0, in.length(), static_cast<char *>(NULL), static_cast<uint32_t>(0));
+    int32_t length = in.extract(0, in.length(), static_cast<char *>(nullptr), static_cast<uint32_t>(0));
     int32_t resultCapacity = 0;
     char *buf = s.getAppendBuffer(length, length, resultCapacity, status);
     if (U_SUCCESS(status)) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -189,7 +189,7 @@
 /*
  * Takes a int64_t and fills in  a char* string with that number "radix"-based.
  * Writes at most 21: chars ("-9223372036854775807" plus NUL).
- * Returns the length of the string, not including the terminating NULL.
+ * Returns the length of the string, not including the terminating NUL.
  */
 U_CAPI int32_t U_EXPORT2
 T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
@@ -233,16 +233,16 @@
 
 U_CAPI int U_EXPORT2
 uprv_stricmp(const char *str1, const char *str2) {
-    if(str1==NULL) {
-        if(str2==NULL) {
+    if(str1==nullptr) {
+        if(str2==nullptr) {
             return 0;
         } else {
             return -1;
         }
-    } else if(str2==NULL) {
+    } else if(str2==nullptr) {
         return 1;
     } else {
-        /* compare non-NULL strings lexically with lowercase */
+        /* compare non-nullptr strings lexically with lowercase */
         int rc;
         unsigned char c1, c2;
 
@@ -272,16 +272,16 @@
 
 U_CAPI int U_EXPORT2
 uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
-    if(str1==NULL) {
-        if(str2==NULL) {
+    if(str1==nullptr) {
+        if(str2==nullptr) {
             return 0;
         } else {
             return -1;
         }
-    } else if(str2==NULL) {
+    } else if(str2==nullptr) {
         return 1;
     } else {
-        /* compare non-NULL strings lexically with lowercase */
+        /* compare non-nullptr strings lexically with lowercase */
         int rc;
         unsigned char c1, c2;
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -42,7 +42,7 @@
 }
 
 UBool
-DictionaryBreakEngine::handles(UChar32 c) const {
+DictionaryBreakEngine::handles(UChar32 c, const char*) const {
     return fSet.contains(c);
 }
 
@@ -54,7 +54,6 @@
                                  UBool isPhraseBreaking,
                                  UErrorCode& status) const {
     if (U_FAILURE(status)) return 0;
-    (void)startPos;            // TODO: remove this param?
     int32_t result = 0;
 
     // Find the span of characters included in the set.
@@ -61,6 +60,7 @@
     //   The span to break begins at the current position in the text, and
     //   extends towards the start or end of the text, depending on 'reverse'.
 
+    utext_setNativeIndex(text, startPos);
     int32_t start = (int32_t)utext_getNativeIndex(text);
     int32_t current;
     int32_t rangeStart;
@@ -140,7 +140,7 @@
     int32_t start = (int32_t)utext_getNativeIndex(text);
     if (start != offset) {
         offset = start;
-        count = dict->matches(text, rangeEnd-start, UPRV_LENGTHOF(cuLengths), cuLengths, cpLengths, NULL, &prefix);
+        count = dict->matches(text, rangeEnd-start, UPRV_LENGTHOF(cuLengths), cuLengths, cpLengths, nullptr, &prefix);
         // Dictionary leaves text after longest prefix, not longest word. Back up.
         if (count <= 0) {
             utext_setNativeIndex(text, start);
@@ -1054,9 +1054,10 @@
  */
 static const uint32_t kuint32max = 0xFFFFFFFF;
 CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType type, UErrorCode &status)
-: DictionaryBreakEngine(), fDictionary(adoptDictionary) {
+: DictionaryBreakEngine(), fDictionary(adoptDictionary), isCj(false) {
     UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
     UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Hani");
+    fMlBreakEngine = nullptr;
     nfkcNorm2 = Normalizer2::getNFKCInstance(status);
     // Korean dictionary only includes Hangul syllables
     fHangulWordSet.applyPattern(UnicodeString(u"[\\uac00-\\ud7a3]"), status);
@@ -1073,11 +1074,20 @@
         if (U_SUCCESS(status)) {
             setCharacters(fHangulWordSet);
         }
-    } else { //Chinese and Japanese
+    } else { // Chinese and Japanese
         UnicodeSet cjSet(UnicodeString(u"[[:Han:][:Hiragana:][:Katakana:]\\u30fc\\uff70\\uff9e\\uff9f]"), status);
+        isCj = true;
         if (U_SUCCESS(status)) {
             setCharacters(cjSet);
+#if UCONFIG_USE_ML_PHRASE_BREAKING
+            fMlBreakEngine = new MlBreakEngine(fDigitOrOpenPunctuationOrAlphabetSet,
+                                               fClosePunctuationSet, status);
+            if (fMlBreakEngine == nullptr) {
+                status = U_MEMORY_ALLOCATION_ERROR;
+            }
+#else
             initJapanesePhraseParameter(status);
+#endif
         }
     }
     UTRACE_EXIT_STATUS(status);
@@ -1085,6 +1095,7 @@
 
 CjkBreakEngine::~CjkBreakEngine(){
     delete fDictionary;
+    delete fMlBreakEngine;
 }
 
 // The katakanaCost values below are based on the length frequencies of all
@@ -1135,7 +1146,7 @@
     UnicodeString inString;
 
     // inputMap[inStringIndex] = corresponding native index from UText inText.
-    // If NULL then mapping is 1:1
+    // If nullptr then mapping is 1:1
     LocalPointer<UVector32>     inputMap;
 
     // if UText has the input string as one contiguous UTF-16 chunk
@@ -1251,7 +1262,15 @@
             }
         }
     }
-                
+
+#if UCONFIG_USE_ML_PHRASE_BREAKING
+    // PhraseBreaking is supported in ja and ko; MlBreakEngine only supports ja.
+    if (isPhraseBreaking && isCj) {
+        return fMlBreakEngine->divideUpRange(inText, rangeStart, rangeEnd, foundBreaks, inString,
+                                             inputMap, status);
+    }
+#endif
+
     // bestSnlp[i] is the snlp of the best segmentation of the first i
     // code points in the range to be matched.
     UVector32 bestSnlp(numCodePts + 1, status);
@@ -1292,9 +1311,9 @@
         int32_t count;
         utext_setNativeIndex(&fu, ix);
         count = fDictionary->matches(&fu, maxWordSize, numCodePts,
-                             NULL, lengths.getBuffer(), values.getBuffer(), NULL);
+                             nullptr, lengths.getBuffer(), values.getBuffer(), nullptr);
                              // Note: lengths is filled with code point lengths
-                             //       The NULL parameter is the ignored code unit lengths.
+                             //       The nullptr parameter is the ignored code unit lengths.
 
         // if there are no single character matches found in the dictionary 
         // starting with this character, treat character as a 1-character word 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -16,11 +16,13 @@
 
 #include "brkeng.h"
 #include "hash.h"
+#include "mlbe.h"
 #include "uvectr32.h"
 
 U_NAMESPACE_BEGIN
 
 class DictionaryMatcher;
+class MlBreakEngine;
 class Normalizer2;
 
 /*******************************************************************
@@ -60,10 +62,11 @@
    * a particular kind of break.</p>
    *
    * @param c A character which begins a run that the engine might handle
+   * @param locale The locale.
    * @return true if this engine handles the particular character and break
    * type.
    */
-  virtual UBool handles(UChar32 c) const override;
+  virtual UBool handles(UChar32 c, const char* locale) const override;
 
   /**
    * <p>Find any breaks within a run in the supplied text.</p>
@@ -374,6 +377,8 @@
 
   DictionaryMatcher        *fDictionary;
   const Normalizer2        *nfkcNorm2;
+  MlBreakEngine            *fMlBreakEngine;
+  bool                      isCj;
 
  private:
   // Load Japanese extensions.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -57,13 +57,13 @@
         codePointsMatched += 1;
         if (USTRINGTRIE_HAS_VALUE(result)) {
             if (wordCount < limit) {
-                if (values != NULL) {
+                if (values != nullptr) {
                     values[wordCount] = uct.getValue();
                 }
-                if (lengths != NULL) {
+                if (lengths != nullptr) {
                     lengths[wordCount] = lengthMatched;
                 }
-                if (cpLengths != NULL) {
+                if (cpLengths != nullptr) {
                     cpLengths[wordCount] = codePointsMatched;
                 }
                 ++wordCount;
@@ -80,7 +80,7 @@
         }
     }
 
-    if (prefix != NULL) {
+    if (prefix != nullptr) {
         *prefix = codePointsMatched;
     }
     return wordCount;
@@ -124,13 +124,13 @@
         codePointsMatched += 1;
         if (USTRINGTRIE_HAS_VALUE(result)) {
             if (wordCount < limit) {
-                if (values != NULL) {
+                if (values != nullptr) {
                     values[wordCount] = bt.getValue();
                 }
-                if (lengths != NULL) {
+                if (lengths != nullptr) {
                     lengths[wordCount] = lengthMatched;
                 }
-                if (cpLengths != NULL) {
+                if (cpLengths != nullptr) {
                     cpLengths[wordCount] = codePointsMatched;
                 }
                 ++wordCount;
@@ -147,7 +147,7 @@
         }
     }
 
-    if (prefix != NULL) {
+    if (prefix != nullptr) {
         *prefix = codePointsMatched;
     }
     return wordCount;
@@ -170,7 +170,7 @@
     int32_t i, offset, size;
 
     headerSize = udata_swapDataHeader(ds, inData, length, outData, pErrorCode);
-    if (pErrorCode == NULL || U_FAILURE(*pErrorCode)) return 0;
+    if (pErrorCode == nullptr || U_FAILURE(*pErrorCode)) return 0;
     pInfo = (const UDataInfo *)((const char *)inData + 4);
     if (!(pInfo->dataFormat[0] == 0x44 && 
           pInfo->dataFormat[1] == 0x69 && 
@@ -184,7 +184,7 @@
     }
 
     inBytes = (const uint8_t *)inData + headerSize;
-    outBytes = (uint8_t *)outData + headerSize;
+    outBytes = (outData == nullptr) ? nullptr : (uint8_t *)outData + headerSize;
 
     inIndexes = (const int32_t *)inBytes;
     if (length >= 0) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -79,15 +79,15 @@
      *                   matching words to be found.
      *  @param lengths   output array, filled with the lengths of the matches, in order,
      *                   from shortest to longest. Lengths are in native indexing units
-     *                   of the UText. May be NULL.
+     *                   of the UText. May be nullptr.
      *  @param cpLengths output array, filled with the lengths of the matches, in order,
      *                   from shortest to longest. Lengths are the number of Unicode code points.
-     *                   May be NULL.
+     *                   May be nullptr.
      *  @param values    Output array, filled with the values associated with the words found.
-     *                   May be NULL.
+     *                   May be nullptr.
      *  @param prefix    Output parameter, the code point length of the prefix match, even if that
      *                   prefix didn't lead to a complete word. Will always be >= the cpLength
-     *                   of the longest complete word matched. May be NULL.
+     *                   of the longest complete word matched. May be nullptr.
      *  @return          Number of matching words found.
      */
     virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
@@ -103,7 +103,7 @@
 public:
     // constructs a new UCharsDictionaryMatcher.
     // The UDataMemory * will be closed on this object's destruction.
-    UCharsDictionaryMatcher(const UChar *c, UDataMemory *f) : characters(c), file(f) { }
+    UCharsDictionaryMatcher(const char16_t *c, UDataMemory *f) : characters(c), file(f) { }
     virtual ~UCharsDictionaryMatcher();
     virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
                             int32_t *lengths, int32_t *cpLengths, int32_t *values,
@@ -110,7 +110,7 @@
                             int32_t *prefix) const override;
     virtual int32_t getType() const override;
 private:
-    const UChar *characters;
+    const char16_t *characters;
     UDataMemory *file;
 };
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -35,7 +35,7 @@
 
 }  // namespace
 
-void Edits::releaseArray() U_NOEXCEPT {
+void Edits::releaseArray() noexcept {
     if (array != stackArray) {
         uprv_free(array);
     }
@@ -63,7 +63,7 @@
     return *this;
 }
 
-Edits &Edits::moveArray(Edits &src) U_NOEXCEPT {
+Edits &Edits::moveArray(Edits &src) noexcept {
     if (U_FAILURE(errorCode_)) {
         length = delta = numChanges = 0;
         return *this;
@@ -94,7 +94,7 @@
     return copyArray(other);
 }
 
-Edits &Edits::operator=(Edits &&src) U_NOEXCEPT {
+Edits &Edits::operator=(Edits &&src) noexcept {
     length = src.length;
     delta = src.delta;
     numChanges = src.numChanges;
@@ -106,7 +106,7 @@
     releaseArray();
 }
 
-void Edits::reset() U_NOEXCEPT {
+void Edits::reset() noexcept {
     length = delta = numChanges = 0;
     errorCode_ = U_ZERO_ERROR;
 }
@@ -233,7 +233,7 @@
         return false;
     }
     uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)newCapacity * 2);
-    if (newArray == NULL) {
+    if (newArray == nullptr) {
         errorCode_ = U_MEMORY_ALLOCATION_ERROR;
         return false;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -46,7 +46,7 @@
 // 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) {
+        const UDataInfo &info, const char16_t *dataFormat, uint8_t major, uint8_t minor) {
     return
         info.size >= 20 &&
         info.isBigEndian == U_IS_BIG_ENDIAN &&
@@ -104,7 +104,7 @@
         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;
+        const char16_t *p = nextOffset > offset ? (const char16_t *)(inBytes + offset) : nullptr;
         stringTries[getStringTrieIndex(i)] = p;
     }
 }
@@ -160,7 +160,7 @@
 }
 
 UBool
-EmojiProps::hasBinaryProperty(const UChar *s, int32_t length, UProperty which) {
+EmojiProps::hasBinaryProperty(const char16_t *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);
@@ -167,7 +167,7 @@
 }
 
 UBool
-EmojiProps::hasBinaryPropertyImpl(const UChar *s, int32_t length, UProperty which) const {
+EmojiProps::hasBinaryPropertyImpl(const char16_t *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).
@@ -181,7 +181,7 @@
         lastProp = UCHAR_RGI_EMOJI_ZWJ_SEQUENCE;
     }
     for (int32_t prop = firstProp; prop <= lastProp; ++prop) {
-        const UChar *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
+        const char16_t *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
         if (trieUChars != nullptr) {
             UCharsTrie trie(trieUChars);
             UStringTrieResult result = trie.next(s, length);
@@ -206,7 +206,7 @@
         lastProp = UCHAR_RGI_EMOJI_ZWJ_SEQUENCE;
     }
     for (int32_t prop = firstProp; prop <= lastProp; ++prop) {
-        const UChar *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
+        const char16_t *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
         if (trieUChars != nullptr) {
             UCharsTrie::Iterator iter(trieUChars, 0, errorCode);
             while (iter.next(errorCode)) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/emojiprops.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -23,7 +23,7 @@
 
     static const EmojiProps *getSingleton(UErrorCode &errorCode);
     static UBool hasBinaryProperty(UChar32 c, UProperty which);
-    static UBool hasBinaryProperty(const UChar *s, int32_t length, UProperty which);
+    static UBool hasBinaryProperty(const char16_t *s, int32_t length, UProperty which);
 
     void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const;
     void addStrings(const USetAdder *sa, UProperty which, UErrorCode &errorCode) const;
@@ -78,11 +78,11 @@
 
     void load(UErrorCode &errorCode);
     UBool hasBinaryPropertyImpl(UChar32 c, UProperty which) const;
-    UBool hasBinaryPropertyImpl(const UChar *s, int32_t length, UProperty which) const;
+    UBool hasBinaryPropertyImpl(const char16_t *s, int32_t length, UProperty which) const;
 
     UDataMemory *memory = nullptr;
     UCPTrie *cpTrie = nullptr;
-    const UChar *stringTries[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
+    const char16_t *stringTries[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
 };
 
 U_NAMESPACE_END

Modified: trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -35,7 +35,7 @@
   if(s) {
     s->extract(0,s->length(),buf,2048);
   } else {
-    strcpy(buf,"NULL");
+    strcpy(buf,"nullptr");
   }
   fprintf(stderr,"%s:%d: %s. s='%s'(%p), b=%c, d=%d\n",
           f, l, m, buf, (const void*)s, b?'T':'F',(int)d);
@@ -102,7 +102,7 @@
   inline UBool add(const UnicodeString& str, UErrorCode &status) {
     if(U_FAILURE(status)) return false;
     UnicodeString *t = new UnicodeString(str);
-    if(t==NULL) {
+    if(t==nullptr) {
       status = U_MEMORY_ALLOCATION_ERROR; return false;
     }
     return adopt(t, status);
@@ -130,7 +130,7 @@
 static const int32_t kMATCH   = (1<<1); //< exact match - skip this one.
 static const int32_t kSuppressInReverse = (1<<0);
 static const int32_t kAddToForward = (1<<1);
-static const UChar   kFULLSTOP = 0x002E; // '.'
+static const char16_t kFULLSTOP = 0x002E; // '.'
 
 /**
  * Shared data for SimpleFilteredSentenceBreakIterator
@@ -191,7 +191,7 @@
     return clone();
   }
   virtual SimpleFilteredSentenceBreakIterator* clone() const override { return new SimpleFilteredSentenceBreakIterator(*this); }
-  virtual UClassID getDynamicClassID(void) const override { return NULL; }
+  virtual UClassID getDynamicClassID() const override { return nullptr; }
   virtual bool operator==(const BreakIterator& o) const override { if(this==&o) return true; return false; }
 
   /* -- text modifying -- */
@@ -202,20 +202,20 @@
 
   /* -- other functions that are just delegated -- */
   virtual UText *getUText(UText *fillIn, UErrorCode &status) const override { return fDelegate->getUText(fillIn,status); }
-  virtual CharacterIterator& getText(void) const override { return fDelegate->getText(); }
+  virtual CharacterIterator& getText() const override { return fDelegate->getText(); }
 
   /* -- ITERATION -- */
-  virtual int32_t first(void) override;
+  virtual int32_t first() override;
   virtual int32_t preceding(int32_t offset) override;
-  virtual int32_t previous(void) override;
+  virtual int32_t previous() 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 current() const override { return fDelegate->current(); } // we keep the delegate current, so this should be correct.
 
-  virtual int32_t next(void) override;
+  virtual int32_t next() override;
 
   virtual int32_t next(int32_t n) override;
   virtual int32_t following(int32_t offset) override;
-  virtual int32_t last(void) override;
+  virtual int32_t last() override;
 
 private:
     /**
@@ -289,11 +289,11 @@
     // Assume a space is following the '.'  (so we handle the case:  "Mr. /Brown")
     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);
+      //if(debug2) u_printf("skipping prev: |%C| \n", (char16_t)uch);
     } else {
-      //if(debug2) u_printf("not skipping prev: |%C| \n", (UChar)uch);
+      //if(debug2) u_printf("not skipping prev: |%C| \n", (char16_t)uch);
       utext_next32(fText.getAlias());
-      //if(debug2) u_printf(" -> : |%C| \n", (UChar)uch);
+      //if(debug2) u_printf(" -> : |%C| \n", (char16_t)uch);
     }
 
     {
@@ -309,20 +309,20 @@
             if(!USTRINGTRIE_HAS_NEXT(r)) {
                 break;
             }
-            //if(debug2) u_printf("rev< /%C/ cont?%d @%d\n", (UChar)uch, r, utext_getNativeIndex(fText.getAlias()));
+            //if(debug2) u_printf("rev< /%C/ cont?%d @%d\n", (char16_t)uch, r, utext_getNativeIndex(fText.getAlias()));
         }
     }
 
     //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(debug2) u_printf("rev<+/%C/+end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (char16_t)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(debug2) u_printf("rev< /%C/ end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (char16_t)uch, r, bestPosn, bestValue);
 
       //if(USTRINGTRIE_MATCHES(r)) {  // matched - so, now what?
       //int32_t bestValue = iter.getValue();
-      ////if(debug2) u_printf("rev< /%C/ matched, skip..%d  bestValue=%d\n", (UChar)uch, r, bestValue);
+      ////if(debug2) u_printf("rev< /%C/ matched, skip..%d  bestValue=%d\n", (char16_t)uch, r, bestValue);
 
       if(bestValue == kMATCH) { // exact match!
         //if(debug2) u_printf(" exact backward match\n");
@@ -340,15 +340,15 @@
         UChar32 uch;
         while((uch=utext_next32(fText.getAlias()))!=U_SENTINEL &&
               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(debug2) u_printf("fwd> /%C/ cont?%d @%d\n", (char16_t)uch, rfwd, utext_getNativeIndex(fText.getAlias()));
         }
         if(USTRINGTRIE_MATCHES(rfwd)) {
-          //if(debug2) u_printf("fwd> /%C/ == forward match!\n", (UChar)uch);
+          //if(debug2) u_printf("fwd> /%C/ == forward match!\n", (char16_t)uch);
           // only full matches here, nothing to check
           // skip the next:
             return kExceptionHere;
         } else {
-          //if(debug2) u_printf("fwd> /%C/ no match.\n", (UChar)uch);
+          //if(debug2) u_printf("fwd> /%C/ no match.\n", (char16_t)uch);
           // no match (no exception) -return the 'underlying' break
           return kNoExceptionHere;
         }
@@ -356,7 +356,7 @@
         return kNoExceptionHere; // internal error and/or no forwards trie
       }
     } else {
-      //if(debug2) u_printf("rev< /%C/ .. no match..%d\n", (UChar)uch, r);  // no best match
+      //if(debug2) u_printf("rev< /%C/ .. no match..%d\n", (char16_t)uch, r);  // no best match
       return kNoExceptionHere; // No match - so exit. Not an exception.
     }
 }
@@ -428,7 +428,7 @@
 }
 
 int32_t
-SimpleFilteredSentenceBreakIterator::first(void) {
+SimpleFilteredSentenceBreakIterator::first() {
   // Don't suppress a break opportunity at the beginning of text.
   return fDelegate->first();
 }
@@ -439,7 +439,7 @@
 }
 
 int32_t
-SimpleFilteredSentenceBreakIterator::previous(void) {
+SimpleFilteredSentenceBreakIterator::previous() {
   return internalPrev(fDelegate->previous());
 }
 
@@ -473,7 +473,7 @@
 }
 
 int32_t
-SimpleFilteredSentenceBreakIterator::last(void) {
+SimpleFilteredSentenceBreakIterator::last() {
   // Don't suppress a break opportunity at the end of text.
   return fDelegate->last();
 }
@@ -516,7 +516,7 @@
 #endif
       return;  // leaves the builder empty, if you try to use it.
     }
-    LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", NULL, &subStatus));
+    LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", nullptr, &subStatus));
     if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) {    
       status = subStatus; // copy the failing status 
 #if FB_DEBUG
@@ -524,7 +524,7 @@
 #endif
       return;  // leaves the builder empty, if you try to use it.
     }
-    LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", NULL, &subStatus));
+    LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", nullptr, &subStatus));
 
 #if FB_DEBUG
     {
@@ -590,7 +590,7 @@
   LocalPointer<UCharsTrieBuilder> builder(new UCharsTrieBuilder(status), status);
   LocalPointer<UCharsTrieBuilder> builder2(new UCharsTrieBuilder(status), status);
   if(U_FAILURE(status)) {
-    return NULL;
+    return nullptr;
   }
 
   int32_t revCount = 0;
@@ -620,7 +620,7 @@
     } else {
       FB_TRACE("build",abbr,false,i);
       status = U_MEMORY_ALLOCATION_ERROR;
-      return NULL;
+      return nullptr;
     }
     partials[n] = 0; // default: not partial
     n++;
@@ -682,13 +682,13 @@
       ////if(debug2) u_printf("SUPPRESS- not Added(%d):  /%S/ status=%s\n",partials[i], ustrs[i].getTerminatedBuffer(), u_errorName(status));
     }
   }
-  FB_TRACE("AbbrCount",NULL,false, subCount);
+  FB_TRACE("AbbrCount",nullptr,false, subCount);
 
   if(revCount>0) {
     backwardsTrie.adoptInstead(builder->build(USTRINGTRIE_BUILD_FAST, status));
     if(U_FAILURE(status)) {
-      FB_TRACE(u_errorName(status),NULL,false, -1);
-      return NULL;
+      FB_TRACE(u_errorName(status),nullptr,false, -1);
+      return nullptr;
     }
   }
 
@@ -695,8 +695,8 @@
   if(fwdCount>0) {
     forwardsPartialTrie.adoptInstead(builder2->build(USTRINGTRIE_BUILD_FAST, status));
     if(U_FAILURE(status)) {
-      FB_TRACE(u_errorName(status),NULL,false, -1);
-      return NULL;
+      FB_TRACE(u_errorName(status),nullptr,false, -1);
+      return nullptr;
     }
   }
 
@@ -714,9 +714,9 @@
 
 FilteredBreakIteratorBuilder *
 FilteredBreakIteratorBuilder::createInstance(const Locale& where, UErrorCode& status) {
-  if(U_FAILURE(status)) return NULL;
+  if(U_FAILURE(status)) return nullptr;
   LocalPointer<FilteredBreakIteratorBuilder> ret(new SimpleFilteredBreakIteratorBuilder(where, status), status);
-  return (U_SUCCESS(status))? ret.orphan(): NULL;
+  return (U_SUCCESS(status))? ret.orphan(): nullptr;
 }
 
 FilteredBreakIteratorBuilder *
@@ -726,9 +726,9 @@
 
 FilteredBreakIteratorBuilder *
 FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode& status) {
-  if(U_FAILURE(status)) return NULL;
+  if(U_FAILURE(status)) return nullptr;
   LocalPointer<FilteredBreakIteratorBuilder> ret(new SimpleFilteredBreakIteratorBuilder(status), status);
-  return (U_SUCCESS(status))? ret.orphan(): NULL;
+  return (U_SUCCESS(status))? ret.orphan(): nullptr;
 }
 
 U_NAMESPACE_END

Modified: trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -346,15 +346,15 @@
 U_CAPI UNormalizer2 * U_EXPORT2
 unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
-        return NULL;
+        return nullptr;
     }
-    if(filterSet==NULL) {
+    if(filterSet==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     Normalizer2 *fn2=new FilteredNormalizer2(*(Normalizer2 *)norm2,
                                              *UnicodeSet::fromUSet(filterSet));
-    if(fn2==NULL) {
+    if(fn2==nullptr) {
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
     }
     return (UNormalizer2 *)fn2;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/hash.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/hash.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/hash.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -97,7 +97,7 @@
 
     inline int32_t removei(const UnicodeString& key);
 
-    inline void removeAll(void);
+    inline void removeAll();
 
     inline UBool containsKey(const UnicodeString& key) const;
 
@@ -159,7 +159,7 @@
                         : uhash_hashUnicodeString,
             ignoreKeyCase ? uhash_compareCaselessUnicodeString
                         : uhash_compareUnicodeString,
-            NULL,
+            nullptr,
             status);
 }
 
@@ -170,7 +170,7 @@
                         : uhash_hashUnicodeString,
             ignoreKeyCase ? uhash_compareCaselessUnicodeString
                         : uhash_compareUnicodeString,
-            NULL, size,
+            nullptr, size,
             status);
 }
 
@@ -177,7 +177,7 @@
 inline Hashtable::Hashtable(UErrorCode& status)
  : hash(0)
 {
-    init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status);
+    init(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, status);
 }
 
 inline Hashtable::Hashtable()
@@ -184,11 +184,11 @@
  : hash(0)
 {
     UErrorCode status = U_ZERO_ERROR;
-    init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status);
+    init(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, status);
 }
 
 inline Hashtable::~Hashtable() {
-    if (hash != NULL) {
+    if (hash != nullptr) {
         uhash_close(hash);
     }
 }
@@ -246,7 +246,7 @@
     return uhash_nextElement(hash, &pos);
 }
 
-inline void Hashtable::removeAll(void) {
+inline void Hashtable::removeAll() {
     uhash_removeAll(hash);
 }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -15,14 +15,14 @@
 #include "uresimp.h" /* for ures_getVersionByKey */
 
 U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
-    UResourceBundle *icudatares = NULL;
+    UResourceBundle *icudatares = nullptr;
     
     if (U_FAILURE(*status)) {
         return;
     }
     
-    if (dataVersionFillin != NULL) {
-        icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
+    if (dataVersionFillin != nullptr) {
+        icudatares = ures_openDirect(nullptr, U_ICU_VERSION_BUNDLE , status);
         if (U_SUCCESS(*status)) {
             ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
         }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -52,9 +52,9 @@
   UPlugEntrypoint  *entrypoint; /**< plugin entrypoint */
   uint32_t structSize;    /**< initialized to the size of this structure */
   uint32_t token;         /**< must be U_PLUG_TOKEN */
-  void *lib;              /**< plugin library, or NULL */
+  void *lib;              /**< plugin library, or nullptr */
   char libName[UPLUG_NAME_MAX];   /**< library name */
-  char sym[UPLUG_NAME_MAX];        /**< plugin symbol, or NULL */
+  char sym[UPLUG_NAME_MAX];        /**< plugin symbol, or nullptr */
   char config[UPLUG_NAME_MAX];     /**< configuration data */
   void *context;          /**< user context data */
   char name[UPLUG_NAME_MAX];   /**< name of plugin */
@@ -148,9 +148,9 @@
 U_CAPI char * U_EXPORT2
 uplug_findLibrary(void *lib, UErrorCode *status) {
   int32_t libEnt;
-  char *ret = NULL;
+  char *ret = nullptr;
   if(U_FAILURE(*status)) {
-    return NULL;
+    return nullptr;
   }
   libEnt = searchForLibrary(lib);
   if(libEnt!=-1) { 
@@ -164,9 +164,9 @@
 U_CAPI void * U_EXPORT2
 uplug_openLibrary(const char *libName, UErrorCode *status) {
   int32_t libEntry = -1;
-  void *lib = NULL;
+  void *lib = nullptr;
     
-  if(U_FAILURE(*status)) return NULL;
+  if(U_FAILURE(*status)) return nullptr;
 
   libEntry = searchForLibraryName(libName);
   if(libEntry == -1) {
@@ -177,7 +177,7 @@
 #if UPLUG_TRACE
       DBG((stderr, "uplug_openLibrary() - out of library slots (max %d)\n", libraryMax));
 #endif
-      return NULL;
+      return nullptr;
     }
     /* Some operating systems don't want 
        DL operations from multiple threads. */
@@ -186,9 +186,9 @@
     DBG((stderr, "uplug_openLibrary(%s,%s) libEntry %d, lib %p\n", libName, u_errorName(*status), libEntry, lib));
 #endif
         
-    if(libraryList[libEntry].lib == NULL || U_FAILURE(*status)) {
+    if(libraryList[libEntry].lib == nullptr || U_FAILURE(*status)) {
       /* cleanup. */
-      libraryList[libEntry].lib = NULL; /* failure with open */
+      libraryList[libEntry].lib = nullptr; /* failure with open */
       libraryList[libEntry].name[0] = 0;
 #if UPLUG_TRACE
       DBG((stderr, "uplug_openLibrary(%s,%s) libEntry %d, lib %p\n", libName, u_errorName(*status), libEntry, lib));
@@ -252,7 +252,7 @@
 
 U_CAPI UPlugData * U_EXPORT2
 uplug_nextPlug(UPlugData *prior) {
-  if(prior==NULL) {
+  if(prior==nullptr) {
     return pluginList;
   } else {
     UPlugData *nextPlug = &prior[1];
@@ -259,7 +259,7 @@
     UPlugData *pastPlug = &pluginList[pluginCount];
     
     if(nextPlug>=pastPlug) {
-      return NULL;
+      return nullptr;
     } else {
       return nextPlug;
     }
@@ -273,7 +273,7 @@
  */
 static void uplug_callPlug(UPlugData *plug, UPlugReason reason, UErrorCode *status) {
   UPlugTokenReturn token;
-  if(plug==NULL||U_FAILURE(*status)) {
+  if(plug==nullptr||U_FAILURE(*status)) {
     return;
   }
   token = (*(plug->entrypoint))(plug, reason, status);
@@ -330,15 +330,15 @@
 
 static UPlugData *uplug_allocateEmptyPlug(UErrorCode *status)
 {
-  UPlugData *plug = NULL;
+  UPlugData *plug = nullptr;
 
   if(U_FAILURE(*status)) {
-    return NULL;
+    return nullptr;
   }
 
   if(pluginCount == UPLUG_PLUGIN_INITIAL_COUNT) {
     *status = U_MEMORY_ALLOCATION_ERROR;
-    return NULL;
+    return nullptr;
   }
 
   plug = &pluginList[pluginCount++];
@@ -353,8 +353,8 @@
   plug->libName[0] = 0;
   plug->config[0]=0;
   plug->sym[0]=0;
-  plug->lib=NULL;
-  plug->entrypoint=NULL;
+  plug->lib=nullptr;
+  plug->entrypoint=nullptr;
 
 
   return plug;
@@ -364,16 +364,16 @@
                                      UErrorCode *status) {
   UPlugData *plug = uplug_allocateEmptyPlug(status);
   if(U_FAILURE(*status)) {
-    return NULL;
+    return nullptr;
   }
 
-  if(config!=NULL) {
+  if(config!=nullptr) {
     uprv_strncpy(plug->config, config, UPLUG_NAME_MAX);
   } else {
     plug->config[0] = 0;
   }
     
-  if(symName!=NULL) {
+  if(symName!=nullptr) {
     uprv_strncpy(plug->sym, symName, UPLUG_NAME_MAX);
   } else {
     plug->sym[0] = 0;
@@ -393,7 +393,7 @@
     uplug_closeLibrary(plug->lib, &subStatus);
 #endif
   }
-  plug->lib = NULL;
+  plug->lib = nullptr;
   if(U_SUCCESS(*status) && U_FAILURE(subStatus)) {
     *status = subStatus;
   }
@@ -410,7 +410,7 @@
 }
 
 static void uplug_doUnloadPlug(UPlugData *plugToRemove, UErrorCode *status) {
-  if(plugToRemove != NULL) {
+  if(plugToRemove != nullptr) {
     uplug_unloadPlug(plugToRemove, status);
     uplug_deallocatePlug(plugToRemove, status);
   }
@@ -418,14 +418,14 @@
 
 U_CAPI void U_EXPORT2
 uplug_removePlug(UPlugData *plug, UErrorCode *status)  {
-  UPlugData *cursor = NULL;
-  UPlugData *plugToRemove = NULL;
+  UPlugData *cursor = nullptr;
+  UPlugData *plugToRemove = nullptr;
   if(U_FAILURE(*status)) return;
     
-  for(cursor=pluginList;cursor!=NULL;) {
+  for(cursor=pluginList;cursor!=nullptr;) {
     if(cursor==plug) {
       plugToRemove = plug;
-      cursor=NULL;
+      cursor=nullptr;
     } else {
       cursor = uplug_nextPlug(cursor);
     }
@@ -481,7 +481,7 @@
 #if U_ENABLE_DYLOAD
     return uplug_findLibrary(data->lib, status);
 #else
-    return NULL;
+    return nullptr;
 #endif
   }
 }
@@ -510,7 +510,7 @@
 U_CAPI UPlugData* U_EXPORT2
 uplug_getPlugInternal(int32_t n) { 
   if(n <0 || n >= pluginCount) {
-    return NULL;
+    return nullptr;
   } else { 
     return &(pluginList[n]);
   }
@@ -530,7 +530,7 @@
  */
 static UPlugData* uplug_initPlugFromEntrypointAndLibrary(UPlugEntrypoint *entrypoint, const char *config, void *lib, const char *sym,
                                                          UErrorCode *status) {
-  UPlugData *plug = NULL;
+  UPlugData *plug = nullptr;
 
   plug = uplug_allocatePlug(entrypoint, config, lib, sym, status);
 
@@ -538,13 +538,13 @@
     return plug;
   } else {
     uplug_deallocatePlug(plug, status);
-    return NULL;
+    return nullptr;
   }
 }
 
 U_CAPI UPlugData* U_EXPORT2
 uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status) {
-  UPlugData* plug = uplug_initPlugFromEntrypointAndLibrary(entrypoint, config, NULL, NULL, status);
+  UPlugData* plug = uplug_initPlugFromEntrypointAndLibrary(entrypoint, config, nullptr, nullptr, status);
   uplug_loadPlug(plug, status);
   return plug;
 }
@@ -555,25 +555,25 @@
 uplug_initErrorPlug(const char *libName, const char *sym, const char *config, const char *nameOrError, UErrorCode loadStatus, UErrorCode *status)
 {
   UPlugData *plug = uplug_allocateEmptyPlug(status);
-  if(U_FAILURE(*status)) return NULL;
+  if(U_FAILURE(*status)) return nullptr;
 
   plug->pluginStatus = loadStatus;
   plug->awaitingLoad = false; /* Won't load. */
   plug->dontUnload = true; /* cannot unload. */
 
-  if(sym!=NULL) {
+  if(sym!=nullptr) {
     uprv_strncpy(plug->sym, sym, UPLUG_NAME_MAX);
   }
 
-  if(libName!=NULL) {
+  if(libName!=nullptr) {
     uprv_strncpy(plug->libName, libName, UPLUG_NAME_MAX);
   }
 
-  if(nameOrError!=NULL) {
+  if(nameOrError!=nullptr) {
     uprv_strncpy(plug->name, nameOrError, UPLUG_NAME_MAX);
   }
 
-  if(config!=NULL) {
+  if(config!=nullptr) {
     uprv_strncpy(plug->config, config, UPLUG_NAME_MAX);
   }
 
@@ -585,31 +585,31 @@
  */
 static UPlugData* 
 uplug_initPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) {
-  void *lib = NULL;
-  UPlugData *plug = NULL;
-  if(U_FAILURE(*status)) { return NULL; }
+  void *lib = nullptr;
+  UPlugData *plug = nullptr;
+  if(U_FAILURE(*status)) { return nullptr; }
   lib = uplug_openLibrary(libName, status);
-  if(lib!=NULL && U_SUCCESS(*status)) {
-    UPlugEntrypoint *entrypoint = NULL;
+  if(lib!=nullptr && U_SUCCESS(*status)) {
+    UPlugEntrypoint *entrypoint = nullptr;
     entrypoint = (UPlugEntrypoint*)uprv_dlsym_func(lib, sym, status);
 
-    if(entrypoint!=NULL&&U_SUCCESS(*status)) {
+    if(entrypoint!=nullptr&&U_SUCCESS(*status)) {
       plug = uplug_initPlugFromEntrypointAndLibrary(entrypoint, config, lib, sym, status);
-      if(plug!=NULL&&U_SUCCESS(*status)) {
+      if(plug!=nullptr&&U_SUCCESS(*status)) {
         plug->lib = lib; /* plug takes ownership of library */
-        lib = NULL; /* library is now owned by plugin. */
+        lib = nullptr; /* library is now owned by plugin. */
       }
     } else {
       UErrorCode subStatus = U_ZERO_ERROR;
-      plug = uplug_initErrorPlug(libName,sym,config,"ERROR: Could not load entrypoint",(lib==NULL)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
+      plug = uplug_initErrorPlug(libName,sym,config,"ERROR: Could not load entrypoint",(lib==nullptr)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
     }
-    if(lib!=NULL) { /* still need to close the lib */
+    if(lib!=nullptr) { /* still need to close the lib */
       UErrorCode subStatus = U_ZERO_ERROR;
       uplug_closeLibrary(lib, &subStatus); /* don't care here */
     }
   } else {
     UErrorCode subStatus = U_ZERO_ERROR;
-    plug = uplug_initErrorPlug(libName,sym,config,"ERROR: could not load library",(lib==NULL)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
+    plug = uplug_initErrorPlug(libName,sym,config,"ERROR: could not load library",(lib==nullptr)?U_MISSING_RESOURCE_ERROR:*status,&subStatus);
   }
   return plug;
 }
@@ -616,8 +616,8 @@
 
 U_CAPI UPlugData* U_EXPORT2
 uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status) { 
-  UPlugData *plug = NULL;
-  if(U_FAILURE(*status)) { return NULL; }
+  UPlugData *plug = nullptr;
+  if(U_FAILURE(*status)) { return nullptr; }
   plug = uplug_initPlugFromLibrary(libName, sym, config, status);
   uplug_loadPlug(plug, status);
 
@@ -632,7 +632,7 @@
   return gCurrentLevel;
 }
 
-static UBool U_CALLCONV uplug_cleanup(void)
+static UBool U_CALLCONV uplug_cleanup()
 {
   int32_t i;
     
@@ -712,7 +712,7 @@
 #if U_ENABLE_DYLOAD && !UCONFIG_NO_FILE_IO
   return plugin_file;
 #else
-  return NULL;
+  return nullptr;
 #endif
 }
 
@@ -728,7 +728,7 @@
   const char *env = getenv("ICU_PLUGINS");
 
   if(U_FAILURE(*status)) return;
-  if(env != NULL) {
+  if(env != nullptr) {
     plugin_dir.append(env, -1, *status);
   }
   if(U_FAILURE(*status)) return;
@@ -791,7 +791,7 @@
 #ifdef __MVS__
     if (iscics()) /* 12 Nov 2011 JAM */
     {
-        f = NULL;
+        f = nullptr;
     }
     else
 #endif
@@ -799,9 +799,9 @@
         f = fopen(pluginFile.data(), "r");
     }
 
-    if(f != NULL) {
+    if(f != nullptr) {
       char linebuf[1024];
-      char *p, *libName=NULL, *symName=NULL, *config=NULL;
+      char *p, *libName=nullptr, *symName=nullptr, *config=nullptr;
       int32_t line = 0;
             
             
@@ -843,7 +843,7 @@
           }
                     
           /* chop whitespace at the end of the config */
-          if(config!=NULL&&*config!=0) {
+          if(config!=nullptr&&*config!=0) {
             p = config+strlen(config);
             while(p>config&&isspace((int)*(--p))) {
               *p=0;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -33,7 +33,7 @@
 
 class LoadedNormalizer2Impl : public Normalizer2Impl {
 public:
-    LoadedNormalizer2Impl() : memory(NULL), ownedTrie(NULL) {}
+    LoadedNormalizer2Impl() : memory(nullptr), ownedTrie(nullptr) {}
     virtual ~LoadedNormalizer2Impl();
 
     void load(const char *packageName, const char *name, UErrorCode &errorCode);
@@ -93,7 +93,7 @@
     int32_t offset=inIndexes[IX_NORM_TRIE_OFFSET];
     int32_t nextOffset=inIndexes[IX_EXTRA_DATA_OFFSET];
     ownedTrie=ucptrie_openFromBinary(UCPTRIE_TYPE_FAST, UCPTRIE_VALUE_BITS_16,
-                                     inBytes+offset, nextOffset-offset, NULL,
+                                     inBytes+offset, nextOffset-offset, nullptr,
                                      &errorCode);
     if(U_FAILURE(errorCode)) {
         return;
@@ -117,12 +117,12 @@
                               const char *name,
                               UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     LoadedNormalizer2Impl *impl=new LoadedNormalizer2Impl;
-    if(impl==NULL) {
+    if(impl==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     impl->load(packageName, name, errorCode);
     return createInstance(impl, errorCode);
@@ -143,19 +143,24 @@
 static Norm2AllModes *nfkc_cfSingleton;
 static icu::UInitOnce nfkc_cfInitOnce {};
 
-static UHashtable    *cache=NULL;
+static Norm2AllModes *nfkc_scfSingleton;
+static icu::UInitOnce nfkc_scfInitOnce {};
 
+static UHashtable    *cache=nullptr;
+
 // UInitOnce singleton initialization function
 static void U_CALLCONV initSingletons(const char *what, UErrorCode &errorCode) {
 #if !NORM2_HARDCODE_NFC_DATA
     if (uprv_strcmp(what, "nfc") == 0) {
-        nfcSingleton    = Norm2AllModes::createInstance(NULL, "nfc", errorCode);
+        nfcSingleton    = Norm2AllModes::createInstance(nullptr, "nfc", errorCode);
     } else
 #endif
     if (uprv_strcmp(what, "nfkc") == 0) {
-        nfkcSingleton    = Norm2AllModes::createInstance(NULL, "nfkc", errorCode);
+        nfkcSingleton    = Norm2AllModes::createInstance(nullptr, "nfkc", errorCode);
     } else if (uprv_strcmp(what, "nfkc_cf") == 0) {
-        nfkc_cfSingleton = Norm2AllModes::createInstance(NULL, "nfkc_cf", errorCode);
+        nfkc_cfSingleton = Norm2AllModes::createInstance(nullptr, "nfkc_cf", errorCode);
+    } else if (uprv_strcmp(what, "nfkc_scf") == 0) {
+        nfkc_scfSingleton = Norm2AllModes::createInstance(nullptr, "nfkc_scf", errorCode);
     } else {
         UPRV_UNREACHABLE_EXIT;   // Unknown singleton
     }
@@ -171,20 +176,24 @@
 static UBool U_CALLCONV uprv_loaded_normalizer2_cleanup() {
 #if !NORM2_HARDCODE_NFC_DATA
     delete nfcSingleton;
-    nfcSingleton = NULL;
+    nfcSingleton = nullptr;
     nfcInitOnce.reset();
 #endif
 
     delete nfkcSingleton;
-    nfkcSingleton = NULL;
+    nfkcSingleton = nullptr;
     nfkcInitOnce.reset();
 
     delete nfkc_cfSingleton;
-    nfkc_cfSingleton = NULL;
+    nfkc_cfSingleton = nullptr;
     nfkc_cfInitOnce.reset();
 
+    delete nfkc_scfSingleton;
+    nfkc_scfSingleton = nullptr;
+    nfkc_scfInitOnce.reset();
+
     uhash_close(cache);
-    cache=NULL;
+    cache=nullptr;
     return true;
 }
 
@@ -193,7 +202,7 @@
 #if !NORM2_HARDCODE_NFC_DATA
 const Norm2AllModes *
 Norm2AllModes::getNFCInstance(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) { return NULL; }
+    if(U_FAILURE(errorCode)) { return nullptr; }
     umtx_initOnce(nfcInitOnce, &initSingletons, "nfc", errorCode);
     return nfcSingleton;
 }
@@ -201,7 +210,7 @@
 
 const Norm2AllModes *
 Norm2AllModes::getNFKCInstance(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) { return NULL; }
+    if(U_FAILURE(errorCode)) { return nullptr; }
     umtx_initOnce(nfkcInitOnce, &initSingletons, "nfkc", errorCode);
     return nfkcSingleton;
 }
@@ -208,38 +217,45 @@
 
 const Norm2AllModes *
 Norm2AllModes::getNFKC_CFInstance(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) { return NULL; }
+    if(U_FAILURE(errorCode)) { return nullptr; }
     umtx_initOnce(nfkc_cfInitOnce, &initSingletons, "nfkc_cf", errorCode);
     return nfkc_cfSingleton;
 }
 
+const Norm2AllModes *
+Norm2AllModes::getNFKC_SCFInstance(UErrorCode &errorCode) {
+    if(U_FAILURE(errorCode)) { return nullptr; }
+    umtx_initOnce(nfkc_scfInitOnce, &initSingletons, "nfkc_scf", errorCode);
+    return nfkc_scfSingleton;
+}
+
 #if !NORM2_HARDCODE_NFC_DATA
 const Normalizer2 *
 Normalizer2::getNFCInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
+    return allModes!=nullptr ? &allModes->comp : nullptr;
 }
 
 const Normalizer2 *
 Normalizer2::getNFDInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->decomp : NULL;
+    return allModes!=nullptr ? &allModes->decomp : nullptr;
 }
 
 const Normalizer2 *Normalizer2Factory::getFCDInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcd : NULL;
+    return allModes!=nullptr ? &allModes->fcd : nullptr;
 }
 
 const Normalizer2 *Normalizer2Factory::getFCCInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcc : NULL;
+    return allModes!=nullptr ? &allModes->fcc : nullptr;
 }
 
 const Normalizer2Impl *
 Normalizer2Factory::getNFCImpl(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? allModes->impl : NULL;
+    return allModes!=nullptr ? allModes->impl : nullptr;
 }
 #endif
 
@@ -246,35 +262,41 @@
 const Normalizer2 *
 Normalizer2::getNFKCInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFKCInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
+    return allModes!=nullptr ? &allModes->comp : nullptr;
 }
 
 const Normalizer2 *
 Normalizer2::getNFKDInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFKCInstance(errorCode);
-    return allModes!=NULL ? &allModes->decomp : NULL;
+    return allModes!=nullptr ? &allModes->decomp : nullptr;
 }
 
 const Normalizer2 *
 Normalizer2::getNFKCCasefoldInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFKC_CFInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
+    return allModes!=nullptr ? &allModes->comp : nullptr;
 }
 
 const Normalizer2 *
+Normalizer2::getNFKCSimpleCasefoldInstance(UErrorCode &errorCode) {
+    const Norm2AllModes *allModes=Norm2AllModes::getNFKC_SCFInstance(errorCode);
+    return allModes!=nullptr ? &allModes->comp : nullptr;
+}
+
+const Normalizer2 *
 Normalizer2::getInstance(const char *packageName,
                          const char *name,
                          UNormalization2Mode mode,
                          UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
-    if(name==NULL || *name==0) {
+    if(name==nullptr || *name==0) {
         errorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
-    const Norm2AllModes *allModes=NULL;
-    if(packageName==NULL) {
+    const Norm2AllModes *allModes=nullptr;
+    if(packageName==nullptr) {
         if(0==uprv_strcmp(name, "nfc")) {
             allModes=Norm2AllModes::getNFCInstance(errorCode);
         } else if(0==uprv_strcmp(name, "nfkc")) {
@@ -281,36 +303,38 @@
             allModes=Norm2AllModes::getNFKCInstance(errorCode);
         } else if(0==uprv_strcmp(name, "nfkc_cf")) {
             allModes=Norm2AllModes::getNFKC_CFInstance(errorCode);
+        } else if(0==uprv_strcmp(name, "nfkc_scf")) {
+            allModes=Norm2AllModes::getNFKC_SCFInstance(errorCode);
         }
     }
-    if(allModes==NULL && U_SUCCESS(errorCode)) {
+    if(allModes==nullptr && U_SUCCESS(errorCode)) {
         {
             Mutex lock;
-            if(cache!=NULL) {
+            if(cache!=nullptr) {
                 allModes=(Norm2AllModes *)uhash_get(cache, name);
             }
         }
-        if(allModes==NULL) {
+        if(allModes==nullptr) {
             ucln_common_registerCleanup(UCLN_COMMON_LOADED_NORMALIZER2, uprv_loaded_normalizer2_cleanup);
             LocalPointer<Norm2AllModes> localAllModes(
                 Norm2AllModes::createInstance(packageName, name, errorCode));
             if(U_SUCCESS(errorCode)) {
                 Mutex lock;
-                if(cache==NULL) {
-                    cache=uhash_open(uhash_hashChars, uhash_compareChars, NULL, &errorCode);
+                if(cache==nullptr) {
+                    cache=uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &errorCode);
                     if(U_FAILURE(errorCode)) {
-                        return NULL;
+                        return nullptr;
                     }
                     uhash_setKeyDeleter(cache, uprv_free);
                     uhash_setValueDeleter(cache, deleteNorm2AllModes);
                 }
                 void *temp=uhash_get(cache, name);
-                if(temp==NULL) {
+                if(temp==nullptr) {
                     int32_t keyLength= static_cast<int32_t>(uprv_strlen(name)+1);
                     char *nameCopy=(char *)uprv_malloc(keyLength);
-                    if(nameCopy==NULL) {
+                    if(nameCopy==nullptr) {
                         errorCode=U_MEMORY_ALLOCATION_ERROR;
-                        return NULL;
+                        return nullptr;
                     }
                     uprv_memcpy(nameCopy, name, keyLength);
                     allModes=localAllModes.getAlias();
@@ -322,7 +346,7 @@
             }
         }
     }
-    if(allModes!=NULL && U_SUCCESS(errorCode)) {
+    if(allModes!=nullptr && U_SUCCESS(errorCode)) {
         switch(mode) {
         case UNORM2_COMPOSE:
             return &allModes->comp;
@@ -336,13 +360,13 @@
             break;  // do nothing
         }
     }
-    return NULL;
+    return nullptr;
 }
 
 const Normalizer2 *
 Normalizer2Factory::getInstance(UNormalizationMode mode, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     switch(mode) {
     case UNORM_NFD:
@@ -363,13 +387,13 @@
 const Normalizer2Impl *
 Normalizer2Factory::getNFKCImpl(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFKCInstance(errorCode);
-    return allModes!=NULL ? allModes->impl : NULL;
+    return allModes!=nullptr ? allModes->impl : nullptr;
 }
 
 const Normalizer2Impl *
 Normalizer2Factory::getNFKC_CFImpl(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFKC_CFInstance(errorCode);
-    return allModes!=NULL ? allModes->impl : NULL;
+    return allModes!=nullptr ? allModes->impl : nullptr;
 }
 
 U_NAMESPACE_END
@@ -394,6 +418,11 @@
 }
 
 U_CAPI const UNormalizer2 * U_EXPORT2
+unorm2_getNFKCSimpleCasefoldInstance(UErrorCode *pErrorCode) {
+    return (const UNormalizer2 *)Normalizer2::getNFKCSimpleCasefoldInstance(*pErrorCode);
+}
+
+U_CAPI const UNormalizer2 * U_EXPORT2
 unorm2_getInstance(const char *packageName,
                    const char *name,
                    UNormalization2Mode mode,

Modified: trunk/Build/source/libs/icu/icu-src/source/common/localefallback_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/localefallback_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/localefallback_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -11,418 +11,1123 @@
 //======================================================================
 // Default script table
 const char scriptCodeChars[] =
-    "Aghb\0Ahom\0Arab\0Armi\0Armn\0Avst\0Bamu\0Bass\0Beng\0Brah\0Cakm\0"
-    "Cans\0Cari\0Cham\0Cher\0Chrs\0Copt\0Cprt\0Cyrl\0Deva\0Egyp\0Ethi\0"
-    "Geor\0Gong\0Gonm\0Goth\0Grek\0Gujr\0Guru\0Hans\0Hant\0Hebr\0Hluw\0"
-    "Hmnp\0Ital\0Jpan\0Kali\0Kana\0Kawi\0Khar\0Khmr\0Kits\0Knda\0Kore\0"
-    "Lana\0Laoo\0Lepc\0Lina\0Lisu\0Lyci\0Lydi\0Mand\0Mani\0Medf\0Merc\0"
-    "Mlym\0Mong\0Mroo\0Mymr\0Narb\0Nkoo\0Nshu\0Ogam\0Olck\0Orkh\0Orya\0"
-    "Osge\0Ougr\0Pauc\0Phli\0Phnx\0Plrd\0Prti\0Rohg\0Runr\0Samr\0Sarb\0"
-    "Saur\0Sgnw\0Sinh\0Sogd\0Sora\0Soyo\0Syrc\0Tale\0Talu\0Taml\0Tang\0"
-    "Tavt\0Telu\0Tfng\0Thaa\0Thai\0Tibt\0Tnsa\0Toto\0Ugar\0Vaii\0Wcho\0"
-    "Xpeo\0Xsux\0Yiii\0";
+    "Aghb\0Ahom\0Arab\0Armi\0Armn\0Avst\0Bamu\0Bass\0Batk\0Beng\0Bopo\0"
+    "Brah\0Cakm\0Cans\0Cari\0Cham\0Cher\0Chrs\0Copt\0Cprt\0Cyrl\0Deva\0"
+    "Egyp\0Elym\0Ethi\0Geor\0Gong\0Gonm\0Goth\0Gran\0Grek\0Gujr\0Guru\0"
+    "Hang\0Hani\0Hans\0Hant\0Hebr\0Hluw\0Hmnp\0Ital\0Java\0Jpan\0Kali\0"
+    "Kana\0Kawi\0Khar\0Khmr\0Kits\0Knda\0Kore\0Lana\0Laoo\0Lepc\0Lina\0"
+    "Linb\0Lisu\0Lyci\0Lydi\0Mand\0Mani\0Marc\0Medf\0Merc\0Mlym\0Modi\0"
+    "Mong\0Mroo\0Mtei\0Mymr\0Narb\0Newa\0Nkoo\0Nshu\0Ogam\0Olck\0Orkh\0"
+    "Orya\0Osge\0Pauc\0Phli\0Phnx\0Plrd\0Prti\0Rjng\0Rohg\0Runr\0Samr\0"
+    "Sarb\0Saur\0Sgnw\0Sinh\0Sogd\0Sora\0Soyo\0Syrc\0Tagb\0Takr\0Tale\0"
+    "Talu\0Taml\0Tang\0Tavt\0Telu\0Tfng\0Thaa\0Thai\0Tibt\0Tnsa\0Toto\0"
+    "Ugar\0Vaii\0Wcho\0Xpeo\0Xsux\0Yiii\0";
 
 const char dsLocaleIDChars[] =
-    "ab\0abq\0adp\0ady\0ae\0aeb\0aho\0ajt\0akk\0alt\0am\0apc\0apd\0"
-    "ar\0arc\0arq\0ars\0ary\0arz\0as\0ase\0av\0avl\0awa\0az_IQ\0az_IR\0"
-    "az_RU\0ba\0bal\0bap\0bax\0bcq\0be\0bej\0bfq\0bft\0bfy\0bg\0bgc\0"
-    "bgn\0bgx\0bhb\0bhi\0bho\0bji\0bjj\0blt\0bn\0bo\0bpy\0bqi\0bra\0"
-    "brh\0brx\0bsq\0bst\0btv\0bua\0byn\0ccp\0ce\0chm\0chr\0cja\0cjm\0"
-    "ckb\0cmg\0cop\0cr\0crh\0crk\0crl\0csw\0ctd\0cu\0cv\0dar\0dcc\0"
-    "dgl\0dmf\0doi\0drh\0drs\0dty\0dv\0dz\0egy\0eky\0el\0esg\0ett\0"
-    "fa\0fia\0fub\0gan\0gbm\0gbz\0gez\0ggn\0gjk\0gju\0glk\0gmv\0gof\0"
-    "gom\0gon\0got\0grc\0grt\0gu\0gvr\0gwc\0gwt\0ha_CM\0ha_SD\0hak\0"
-    "haz\0hdy\0he\0hi\0hlu\0hmd\0hnd\0hne\0hnj\0hno\0hoc\0hoj\0hsn\0"
-    "hy\0ii\0inh\0iu\0iw\0ja\0ji\0jml\0ka\0kaa\0kaw\0kbd\0kby\0kdt\0"
-    "kfr\0kfy\0khb\0khn\0kht\0khw\0kjg\0kk\0kk_AF\0kk_CN\0kk_IR\0kk_MN\0"
-    "km\0kn\0ko\0koi\0kok\0kqy\0krc\0kru\0ks\0ktb\0ku_LB\0kum\0kv\0"
-    "kvx\0kxc\0kxl\0kxm\0kxp\0ky\0ky_CN\0kzh\0lab\0lad\0lah\0lbe\0"
-    "lcp\0lep\0lez\0lif\0lis\0lki\0lmn\0lo\0lrc\0luz\0lwl\0lzh\0mag\0"
-    "mai\0man_GN\0mde\0mdf\0mdx\0mfa\0mgp\0mk\0mki\0ml\0mn\0mn_CN\0"
-    "mni\0mnw\0mr\0mrd\0mrj\0mro\0ms_CC\0mtr\0mvy\0mwr\0mww\0my\0mym\0"
-    "myv\0myz\0mzn\0nan\0ne\0new\0nnp\0nod\0noe\0non\0nqo\0nsk\0nst\0"
-    "oj\0ojs\0or\0oru\0os\0osa\0ota\0otk\0oui\0pa\0pa_PK\0pal\0peo\0"
-    "phl\0phn\0pka\0pnt\0ppa\0pra\0prd\0ps\0raj\0rhg\0rif\0rjs\0rkt\0"
-    "rmt\0ru\0rue\0ryu\0sa\0sah\0sat\0saz\0sck\0scl\0sd\0sd_IN\0sdh\0"
-    "sga\0sgw\0shi\0shn\0shu\0si\0skr\0smp\0sog\0sou\0sr\0srb\0srx\0"
-    "swb\0swv\0syl\0syr\0ta\0taj\0tcy\0tdd\0tdg\0tdh\0te\0tg\0tg_PK\0"
-    "th\0thl\0thq\0thr\0ti\0tig\0tkt\0trw\0tsd\0tsf\0tsj\0tt\0tts\0"
-    "txg\0txo\0tyv\0udi\0udm\0ug\0ug_KZ\0ug_MN\0uga\0uk\0unr\0unr_NP\0"
-    "unx\0ur\0uz_AF\0uz_CN\0vai\0wal\0wbq\0wbr\0wni\0wsg\0wtm\0wuu\0"
-    "xco\0xcr\0xlc\0xld\0xmf\0xmn\0xmr\0xna\0xnr\0xpr\0xsa\0xsr\0yi\0"
-    "yue\0yue_CN\0zdj\0zgh\0zh\0zh_AU\0zh_BN\0zh_GB\0zh_GF\0zh_HK\0"
-    "zh_ID\0zh_MO\0zh_PA\0zh_PF\0zh_PH\0zh_SR\0zh_TH\0zh_TW\0zh_US\0"
-    "zh_VN\0zhx\0zkt\0";
+    "aaf\0aao\0aat\0ab\0abh\0abl\0abv\0acm\0acq\0acw\0acx\0adf\0adx\0"
+    "ady\0ae\0aeb\0aec\0aee\0aeq\0afb\0agi\0agj\0agx\0ahg\0aho\0ahr\0"
+    "aib\0aij\0ain\0aio\0aiq\0ajp\0akk\0akv\0alk\0all\0alr\0alt\0alw\0"
+    "am\0ams\0amw\0ani\0anp\0anr\0anu\0aot\0apc\0apd\0aph\0aqc\0ar\0"
+    "arc\0arq\0ars\0ary\0arz\0as\0ase\0ask\0atn\0atv\0auj\0auz\0av\0"
+    "avd\0avl\0awa\0awn\0axm\0ayh\0ayl\0ayn\0ayp\0az_IQ\0az_IR\0az_RU\0"
+    "azb\0ba\0bal\0bap\0bax\0bbl\0bcq\0bdv\0bdz\0be\0bee\0bej\0bfb\0"
+    "bfq\0bft\0bfu\0bfw\0bfy\0bfz\0bg\0bgc\0bgd\0bgn\0bgp\0bgq\0bgw\0"
+    "bgx\0bha\0bhb\0bhd\0bhe\0bhh\0bhi\0bhj\0bhm\0bhn\0bho\0bht\0bhu\0"
+    "biy\0bjf\0bjj\0bjm\0blk\0blt\0bmj\0bn\0bns\0bo\0bph\0bpx\0bpy\0"
+    "bqi\0bra\0brb\0brd\0brh\0brk\0brv\0brx\0bsh\0bsk\0bsq\0bst\0btd\0"
+    "btm\0btv\0bua\0bwe\0bxm\0bxu\0byh\0byn\0byw\0bzi\0cbn\0ccp\0cde\0"
+    "cdh\0cdi\0cdj\0cdm\0cdo\0cdz\0ce\0cgk\0chg\0chm\0chr\0chx\0cih\0"
+    "cja\0cji\0cjm\0cjy\0ckb\0ckt\0clh\0clw\0cmg\0cna\0cnp\0cog\0cop\0"
+    "cpg\0cr\0crh\0crj\0crk\0crl\0crm\0csh\0csp\0csw\0ctd\0ctg\0ctn\0"
+    "ctt\0cu\0cuu\0cv\0czh\0czk\0daq\0dar\0dcc\0ddo\0def\0deh\0der\0"
+    "dhi\0dhn\0dho\0dhw\0dka\0dlg\0dmf\0dmk\0dml\0dng\0dnu\0dnv\0doi\0"
+    "dox\0dre\0drq\0drs\0dry\0dso\0dty\0dub\0duh\0dus\0dv\0dwk\0dwz\0"
+    "dz\0dzl\0ecr\0ecy\0egy\0eky\0el\0emg\0emu\0enf\0enh\0era\0esg\0"
+    "esh\0ett\0eve\0evn\0fa\0fay\0faz\0fia\0fmu\0fub\0gan\0gaq\0gas\0"
+    "gau\0gbj\0gbk\0gbl\0gbm\0gbz\0gdb\0gdo\0gdx\0gez\0ggg\0gha\0ghe\0"
+    "ghr\0ght\0gig\0gin\0gjk\0gju\0gld\0glh\0glk\0gmv\0gmy\0goe\0gof\0"
+    "gok\0gom\0gon\0got\0gra\0grc\0grt\0gru\0gu\0gvr\0gwc\0gwf\0gwt\0"
+    "gyo\0gzi\0ha_CM\0ha_SD\0hac\0hak\0har\0haz\0hbo\0hdy\0he\0hi\0"
+    "hii\0hit\0hkh\0hlb\0hlu\0hmd\0hmj\0hmq\0hnd\0hne\0hnj\0hnj_AU\0"
+    "hnj_CN\0hnj_FR\0hnj_GF\0hnj_LA\0hnj_MM\0hnj_SR\0hnj_TH\0hnj_VN\0"
+    "hno\0hoc\0hoh\0hoj\0how\0hoy\0hpo\0hrt\0hrz\0hsn\0hss\0htx\0hut\0"
+    "huy\0huz\0hy\0hyw\0ii\0imy\0inh\0int\0ior\0iru\0isk\0itk\0itl\0"
+    "iu\0iw\0ja\0jad\0jat\0jbe\0jbn\0jct\0jda\0jdg\0jdt\0jee\0jge\0"
+    "ji\0jje\0jkm\0jml\0jna\0jnd\0jnl\0jns\0jog\0jpa\0jpr\0jrb\0jrb_MA\0"
+    "jul\0jun\0juy\0jya\0jye\0ka\0kaa\0kap\0kaw\0kbd\0kbu\0kby\0kca\0"
+    "kdq\0kdt\0ket\0kex\0key\0kfa\0kfb\0kfc\0kfd\0kfe\0kfh\0kfi\0kfk\0"
+    "kfm\0kfp\0kfq\0kfr\0kfs\0kfx\0kfy\0kgj\0kgy\0khb\0khf\0khg\0khn\0"
+    "kht\0khv\0khw\0kif\0kim\0kip\0kjg\0kjh\0kjl\0kjo\0kjp\0kjt\0kk\0"
+    "kk_AF\0kk_CN\0kk_IR\0kk_MN\0kkf\0kkh\0kkt\0kle\0klj\0klr\0km\0"
+    "kmj\0kmz\0kn\0ko\0koi\0kok\0kpt\0kpy\0kqd\0kqy\0kra\0krc\0krk\0"
+    "krr\0kru\0krv\0ks\0ksu\0ksw\0ksz\0ktb\0ktl\0ktp\0ku_LB\0kuf\0"
+    "kum\0kv\0kva\0kvq\0kvt\0kvx\0kvy\0kxf\0kxk\0kxm\0kxp\0ky\0ky_CN\0"
+    "kyu\0kyv\0kyw\0lab\0lad\0lae\0lah\0lbc\0lbe\0lbf\0lbj\0lbm\0lbo\0"
+    "lbr\0lcp\0lep\0lez\0lhm\0lhs\0lif\0lis\0lkh\0lki\0lmh\0lmn\0lo\0"
+    "loy\0lpo\0lrc\0lrk\0lrl\0lsa\0lsd\0lss\0luk\0luu\0luv\0luz\0lwl\0"
+    "lwm\0lya\0lzh\0mag\0mai\0man_GN\0mby\0mde\0mdf\0mdx\0mdy\0mfa\0"
+    "mfi\0mgp\0mhj\0mid\0mjl\0mjq\0mjr\0mjt\0mju\0mjv\0mjz\0mk\0mkb\0"
+    "mke\0mki\0mkm\0ml\0mlf\0mn\0mn_CN\0mni\0mnj\0mns\0mnw\0mpz\0mr\0"
+    "mra\0mrd\0mrj\0mro\0mrr\0ms_CC\0mtm\0mtr\0mud\0muk\0mut\0muv\0"
+    "muz\0mvf\0mvy\0mvz\0mwr\0mwt\0mww\0my\0mym\0myv\0myz\0mzn\0nan\0"
+    "nao\0ncd\0ncq\0ndf\0ne\0neg\0neh\0nei\0new\0ngt\0nio\0nit\0niv\0"
+    "nli\0nlm\0nlx\0nmm\0nnp\0nod\0noe\0nog\0noi\0non\0nos\0npb\0nqo\0"
+    "nsd\0nsf\0nsk\0nst\0nsv\0nty\0ntz\0nwc\0nwx\0nyl\0nyq\0oaa\0oac\0"
+    "oar\0oav\0obm\0obr\0odk\0oht\0oj\0ojs\0okm\0oko\0okz\0ola\0ole\0"
+    "omk\0omp\0omr\0oon\0or\0ort\0oru\0orv\0os\0osa\0osc\0osi\0ota\0"
+    "otb\0otk\0oty\0pa\0pa_PK\0pal\0paq\0pbt\0pcb\0pce\0pcf\0pcg\0"
+    "pch\0pci\0pcj\0peg\0peo\0pgd\0pgg\0pgl\0pgn\0phd\0phk\0phl\0phn\0"
+    "pho\0phr\0pht\0phv\0phw\0pi\0pka\0pkr\0plk\0pll\0pmh\0pnt\0pra\0"
+    "prc\0prd\0prp\0prt\0prx\0ps\0psh\0psi\0pst\0pum\0pwo\0pwr\0pww\0"
+    "pyx\0qxq\0raa\0rab\0raf\0rah\0raj\0rav\0rbb\0rdb\0rei\0rhg\0rji\0"
+    "rjs\0rka\0rki\0rkt\0rmi\0rmt\0rmz\0rom_BG\0rsk\0rtw\0ru\0rue\0"
+    "rut\0rwr\0ryu\0sa\0sah\0sam\0sat\0saz\0sbn\0sbu\0sck\0scl\0scl_IN\0"
+    "scp\0sct\0scu\0scx\0sd\0sd_IN\0sdb\0sdf\0sdg\0sdh\0sds\0sel\0"
+    "sfm\0sga\0sgh\0sgj\0sgr\0sgt\0sgw\0sgy\0shd\0shi\0shm\0shn\0shu\0"
+    "shv\0si\0sia\0sip\0siy\0siz\0sjd\0sjp\0sjt\0skb\0skj\0skr\0slq\0"
+    "smh\0smp\0smu\0smy\0soa\0sog\0soi\0sou\0spt\0spv\0sqo\0sqq\0sqt\0"
+    "sr\0srb\0srh\0srx\0srz\0ssh\0sss\0sts\0stv\0sty\0suz\0sva\0swb\0"
+    "swi\0swv\0syc\0syl\0syn\0syr\0syw\0ta\0tab\0taj\0tbk\0tcn\0tco\0"
+    "tcx\0tcy\0tda\0tdb\0tdd\0tdg\0tdh\0te\0tes\0tg\0tg_PK\0tge\0tgf\0"
+    "th\0the\0thf\0thi\0thl\0thm\0thq\0thr\0ths\0ti\0tig\0tij\0tin\0"
+    "tjl\0tjo\0tkb\0tks\0tkt\0tmk\0tmr\0tnv\0tov\0tpu\0tra\0trg\0trm\0"
+    "trw\0tsd\0tsj\0tt\0tth\0tto\0tts\0tvn\0twm\0txg\0txo\0tyr\0tyv\0"
+    "ude\0udg\0udi\0udm\0ug\0ug_KZ\0ug_MN\0uga\0ugh\0ugo\0uk\0uki\0"
+    "ulc\0unr\0unr_NP\0unx\0ur\0urk\0ush\0uum\0uz_AF\0uz_CN\0uzs\0"
+    "vaa\0vaf\0vah\0vai\0vas\0vav\0vay\0vgr\0vmd\0vmh\0wal\0wbk\0wbq\0"
+    "wbr\0wlo\0wme\0wne\0wni\0wsg\0wsv\0wtm\0wuu\0xal\0xan\0xas\0xco\0"
+    "xcr\0xdq\0xhe\0xhm\0xis\0xka\0xkc\0xkj\0xkp\0xlc\0xld\0xly\0xmf\0"
+    "xmn\0xmr\0xna\0xnr\0xpg\0xpi\0xpm\0xpr\0xrm\0xrn\0xsa\0xsr\0xss\0"
+    "xub\0xuj\0xve\0xvi\0xwo\0xzh\0yai\0ybh\0ybi\0ydg\0yea\0yej\0yeu\0"
+    "ygp\0yhd\0yi\0yig\0yih\0yiv\0ykg\0yna\0ynk\0yoi\0yoy\0yrk\0ysd\0"
+    "ysn\0ysp\0ysr\0ysy\0yud\0yue\0yue_CN\0yug\0yux\0ywq\0ywu\0zau\0"
+    "zba\0zch\0zdj\0zeh\0zen\0zgb\0zgh\0zgm\0zgn\0zh\0zh_AU\0zh_BN\0"
+    "zh_GB\0zh_GF\0zh_HK\0zh_ID\0zh_MO\0zh_PA\0zh_PF\0zh_PH\0zh_SR\0"
+    "zh_TH\0zh_TW\0zh_US\0zh_VN\0zhd\0zhx\0zkb\0zko\0zkt\0zkz\0zlj\0"
+    "zln\0zlq\0zqe\0zrp\0zum\0zyg\0zyn\0zzj\0";
 
 const int32_t defaultScriptTable[] = {
-    0, 90,  // ab -> Cyrl
-    3, 90,  // abq -> Cyrl
-    7, 465,  // adp -> Tibt
-    11, 90,  // ady -> Cyrl
-    15, 25,  // ae -> Avst
-    18, 10,  // aeb -> Arab
-    22, 5,  // aho -> Ahom
-    26, 10,  // ajt -> Arab
-    30, 500,  // akk -> Xsux
-    34, 90,  // alt -> Cyrl
-    38, 105,  // am -> Ethi
-    41, 10,  // apc -> Arab
-    45, 10,  // apd -> Arab
-    49, 10,  // ar -> Arab
-    52, 15,  // arc -> Armi
-    56, 10,  // arq -> Arab
-    60, 10,  // ars -> Arab
-    64, 10,  // ary -> Arab
-    68, 10,  // arz -> Arab
-    72, 40,  // as -> Beng
-    75, 390,  // ase -> Sgnw
-    79, 90,  // av -> Cyrl
-    82, 10,  // avl -> Arab
-    86, 95,  // awa -> Deva
-    90, 10,  // az_IQ -> Arab
-    96, 10,  // az_IR -> Arab
-    102, 90,  // az_RU -> Cyrl
-    108, 90,  // ba -> Cyrl
-    111, 10,  // bal -> Arab
-    115, 95,  // bap -> Deva
-    119, 30,  // bax -> Bamu
-    123, 105,  // bcq -> Ethi
-    127, 90,  // be -> Cyrl
-    130, 10,  // bej -> Arab
-    134, 430,  // bfq -> Taml
-    138, 10,  // bft -> Arab
-    142, 95,  // bfy -> Deva
-    146, 90,  // bg -> Cyrl
-    149, 95,  // bgc -> Deva
-    153, 10,  // bgn -> Arab
-    157, 130,  // bgx -> Grek
-    161, 95,  // bhb -> Deva
-    165, 95,  // bhi -> Deva
-    169, 95,  // bho -> Deva
-    173, 105,  // bji -> Ethi
-    177, 95,  // bjj -> Deva
-    181, 440,  // blt -> Tavt
-    185, 40,  // bn -> Beng
-    188, 465,  // bo -> Tibt
-    191, 40,  // bpy -> Beng
-    195, 10,  // bqi -> Arab
-    199, 95,  // bra -> Deva
-    203, 10,  // brh -> Arab
-    207, 95,  // brx -> Deva
-    211, 35,  // bsq -> Bass
-    215, 105,  // bst -> Ethi
-    219, 95,  // btv -> Deva
-    223, 90,  // bua -> Cyrl
-    227, 105,  // byn -> Ethi
-    231, 50,  // ccp -> Cakm
-    235, 90,  // ce -> Cyrl
-    238, 90,  // chm -> Cyrl
-    242, 70,  // chr -> Cher
-    246, 10,  // cja -> Arab
-    250, 65,  // cjm -> Cham
-    254, 10,  // ckb -> Arab
-    258, 410,  // cmg -> Soyo
-    262, 80,  // cop -> Copt
-    266, 55,  // cr -> Cans
-    269, 90,  // crh -> Cyrl
-    273, 55,  // crk -> Cans
-    277, 55,  // crl -> Cans
-    281, 55,  // csw -> Cans
-    285, 340,  // ctd -> Pauc
-    289, 90,  // cu -> Cyrl
-    292, 90,  // cv -> Cyrl
-    295, 90,  // dar -> Cyrl
-    299, 10,  // dcc -> Arab
-    303, 10,  // dgl -> Arab
-    307, 265,  // dmf -> Medf
-    311, 95,  // doi -> Deva
-    315, 280,  // drh -> Mong
-    319, 105,  // drs -> Ethi
-    323, 95,  // dty -> Deva
-    327, 455,  // dv -> Thaa
-    330, 465,  // dz -> Tibt
-    333, 100,  // egy -> Egyp
-    337, 180,  // eky -> Kali
-    341, 130,  // el -> Grek
-    344, 120,  // esg -> Gonm
-    348, 170,  // ett -> Ital
-    352, 10,  // fa -> Arab
-    355, 10,  // fia -> Arab
-    359, 10,  // fub -> Arab
-    363, 145,  // gan -> Hans
-    367, 95,  // gbm -> Deva
-    371, 10,  // gbz -> Arab
-    375, 105,  // gez -> Ethi
-    379, 95,  // ggn -> Deva
-    383, 10,  // gjk -> Arab
-    387, 10,  // gju -> Arab
-    391, 10,  // glk -> Arab
-    395, 105,  // gmv -> Ethi
-    399, 105,  // gof -> Ethi
-    403, 95,  // gom -> Deva
-    407, 445,  // gon -> Telu
-    411, 125,  // got -> Goth
-    415, 85,  // grc -> Cprt
-    419, 40,  // grt -> Beng
-    423, 135,  // gu -> Gujr
-    426, 95,  // gvr -> Deva
-    430, 10,  // gwc -> Arab
-    434, 10,  // gwt -> Arab
-    438, 10,  // ha_CM -> Arab
-    444, 10,  // ha_SD -> Arab
-    450, 145,  // hak -> Hans
-    454, 10,  // haz -> Arab
-    458, 105,  // hdy -> Ethi
-    462, 155,  // he -> Hebr
-    465, 95,  // hi -> Deva
-    468, 160,  // hlu -> Hluw
-    472, 355,  // hmd -> Plrd
-    476, 10,  // hnd -> Arab
-    480, 95,  // hne -> Deva
-    484, 165,  // hnj -> Hmnp
-    488, 10,  // hno -> Arab
-    492, 95,  // hoc -> Deva
-    496, 95,  // hoj -> Deva
-    500, 145,  // hsn -> Hans
-    504, 20,  // hy -> Armn
-    507, 505,  // ii -> Yiii
-    510, 90,  // inh -> Cyrl
-    514, 55,  // iu -> Cans
-    517, 155,  // iw -> Hebr
-    520, 175,  // ja -> Jpan
-    523, 155,  // ji -> Hebr
-    526, 95,  // jml -> Deva
-    530, 110,  // ka -> Geor
-    533, 90,  // kaa -> Cyrl
-    537, 190,  // kaw -> Kawi
-    541, 90,  // kbd -> Cyrl
-    545, 10,  // kby -> Arab
-    549, 460,  // kdt -> Thai
-    553, 95,  // kfr -> Deva
-    557, 95,  // kfy -> Deva
-    561, 425,  // khb -> Talu
-    565, 95,  // khn -> Deva
-    569, 290,  // kht -> Mymr
-    573, 10,  // khw -> Arab
-    577, 225,  // kjg -> Laoo
-    581, 90,  // kk -> Cyrl
-    584, 10,  // kk_AF -> Arab
-    590, 10,  // kk_CN -> Arab
-    596, 10,  // kk_IR -> Arab
-    602, 10,  // kk_MN -> Arab
-    608, 200,  // km -> Khmr
-    611, 210,  // kn -> Knda
-    614, 215,  // ko -> Kore
-    617, 90,  // koi -> Cyrl
-    621, 95,  // kok -> Deva
-    625, 105,  // kqy -> Ethi
-    629, 90,  // krc -> Cyrl
-    633, 95,  // kru -> Deva
-    637, 10,  // ks -> Arab
-    640, 105,  // ktb -> Ethi
-    644, 10,  // ku_LB -> Arab
-    650, 90,  // kum -> Cyrl
-    654, 90,  // kv -> Cyrl
-    657, 10,  // kvx -> Arab
-    661, 105,  // kxc -> Ethi
-    665, 95,  // kxl -> Deva
-    669, 460,  // kxm -> Thai
-    673, 10,  // kxp -> Arab
-    677, 90,  // ky -> Cyrl
-    680, 10,  // ky_CN -> Arab
-    686, 10,  // kzh -> Arab
-    690, 235,  // lab -> Lina
-    694, 155,  // lad -> Hebr
-    698, 10,  // lah -> Arab
-    702, 90,  // lbe -> Cyrl
-    706, 460,  // lcp -> Thai
-    710, 230,  // lep -> Lepc
-    714, 90,  // lez -> Cyrl
-    718, 95,  // lif -> Deva
-    722, 240,  // lis -> Lisu
-    726, 10,  // lki -> Arab
-    730, 445,  // lmn -> Telu
-    734, 225,  // lo -> Laoo
-    737, 10,  // lrc -> Arab
-    741, 10,  // luz -> Arab
-    745, 460,  // lwl -> Thai
-    749, 145,  // lzh -> Hans
-    753, 95,  // mag -> Deva
-    757, 95,  // mai -> Deva
-    761, 300,  // man_GN -> Nkoo
-    768, 10,  // mde -> Arab
-    772, 90,  // mdf -> Cyrl
-    776, 105,  // mdx -> Ethi
-    780, 10,  // mfa -> Arab
-    784, 95,  // mgp -> Deva
-    788, 90,  // mk -> Cyrl
-    791, 10,  // mki -> Arab
-    795, 275,  // ml -> Mlym
-    798, 90,  // mn -> Cyrl
-    801, 280,  // mn_CN -> Mong
-    807, 40,  // mni -> Beng
-    811, 290,  // mnw -> Mymr
-    815, 95,  // mr -> Deva
-    818, 95,  // mrd -> Deva
-    822, 90,  // mrj -> Cyrl
-    826, 285,  // mro -> Mroo
-    830, 10,  // ms_CC -> Arab
-    836, 95,  // mtr -> Deva
-    840, 10,  // mvy -> Arab
-    844, 95,  // mwr -> Deva
-    848, 165,  // mww -> Hmnp
-    852, 290,  // my -> Mymr
-    855, 105,  // mym -> Ethi
-    859, 90,  // myv -> Cyrl
-    863, 255,  // myz -> Mand
-    867, 10,  // mzn -> Arab
-    871, 145,  // nan -> Hans
-    875, 95,  // ne -> Deva
-    878, 95,  // new -> Deva
-    882, 490,  // nnp -> Wcho
-    886, 220,  // nod -> Lana
-    890, 95,  // noe -> Deva
-    894, 370,  // non -> Runr
-    898, 300,  // nqo -> Nkoo
-    902, 55,  // nsk -> Cans
-    906, 470,  // nst -> Tnsa
-    910, 55,  // oj -> Cans
-    913, 55,  // ojs -> Cans
-    917, 325,  // or -> Orya
-    920, 10,  // oru -> Arab
-    924, 90,  // os -> Cyrl
-    927, 330,  // osa -> Osge
-    931, 10,  // ota -> Arab
-    935, 320,  // otk -> Orkh
-    939, 335,  // oui -> Ougr
-    943, 140,  // pa -> Guru
-    946, 10,  // pa_PK -> Arab
-    952, 345,  // pal -> Phli
-    956, 495,  // peo -> Xpeo
-    960, 10,  // phl -> Arab
-    964, 350,  // phn -> Phnx
-    968, 45,  // pka -> Brah
-    972, 130,  // pnt -> Grek
-    976, 95,  // ppa -> Deva
-    980, 195,  // pra -> Khar
-    984, 10,  // prd -> Arab
-    988, 10,  // ps -> Arab
-    991, 95,  // raj -> Deva
-    995, 365,  // rhg -> Rohg
-    999, 450,  // rif -> Tfng
-    1003, 95,  // rjs -> Deva
-    1007, 40,  // rkt -> Beng
-    1011, 10,  // rmt -> Arab
-    1015, 90,  // ru -> Cyrl
-    1018, 90,  // rue -> Cyrl
-    1022, 185,  // ryu -> Kana
-    1026, 95,  // sa -> Deva
-    1029, 90,  // sah -> Cyrl
-    1033, 315,  // sat -> Olck
-    1037, 385,  // saz -> Saur
-    1041, 95,  // sck -> Deva
-    1045, 10,  // scl -> Arab
-    1049, 10,  // sd -> Arab
-    1052, 95,  // sd_IN -> Deva
-    1058, 10,  // sdh -> Arab
-    1062, 310,  // sga -> Ogam
-    1066, 105,  // sgw -> Ethi
-    1070, 450,  // shi -> Tfng
-    1074, 290,  // shn -> Mymr
-    1078, 10,  // shu -> Arab
-    1082, 395,  // si -> Sinh
-    1085, 10,  // skr -> Arab
-    1089, 375,  // smp -> Samr
-    1093, 400,  // sog -> Sogd
-    1097, 460,  // sou -> Thai
-    1101, 90,  // sr -> Cyrl
-    1104, 405,  // srb -> Sora
-    1108, 95,  // srx -> Deva
-    1112, 10,  // swb -> Arab
-    1116, 95,  // swv -> Deva
-    1120, 40,  // syl -> Beng
-    1124, 415,  // syr -> Syrc
-    1128, 430,  // ta -> Taml
-    1131, 95,  // taj -> Deva
-    1135, 210,  // tcy -> Knda
-    1139, 420,  // tdd -> Tale
-    1143, 95,  // tdg -> Deva
-    1147, 95,  // tdh -> Deva
-    1151, 445,  // te -> Telu
-    1154, 90,  // tg -> Cyrl
-    1157, 10,  // tg_PK -> Arab
-    1163, 460,  // th -> Thai
-    1166, 95,  // thl -> Deva
-    1170, 95,  // thq -> Deva
-    1174, 95,  // thr -> Deva
-    1178, 105,  // ti -> Ethi
-    1181, 105,  // tig -> Ethi
-    1185, 95,  // tkt -> Deva
-    1189, 10,  // trw -> Arab
-    1193, 130,  // tsd -> Grek
-    1197, 95,  // tsf -> Deva
-    1201, 465,  // tsj -> Tibt
-    1205, 90,  // tt -> Cyrl
-    1208, 460,  // tts -> Thai
-    1212, 435,  // txg -> Tang
-    1216, 475,  // txo -> Toto
-    1220, 90,  // tyv -> Cyrl
-    1224, 0,  // udi -> Aghb
-    1228, 90,  // udm -> Cyrl
-    1232, 10,  // ug -> Arab
-    1235, 90,  // ug_KZ -> Cyrl
-    1241, 90,  // ug_MN -> Cyrl
-    1247, 480,  // uga -> Ugar
-    1251, 90,  // uk -> Cyrl
-    1254, 40,  // unr -> Beng
-    1258, 95,  // unr_NP -> Deva
-    1265, 40,  // unx -> Beng
-    1269, 10,  // ur -> Arab
-    1272, 10,  // uz_AF -> Arab
-    1278, 90,  // uz_CN -> Cyrl
-    1284, 485,  // vai -> Vaii
-    1288, 105,  // wal -> Ethi
-    1292, 445,  // wbq -> Telu
-    1296, 95,  // wbr -> Deva
-    1300, 10,  // wni -> Arab
-    1304, 115,  // wsg -> Gong
-    1308, 95,  // wtm -> Deva
-    1312, 145,  // wuu -> Hans
-    1316, 75,  // xco -> Chrs
-    1320, 60,  // xcr -> Cari
-    1324, 245,  // xlc -> Lyci
-    1328, 250,  // xld -> Lydi
-    1332, 110,  // xmf -> Geor
-    1336, 260,  // xmn -> Mani
-    1340, 270,  // xmr -> Merc
-    1344, 295,  // xna -> Narb
-    1348, 95,  // xnr -> Deva
-    1352, 360,  // xpr -> Prti
-    1356, 380,  // xsa -> Sarb
-    1360, 95,  // xsr -> Deva
-    1364, 155,  // yi -> Hebr
-    1367, 150,  // yue -> Hant
-    1371, 145,  // yue_CN -> Hans
-    1378, 10,  // zdj -> Arab
-    1382, 450,  // zgh -> Tfng
-    1386, 145,  // zh -> Hans
-    1389, 150,  // zh_AU -> Hant
-    1395, 150,  // zh_BN -> Hant
-    1401, 150,  // zh_GB -> Hant
-    1407, 150,  // zh_GF -> Hant
-    1413, 150,  // zh_HK -> Hant
-    1419, 150,  // zh_ID -> Hant
-    1425, 150,  // zh_MO -> Hant
-    1431, 150,  // zh_PA -> Hant
-    1437, 150,  // zh_PF -> Hant
-    1443, 150,  // zh_PH -> Hant
-    1449, 150,  // zh_SR -> Hant
-    1455, 150,  // zh_TH -> Hant
-    1461, 150,  // zh_TW -> Hant
-    1467, 150,  // zh_US -> Hant
-    1473, 150,  // zh_VN -> Hant
-    1479, 305,  // zhx -> Nshu
-    1483, 205,  // zkt -> Kits
+    0, 320,  // aaf -> Mlym
+    4, 10,  // aao -> Arab
+    8, 150,  // aat -> Grek
+    12, 100,  // ab -> Cyrl
+    15, 10,  // abh -> Arab
+    19, 420,  // abl -> Rjng
+    23, 10,  // abv -> Arab
+    27, 10,  // acm -> Arab
+    31, 10,  // acq -> Arab
+    35, 10,  // acw -> Arab
+    39, 10,  // acx -> Arab
+    43, 10,  // adf -> Arab
+    47, 535,  // adx -> Tibt
+    51, 100,  // ady -> Cyrl
+    55, 25,  // ae -> Avst
+    58, 10,  // aeb -> Arab
+    62, 10,  // aec -> Arab
+    66, 10,  // aee -> Arab
+    70, 10,  // aeq -> Arab
+    74, 10,  // afb -> Arab
+    78, 105,  // agi -> Deva
+    82, 120,  // agj -> Ethi
+    86, 100,  // agx -> Cyrl
+    90, 120,  // ahg -> Ethi
+    94, 5,  // aho -> Ahom
+    98, 105,  // ahr -> Deva
+    102, 10,  // aib -> Arab
+    106, 185,  // aij -> Hebr
+    110, 220,  // ain -> Kana
+    114, 345,  // aio -> Mymr
+    118, 10,  // aiq -> Arab
+    122, 10,  // ajp -> Arab
+    126, 570,  // akk -> Xsux
+    130, 100,  // akv -> Cyrl
+    134, 260,  // alk -> Laoo
+    138, 320,  // all -> Mlym
+    142, 100,  // alr -> Cyrl
+    146, 100,  // alt -> Cyrl
+    150, 120,  // alw -> Ethi
+    154, 120,  // am -> Ethi
+    157, 210,  // ams -> Jpan
+    161, 475,  // amw -> Syrc
+    165, 100,  // ani -> Cyrl
+    169, 105,  // anp -> Deva
+    173, 105,  // anr -> Deva
+    177, 120,  // anu -> Ethi
+    181, 45,  // aot -> Beng
+    185, 10,  // apc -> Arab
+    189, 10,  // apd -> Arab
+    193, 105,  // aph -> Deva
+    197, 100,  // aqc -> Cyrl
+    201, 10,  // ar -> Arab
+    204, 15,  // arc -> Armi
+    208, 10,  // arq -> Arab
+    212, 10,  // ars -> Arab
+    216, 10,  // ary -> Arab
+    220, 10,  // arz -> Arab
+    224, 45,  // as -> Beng
+    227, 450,  // ase -> Sgnw
+    231, 10,  // ask -> Arab
+    235, 10,  // atn -> Arab
+    239, 100,  // atv -> Cyrl
+    243, 10,  // auj -> Arab
+    247, 10,  // auz -> Arab
+    251, 100,  // av -> Cyrl
+    254, 10,  // avd -> Arab
+    258, 10,  // avl -> Arab
+    262, 105,  // awa -> Deva
+    266, 120,  // awn -> Ethi
+    270, 20,  // axm -> Armn
+    274, 10,  // ayh -> Arab
+    278, 10,  // ayl -> Arab
+    282, 10,  // ayn -> Arab
+    286, 10,  // ayp -> Arab
+    290, 10,  // az_IQ -> Arab
+    296, 10,  // az_IR -> Arab
+    302, 100,  // az_RU -> Cyrl
+    308, 10,  // azb -> Arab
+    312, 100,  // ba -> Cyrl
+    315, 10,  // bal -> Arab
+    319, 105,  // bap -> Deva
+    323, 30,  // bax -> Bamu
+    327, 125,  // bbl -> Geor
+    331, 120,  // bcq -> Ethi
+    335, 385,  // bdv -> Orya
+    339, 10,  // bdz -> Arab
+    343, 100,  // be -> Cyrl
+    346, 105,  // bee -> Deva
+    350, 10,  // bej -> Arab
+    354, 105,  // bfb -> Deva
+    358, 500,  // bfq -> Taml
+    362, 10,  // bft -> Arab
+    366, 535,  // bfu -> Tibt
+    370, 385,  // bfw -> Orya
+    374, 105,  // bfy -> Deva
+    378, 105,  // bfz -> Deva
+    382, 100,  // bg -> Cyrl
+    385, 105,  // bgc -> Deva
+    389, 105,  // bgd -> Deva
+    393, 10,  // bgn -> Arab
+    397, 10,  // bgp -> Arab
+    401, 105,  // bgq -> Deva
+    405, 105,  // bgw -> Deva
+    409, 150,  // bgx -> Grek
+    413, 105,  // bha -> Deva
+    417, 105,  // bhb -> Deva
+    421, 105,  // bhd -> Deva
+    425, 10,  // bhe -> Arab
+    429, 100,  // bhh -> Cyrl
+    433, 105,  // bhi -> Deva
+    437, 105,  // bhj -> Deva
+    441, 10,  // bhm -> Arab
+    445, 475,  // bhn -> Syrc
+    449, 105,  // bho -> Deva
+    453, 485,  // bht -> Takr
+    457, 105,  // bhu -> Deva
+    461, 105,  // biy -> Deva
+    465, 475,  // bjf -> Syrc
+    469, 105,  // bjj -> Deva
+    473, 10,  // bjm -> Arab
+    477, 345,  // blk -> Mymr
+    481, 510,  // blt -> Tavt
+    485, 105,  // bmj -> Deva
+    489, 45,  // bn -> Beng
+    492, 105,  // bns -> Deva
+    496, 535,  // bo -> Tibt
+    499, 100,  // bph -> Cyrl
+    503, 105,  // bpx -> Deva
+    507, 45,  // bpy -> Beng
+    511, 10,  // bqi -> Arab
+    515, 105,  // bra -> Deva
+    519, 235,  // brb -> Khmr
+    523, 105,  // brd -> Deva
+    527, 10,  // brh -> Arab
+    531, 10,  // brk -> Arab
+    535, 260,  // brv -> Laoo
+    539, 105,  // brx -> Deva
+    543, 10,  // bsh -> Arab
+    547, 10,  // bsk -> Arab
+    551, 35,  // bsq -> Bass
+    555, 120,  // bst -> Ethi
+    559, 40,  // btd -> Batk
+    563, 40,  // btm -> Batk
+    567, 105,  // btv -> Deva
+    571, 100,  // bua -> Cyrl
+    575, 345,  // bwe -> Mymr
+    579, 100,  // bxm -> Cyrl
+    583, 330,  // bxu -> Mong
+    587, 105,  // byh -> Deva
+    591, 120,  // byn -> Ethi
+    595, 105,  // byw -> Deva
+    599, 530,  // bzi -> Thai
+    603, 530,  // cbn -> Thai
+    607, 60,  // ccp -> Cakm
+    611, 515,  // cde -> Telu
+    615, 105,  // cdh -> Deva
+    619, 155,  // cdi -> Gujr
+    623, 105,  // cdj -> Deva
+    627, 105,  // cdm -> Deva
+    631, 175,  // cdo -> Hans
+    635, 45,  // cdz -> Beng
+    639, 100,  // ce -> Cyrl
+    642, 535,  // cgk -> Tibt
+    646, 10,  // chg -> Arab
+    650, 100,  // chm -> Cyrl
+    654, 80,  // chr -> Cher
+    658, 105,  // chx -> Deva
+    662, 105,  // cih -> Deva
+    666, 10,  // cja -> Arab
+    670, 100,  // cji -> Cyrl
+    674, 75,  // cjm -> Cham
+    678, 175,  // cjy -> Hans
+    682, 10,  // ckb -> Arab
+    686, 100,  // ckt -> Cyrl
+    690, 10,  // clh -> Arab
+    694, 100,  // clw -> Cyrl
+    698, 470,  // cmg -> Soyo
+    702, 535,  // cna -> Tibt
+    706, 175,  // cnp -> Hans
+    710, 530,  // cog -> Thai
+    714, 90,  // cop -> Copt
+    718, 150,  // cpg -> Grek
+    722, 65,  // cr -> Cans
+    725, 100,  // crh -> Cyrl
+    729, 65,  // crj -> Cans
+    733, 65,  // crk -> Cans
+    737, 65,  // crl -> Cans
+    741, 65,  // crm -> Cans
+    745, 345,  // csh -> Mymr
+    749, 175,  // csp -> Hans
+    753, 65,  // csw -> Cans
+    757, 395,  // ctd -> Pauc
+    761, 45,  // ctg -> Beng
+    765, 105,  // ctn -> Deva
+    769, 500,  // ctt -> Taml
+    773, 100,  // cu -> Cyrl
+    776, 255,  // cuu -> Lana
+    780, 100,  // cv -> Cyrl
+    783, 175,  // czh -> Hans
+    787, 185,  // czk -> Hebr
+    791, 105,  // daq -> Deva
+    795, 100,  // dar -> Cyrl
+    799, 10,  // dcc -> Arab
+    803, 100,  // ddo -> Cyrl
+    807, 10,  // def -> Arab
+    811, 10,  // deh -> Arab
+    815, 45,  // der -> Beng
+    819, 105,  // dhi -> Deva
+    823, 155,  // dhn -> Gujr
+    827, 105,  // dho -> Deva
+    831, 105,  // dhw -> Deva
+    835, 535,  // dka -> Tibt
+    839, 100,  // dlg -> Cyrl
+    843, 310,  // dmf -> Medf
+    847, 10,  // dmk -> Arab
+    851, 10,  // dml -> Arab
+    855, 100,  // dng -> Cyrl
+    859, 345,  // dnu -> Mymr
+    863, 345,  // dnv -> Mymr
+    867, 105,  // doi -> Deva
+    871, 120,  // dox -> Ethi
+    875, 535,  // dre -> Tibt
+    879, 105,  // drq -> Deva
+    883, 120,  // drs -> Ethi
+    887, 105,  // dry -> Deva
+    891, 385,  // dso -> Orya
+    895, 105,  // dty -> Deva
+    899, 155,  // dub -> Gujr
+    903, 105,  // duh -> Deva
+    907, 105,  // dus -> Deva
+    911, 525,  // dv -> Thaa
+    914, 385,  // dwk -> Orya
+    918, 105,  // dwz -> Deva
+    922, 535,  // dz -> Tibt
+    925, 535,  // dzl -> Tibt
+    929, 150,  // ecr -> Grek
+    933, 95,  // ecy -> Cprt
+    937, 110,  // egy -> Egyp
+    941, 215,  // eky -> Kali
+    945, 150,  // el -> Grek
+    948, 105,  // emg -> Deva
+    952, 105,  // emu -> Deva
+    956, 100,  // enf -> Cyrl
+    960, 100,  // enh -> Cyrl
+    964, 500,  // era -> Taml
+    968, 135,  // esg -> Gonm
+    972, 10,  // esh -> Arab
+    976, 200,  // ett -> Ital
+    980, 100,  // eve -> Cyrl
+    984, 100,  // evn -> Cyrl
+    988, 10,  // fa -> Arab
+    991, 10,  // fay -> Arab
+    995, 10,  // faz -> Arab
+    999, 10,  // fia -> Arab
+    1003, 105,  // fmu -> Deva
+    1007, 10,  // fub -> Arab
+    1011, 175,  // gan -> Hans
+    1015, 385,  // gaq -> Orya
+    1019, 155,  // gas -> Gujr
+    1023, 515,  // gau -> Telu
+    1027, 385,  // gbj -> Orya
+    1031, 105,  // gbk -> Deva
+    1035, 155,  // gbl -> Gujr
+    1039, 105,  // gbm -> Deva
+    1043, 10,  // gbz -> Arab
+    1047, 385,  // gdb -> Orya
+    1051, 100,  // gdo -> Cyrl
+    1055, 105,  // gdx -> Deva
+    1059, 120,  // gez -> Ethi
+    1063, 10,  // ggg -> Arab
+    1067, 10,  // gha -> Arab
+    1071, 105,  // ghe -> Deva
+    1075, 10,  // ghr -> Arab
+    1079, 535,  // ght -> Tibt
+    1083, 10,  // gig -> Arab
+    1087, 100,  // gin -> Cyrl
+    1091, 10,  // gjk -> Arab
+    1095, 10,  // gju -> Arab
+    1099, 100,  // gld -> Cyrl
+    1103, 10,  // glh -> Arab
+    1107, 10,  // glk -> Arab
+    1111, 120,  // gmv -> Ethi
+    1115, 275,  // gmy -> Linb
+    1119, 535,  // goe -> Tibt
+    1123, 120,  // gof -> Ethi
+    1127, 105,  // gok -> Deva
+    1131, 105,  // gom -> Deva
+    1135, 515,  // gon -> Telu
+    1139, 140,  // got -> Goth
+    1143, 105,  // gra -> Deva
+    1147, 95,  // grc -> Cprt
+    1151, 45,  // grt -> Beng
+    1155, 120,  // gru -> Ethi
+    1159, 155,  // gu -> Gujr
+    1162, 105,  // gvr -> Deva
+    1166, 10,  // gwc -> Arab
+    1170, 10,  // gwf -> Arab
+    1174, 10,  // gwt -> Arab
+    1178, 105,  // gyo -> Deva
+    1182, 10,  // gzi -> Arab
+    1186, 10,  // ha_CM -> Arab
+    1192, 10,  // ha_SD -> Arab
+    1198, 10,  // hac -> Arab
+    1202, 175,  // hak -> Hans
+    1206, 120,  // har -> Ethi
+    1210, 10,  // haz -> Arab
+    1214, 185,  // hbo -> Hebr
+    1218, 120,  // hdy -> Ethi
+    1222, 185,  // he -> Hebr
+    1225, 105,  // hi -> Deva
+    1228, 485,  // hii -> Takr
+    1232, 570,  // hit -> Xsux
+    1236, 10,  // hkh -> Arab
+    1240, 105,  // hlb -> Deva
+    1244, 190,  // hlu -> Hluw
+    1248, 410,  // hmd -> Plrd
+    1252, 50,  // hmj -> Bopo
+    1256, 50,  // hmq -> Bopo
+    1260, 10,  // hnd -> Arab
+    1264, 105,  // hne -> Deva
+    1268, 195,  // hnj -> Hmnp
+    1272, 260,  // hnj_AU -> Laoo
+    1279, 260,  // hnj_CN -> Laoo
+    1286, 260,  // hnj_FR -> Laoo
+    1293, 260,  // hnj_GF -> Laoo
+    1300, 260,  // hnj_LA -> Laoo
+    1307, 260,  // hnj_MM -> Laoo
+    1314, 260,  // hnj_SR -> Laoo
+    1321, 260,  // hnj_TH -> Laoo
+    1328, 260,  // hnj_VN -> Laoo
+    1335, 10,  // hno -> Arab
+    1339, 105,  // hoc -> Deva
+    1343, 10,  // hoh -> Arab
+    1347, 105,  // hoj -> Deva
+    1351, 170,  // how -> Hani
+    1355, 105,  // hoy -> Deva
+    1359, 345,  // hpo -> Mymr
+    1363, 475,  // hrt -> Syrc
+    1367, 10,  // hrz -> Arab
+    1371, 175,  // hsn -> Hans
+    1375, 10,  // hss -> Arab
+    1379, 570,  // htx -> Xsux
+    1383, 105,  // hut -> Deva
+    1387, 185,  // huy -> Hebr
+    1391, 100,  // huz -> Cyrl
+    1395, 20,  // hy -> Armn
+    1398, 20,  // hyw -> Armn
+    1402, 575,  // ii -> Yiii
+    1405, 285,  // imy -> Lyci
+    1409, 100,  // inh -> Cyrl
+    1413, 345,  // int -> Mymr
+    1417, 120,  // ior -> Ethi
+    1421, 500,  // iru -> Taml
+    1425, 10,  // isk -> Arab
+    1429, 185,  // itk -> Hebr
+    1433, 100,  // itl -> Cyrl
+    1437, 65,  // iu -> Cans
+    1440, 185,  // iw -> Hebr
+    1443, 210,  // ja -> Jpan
+    1446, 10,  // jad -> Arab
+    1450, 10,  // jat -> Arab
+    1454, 185,  // jbe -> Hebr
+    1458, 10,  // jbn -> Arab
+    1462, 100,  // jct -> Cyrl
+    1466, 535,  // jda -> Tibt
+    1470, 10,  // jdg -> Arab
+    1474, 100,  // jdt -> Cyrl
+    1478, 105,  // jee -> Deva
+    1482, 125,  // jge -> Geor
+    1486, 185,  // ji -> Hebr
+    1489, 165,  // jje -> Hang
+    1493, 345,  // jkm -> Mymr
+    1497, 105,  // jml -> Deva
+    1501, 485,  // jna -> Takr
+    1505, 10,  // jnd -> Arab
+    1509, 105,  // jnl -> Deva
+    1513, 105,  // jns -> Deva
+    1517, 10,  // jog -> Arab
+    1521, 185,  // jpa -> Hebr
+    1525, 185,  // jpr -> Hebr
+    1529, 185,  // jrb -> Hebr
+    1533, 10,  // jrb_MA -> Arab
+    1540, 105,  // jul -> Deva
+    1544, 385,  // jun -> Orya
+    1548, 385,  // juy -> Orya
+    1552, 535,  // jya -> Tibt
+    1556, 185,  // jye -> Hebr
+    1560, 125,  // ka -> Geor
+    1563, 100,  // kaa -> Cyrl
+    1567, 100,  // kap -> Cyrl
+    1571, 225,  // kaw -> Kawi
+    1575, 100,  // kbd -> Cyrl
+    1579, 10,  // kbu -> Arab
+    1583, 10,  // kby -> Arab
+    1587, 100,  // kca -> Cyrl
+    1591, 45,  // kdq -> Beng
+    1595, 530,  // kdt -> Thai
+    1599, 100,  // ket -> Cyrl
+    1603, 105,  // kex -> Deva
+    1607, 515,  // key -> Telu
+    1611, 245,  // kfa -> Knda
+    1615, 105,  // kfb -> Deva
+    1619, 515,  // kfc -> Telu
+    1623, 245,  // kfd -> Knda
+    1627, 500,  // kfe -> Taml
+    1631, 320,  // kfh -> Mlym
+    1635, 500,  // kfi -> Taml
+    1639, 105,  // kfk -> Deva
+    1643, 10,  // kfm -> Arab
+    1647, 105,  // kfp -> Deva
+    1651, 105,  // kfq -> Deva
+    1655, 105,  // kfr -> Deva
+    1659, 105,  // kfs -> Deva
+    1663, 105,  // kfx -> Deva
+    1667, 105,  // kfy -> Deva
+    1671, 105,  // kgj -> Deva
+    1675, 105,  // kgy -> Deva
+    1679, 495,  // khb -> Talu
+    1683, 530,  // khf -> Thai
+    1687, 535,  // khg -> Tibt
+    1691, 105,  // khn -> Deva
+    1695, 345,  // kht -> Mymr
+    1699, 100,  // khv -> Cyrl
+    1703, 10,  // khw -> Arab
+    1707, 105,  // kif -> Deva
+    1711, 100,  // kim -> Cyrl
+    1715, 105,  // kip -> Deva
+    1719, 260,  // kjg -> Laoo
+    1723, 100,  // kjh -> Cyrl
+    1727, 105,  // kjl -> Deva
+    1731, 105,  // kjo -> Deva
+    1735, 345,  // kjp -> Mymr
+    1739, 530,  // kjt -> Thai
+    1743, 100,  // kk -> Cyrl
+    1746, 10,  // kk_AF -> Arab
+    1752, 10,  // kk_CN -> Arab
+    1758, 10,  // kk_IR -> Arab
+    1764, 10,  // kk_MN -> Arab
+    1770, 535,  // kkf -> Tibt
+    1774, 255,  // kkh -> Lana
+    1778, 105,  // kkt -> Deva
+    1782, 105,  // kle -> Deva
+    1786, 10,  // klj -> Arab
+    1790, 105,  // klr -> Deva
+    1794, 235,  // km -> Khmr
+    1797, 105,  // kmj -> Deva
+    1801, 10,  // kmz -> Arab
+    1805, 245,  // kn -> Knda
+    1808, 250,  // ko -> Kore
+    1811, 100,  // koi -> Cyrl
+    1815, 105,  // kok -> Deva
+    1819, 100,  // kpt -> Cyrl
+    1823, 100,  // kpy -> Cyrl
+    1827, 475,  // kqd -> Syrc
+    1831, 120,  // kqy -> Ethi
+    1835, 105,  // kra -> Deva
+    1839, 100,  // krc -> Cyrl
+    1843, 100,  // krk -> Cyrl
+    1847, 235,  // krr -> Khmr
+    1851, 105,  // kru -> Deva
+    1855, 235,  // krv -> Khmr
+    1859, 10,  // ks -> Arab
+    1862, 345,  // ksu -> Mymr
+    1866, 345,  // ksw -> Mymr
+    1870, 105,  // ksz -> Deva
+    1874, 120,  // ktb -> Ethi
+    1878, 10,  // ktl -> Arab
+    1882, 410,  // ktp -> Plrd
+    1886, 10,  // ku_LB -> Arab
+    1892, 260,  // kuf -> Laoo
+    1896, 100,  // kum -> Cyrl
+    1900, 100,  // kv -> Cyrl
+    1903, 100,  // kva -> Cyrl
+    1907, 345,  // kvq -> Mymr
+    1911, 345,  // kvt -> Mymr
+    1915, 10,  // kvx -> Arab
+    1919, 215,  // kvy -> Kali
+    1923, 345,  // kxf -> Mymr
+    1927, 345,  // kxk -> Mymr
+    1931, 530,  // kxm -> Thai
+    1935, 10,  // kxp -> Arab
+    1939, 100,  // ky -> Cyrl
+    1942, 10,  // ky_CN -> Arab
+    1948, 215,  // kyu -> Kali
+    1952, 105,  // kyv -> Deva
+    1956, 105,  // kyw -> Deva
+    1960, 270,  // lab -> Lina
+    1964, 185,  // lad -> Hebr
+    1968, 105,  // lae -> Deva
+    1972, 10,  // lah -> Arab
+    1976, 280,  // lbc -> Lisu
+    1980, 100,  // lbe -> Cyrl
+    1984, 105,  // lbf -> Deva
+    1988, 535,  // lbj -> Tibt
+    1992, 105,  // lbm -> Deva
+    1996, 260,  // lbo -> Laoo
+    2000, 105,  // lbr -> Deva
+    2004, 530,  // lcp -> Thai
+    2008, 265,  // lep -> Lepc
+    2012, 100,  // lez -> Cyrl
+    2016, 105,  // lhm -> Deva
+    2020, 475,  // lhs -> Syrc
+    2024, 105,  // lif -> Deva
+    2028, 280,  // lis -> Lisu
+    2032, 535,  // lkh -> Tibt
+    2036, 10,  // lki -> Arab
+    2040, 105,  // lmh -> Deva
+    2044, 515,  // lmn -> Telu
+    2048, 260,  // lo -> Laoo
+    2051, 105,  // loy -> Deva
+    2055, 410,  // lpo -> Plrd
+    2059, 10,  // lrc -> Arab
+    2063, 10,  // lrk -> Arab
+    2067, 10,  // lrl -> Arab
+    2071, 10,  // lsa -> Arab
+    2075, 185,  // lsd -> Hebr
+    2079, 10,  // lss -> Arab
+    2083, 535,  // luk -> Tibt
+    2087, 105,  // luu -> Deva
+    2091, 10,  // luv -> Arab
+    2095, 10,  // luz -> Arab
+    2099, 530,  // lwl -> Thai
+    2103, 530,  // lwm -> Thai
+    2107, 535,  // lya -> Tibt
+    2111, 175,  // lzh -> Hans
+    2115, 105,  // mag -> Deva
+    2119, 105,  // mai -> Deva
+    2123, 360,  // man_GN -> Nkoo
+    2130, 10,  // mby -> Arab
+    2134, 10,  // mde -> Arab
+    2138, 100,  // mdf -> Cyrl
+    2142, 120,  // mdx -> Ethi
+    2146, 120,  // mdy -> Ethi
+    2150, 10,  // mfa -> Arab
+    2154, 10,  // mfi -> Arab
+    2158, 105,  // mgp -> Deva
+    2162, 10,  // mhj -> Arab
+    2166, 295,  // mid -> Mand
+    2170, 105,  // mjl -> Deva
+    2174, 320,  // mjq -> Mlym
+    2178, 320,  // mjr -> Mlym
+    2182, 105,  // mjt -> Deva
+    2186, 515,  // mju -> Telu
+    2190, 320,  // mjv -> Mlym
+    2194, 105,  // mjz -> Deva
+    2198, 100,  // mk -> Cyrl
+    2201, 105,  // mkb -> Deva
+    2205, 105,  // mke -> Deva
+    2209, 10,  // mki -> Arab
+    2213, 530,  // mkm -> Thai
+    2217, 320,  // ml -> Mlym
+    2220, 530,  // mlf -> Thai
+    2224, 100,  // mn -> Cyrl
+    2227, 330,  // mn_CN -> Mong
+    2233, 45,  // mni -> Beng
+    2237, 10,  // mnj -> Arab
+    2241, 100,  // mns -> Cyrl
+    2245, 345,  // mnw -> Mymr
+    2249, 530,  // mpz -> Thai
+    2253, 105,  // mr -> Deva
+    2256, 530,  // mra -> Thai
+    2260, 105,  // mrd -> Deva
+    2264, 100,  // mrj -> Cyrl
+    2268, 335,  // mro -> Mroo
+    2272, 105,  // mrr -> Deva
+    2276, 10,  // ms_CC -> Arab
+    2282, 100,  // mtm -> Cyrl
+    2286, 105,  // mtr -> Deva
+    2290, 100,  // mud -> Cyrl
+    2294, 535,  // muk -> Tibt
+    2298, 105,  // mut -> Deva
+    2302, 500,  // muv -> Taml
+    2306, 120,  // muz -> Ethi
+    2310, 330,  // mvf -> Mong
+    2314, 10,  // mvy -> Arab
+    2318, 120,  // mvz -> Ethi
+    2322, 105,  // mwr -> Deva
+    2326, 345,  // mwt -> Mymr
+    2330, 195,  // mww -> Hmnp
+    2334, 345,  // my -> Mymr
+    2337, 120,  // mym -> Ethi
+    2341, 100,  // myv -> Cyrl
+    2345, 295,  // myz -> Mand
+    2349, 10,  // mzn -> Arab
+    2353, 175,  // nan -> Hans
+    2357, 105,  // nao -> Deva
+    2361, 105,  // ncd -> Deva
+    2365, 260,  // ncq -> Laoo
+    2369, 100,  // ndf -> Cyrl
+    2373, 105,  // ne -> Deva
+    2376, 100,  // neg -> Cyrl
+    2380, 535,  // neh -> Tibt
+    2384, 570,  // nei -> Xsux
+    2388, 105,  // new -> Deva
+    2392, 260,  // ngt -> Laoo
+    2396, 100,  // nio -> Cyrl
+    2400, 515,  // nit -> Telu
+    2404, 100,  // niv -> Cyrl
+    2408, 10,  // nli -> Arab
+    2412, 10,  // nlm -> Arab
+    2416, 105,  // nlx -> Deva
+    2420, 105,  // nmm -> Deva
+    2424, 560,  // nnp -> Wcho
+    2428, 255,  // nod -> Lana
+    2432, 105,  // noe -> Deva
+    2436, 100,  // nog -> Cyrl
+    2440, 105,  // noi -> Deva
+    2444, 430,  // non -> Runr
+    2448, 575,  // nos -> Yiii
+    2452, 535,  // npb -> Tibt
+    2456, 360,  // nqo -> Nkoo
+    2460, 575,  // nsd -> Yiii
+    2464, 575,  // nsf -> Yiii
+    2468, 65,  // nsk -> Cans
+    2472, 540,  // nst -> Tnsa
+    2476, 575,  // nsv -> Yiii
+    2480, 575,  // nty -> Yiii
+    2484, 10,  // ntz -> Arab
+    2488, 355,  // nwc -> Newa
+    2492, 105,  // nwx -> Deva
+    2496, 530,  // nyl -> Thai
+    2500, 10,  // nyq -> Arab
+    2504, 100,  // oaa -> Cyrl
+    2508, 100,  // oac -> Cyrl
+    2512, 475,  // oar -> Syrc
+    2516, 125,  // oav -> Geor
+    2520, 405,  // obm -> Phnx
+    2524, 345,  // obr -> Mymr
+    2528, 10,  // odk -> Arab
+    2532, 570,  // oht -> Xsux
+    2536, 65,  // oj -> Cans
+    2539, 65,  // ojs -> Cans
+    2543, 165,  // okm -> Hang
+    2547, 170,  // oko -> Hani
+    2551, 235,  // okz -> Khmr
+    2555, 105,  // ola -> Deva
+    2559, 535,  // ole -> Tibt
+    2563, 100,  // omk -> Cyrl
+    2567, 340,  // omp -> Mtei
+    2571, 325,  // omr -> Modi
+    2575, 105,  // oon -> Deva
+    2579, 385,  // or -> Orya
+    2582, 515,  // ort -> Telu
+    2586, 10,  // oru -> Arab
+    2590, 100,  // orv -> Cyrl
+    2594, 100,  // os -> Cyrl
+    2597, 390,  // osa -> Osge
+    2601, 200,  // osc -> Ital
+    2605, 205,  // osi -> Java
+    2609, 10,  // ota -> Arab
+    2613, 535,  // otb -> Tibt
+    2617, 380,  // otk -> Orkh
+    2621, 145,  // oty -> Gran
+    2625, 160,  // pa -> Guru
+    2628, 10,  // pa_PK -> Arab
+    2634, 400,  // pal -> Phli
+    2638, 100,  // paq -> Cyrl
+    2642, 10,  // pbt -> Arab
+    2646, 235,  // pcb -> Khmr
+    2650, 345,  // pce -> Mymr
+    2654, 320,  // pcf -> Mlym
+    2658, 320,  // pcg -> Mlym
+    2662, 105,  // pch -> Deva
+    2666, 105,  // pci -> Deva
+    2670, 515,  // pcj -> Telu
+    2674, 385,  // peg -> Orya
+    2678, 565,  // peo -> Xpeo
+    2682, 230,  // pgd -> Khar
+    2686, 105,  // pgg -> Deva
+    2690, 370,  // pgl -> Ogam
+    2694, 200,  // pgn -> Ital
+    2698, 105,  // phd -> Deva
+    2702, 345,  // phk -> Mymr
+    2706, 10,  // phl -> Arab
+    2710, 405,  // phn -> Phnx
+    2714, 260,  // pho -> Laoo
+    2718, 10,  // phr -> Arab
+    2722, 530,  // pht -> Thai
+    2726, 10,  // phv -> Arab
+    2730, 105,  // phw -> Deva
+    2734, 455,  // pi -> Sinh
+    2737, 55,  // pka -> Brah
+    2741, 320,  // pkr -> Mlym
+    2745, 10,  // plk -> Arab
+    2749, 345,  // pll -> Mymr
+    2753, 55,  // pmh -> Brah
+    2757, 150,  // pnt -> Grek
+    2761, 230,  // pra -> Khar
+    2765, 10,  // prc -> Arab
+    2769, 10,  // prd -> Arab
+    2773, 155,  // prp -> Gujr
+    2777, 530,  // prt -> Thai
+    2781, 10,  // prx -> Arab
+    2785, 10,  // ps -> Arab
+    2788, 10,  // psh -> Arab
+    2792, 10,  // psi -> Arab
+    2796, 10,  // pst -> Arab
+    2800, 105,  // pum -> Deva
+    2804, 345,  // pwo -> Mymr
+    2808, 105,  // pwr -> Deva
+    2812, 530,  // pww -> Thai
+    2816, 345,  // pyx -> Mymr
+    2820, 10,  // qxq -> Arab
+    2824, 105,  // raa -> Deva
+    2828, 105,  // rab -> Deva
+    2832, 105,  // raf -> Deva
+    2836, 45,  // rah -> Beng
+    2840, 105,  // raj -> Deva
+    2844, 105,  // rav -> Deva
+    2848, 345,  // rbb -> Mymr
+    2852, 10,  // rdb -> Arab
+    2856, 385,  // rei -> Orya
+    2860, 425,  // rhg -> Rohg
+    2864, 105,  // rji -> Deva
+    2868, 105,  // rjs -> Deva
+    2872, 235,  // rka -> Khmr
+    2876, 345,  // rki -> Mymr
+    2880, 45,  // rkt -> Beng
+    2884, 20,  // rmi -> Armn
+    2888, 10,  // rmt -> Arab
+    2892, 345,  // rmz -> Mymr
+    2896, 100,  // rom_BG -> Cyrl
+    2903, 100,  // rsk -> Cyrl
+    2907, 105,  // rtw -> Deva
+    2911, 100,  // ru -> Cyrl
+    2914, 100,  // rue -> Cyrl
+    2918, 100,  // rut -> Cyrl
+    2922, 105,  // rwr -> Deva
+    2926, 220,  // ryu -> Kana
+    2930, 105,  // sa -> Deva
+    2933, 100,  // sah -> Cyrl
+    2937, 435,  // sam -> Samr
+    2941, 375,  // sat -> Olck
+    2945, 445,  // saz -> Saur
+    2949, 10,  // sbn -> Arab
+    2953, 535,  // sbu -> Tibt
+    2957, 105,  // sck -> Deva
+    2961, 10,  // scl -> Arab
+    2965, 10,  // scl_IN -> Arab
+    2972, 105,  // scp -> Deva
+    2976, 260,  // sct -> Laoo
+    2980, 485,  // scu -> Takr
+    2984, 150,  // scx -> Grek
+    2988, 10,  // sd -> Arab
+    2991, 105,  // sd_IN -> Deva
+    2997, 10,  // sdb -> Arab
+    3001, 10,  // sdf -> Arab
+    3005, 10,  // sdg -> Arab
+    3009, 10,  // sdh -> Arab
+    3013, 10,  // sds -> Arab
+    3017, 100,  // sel -> Cyrl
+    3021, 410,  // sfm -> Plrd
+    3025, 370,  // sga -> Ogam
+    3029, 100,  // sgh -> Cyrl
+    3033, 105,  // sgj -> Deva
+    3037, 10,  // sgr -> Arab
+    3041, 535,  // sgt -> Tibt
+    3045, 120,  // sgw -> Ethi
+    3049, 10,  // sgy -> Arab
+    3053, 10,  // shd -> Arab
+    3057, 520,  // shi -> Tfng
+    3061, 10,  // shm -> Arab
+    3065, 345,  // shn -> Mymr
+    3069, 10,  // shu -> Arab
+    3073, 10,  // shv -> Arab
+    3077, 455,  // si -> Sinh
+    3080, 100,  // sia -> Cyrl
+    3084, 535,  // sip -> Tibt
+    3088, 10,  // siy -> Arab
+    3092, 10,  // siz -> Arab
+    3096, 100,  // sjd -> Cyrl
+    3100, 105,  // sjp -> Deva
+    3104, 100,  // sjt -> Cyrl
+    3108, 530,  // skb -> Thai
+    3112, 105,  // skj -> Deva
+    3116, 10,  // skr -> Arab
+    3120, 10,  // slq -> Arab
+    3124, 575,  // smh -> Yiii
+    3128, 435,  // smp -> Samr
+    3132, 235,  // smu -> Khmr
+    3136, 10,  // smy -> Arab
+    3140, 510,  // soa -> Tavt
+    3144, 460,  // sog -> Sogd
+    3148, 105,  // soi -> Deva
+    3152, 530,  // sou -> Thai
+    3156, 535,  // spt -> Tibt
+    3160, 385,  // spv -> Orya
+    3164, 10,  // sqo -> Arab
+    3168, 260,  // sqq -> Laoo
+    3172, 10,  // sqt -> Arab
+    3176, 100,  // sr -> Cyrl
+    3179, 465,  // srb -> Sora
+    3183, 10,  // srh -> Arab
+    3187, 105,  // srx -> Deva
+    3191, 10,  // srz -> Arab
+    3195, 10,  // ssh -> Arab
+    3199, 260,  // sss -> Laoo
+    3203, 10,  // sts -> Arab
+    3207, 120,  // stv -> Ethi
+    3211, 100,  // sty -> Cyrl
+    3215, 105,  // suz -> Deva
+    3219, 125,  // sva -> Geor
+    3223, 10,  // swb -> Arab
+    3227, 170,  // swi -> Hani
+    3231, 105,  // swv -> Deva
+    3235, 475,  // syc -> Syrc
+    3239, 45,  // syl -> Beng
+    3243, 475,  // syn -> Syrc
+    3247, 475,  // syr -> Syrc
+    3251, 105,  // syw -> Deva
+    3255, 500,  // ta -> Taml
+    3258, 100,  // tab -> Cyrl
+    3262, 105,  // taj -> Deva
+    3266, 480,  // tbk -> Tagb
+    3270, 535,  // tcn -> Tibt
+    3274, 345,  // tco -> Mymr
+    3278, 500,  // tcx -> Taml
+    3282, 245,  // tcy -> Knda
+    3286, 520,  // tda -> Tfng
+    3290, 105,  // tdb -> Deva
+    3294, 490,  // tdd -> Tale
+    3298, 105,  // tdg -> Deva
+    3302, 105,  // tdh -> Deva
+    3306, 515,  // te -> Telu
+    3309, 205,  // tes -> Java
+    3313, 100,  // tg -> Cyrl
+    3316, 10,  // tg_PK -> Arab
+    3322, 105,  // tge -> Deva
+    3326, 535,  // tgf -> Tibt
+    3330, 530,  // th -> Thai
+    3333, 105,  // the -> Deva
+    3337, 105,  // thf -> Deva
+    3341, 490,  // thi -> Tale
+    3345, 105,  // thl -> Deva
+    3349, 530,  // thm -> Thai
+    3353, 105,  // thq -> Deva
+    3357, 105,  // thr -> Deva
+    3361, 105,  // ths -> Deva
+    3365, 120,  // ti -> Ethi
+    3368, 120,  // tig -> Ethi
+    3372, 105,  // tij -> Deva
+    3376, 100,  // tin -> Cyrl
+    3380, 345,  // tjl -> Mymr
+    3384, 10,  // tjo -> Arab
+    3388, 105,  // tkb -> Deva
+    3392, 10,  // tks -> Arab
+    3396, 105,  // tkt -> Deva
+    3400, 105,  // tmk -> Deva
+    3404, 475,  // tmr -> Syrc
+    3408, 60,  // tnv -> Cakm
+    3412, 10,  // tov -> Arab
+    3416, 235,  // tpu -> Khmr
+    3420, 10,  // tra -> Arab
+    3424, 185,  // trg -> Hebr
+    3428, 10,  // trm -> Arab
+    3432, 10,  // trw -> Arab
+    3436, 150,  // tsd -> Grek
+    3440, 535,  // tsj -> Tibt
+    3444, 100,  // tt -> Cyrl
+    3447, 260,  // tth -> Laoo
+    3451, 260,  // tto -> Laoo
+    3455, 530,  // tts -> Thai
+    3459, 345,  // tvn -> Mymr
+    3463, 105,  // twm -> Deva
+    3467, 505,  // txg -> Tang
+    3471, 545,  // txo -> Toto
+    3475, 510,  // tyr -> Tavt
+    3479, 100,  // tyv -> Cyrl
+    3483, 100,  // ude -> Cyrl
+    3487, 320,  // udg -> Mlym
+    3491, 0,  // udi -> Aghb
+    3495, 100,  // udm -> Cyrl
+    3499, 10,  // ug -> Arab
+    3502, 100,  // ug_KZ -> Cyrl
+    3508, 100,  // ug_MN -> Cyrl
+    3514, 550,  // uga -> Ugar
+    3518, 100,  // ugh -> Cyrl
+    3522, 530,  // ugo -> Thai
+    3526, 100,  // uk -> Cyrl
+    3529, 385,  // uki -> Orya
+    3533, 100,  // ulc -> Cyrl
+    3537, 45,  // unr -> Beng
+    3541, 105,  // unr_NP -> Deva
+    3548, 45,  // unx -> Beng
+    3552, 10,  // ur -> Arab
+    3555, 530,  // urk -> Thai
+    3559, 10,  // ush -> Arab
+    3563, 150,  // uum -> Grek
+    3567, 10,  // uz_AF -> Arab
+    3573, 100,  // uz_CN -> Cyrl
+    3579, 10,  // uzs -> Arab
+    3583, 500,  // vaa -> Taml
+    3587, 10,  // vaf -> Arab
+    3591, 105,  // vah -> Deva
+    3595, 555,  // vai -> Vaii
+    3599, 105,  // vas -> Deva
+    3603, 105,  // vav -> Deva
+    3607, 105,  // vay -> Deva
+    3611, 10,  // vgr -> Arab
+    3615, 245,  // vmd -> Knda
+    3619, 10,  // vmh -> Arab
+    3623, 120,  // wal -> Ethi
+    3627, 10,  // wbk -> Arab
+    3631, 515,  // wbq -> Telu
+    3635, 105,  // wbr -> Deva
+    3639, 10,  // wlo -> Arab
+    3643, 105,  // wme -> Deva
+    3647, 10,  // wne -> Arab
+    3651, 10,  // wni -> Arab
+    3655, 130,  // wsg -> Gong
+    3659, 10,  // wsv -> Arab
+    3663, 105,  // wtm -> Deva
+    3667, 175,  // wuu -> Hans
+    3671, 100,  // xal -> Cyrl
+    3675, 120,  // xan -> Ethi
+    3679, 100,  // xas -> Cyrl
+    3683, 85,  // xco -> Chrs
+    3687, 70,  // xcr -> Cari
+    3691, 100,  // xdq -> Cyrl
+    3695, 10,  // xhe -> Arab
+    3699, 235,  // xhm -> Khmr
+    3703, 385,  // xis -> Orya
+    3707, 10,  // xka -> Arab
+    3711, 10,  // xkc -> Arab
+    3715, 10,  // xkj -> Arab
+    3719, 10,  // xkp -> Arab
+    3723, 285,  // xlc -> Lyci
+    3727, 290,  // xld -> Lydi
+    3731, 115,  // xly -> Elym
+    3735, 125,  // xmf -> Geor
+    3739, 300,  // xmn -> Mani
+    3743, 315,  // xmr -> Merc
+    3747, 350,  // xna -> Narb
+    3751, 105,  // xnr -> Deva
+    3755, 150,  // xpg -> Grek
+    3759, 370,  // xpi -> Ogam
+    3763, 100,  // xpm -> Cyrl
+    3767, 415,  // xpr -> Prti
+    3771, 100,  // xrm -> Cyrl
+    3775, 100,  // xrn -> Cyrl
+    3779, 440,  // xsa -> Sarb
+    3783, 105,  // xsr -> Deva
+    3787, 100,  // xss -> Cyrl
+    3791, 500,  // xub -> Taml
+    3795, 500,  // xuj -> Taml
+    3799, 200,  // xve -> Ital
+    3803, 10,  // xvi -> Arab
+    3807, 100,  // xwo -> Cyrl
+    3811, 305,  // xzh -> Marc
+    3815, 100,  // yai -> Cyrl
+    3819, 105,  // ybh -> Deva
+    3823, 105,  // ybi -> Deva
+    3827, 10,  // ydg -> Arab
+    3831, 320,  // yea -> Mlym
+    3835, 150,  // yej -> Grek
+    3839, 515,  // yeu -> Telu
+    3843, 410,  // ygp -> Plrd
+    3847, 185,  // yhd -> Hebr
+    3851, 185,  // yi -> Hebr
+    3854, 575,  // yig -> Yiii
+    3858, 185,  // yih -> Hebr
+    3862, 575,  // yiv -> Yiii
+    3866, 100,  // ykg -> Cyrl
+    3870, 410,  // yna -> Plrd
+    3874, 100,  // ynk -> Cyrl
+    3878, 210,  // yoi -> Jpan
+    3882, 530,  // yoy -> Thai
+    3886, 100,  // yrk -> Cyrl
+    3890, 575,  // ysd -> Yiii
+    3894, 575,  // ysn -> Yiii
+    3898, 575,  // ysp -> Yiii
+    3902, 100,  // ysr -> Cyrl
+    3906, 410,  // ysy -> Plrd
+    3910, 185,  // yud -> Hebr
+    3914, 180,  // yue -> Hant
+    3918, 175,  // yue_CN -> Hans
+    3925, 100,  // yug -> Cyrl
+    3929, 100,  // yux -> Cyrl
+    3933, 410,  // ywq -> Plrd
+    3937, 410,  // ywu -> Plrd
+    3941, 535,  // zau -> Tibt
+    3945, 10,  // zba -> Arab
+    3949, 170,  // zch -> Hani
+    3953, 10,  // zdj -> Arab
+    3957, 170,  // zeh -> Hani
+    3961, 520,  // zen -> Tfng
+    3965, 170,  // zgb -> Hani
+    3969, 520,  // zgh -> Tfng
+    3973, 170,  // zgm -> Hani
+    3977, 170,  // zgn -> Hani
+    3981, 175,  // zh -> Hans
+    3984, 180,  // zh_AU -> Hant
+    3990, 180,  // zh_BN -> Hant
+    3996, 180,  // zh_GB -> Hant
+    4002, 180,  // zh_GF -> Hant
+    4008, 180,  // zh_HK -> Hant
+    4014, 180,  // zh_ID -> Hant
+    4020, 180,  // zh_MO -> Hant
+    4026, 180,  // zh_PA -> Hant
+    4032, 180,  // zh_PF -> Hant
+    4038, 180,  // zh_PH -> Hant
+    4044, 180,  // zh_SR -> Hant
+    4050, 180,  // zh_TH -> Hant
+    4056, 180,  // zh_TW -> Hant
+    4062, 180,  // zh_US -> Hant
+    4068, 180,  // zh_VN -> Hant
+    4074, 170,  // zhd -> Hani
+    4078, 365,  // zhx -> Nshu
+    4082, 100,  // zkb -> Cyrl
+    4086, 100,  // zko -> Cyrl
+    4090, 240,  // zkt -> Kits
+    4094, 100,  // zkz -> Cyrl
+    4098, 170,  // zlj -> Hani
+    4102, 170,  // zln -> Hani
+    4106, 170,  // zlq -> Hani
+    4110, 170,  // zqe -> Hani
+    4114, 185,  // zrp -> Hebr
+    4118, 10,  // zum -> Arab
+    4122, 170,  // zyg -> Hani
+    4126, 170,  // zyn -> Hani
+    4130, 170,  // zzj -> Hani
 };
 
 //======================================================================
@@ -433,35 +1138,36 @@
     "en_AU\0en_BB\0en_BE\0en_BM\0en_BS\0en_BW\0en_BZ\0en_CC\0en_CH\0"
     "en_CK\0en_CM\0en_CX\0en_CY\0en_DE\0en_DG\0en_DK\0en_DM\0en_Dsrt\0"
     "en_ER\0en_FI\0en_FJ\0en_FK\0en_FM\0en_GB\0en_GD\0en_GG\0en_GH\0"
-    "en_GI\0en_GM\0en_GY\0en_HK\0en_IE\0en_IL\0en_IM\0en_IN\0en_IO\0"
-    "en_JE\0en_JM\0en_KE\0en_KI\0en_KN\0en_KY\0en_LC\0en_LR\0en_LS\0"
-    "en_MG\0en_MO\0en_MS\0en_MT\0en_MU\0en_MV\0en_MW\0en_MY\0en_NA\0"
-    "en_NF\0en_NG\0en_NL\0en_NR\0en_NU\0en_NZ\0en_PG\0en_PK\0en_PN\0"
-    "en_PW\0en_RW\0en_SB\0en_SC\0en_SD\0en_SE\0en_SG\0en_SH\0en_SI\0"
-    "en_SL\0en_SS\0en_SX\0en_SZ\0en_Shaw\0en_TC\0en_TK\0en_TO\0en_TT\0"
-    "en_TV\0en_TZ\0en_UG\0en_VC\0en_VG\0en_VU\0en_WS\0en_ZA\0en_ZM\0"
-    "en_ZW\0es_419\0es_AR\0es_BO\0es_BR\0es_BZ\0es_CL\0es_CO\0es_CR\0"
-    "es_CU\0es_DO\0es_EC\0es_GT\0es_HN\0es_MX\0es_NI\0es_PA\0es_PE\0"
-    "es_PR\0es_PY\0es_SV\0es_US\0es_UY\0es_VE\0ff_Adlm\0ff_Arab\0fr_HT\0"
-    "ha_Arab\0hi_Latn\0ht\0iu_Latn\0kk_Arab\0ks_Deva\0ku_Arab\0ky_Arab\0"
-    "ky_Latn\0ml_Arab\0mn_Mong\0mni_Mtei\0ms_Arab\0nb\0nn\0no\0pa_Arab\0"
-    "pt_AO\0pt_CH\0pt_CV\0pt_FR\0pt_GQ\0pt_GW\0pt_LU\0pt_MO\0pt_MZ\0"
-    "pt_PT\0pt_ST\0pt_TL\0root\0sat_Deva\0sd_Deva\0sd_Khoj\0sd_Sind\0"
-    "shi_Latn\0so_Arab\0sr_Latn\0sw_Arab\0tg_Arab\0ug_Cyrl\0uz_Arab\0"
-    "uz_Cyrl\0vai_Latn\0wo_Arab\0yo_Arab\0yue_Hans\0zh_Hant\0zh_Hant_HK\0"
-    "zh_Hant_MO\0";
+    "en_GI\0en_GM\0en_GY\0en_HK\0en_ID\0en_IE\0en_IL\0en_IM\0en_IN\0"
+    "en_IO\0en_JE\0en_JM\0en_KE\0en_KI\0en_KN\0en_KY\0en_LC\0en_LR\0"
+    "en_LS\0en_MG\0en_MO\0en_MS\0en_MT\0en_MU\0en_MV\0en_MW\0en_MY\0"
+    "en_NA\0en_NF\0en_NG\0en_NL\0en_NR\0en_NU\0en_NZ\0en_PG\0en_PK\0"
+    "en_PN\0en_PW\0en_RW\0en_SB\0en_SC\0en_SD\0en_SE\0en_SG\0en_SH\0"
+    "en_SI\0en_SL\0en_SS\0en_SX\0en_SZ\0en_Shaw\0en_TC\0en_TK\0en_TO\0"
+    "en_TT\0en_TV\0en_TZ\0en_UG\0en_VC\0en_VG\0en_VU\0en_WS\0en_ZA\0"
+    "en_ZM\0en_ZW\0es_419\0es_AR\0es_BO\0es_BR\0es_BZ\0es_CL\0es_CO\0"
+    "es_CR\0es_CU\0es_DO\0es_EC\0es_GT\0es_HN\0es_JP\0es_MX\0es_NI\0"
+    "es_PA\0es_PE\0es_PR\0es_PY\0es_SV\0es_US\0es_UY\0es_VE\0ff_Adlm\0"
+    "ff_Arab\0fr_HT\0ha_Arab\0hi_Latn\0ht\0iu_Latn\0kk_Arab\0ks_Deva\0"
+    "ku_Arab\0kxv_Deva\0kxv_Orya\0kxv_Telu\0ky_Arab\0ky_Latn\0ml_Arab\0"
+    "mn_Mong\0mni_Mtei\0ms_Arab\0nb\0nn\0no\0no_NO\0pa_Arab\0pt_AO\0"
+    "pt_CH\0pt_CV\0pt_FR\0pt_GQ\0pt_GW\0pt_LU\0pt_MO\0pt_MZ\0pt_PT\0"
+    "pt_ST\0pt_TL\0root\0sat_Deva\0sd_Deva\0sd_Khoj\0sd_Sind\0shi_Latn\0"
+    "so_Arab\0sr_Latn\0sw_Arab\0tg_Arab\0ug_Cyrl\0uz_Arab\0uz_Cyrl\0"
+    "vai_Latn\0wo_Arab\0yo_Arab\0yue_Hans\0zh_Hant\0zh_Hant_HK\0zh_Hant_MO\0"
+    "";
 
 const int32_t parentLocaleTable[] = {
-    0, 1017,  // az_Arab -> root
-    8, 1017,  // az_Cyrl -> root
-    16, 1017,  // bal_Latn -> root
-    25, 1017,  // blt_Latn -> root
-    34, 1017,  // bm_Nkoo -> root
-    42, 1017,  // bs_Cyrl -> root
-    50, 1017,  // byn_Latn -> root
-    59, 1017,  // cu_Glag -> root
-    67, 1017,  // dje_Arab -> root
-    76, 1017,  // dyo_Arab -> root
+    0, 1062,  // az_Arab -> root
+    8, 1062,  // az_Cyrl -> root
+    16, 1062,  // bal_Latn -> root
+    25, 1062,  // blt_Latn -> root
+    34, 1062,  // bm_Nkoo -> root
+    42, 1062,  // bs_Cyrl -> root
+    50, 1062,  // byn_Latn -> root
+    59, 1062,  // cu_Glag -> root
+    67, 1062,  // dje_Arab -> root
+    76, 1062,  // dyo_Arab -> root
     92, 85,  // en_150 -> en_001
     99, 85,  // en_AG -> en_001
     105, 85,  // en_AI -> en_001
@@ -483,7 +1189,7 @@
     201, 85,  // en_DG -> en_001
     207, 92,  // en_DK -> en_150
     213, 85,  // en_DM -> en_001
-    219, 1017,  // en_Dsrt -> root
+    219, 1062,  // en_Dsrt -> root
     227, 85,  // en_ER -> en_001
     233, 92,  // en_FI -> en_150
     239, 85,  // en_FJ -> en_001
@@ -497,135 +1203,141 @@
     287, 85,  // en_GM -> en_001
     293, 85,  // en_GY -> en_001
     299, 85,  // en_HK -> en_001
-    305, 85,  // en_IE -> en_001
-    311, 85,  // en_IL -> en_001
-    317, 85,  // en_IM -> en_001
-    323, 85,  // en_IN -> en_001
-    329, 85,  // en_IO -> en_001
-    335, 85,  // en_JE -> en_001
-    341, 85,  // en_JM -> en_001
-    347, 85,  // en_KE -> en_001
-    353, 85,  // en_KI -> en_001
-    359, 85,  // en_KN -> en_001
-    365, 85,  // en_KY -> en_001
-    371, 85,  // en_LC -> en_001
-    377, 85,  // en_LR -> en_001
-    383, 85,  // en_LS -> en_001
-    389, 85,  // en_MG -> en_001
-    395, 85,  // en_MO -> en_001
-    401, 85,  // en_MS -> en_001
-    407, 85,  // en_MT -> en_001
-    413, 85,  // en_MU -> en_001
-    419, 85,  // en_MV -> en_001
-    425, 85,  // en_MW -> en_001
-    431, 85,  // en_MY -> en_001
-    437, 85,  // en_NA -> en_001
-    443, 85,  // en_NF -> en_001
-    449, 85,  // en_NG -> en_001
-    455, 92,  // en_NL -> en_150
-    461, 85,  // en_NR -> en_001
-    467, 85,  // en_NU -> en_001
-    473, 85,  // en_NZ -> en_001
-    479, 85,  // en_PG -> en_001
-    485, 85,  // en_PK -> en_001
-    491, 85,  // en_PN -> en_001
-    497, 85,  // en_PW -> en_001
-    503, 85,  // en_RW -> en_001
-    509, 85,  // en_SB -> en_001
-    515, 85,  // en_SC -> en_001
-    521, 85,  // en_SD -> en_001
-    527, 92,  // en_SE -> en_150
-    533, 85,  // en_SG -> en_001
-    539, 85,  // en_SH -> en_001
-    545, 92,  // en_SI -> en_150
-    551, 85,  // en_SL -> en_001
-    557, 85,  // en_SS -> en_001
-    563, 85,  // en_SX -> en_001
-    569, 85,  // en_SZ -> en_001
-    575, 1017,  // en_Shaw -> root
-    583, 85,  // en_TC -> en_001
-    589, 85,  // en_TK -> en_001
-    595, 85,  // en_TO -> en_001
-    601, 85,  // en_TT -> en_001
-    607, 85,  // en_TV -> en_001
-    613, 85,  // en_TZ -> en_001
-    619, 85,  // en_UG -> en_001
-    625, 85,  // en_VC -> en_001
-    631, 85,  // en_VG -> en_001
-    637, 85,  // en_VU -> en_001
-    643, 85,  // en_WS -> en_001
-    649, 85,  // en_ZA -> en_001
-    655, 85,  // en_ZM -> en_001
-    661, 85,  // en_ZW -> en_001
-    674, 667,  // es_AR -> es_419
-    680, 667,  // es_BO -> es_419
-    686, 667,  // es_BR -> es_419
-    692, 667,  // es_BZ -> es_419
-    698, 667,  // es_CL -> es_419
-    704, 667,  // es_CO -> es_419
-    710, 667,  // es_CR -> es_419
-    716, 667,  // es_CU -> es_419
-    722, 667,  // es_DO -> es_419
-    728, 667,  // es_EC -> es_419
-    734, 667,  // es_GT -> es_419
-    740, 667,  // es_HN -> es_419
-    746, 667,  // es_MX -> es_419
-    752, 667,  // es_NI -> es_419
-    758, 667,  // es_PA -> es_419
-    764, 667,  // es_PE -> es_419
-    770, 667,  // es_PR -> es_419
-    776, 667,  // es_PY -> es_419
-    782, 667,  // es_SV -> es_419
-    788, 667,  // es_US -> es_419
-    794, 667,  // es_UY -> es_419
-    800, 667,  // es_VE -> es_419
-    806, 1017,  // ff_Adlm -> root
-    814, 1017,  // ff_Arab -> root
-    828, 1017,  // ha_Arab -> root
-    836, 323,  // hi_Latn -> en_IN
-    844, 822,  // ht -> fr_HT
-    847, 1017,  // iu_Latn -> root
-    855, 1017,  // kk_Arab -> root
-    863, 1017,  // ks_Deva -> root
-    871, 1017,  // ku_Arab -> root
-    879, 1017,  // ky_Arab -> root
-    887, 1017,  // ky_Latn -> root
-    895, 1017,  // ml_Arab -> root
-    903, 1017,  // mn_Mong -> root
-    911, 1017,  // mni_Mtei -> root
-    920, 1017,  // ms_Arab -> root
-    928, 934,  // nb -> no
-    931, 934,  // nn -> no
-    937, 1017,  // pa_Arab -> root
-    945, 999,  // pt_AO -> pt_PT
-    951, 999,  // pt_CH -> pt_PT
-    957, 999,  // pt_CV -> pt_PT
-    963, 999,  // pt_FR -> pt_PT
-    969, 999,  // pt_GQ -> pt_PT
-    975, 999,  // pt_GW -> pt_PT
-    981, 999,  // pt_LU -> pt_PT
-    987, 999,  // pt_MO -> pt_PT
-    993, 999,  // pt_MZ -> pt_PT
-    1005, 999,  // pt_ST -> pt_PT
-    1011, 999,  // pt_TL -> pt_PT
-    1022, 1017,  // sat_Deva -> root
-    1031, 1017,  // sd_Deva -> root
-    1039, 1017,  // sd_Khoj -> root
-    1047, 1017,  // sd_Sind -> root
-    1055, 1017,  // shi_Latn -> root
-    1064, 1017,  // so_Arab -> root
-    1072, 1017,  // sr_Latn -> root
-    1080, 1017,  // sw_Arab -> root
-    1088, 1017,  // tg_Arab -> root
-    1096, 1017,  // ug_Cyrl -> root
-    1104, 1017,  // uz_Arab -> root
-    1112, 1017,  // uz_Cyrl -> root
-    1120, 1017,  // vai_Latn -> root
-    1129, 1017,  // wo_Arab -> root
-    1137, 1017,  // yo_Arab -> root
-    1145, 1017,  // yue_Hans -> root
-    1154, 1017,  // zh_Hant -> root
-    1173, 1162,  // zh_Hant_MO -> zh_Hant_HK
+    305, 85,  // en_ID -> en_001
+    311, 85,  // en_IE -> en_001
+    317, 85,  // en_IL -> en_001
+    323, 85,  // en_IM -> en_001
+    329, 85,  // en_IN -> en_001
+    335, 85,  // en_IO -> en_001
+    341, 85,  // en_JE -> en_001
+    347, 85,  // en_JM -> en_001
+    353, 85,  // en_KE -> en_001
+    359, 85,  // en_KI -> en_001
+    365, 85,  // en_KN -> en_001
+    371, 85,  // en_KY -> en_001
+    377, 85,  // en_LC -> en_001
+    383, 85,  // en_LR -> en_001
+    389, 85,  // en_LS -> en_001
+    395, 85,  // en_MG -> en_001
+    401, 85,  // en_MO -> en_001
+    407, 85,  // en_MS -> en_001
+    413, 85,  // en_MT -> en_001
+    419, 85,  // en_MU -> en_001
+    425, 85,  // en_MV -> en_001
+    431, 85,  // en_MW -> en_001
+    437, 85,  // en_MY -> en_001
+    443, 85,  // en_NA -> en_001
+    449, 85,  // en_NF -> en_001
+    455, 85,  // en_NG -> en_001
+    461, 92,  // en_NL -> en_150
+    467, 85,  // en_NR -> en_001
+    473, 85,  // en_NU -> en_001
+    479, 85,  // en_NZ -> en_001
+    485, 85,  // en_PG -> en_001
+    491, 85,  // en_PK -> en_001
+    497, 85,  // en_PN -> en_001
+    503, 85,  // en_PW -> en_001
+    509, 85,  // en_RW -> en_001
+    515, 85,  // en_SB -> en_001
+    521, 85,  // en_SC -> en_001
+    527, 85,  // en_SD -> en_001
+    533, 92,  // en_SE -> en_150
+    539, 85,  // en_SG -> en_001
+    545, 85,  // en_SH -> en_001
+    551, 92,  // en_SI -> en_150
+    557, 85,  // en_SL -> en_001
+    563, 85,  // en_SS -> en_001
+    569, 85,  // en_SX -> en_001
+    575, 85,  // en_SZ -> en_001
+    581, 1062,  // en_Shaw -> root
+    589, 85,  // en_TC -> en_001
+    595, 85,  // en_TK -> en_001
+    601, 85,  // en_TO -> en_001
+    607, 85,  // en_TT -> en_001
+    613, 85,  // en_TV -> en_001
+    619, 85,  // en_TZ -> en_001
+    625, 85,  // en_UG -> en_001
+    631, 85,  // en_VC -> en_001
+    637, 85,  // en_VG -> en_001
+    643, 85,  // en_VU -> en_001
+    649, 85,  // en_WS -> en_001
+    655, 85,  // en_ZA -> en_001
+    661, 85,  // en_ZM -> en_001
+    667, 85,  // en_ZW -> en_001
+    680, 673,  // es_AR -> es_419
+    686, 673,  // es_BO -> es_419
+    692, 673,  // es_BR -> es_419
+    698, 673,  // es_BZ -> es_419
+    704, 673,  // es_CL -> es_419
+    710, 673,  // es_CO -> es_419
+    716, 673,  // es_CR -> es_419
+    722, 673,  // es_CU -> es_419
+    728, 673,  // es_DO -> es_419
+    734, 673,  // es_EC -> es_419
+    740, 673,  // es_GT -> es_419
+    746, 673,  // es_HN -> es_419
+    752, 673,  // es_JP -> es_419
+    758, 673,  // es_MX -> es_419
+    764, 673,  // es_NI -> es_419
+    770, 673,  // es_PA -> es_419
+    776, 673,  // es_PE -> es_419
+    782, 673,  // es_PR -> es_419
+    788, 673,  // es_PY -> es_419
+    794, 673,  // es_SV -> es_419
+    800, 673,  // es_US -> es_419
+    806, 673,  // es_UY -> es_419
+    812, 673,  // es_VE -> es_419
+    818, 1062,  // ff_Adlm -> root
+    826, 1062,  // ff_Arab -> root
+    840, 1062,  // ha_Arab -> root
+    848, 329,  // hi_Latn -> en_IN
+    856, 834,  // ht -> fr_HT
+    859, 1062,  // iu_Latn -> root
+    867, 1062,  // kk_Arab -> root
+    875, 1062,  // ks_Deva -> root
+    883, 1062,  // ku_Arab -> root
+    891, 1062,  // kxv_Deva -> root
+    900, 1062,  // kxv_Orya -> root
+    909, 1062,  // kxv_Telu -> root
+    918, 1062,  // ky_Arab -> root
+    926, 1062,  // ky_Latn -> root
+    934, 1062,  // ml_Arab -> root
+    942, 1062,  // mn_Mong -> root
+    950, 1062,  // mni_Mtei -> root
+    959, 1062,  // ms_Arab -> root
+    967, 973,  // nb -> no
+    970, 973,  // nn -> no
+    976, 973,  // no_NO -> no
+    982, 1062,  // pa_Arab -> root
+    990, 1044,  // pt_AO -> pt_PT
+    996, 1044,  // pt_CH -> pt_PT
+    1002, 1044,  // pt_CV -> pt_PT
+    1008, 1044,  // pt_FR -> pt_PT
+    1014, 1044,  // pt_GQ -> pt_PT
+    1020, 1044,  // pt_GW -> pt_PT
+    1026, 1044,  // pt_LU -> pt_PT
+    1032, 1044,  // pt_MO -> pt_PT
+    1038, 1044,  // pt_MZ -> pt_PT
+    1050, 1044,  // pt_ST -> pt_PT
+    1056, 1044,  // pt_TL -> pt_PT
+    1067, 1062,  // sat_Deva -> root
+    1076, 1062,  // sd_Deva -> root
+    1084, 1062,  // sd_Khoj -> root
+    1092, 1062,  // sd_Sind -> root
+    1100, 1062,  // shi_Latn -> root
+    1109, 1062,  // so_Arab -> root
+    1117, 1062,  // sr_Latn -> root
+    1125, 1062,  // sw_Arab -> root
+    1133, 1062,  // tg_Arab -> root
+    1141, 1062,  // ug_Cyrl -> root
+    1149, 1062,  // uz_Arab -> root
+    1157, 1062,  // uz_Cyrl -> root
+    1165, 1062,  // vai_Latn -> root
+    1174, 1062,  // wo_Arab -> root
+    1182, 1062,  // yo_Arab -> root
+    1190, 1062,  // yue_Hans -> root
+    1199, 1062,  // zh_Hant -> root
+    1218, 1207,  // zh_Hant_MO -> zh_Hant_HK
 };
 
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/localematcher.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/localematcher.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -51,7 +51,7 @@
 
 U_NAMESPACE_BEGIN
 
-LocaleMatcher::Result::Result(LocaleMatcher::Result &&src) U_NOEXCEPT :
+LocaleMatcher::Result::Result(LocaleMatcher::Result &&src) noexcept :
         desiredLocale(src.desiredLocale),
         supportedLocale(src.supportedLocale),
         desiredIndex(src.desiredIndex),
@@ -70,7 +70,7 @@
     }
 }
 
-LocaleMatcher::Result &LocaleMatcher::Result::operator=(LocaleMatcher::Result &&src) U_NOEXCEPT {
+LocaleMatcher::Result &LocaleMatcher::Result::operator=(LocaleMatcher::Result &&src) noexcept {
     this->~Result();
 
     desiredLocale = src.desiredLocale;
@@ -122,7 +122,7 @@
     return b.build(errorCode);
 }
 
-LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) U_NOEXCEPT :
+LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) noexcept :
         errorCode_(src.errorCode_),
         supportedLocales_(src.supportedLocales_),
         thresholdDistance_(src.thresholdDistance_),
@@ -142,7 +142,7 @@
     delete maxDistanceSupported_;
 }
 
-LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder &&src) U_NOEXCEPT {
+LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder &&src) noexcept {
     this->~Builder();
 
     errorCode_ = src.errorCode_;
@@ -307,7 +307,7 @@
     if (U_FAILURE(errorCode) || locale.isBogus() || *locale.getName() == 0 /* "und" */) {
         return UND_LSR;
     } else {
-        return likelySubtags.makeMaximizedLsrFrom(locale, errorCode);
+        return likelySubtags.makeMaximizedLsrFrom(locale, false, errorCode);
     }
 }
 
@@ -483,7 +483,7 @@
     }
 }
 
-LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
+LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) noexcept :
         likelySubtags(src.likelySubtags),
         localeDistance(src.localeDistance),
         thresholdDistance(src.thresholdDistance),
@@ -520,7 +520,7 @@
     delete ownedDefaultLocale;
 }
 
-LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
+LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) noexcept {
     this->~LocaleMatcher();
 
     thresholdDistance = src.thresholdDistance;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -35,7 +35,7 @@
 
 U_NAMESPACE_BEGIN
 
-static icu::Locale*  availableLocaleList = NULL;
+static icu::Locale*  availableLocaleList = nullptr;
 static int32_t  availableLocaleListCount;
 static icu::UInitOnce gInitOnceLocale {};
 
@@ -43,13 +43,13 @@
 
 U_CDECL_BEGIN
 
-static UBool U_CALLCONV locale_available_cleanup(void)
+static UBool U_CALLCONV locale_available_cleanup()
 {
     U_NAMESPACE_USE
 
     if (availableLocaleList) {
         delete []availableLocaleList;
-        availableLocaleList = NULL;
+        availableLocaleList = nullptr;
     }
     availableLocaleListCount = 0;
     gInitOnceLocale.reset();
@@ -71,7 +71,7 @@
     if(availableLocaleListCount) {
        availableLocaleList = new Locale[availableLocaleListCount];
     }
-    if (availableLocaleList == NULL) {
+    if (availableLocaleList == nullptr) {
         availableLocaleListCount= 0;
     }
     for (int32_t locCount=availableLocaleListCount-1; locCount>=0; --locCount) {
@@ -106,7 +106,7 @@
 
 class AvailableLocalesSink : public ResourceSink {
   public:
-    void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) U_OVERRIDE {
+    void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
         ResourceTable resIndexTable = value.getTable(status);
         if (U_FAILURE(status)) {
             return;
@@ -196,7 +196,7 @@
 
 /* ### Get available **************************************************/
 
-static UBool U_CALLCONV uloc_cleanup(void) {
+static UBool U_CALLCONV uloc_cleanup() {
     for (int32_t i = 0; i < UPRV_LENGTHOF(gAvailableLocaleNames); i++) {
         uprv_free(gAvailableLocaleNames[i]);
         gAvailableLocaleNames[i] = nullptr;
@@ -212,7 +212,7 @@
 static void U_CALLCONV loadInstalledLocales(UErrorCode& status) {
     ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
 
-    icu::LocalUResourceBundlePointer rb(ures_openDirect(NULL, "res_index", &status));
+    icu::LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "res_index", &status));
     AvailableLocalesSink sink;
     ures_getAllItemsWithFallback(rb.getAlias(), "", sink, status);
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -22,7 +22,7 @@
 
 const char* LocaleBased::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
     switch(type) {
@@ -32,7 +32,7 @@
         return actual;
     default:
         status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
 }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -55,7 +55,7 @@
 UnicodeString&
 Locale::getDisplayLanguage(const Locale &displayLocale,
                            UnicodeString &result) const {
-    UChar *buffer;
+    char16_t *buffer;
     UErrorCode errorCode=U_ZERO_ERROR;
     int32_t length;
 
@@ -95,7 +95,7 @@
 UnicodeString&
 Locale::getDisplayScript(const Locale &displayLocale,
                           UnicodeString &result) const {
-    UChar *buffer;
+    char16_t *buffer;
     UErrorCode errorCode=U_ZERO_ERROR;
     int32_t length;
 
@@ -135,7 +135,7 @@
 UnicodeString&
 Locale::getDisplayCountry(const Locale &displayLocale,
                           UnicodeString &result) const {
-    UChar *buffer;
+    char16_t *buffer;
     UErrorCode errorCode=U_ZERO_ERROR;
     int32_t length;
 
@@ -175,7 +175,7 @@
 UnicodeString&
 Locale::getDisplayVariant(const Locale &displayLocale,
                           UnicodeString &result) const {
-    UChar *buffer;
+    char16_t *buffer;
     UErrorCode errorCode=U_ZERO_ERROR;
     int32_t length;
 
@@ -215,7 +215,7 @@
 UnicodeString&
 Locale::getDisplayName(const Locale &displayLocale,
                        UnicodeString &result) const {
-    UChar *buffer;
+    char16_t *buffer;
     UErrorCode errorCode=U_ZERO_ERROR;
     int32_t length;
 
@@ -302,12 +302,12 @@
                     const char* subTableKey,
                     const char *itemKey,
                     const char *substitute,
-                    UChar *dest, int32_t destCapacity,
+                    char16_t *dest, int32_t destCapacity,
                     UErrorCode *pErrorCode) {
-    const UChar *s = NULL;
+    const char16_t *s = nullptr;
     int32_t length = 0;
 
-    if(itemKey==NULL) {
+    if(itemKey==nullptr) {
         /* top-level item: normal resource bundle access */
         icu::LocalUResourceBundlePointer rb(ures_open(path, locale, pErrorCode));
 
@@ -318,7 +318,7 @@
     } else {
         bool isLanguageCode = (uprv_strncmp(tableKey, _kLanguages, 9) == 0);
         /* Language code should not be a number. If it is, set the error code. */
-        if (isLanguageCode && uprv_strtol(itemKey, NULL, 10)) {
+        if (isLanguageCode && uprv_strtol(itemKey, nullptr, 10)) {
             *pErrorCode = U_MISSING_RESOURCE_ERROR;
         } else {
             /* second-level item, use special fallback */
@@ -344,7 +344,7 @@
 
     if(U_SUCCESS(*pErrorCode)) {
         int32_t copyLength=uprv_min(length, destCapacity);
-        if(copyLength>0 && s != NULL) {
+        if(copyLength>0 && s != nullptr) {
             u_memcpy(dest, s, copyLength);
         }
     } else {
@@ -362,7 +362,7 @@
 static int32_t
 _getDisplayNameForComponent(const char *locale,
                             const char *displayLocale,
-                            UChar *dest, int32_t destCapacity,
+                            char16_t *dest, int32_t destCapacity,
                             UDisplayNameGetter *getter,
                             const char *tag,
                             UErrorCode *pErrorCode) {
@@ -369,14 +369,14 @@
     char localeBuffer[ULOC_FULLNAME_CAPACITY*4];
     int32_t length;
     UErrorCode localStatus;
-    const char* root = NULL;
+    const char* root = nullptr;
 
     /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
+    if(destCapacity<0 || (destCapacity>0 && dest==nullptr)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -399,7 +399,7 @@
     root = tag == _kCountries ? U_ICUDATA_REGION : U_ICUDATA_LANG;
 
     return _getStringOrCopyKey(root, displayLocale,
-                               tag, NULL, localeBuffer,
+                               tag, nullptr, localeBuffer,
                                localeBuffer,
                                dest, destCapacity,
                                pErrorCode);
@@ -408,7 +408,7 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayLanguage(const char *locale,
                         const char *displayLocale,
-                        UChar *dest, int32_t destCapacity,
+                        char16_t *dest, int32_t destCapacity,
                         UErrorCode *pErrorCode) {
     return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
                 uloc_getLanguage, _kLanguages, pErrorCode);
@@ -417,7 +417,7 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayScript(const char* locale,
                       const char* displayLocale,
-                      UChar *dest, int32_t destCapacity,
+                      char16_t *dest, int32_t destCapacity,
                       UErrorCode *pErrorCode)
 {
     UErrorCode err = U_ZERO_ERROR;
@@ -442,7 +442,7 @@
 static int32_t
 uloc_getDisplayScriptInContext(const char* locale,
                       const char* displayLocale,
-                      UChar *dest, int32_t destCapacity,
+                      char16_t *dest, int32_t destCapacity,
                       UErrorCode *pErrorCode)
 {
     return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
@@ -452,7 +452,7 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayCountry(const char *locale,
                        const char *displayLocale,
-                       UChar *dest, int32_t destCapacity,
+                       char16_t *dest, int32_t destCapacity,
                        UErrorCode *pErrorCode) {
     return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
                 uloc_getCountry, _kCountries, pErrorCode);
@@ -466,7 +466,7 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayVariant(const char *locale,
                        const char *displayLocale,
-                       UChar *dest, int32_t destCapacity,
+                       char16_t *dest, int32_t destCapacity,
                        UErrorCode *pErrorCode) {
     return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
                 uloc_getVariant, _kVariants, pErrorCode);
@@ -487,14 +487,14 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayName(const char *locale,
                     const char *displayLocale,
-                    UChar *dest, int32_t destCapacity,
+                    char16_t *dest, int32_t destCapacity,
                     UErrorCode *pErrorCode)
 {
-    static const UChar defaultSeparator[9] = { 0x007b, 0x0030, 0x007d, 0x002c, 0x0020, 0x007b, 0x0031, 0x007d, 0x0000 }; /* "{0}, {1}" */
-    static const UChar sub0[4] = { 0x007b, 0x0030, 0x007d , 0x0000 } ; /* {0} */
-    static const UChar sub1[4] = { 0x007b, 0x0031, 0x007d , 0x0000 } ; /* {1} */
+    static const char16_t defaultSeparator[9] = { 0x007b, 0x0030, 0x007d, 0x002c, 0x0020, 0x007b, 0x0031, 0x007d, 0x0000 }; /* "{0}, {1}" */
+    static const char16_t sub0[4] = { 0x007b, 0x0030, 0x007d , 0x0000 } ; /* {0} */
+    static const char16_t sub1[4] = { 0x007b, 0x0031, 0x007d , 0x0000 } ; /* {1} */
     static const int32_t subLen = 3;
-    static const UChar defaultPattern[10] = {
+    static const char16_t defaultPattern[10] = {
         0x007b, 0x0030, 0x007d, 0x0020, 0x0028, 0x007b, 0x0031, 0x007d, 0x0029, 0x0000
     }; /* {0} ({1}) */
     static const int32_t defaultPatLen = 9;
@@ -503,16 +503,16 @@
 
     int32_t length; /* of formatted result */
 
-    const UChar *separator;
+    const char16_t *separator;
     int32_t sepLen = 0;
-    const UChar *pattern;
+    const char16_t *pattern;
     int32_t patLen = 0;
     int32_t sub0Pos, sub1Pos;
     
-    UChar formatOpenParen         = 0x0028; // (
-    UChar formatReplaceOpenParen  = 0x005B; // [
-    UChar formatCloseParen        = 0x0029; // )
-    UChar formatReplaceCloseParen = 0x005D; // ]
+    char16_t formatOpenParen         = 0x0028; // (
+    char16_t formatReplaceOpenParen  = 0x005B; // [
+    char16_t formatCloseParen        = 0x0029; // )
+    char16_t formatReplaceCloseParen = 0x005D; // ]
 
     UBool haveLang = true; /* assume true, set false if we find we don't have
                               a lang component in the locale */
@@ -522,11 +522,11 @@
 
     int32_t langi = 0; /* index of the language substitution (0 or 1), virtually always 0 */
 
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
+    if(destCapacity<0 || (destCapacity>0 && dest==nullptr)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -537,7 +537,7 @@
         icu::LocalUResourceBundlePointer locbundle(
                 ures_open(U_ICUDATA_LANG, displayLocale, &status));
         icu::LocalUResourceBundlePointer dspbundle(
-                ures_getByKeyWithFallback(locbundle.getAlias(), _kLocaleDisplayPattern, NULL, &status));
+                ures_getByKeyWithFallback(locbundle.getAlias(), _kLocaleDisplayPattern, nullptr, &status));
 
         separator=ures_getStringByKeyWithFallback(dspbundle.getAlias(), _kSeparator, &sepLen, &status);
         pattern=ures_getStringByKeyWithFallback(dspbundle.getAlias(), _kPattern, &patLen, &status);
@@ -557,13 +557,13 @@
      * This is similar to how pattern is handled below.
      */
     {
-        UChar *p0=u_strstr(separator, sub0);
-        UChar *p1=u_strstr(separator, sub1);
-        if (p0==NULL || p1==NULL || p1<p0) {
+        char16_t *p0=u_strstr(separator, sub0);
+        char16_t *p1=u_strstr(separator, sub1);
+        if (p0==nullptr || p1==nullptr || p1<p0) {
             *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return 0;
         }
-        separator = (const UChar *)p0 + subLen;
+        separator = (const char16_t *)p0 + subLen;
         sepLen = static_cast<int32_t>(p1 - separator);
     }
 
@@ -574,9 +574,9 @@
         sub1Pos=defaultSub1Pos;
         // use default formatOpenParen etc. set above
     } else { /* non-default pattern */
-        UChar *p0=u_strstr(pattern, sub0);
-        UChar *p1=u_strstr(pattern, sub1);
-        if (p0==NULL || p1==NULL) {
+        char16_t *p0=u_strstr(pattern, sub0);
+        char16_t *p1=u_strstr(pattern, sub1);
+        if (p0==nullptr || p1==nullptr) {
             *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return 0;
         }
@@ -586,7 +586,7 @@
             int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t;
             langi=1;
         }
-        if (u_strchr(pattern, 0xFF08) != NULL) {
+        if (u_strchr(pattern, 0xFF08) != nullptr) {
             formatOpenParen         = 0xFF08; // fullwidth (
             formatReplaceOpenParen  = 0xFF3B; // fullwidth [
             formatCloseParen        = 0xFF09; // fullwidth )
@@ -602,7 +602,7 @@
      * adjust the parameters so padding is not added, and repeat.
      */
     do {
-        UChar* p=dest;
+        char16_t* p=dest;
         int32_t patPos=0; /* position in the pattern, used for non-substitution portions */
         int32_t langLen=0; /* length of language substitution */
         int32_t langPos=0; /* position in output of language substitution */
@@ -665,7 +665,7 @@
                             U_FALLTHROUGH;
                         default: {
                             const char* kw=uenum_next(kenum.getAlias(), &len, pErrorCode);
-                            if (kw == NULL) {
+                            if (kw == nullptr) {
                                 len=0; /* mark that we didn't add a component */
                                 subdone=true;
                             } else {
@@ -712,7 +712,7 @@
                     if (len>0) {
                         /* we added a component, so add separator and write it if there's room. */
                         if(len+sepLen<=cap) {
-                            const UChar * plimit = p + len;
+                            const char16_t * plimit = p + len;
                             for (; p < plimit; p++) {
                                 if (*p == formatOpenParen) {
                                     *p = formatReplaceOpenParen;
@@ -788,24 +788,24 @@
 U_CAPI int32_t U_EXPORT2
 uloc_getDisplayKeyword(const char* keyword,
                        const char* displayLocale,
-                       UChar* dest,
+                       char16_t* dest,
                        int32_t destCapacity,
                        UErrorCode* status){
 
     /* argument checking */
-    if(status==NULL || U_FAILURE(*status)) {
+    if(status==nullptr || U_FAILURE(*status)) {
         return 0;
     }
 
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
+    if(destCapacity<0 || (destCapacity>0 && dest==nullptr)) {
         *status=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
 
 
-    /* pass itemKey=NULL to look for a top-level item */
+    /* pass itemKey=nullptr to look for a top-level item */
     return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale,
-                               _kKeys, NULL, 
+                               _kKeys, nullptr,
                                keyword, 
                                keyword,      
                                dest, destCapacity,
@@ -820,17 +820,17 @@
 uloc_getDisplayKeywordValue(   const char* locale,
                                const char* keyword,
                                const char* displayLocale,
-                               UChar* dest,
+                               char16_t* dest,
                                int32_t destCapacity,
                                UErrorCode* status){
 
 
     /* argument checking */
-    if(status==NULL || U_FAILURE(*status)) {
+    if(status==nullptr || U_FAILURE(*status)) {
         return 0;
     }
 
-    if(destCapacity<0 || (destCapacity>0 && dest==NULL)) {
+    if(destCapacity<0 || (destCapacity>0 && dest==nullptr)) {
         *status=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -849,14 +849,14 @@
     if(uprv_stricmp(keyword, _kCurrency)==0){
 
         int32_t dispNameLen = 0;
-        const UChar *dispName = NULL;
+        const char16_t *dispName = nullptr;
 
         icu::LocalUResourceBundlePointer bundle(
                 ures_open(U_ICUDATA_CURR, displayLocale, status));
         icu::LocalUResourceBundlePointer currencies(
-                ures_getByKey(bundle.getAlias(), _kCurrencies, NULL, status));
+                ures_getByKey(bundle.getAlias(), _kCurrencies, nullptr, status));
         icu::LocalUResourceBundlePointer currency(
-                ures_getByKeyWithFallback(currencies.getAlias(), keywordValue.data(), NULL, status));
+                ures_getByKeyWithFallback(currencies.getAlias(), keywordValue.data(), nullptr, status));
 
         dispName = ures_getStringByIndex(currency.getAlias(), UCURRENCY_DISPLAY_NAME_INDEX, &dispNameLen, status);
 
@@ -869,8 +869,8 @@
             }
         }
 
-        /* now copy the dispName over if not NULL */
-        if(dispName != NULL){
+        /* now copy the dispName over if not nullptr */
+        if(dispName != nullptr){
             if(dispNameLen <= destCapacity){
                 u_memcpy(dest, dispName, dispNameLen);
                 return u_terminateUChars(dest, destCapacity, dispNameLen, status);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -40,7 +40,7 @@
   char *p = buffer;
   const char* e = buffer + buflen - 1;
 
-  if (buffer == NULL || buflen < 1) {
+  if (buffer == nullptr || buflen < 1) {
     return -1;
   }
 
@@ -86,16 +86,16 @@
 
 inline UnicodeString &
 ICUDataTable::get(const char* tableKey, const char* itemKey, UnicodeString& result) const {
-    return get(tableKey, NULL, itemKey, result);
+    return get(tableKey, nullptr, itemKey, result);
 }
 
 inline UnicodeString &
 ICUDataTable::getNoFallback(const char* tableKey, const char* itemKey, UnicodeString& result) const {
-    return getNoFallback(tableKey, NULL, itemKey, result);
+    return getNoFallback(tableKey, nullptr, itemKey, result);
 }
 
 ICUDataTable::ICUDataTable(const char* path, const Locale& locale)
-    : path(NULL), locale(Locale::getRoot())
+    : path(nullptr), locale(Locale::getRoot())
 {
   if (path) {
     int32_t len = static_cast<int32_t>(uprv_strlen(path));
@@ -110,7 +110,7 @@
 ICUDataTable::~ICUDataTable() {
   if (path) {
     uprv_free((void*) path);
-    path = NULL;
+    path = nullptr;
   }
 }
 
@@ -125,7 +125,7 @@
   UErrorCode status = U_ZERO_ERROR;
   int32_t len = 0;
 
-  const UChar *s = uloc_getTableStringWithFallback(path, locale.getName(),
+  const char16_t *s = uloc_getTableStringWithFallback(path, locale.getName(),
                                                    tableKey, subTableKey, itemKey,
                                                    &len, &status);
   if (U_SUCCESS(status) && len > 0) {
@@ -140,7 +140,7 @@
   UErrorCode status = U_ZERO_ERROR;
   int32_t len = 0;
 
-  const UChar *s = uloc_getTableStringWithFallback(path, locale.getName(),
+  const char16_t *s = uloc_getTableStringWithFallback(path, locale.getName(),
                                                    tableKey, subTableKey, itemKey,
                                                    &len, &status);
   if (U_SUCCESS(status)) {
@@ -347,7 +347,7 @@
     UnicodeString& keyDisplayName(const char* key, UnicodeString& result, UBool skipAdjust) const;
     UnicodeString& keyValueDisplayName(const char* key, const char* value,
                                         UnicodeString& result, UBool skipAdjust) const;
-    void initialize(void);
+    void initialize();
 
     struct CapitalizationContextSink;
 };
@@ -358,7 +358,7 @@
     , langData(U_ICUDATA_LANG, locale)
     , regionData(U_ICUDATA_REGION, locale)
     , capitalizationContext(UDISPCTX_CAPITALIZATION_NONE)
-    , capitalizationBrkIter(NULL)
+    , capitalizationBrkIter(nullptr)
     , nameLength(UDISPCTX_LENGTH_FULL)
     , substitute(UDISPCTX_SUBSTITUTE)
 {
@@ -371,7 +371,7 @@
     , langData(U_ICUDATA_LANG, locale)
     , regionData(U_ICUDATA_REGION, locale)
     , capitalizationContext(UDISPCTX_CAPITALIZATION_NONE)
-    , capitalizationBrkIter(NULL)
+    , capitalizationBrkIter(nullptr)
     , nameLength(UDISPCTX_LENGTH_FULL)
     , substitute(UDISPCTX_SUBSTITUTE)
 {
@@ -447,7 +447,7 @@
 LocaleDisplayNamesImpl::CapitalizationContextSink::~CapitalizationContextSink() {}
 
 void
-LocaleDisplayNamesImpl::initialize(void) {
+LocaleDisplayNamesImpl::initialize() {
     LocaleDisplayNamesImpl *nonConstThis = (LocaleDisplayNamesImpl *)this;
     nonConstThis->locale = langData.getLocale() == Locale::getRoot()
         ? regionData.getLocale()
@@ -467,16 +467,16 @@
         pattern = UnicodeString("{0} ({1})", -1, US_INV);
     }
     format.applyPatternMinMaxArguments(pattern, 2, 2, status);
-    if (pattern.indexOf((UChar)0xFF08) >= 0) {
-        formatOpenParen.setTo((UChar)0xFF08);         // fullwidth (
-        formatReplaceOpenParen.setTo((UChar)0xFF3B);  // fullwidth [
-        formatCloseParen.setTo((UChar)0xFF09);        // fullwidth )
-        formatReplaceCloseParen.setTo((UChar)0xFF3D); // fullwidth ]
+    if (pattern.indexOf((char16_t)0xFF08) >= 0) {
+        formatOpenParen.setTo((char16_t)0xFF08);         // fullwidth (
+        formatReplaceOpenParen.setTo((char16_t)0xFF3B);  // fullwidth [
+        formatCloseParen.setTo((char16_t)0xFF09);        // fullwidth )
+        formatReplaceCloseParen.setTo((char16_t)0xFF3D); // fullwidth ]
     } else {
-        formatOpenParen.setTo((UChar)0x0028);         // (
-        formatReplaceOpenParen.setTo((UChar)0x005B);  // [
-        formatCloseParen.setTo((UChar)0x0029);        // )
-        formatReplaceCloseParen.setTo((UChar)0x005D); // ]
+        formatOpenParen.setTo((char16_t)0x0028);         // (
+        formatReplaceOpenParen.setTo((char16_t)0x005B);  // [
+        formatCloseParen.setTo((char16_t)0x0029);        // )
+        formatReplaceCloseParen.setTo((char16_t)0x005D); // ]
     }
 
     UnicodeString ktPattern;
@@ -492,7 +492,7 @@
     // Also check whether we will need a break iterator (depends on the data)
     UBool needBrkIter = false;
     if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_STANDALONE) {
-        LocalUResourceBundlePointer resource(ures_open(NULL, locale.getName(), &status));
+        LocalUResourceBundlePointer resource(ures_open(nullptr, locale.getName(), &status));
         if (U_FAILURE(status)) { return; }
         CapitalizationContextSink sink(*this);
         ures_getAllItemsWithFallback(resource.getAlias(), "contextTransforms", sink, status);
@@ -510,7 +510,7 @@
         capitalizationBrkIter = BreakIterator::createSentenceInstance(locale, status);
         if (U_FAILURE(status)) {
             delete capitalizationBrkIter;
-            capitalizationBrkIter = NULL;
+            capitalizationBrkIter = nullptr;
         }
     }
 #endif
@@ -554,7 +554,7 @@
                                                 UnicodeString& result) const {
 #if !UCONFIG_NO_BREAK_ITERATION
     // check to see whether we need to titlecase result
-    if ( result.length() > 0 && u_islower(result.char32At(0)) && capitalizationBrkIter!= NULL &&
+    if ( result.length() > 0 && u_islower(result.char32At(0)) && capitalizationBrkIter!= nullptr &&
           ( capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE || fCapitalization[usage] ) ) {
         // note fCapitalization[usage] won't be set unless capitalizationContext is UI_LIST_OR_MENU or STANDALONE
         static UMutex capitalizationBrkIterLock;
@@ -660,7 +660,7 @@
     UnicodeString temp2;
     char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY
     const char* key;
-    while ((key = e->next((int32_t *)0, status)) != NULL) {
+    while ((key = e->next((int32_t *)0, status)) != nullptr) {
       value[0] = 0;
       loc.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status);
       if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
@@ -680,7 +680,7 @@
         appendWithSep(resultRemainder, temp3);
       } else {
         appendWithSep(resultRemainder, temp)
-          .append((UChar)0x3d /* = */)
+          .append((char16_t)0x3d /* = */)
           .append(temp2);
       }
     }
@@ -702,7 +702,7 @@
     } else {
         const UnicodeString *values[2] = { &buffer, &src };
         UErrorCode status = U_ZERO_ERROR;
-        separatorFormat.formatAndReplace(values, 2, buffer, NULL, 0, status);
+        separatorFormat.formatAndReplace(values, 2, buffer, nullptr, 0, status);
     }
     return buffer;
 }
@@ -724,7 +724,7 @@
         }
     }
     langData.getNoFallback("Languages", localeId, result);
-    if (result.isBogus() && uprv_strchr(localeId, '_') == NULL) {
+    if (result.isBogus() && uprv_strchr(localeId, '_') == nullptr) {
         // Canonicalize lang and try again, ICU-20870
         // (only for language codes without script or region)
         Locale canonLocale = Locale::createCanonical(localeId);
@@ -747,7 +747,7 @@
 UnicodeString&
 LocaleDisplayNamesImpl::languageDisplayName(const char* lang,
                                             UnicodeString& result) const {
-    if (uprv_strcmp("root", lang) == 0 || uprv_strchr(lang, '_') != NULL) {
+    if (uprv_strcmp("root", lang) == 0 || uprv_strchr(lang, '_') != nullptr) {
         return result = UnicodeString(lang, -1, US_INV);
     }
     if (nameLength == UDISPCTX_LENGTH_SHORT) {
@@ -879,7 +879,7 @@
         UErrorCode sts = U_ZERO_ERROR;
         UnicodeString ustrValue(value, -1, US_INV);
         int32_t len;
-        const UChar *currencyName = ucurr_getName(ustrValue.getTerminatedBuffer(),
+        const char16_t *currencyName = ucurr_getName(ustrValue.getTerminatedBuffer(),
             locale.getBaseName(), UCURR_LONG_NAME, nullptr /* isChoiceFormat */, &len, &sts);
         if (U_FAILURE(sts)) {
             // Return the value as is on failure
@@ -922,7 +922,7 @@
 LocaleDisplayNames*
 LocaleDisplayNames::createInstance(const Locale& locale,
                                    UDisplayContext *contexts, int32_t length) {
-    if (contexts == NULL) {
+    if (contexts == nullptr) {
         length = 0;
     }
     return new LocaleDisplayNamesImpl(locale, contexts, length);
@@ -941,7 +941,7 @@
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (locale == NULL) {
+  if (locale == nullptr) {
     locale = uloc_getDefault();
   }
   return (ULocaleDisplayNames *)LocaleDisplayNames::createInstance(Locale(locale), dialectHandling);
@@ -954,7 +954,7 @@
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (locale == NULL) {
+  if (locale == nullptr) {
     locale = uloc_getDefault();
   }
   return (ULocaleDisplayNames *)LocaleDisplayNames::createInstance(Locale(locale), contexts, length);
@@ -971,7 +971,7 @@
   if (ldn) {
     return ((const LocaleDisplayNames *)ldn)->getLocale().getName();
   }
-  return NULL;
+  return nullptr;
 }
 
 U_CAPI UDialectHandling U_EXPORT2
@@ -995,13 +995,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_localeDisplayName(const ULocaleDisplayNames *ldn,
                        const char *locale,
-                       UChar *result,
+                       char16_t *result,
                        int32_t maxResultSize,
                        UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || locale == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || locale == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1017,13 +1017,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_languageDisplayName(const ULocaleDisplayNames *ldn,
                          const char *lang,
-                         UChar *result,
+                         char16_t *result,
                          int32_t maxResultSize,
                          UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || lang == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || lang == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1035,13 +1035,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_scriptDisplayName(const ULocaleDisplayNames *ldn,
                        const char *script,
-                       UChar *result,
+                       char16_t *result,
                        int32_t maxResultSize,
                        UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || script == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || script == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1053,7 +1053,7 @@
 U_CAPI int32_t U_EXPORT2
 uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn,
                            UScriptCode scriptCode,
-                           UChar *result,
+                           char16_t *result,
                            int32_t maxResultSize,
                            UErrorCode *pErrorCode) {
   return uldn_scriptDisplayName(ldn, uscript_getName(scriptCode), result, maxResultSize, pErrorCode);
@@ -1062,13 +1062,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_regionDisplayName(const ULocaleDisplayNames *ldn,
                        const char *region,
-                       UChar *result,
+                       char16_t *result,
                        int32_t maxResultSize,
                        UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || region == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || region == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1080,13 +1080,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_variantDisplayName(const ULocaleDisplayNames *ldn,
                         const char *variant,
-                        UChar *result,
+                        char16_t *result,
                         int32_t maxResultSize,
                         UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || variant == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || variant == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1098,13 +1098,13 @@
 U_CAPI int32_t U_EXPORT2
 uldn_keyDisplayName(const ULocaleDisplayNames *ldn,
                     const char *key,
-                    UChar *result,
+                    char16_t *result,
                     int32_t maxResultSize,
                     UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || key == NULL || (result == NULL && maxResultSize > 0) || maxResultSize < 0) {
+  if (ldn == nullptr || key == nullptr || (result == nullptr && maxResultSize > 0) || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;
   }
@@ -1117,13 +1117,13 @@
 uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn,
                          const char *key,
                          const char *value,
-                         UChar *result,
+                         char16_t *result,
                          int32_t maxResultSize,
                          UErrorCode *pErrorCode) {
   if (U_FAILURE(*pErrorCode)) {
     return 0;
   }
-  if (ldn == NULL || key == NULL || value == NULL || (result == NULL && maxResultSize > 0)
+  if (ldn == nullptr || key == nullptr || value == nullptr || (result == nullptr && maxResultSize > 0)
       || maxResultSize < 0) {
     *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -58,18 +58,18 @@
 #include "uvector.h"
 
 U_CDECL_BEGIN
-static UBool U_CALLCONV locale_cleanup(void);
+static UBool U_CALLCONV locale_cleanup();
 U_CDECL_END
 
 U_NAMESPACE_BEGIN
 
-static Locale   *gLocaleCache = NULL;
+static Locale   *gLocaleCache = nullptr;
 static UInitOnce gLocaleCacheInitOnce {};
 
 // gDefaultLocaleMutex protects all access to gDefaultLocalesHashT and gDefaultLocale.
 static UMutex gDefaultLocaleMutex;
-static UHashtable *gDefaultLocalesHashT = NULL;
-static Locale *gDefaultLocale = NULL;
+static UHashtable *gDefaultLocalesHashT = nullptr;
+static Locale *gDefaultLocale = nullptr;
 
 /**
  * \def ULOC_STRING_LIMIT
@@ -115,19 +115,19 @@
     delete (icu::Locale *) obj;
 }
 
-static UBool U_CALLCONV locale_cleanup(void)
+static UBool U_CALLCONV locale_cleanup()
 {
     U_NAMESPACE_USE
 
     delete [] gLocaleCache;
-    gLocaleCache = NULL;
+    gLocaleCache = nullptr;
     gLocaleCacheInitOnce.reset();
 
     if (gDefaultLocalesHashT) {
         uhash_close(gDefaultLocalesHashT);   // Automatically deletes all elements, using deleter func.
-        gDefaultLocalesHashT = NULL;
+        gDefaultLocalesHashT = nullptr;
     }
-    gDefaultLocale = NULL;
+    gDefaultLocale = nullptr;
     return true;
 }
 
@@ -135,9 +135,9 @@
 static void U_CALLCONV locale_init(UErrorCode &status) {
     U_NAMESPACE_USE
 
-    U_ASSERT(gLocaleCache == NULL);
+    U_ASSERT(gLocaleCache == nullptr);
     gLocaleCache = new Locale[(int)eMAX_LOCALES];
-    if (gLocaleCache == NULL) {
+    if (gLocaleCache == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -173,11 +173,11 @@
 
     UBool canonicalize = false;
 
-    // If given a NULL string for the locale id, grab the default
+    // If given a nullptr string for the locale id, grab the default
     //   name from the system.
     //   (Different from most other locale APIs, where a null name means use
     //    the current ICU default locale.)
-    if (id == NULL) {
+    if (id == nullptr) {
         id = uprv_getDefaultLocaleID();   // This function not thread safe? TODO: verify.
         canonicalize = true; // always canonicalize host ID
     }
@@ -196,8 +196,8 @@
         return gDefaultLocale;
     }
 
-    if (gDefaultLocalesHashT == NULL) {
-        gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status);
+    if (gDefaultLocalesHashT == nullptr) {
+        gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
         if (U_FAILURE(status)) {
             return gDefaultLocale;
         }
@@ -206,9 +206,9 @@
     }
 
     Locale *newDefault = (Locale *)uhash_get(gDefaultLocalesHashT, localeNameBuf.data());
-    if (newDefault == NULL) {
+    if (newDefault == nullptr) {
         newDefault = new Locale(Locale::eBOGUS);
-        if (newDefault == NULL) {
+        if (newDefault == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
             return gDefaultLocale;
         }
@@ -235,7 +235,7 @@
 /* end */
 
 U_CFUNC const char *
-locale_get_default(void)
+locale_get_default()
 {
     U_NAMESPACE_USE
     return Locale::getDefault().getName();
@@ -257,19 +257,19 @@
     if ((baseName != fullName) && (baseName != fullNameBuffer)) {
         uprv_free(baseName);
     }
-    baseName = NULL;
+    baseName = nullptr;
     /*if fullName is on the heap, we free it*/
     if (fullName != fullNameBuffer)
     {
         uprv_free(fullName);
-        fullName = NULL;
+        fullName = nullptr;
     }
 }
 
 Locale::Locale()
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
+    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
 {
-    init(NULL, false);
+    init(nullptr, false);
 }
 
 /*
@@ -278,7 +278,7 @@
  *   the default locale.)
  */
 Locale::Locale(Locale::ELocaleType)
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
+    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
 {
     setToBogus();
 }
@@ -288,11 +288,11 @@
                 const   char * newCountry,
                 const   char * newVariant,
                 const   char * newKeywords)
-    : UObject(), fullName(fullNameBuffer), baseName(NULL)
+    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
 {
-    if( (newLanguage==NULL) && (newCountry == NULL) && (newVariant == NULL) )
+    if( (newLanguage==nullptr) && (newCountry == nullptr) && (newVariant == nullptr) )
     {
-        init(NULL, false); /* shortcut */
+        init(nullptr, false); /* shortcut */
     }
     else
     {
@@ -305,7 +305,7 @@
         // Check the sizes of the input strings.
 
         // Language
-        if ( newLanguage != NULL )
+        if ( newLanguage != nullptr )
         {
             lsize = (int32_t)uprv_strlen(newLanguage);
             if ( lsize < 0 || lsize > ULOC_STRING_LIMIT ) { // int32 wrap
@@ -317,7 +317,7 @@
         CharString togo(newLanguage, lsize, status); // start with newLanguage
 
         // _Country
-        if ( newCountry != NULL )
+        if ( newCountry != nullptr )
         {
             csize = (int32_t)uprv_strlen(newCountry);
             if ( csize < 0 || csize > ULOC_STRING_LIMIT ) { // int32 wrap
@@ -327,7 +327,7 @@
         }
 
         // _Variant
-        if ( newVariant != NULL )
+        if ( newVariant != nullptr )
         {
             // remove leading _'s
             while(newVariant[0] == SEP_CHAR)
@@ -347,7 +347,7 @@
             }
         }
 
-        if ( newKeywords != NULL)
+        if ( newKeywords != nullptr)
         {
             ksize = (int32_t)uprv_strlen(newKeywords);
             if ( ksize < 0 || ksize > ULOC_STRING_LIMIT ) {
@@ -402,12 +402,12 @@
 }
 
 Locale::Locale(const Locale &other)
-    : UObject(other), fullName(fullNameBuffer), baseName(NULL)
+    : UObject(other), fullName(fullNameBuffer), baseName(nullptr)
 {
     *this = other;
 }
 
-Locale::Locale(Locale&& other) U_NOEXCEPT
+Locale::Locale(Locale&& other) noexcept
     : UObject(other), fullName(fullNameBuffer), baseName(fullName) {
   *this = std::move(other);
 }
@@ -445,7 +445,7 @@
     return *this;
 }
 
-Locale& Locale::operator=(Locale&& other) U_NOEXCEPT {
+Locale& Locale::operator=(Locale&& other) noexcept {
     if ((baseName != fullName) && (baseName != fullNameBuffer)) uprv_free(baseName);
     if (fullName != fullNameBuffer) uprv_free(fullName);
 
@@ -563,7 +563,7 @@
                    LocalMemory<int32_t>& replacementIndexes,
                    int32_t &length,
                    void (*checkType)(const char* type),
-                   void (*checkReplacement)(const UnicodeString& replacement),
+                   void (*checkReplacement)(const UChar* replacement),
                    UErrorCode &status);
 
     // Read the languageAlias data from alias to
@@ -700,7 +700,7 @@
         LocalMemory<int32_t>& replacementIndexes,
         int32_t &length,
         void (*checkType)(const char* type),
-        void (*checkReplacement)(const UnicodeString& replacement),
+        void (*checkReplacement)(const UChar* replacement),
         UErrorCode &status) {
     if (U_FAILURE(status)) {
         return;
@@ -720,8 +720,8 @@
         LocalUResourceBundlePointer res(
             ures_getNextResource(alias, nullptr, &status));
         const char* aliasFrom = ures_getKey(res.getAlias());
-        UnicodeString aliasTo =
-            ures_getUnicodeStringByKey(res.getAlias(), "replacement", &status);
+        const UChar* aliasTo =
+            ures_getStringByKey(res.getAlias(), "replacement", nullptr, &status);
         if (U_FAILURE(status)) return;
 
         checkType(aliasFrom);
@@ -766,7 +766,7 @@
 #else
         [](const char*) {},
 #endif
-        [](const UnicodeString&) {}, status);
+        [](const UChar*) {}, status);
 }
 
 /**
@@ -790,12 +790,12 @@
         [](const char* type) {
             U_ASSERT(uprv_strlen(type) == 4);
         },
-        [](const UnicodeString& replacement) {
-            U_ASSERT(replacement.length() == 4);
+        [](const UChar* replacement) {
+            U_ASSERT(u_strlen(replacement) == 4);
         },
 #else
         [](const char*) {},
-        [](const UnicodeString&) { },
+        [](const UChar*) { },
 #endif
         status);
 }
@@ -824,7 +824,7 @@
 #else
         [](const char*) {},
 #endif
-        [](const UnicodeString&) { },
+        [](const UChar*) { },
         status);
 }
 
@@ -851,15 +851,16 @@
             U_ASSERT(uprv_strlen(type) != 4 ||
                      (type[0] >= '0' && type[0] <= '9'));
         },
-        [](const UnicodeString& replacement) {
-            U_ASSERT(replacement.length() >= 4 && replacement.length() <= 8);
-            U_ASSERT(replacement.length() != 4 ||
-                     (replacement.charAt(0) >= u'0' &&
-                      replacement.charAt(0) <= u'9'));
+        [](const UChar* replacement) {
+            int32_t len = u_strlen(replacement);
+            U_ASSERT(len >= 4 && len <= 8);
+            U_ASSERT(len != 4 ||
+                     (*replacement >= u'0' &&
+                      *replacement <= u'9'));
         },
 #else
         [](const char*) {},
-        [](const UnicodeString&) { },
+        [](const UChar*) { },
 #endif
         status);
 }
@@ -888,7 +889,7 @@
 #else
         [](const char*) {},
 #endif
-        [](const UnicodeString&) { },
+        [](const UChar*) { },
         status);
 }
 
@@ -1066,7 +1067,13 @@
 public:
     AliasReplacer(UErrorCode status) :
             language(nullptr), script(nullptr), region(nullptr),
-            extensions(nullptr), variants(status),
+            extensions(nullptr),
+            // store value in variants only once
+            variants(nullptr,
+                     ([](UElement e1, UElement e2) -> UBool {
+                       return 0==uprv_strcmp((const char*)e1.pointer,
+                                             (const char*)e2.pointer);}),
+                     status),
             data(nullptr) {
     }
     ~AliasReplacer() {
@@ -1513,7 +1520,7 @@
     CharString& transformedExtensions, CharString& output, UErrorCode& status)
 {
     // The content of the transformedExtensions will be modified in this
-    // function to NULL-terminating (tkey-tvalue) pairs.
+    // function to NUL-terminating (tkey-tvalue) pairs.
     if (U_FAILURE(status)) {
         return false;
     }
@@ -1548,7 +1555,7 @@
             }
             const char* nextTKey = ultag_getTKeyStart(tvalue);
             if (nextTKey != nullptr) {
-                *((char*)(nextTKey-1)) = '\0';  // NULL terminate tvalue
+                *((char*)(nextTKey-1)) = '\0';  // NUL terminate tvalue
             }
             tfields.insertElementAt((void*)tkey, tfields.size(), status);
             if (U_FAILURE(status)) {
@@ -1570,7 +1577,7 @@
                  return false;
              }
              // Split the "tkey-tvalue" pair string so that we can canonicalize the tvalue.
-             *((char*)tvalue++) = '\0'; // NULL terminate tkey
+             *((char*)tvalue++) = '\0'; // NUL terminate tkey
              output.append(tfield, status).append('-', status);
              const char* bcpTValue = ulocimp_toBcpType(tfield, tvalue, nullptr, nullptr);
              output.append((bcpTValue == nullptr) ? tvalue : bcpTValue, status);
@@ -1652,10 +1659,16 @@
         while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr &&
                U_SUCCESS(status)) {
             *end = NULL_CHAR;  // null terminate inside variantsBuff
-            variants.addElement(start, status);
+            // do not add "" or duplicate data to variants
+            if (*start && !variants.contains(start)) {
+                variants.addElement(start, status);
+            }
             start = end + 1;
         }
-        variants.addElement(start, status);
+        // do not add "" or duplicate data to variants
+        if (*start && !variants.contains(start)) {
+            variants.addElement(start, status);
+        }
     }
     if (U_FAILURE(status)) { return false; }
 
@@ -1822,7 +1835,7 @@
     if ((baseName != fullName) && (baseName != fullNameBuffer)) {
         uprv_free(baseName);
     }
-    baseName = NULL;
+    baseName = nullptr;
     if(fullName != fullNameBuffer) {
         uprv_free(fullName);
         fullName = fullNameBuffer;
@@ -1840,7 +1853,7 @@
         int32_t length;
         UErrorCode err;
 
-        if(localeID == NULL) {
+        if(localeID == nullptr) {
             // not an error, just set the default locale
             return *this = getDefault();
         }
@@ -1889,8 +1902,8 @@
         // variant may contain @foo or .foo POSIX cruft; remove it
         separator = uprv_strchr(field[fieldIdx-1], '@');
         char* sep2 = uprv_strchr(field[fieldIdx-1], '.');
-        if (separator!=NULL || sep2!=NULL) {
-            if (separator==NULL || (sep2!=NULL && separator > sep2)) {
+        if (separator!=nullptr || sep2!=nullptr) {
+            if (separator==nullptr || (sep2!=nullptr && separator > sep2)) {
                 separator = sep2;
             }
             fieldLen[fieldIdx-1] = (int32_t)(separator - field[fieldIdx-1]);
@@ -1974,7 +1987,7 @@
     if (U_FAILURE(status)) {
         return;
     }
-    U_ASSERT(baseName==NULL || baseName==fullName);
+    U_ASSERT(baseName==nullptr || baseName==fullName);
     const char *atPtr = uprv_strchr(fullName, '@');
     const char *eqPtr = uprv_strchr(fullName, '=');
     if (atPtr && eqPtr && atPtr < eqPtr) {
@@ -1981,7 +1994,7 @@
         // Key words exist.
         int32_t baseNameLength = (int32_t)(atPtr - fullName);
         baseName = (char *)uprv_malloc(baseNameLength + 1);
-        if (baseName == NULL) {
+        if (baseName == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
             return;
         }
@@ -2012,7 +2025,7 @@
     if((baseName != fullName) && (baseName != fullNameBuffer)) {
         uprv_free(baseName);
     }
-    baseName = NULL;
+    baseName = nullptr;
     if(fullName != fullNameBuffer) {
         uprv_free(fullName);
         fullName = fullNameBuffer;
@@ -2030,12 +2043,12 @@
 {
     {
         Mutex lock(&gDefaultLocaleMutex);
-        if (gDefaultLocale != NULL) {
+        if (gDefaultLocale != nullptr) {
             return *gDefaultLocale;
         }
     }
     UErrorCode status = U_ZERO_ERROR;
-    return *locale_set_default_internal(NULL, status);
+    return *locale_set_default_internal(nullptr, status);
 }
 
 
@@ -2079,6 +2092,10 @@
 
 void
 Locale::minimizeSubtags(UErrorCode& status) {
+    Locale::minimizeSubtags(false, status);
+}
+void
+Locale::minimizeSubtags(bool favorScript, UErrorCode& status) {
     if (U_FAILURE(status)) {
         return;
     }
@@ -2086,7 +2103,7 @@
     CharString minimizedLocaleID;
     {
         CharStringByteSink sink(&minimizedLocaleID);
-        ulocimp_minimizeSubtags(fullName, sink, &status);
+        ulocimp_minimizeSubtags(fullName, sink, favorScript, &status);
     }
 
     if (U_FAILURE(status)) {
@@ -2244,61 +2261,61 @@
 }
 
 const Locale & U_EXPORT2
-Locale::getRoot(void)
+Locale::getRoot()
 {
     return getLocale(eROOT);
 }
 
 const Locale & U_EXPORT2
-Locale::getEnglish(void)
+Locale::getEnglish()
 {
     return getLocale(eENGLISH);
 }
 
 const Locale & U_EXPORT2
-Locale::getFrench(void)
+Locale::getFrench()
 {
     return getLocale(eFRENCH);
 }
 
 const Locale & U_EXPORT2
-Locale::getGerman(void)
+Locale::getGerman()
 {
     return getLocale(eGERMAN);
 }
 
 const Locale & U_EXPORT2
-Locale::getItalian(void)
+Locale::getItalian()
 {
     return getLocale(eITALIAN);
 }
 
 const Locale & U_EXPORT2
-Locale::getJapanese(void)
+Locale::getJapanese()
 {
     return getLocale(eJAPANESE);
 }
 
 const Locale & U_EXPORT2
-Locale::getKorean(void)
+Locale::getKorean()
 {
     return getLocale(eKOREAN);
 }
 
 const Locale & U_EXPORT2
-Locale::getChinese(void)
+Locale::getChinese()
 {
     return getLocale(eCHINESE);
 }
 
 const Locale & U_EXPORT2
-Locale::getSimplifiedChinese(void)
+Locale::getSimplifiedChinese()
 {
     return getLocale(eCHINA);
 }
 
 const Locale & U_EXPORT2
-Locale::getTraditionalChinese(void)
+Locale::getTraditionalChinese()
 {
     return getLocale(eTAIWAN);
 }
@@ -2305,73 +2322,73 @@
 
 
 const Locale & U_EXPORT2
-Locale::getFrance(void)
+Locale::getFrance()
 {
     return getLocale(eFRANCE);
 }
 
 const Locale & U_EXPORT2
-Locale::getGermany(void)
+Locale::getGermany()
 {
     return getLocale(eGERMANY);
 }
 
 const Locale & U_EXPORT2
-Locale::getItaly(void)
+Locale::getItaly()
 {
     return getLocale(eITALY);
 }
 
 const Locale & U_EXPORT2
-Locale::getJapan(void)
+Locale::getJapan()
 {
     return getLocale(eJAPAN);
 }
 
 const Locale & U_EXPORT2
-Locale::getKorea(void)
+Locale::getKorea()
 {
     return getLocale(eKOREA);
 }
 
 const Locale & U_EXPORT2
-Locale::getChina(void)
+Locale::getChina()
 {
     return getLocale(eCHINA);
 }
 
 const Locale & U_EXPORT2
-Locale::getPRC(void)
+Locale::getPRC()
 {
     return getLocale(eCHINA);
 }
 
 const Locale & U_EXPORT2
-Locale::getTaiwan(void)
+Locale::getTaiwan()
 {
     return getLocale(eTAIWAN);
 }
 
 const Locale & U_EXPORT2
-Locale::getUK(void)
+Locale::getUK()
 {
     return getLocale(eUK);
 }
 
 const Locale & U_EXPORT2
-Locale::getUS(void)
+Locale::getUS()
 {
     return getLocale(eUS);
 }
 
 const Locale & U_EXPORT2
-Locale::getCanada(void)
+Locale::getCanada()
 {
     return getLocale(eCANADA);
 }
 
 const Locale & U_EXPORT2
-Locale::getCanadaFrench(void)
+Locale::getCanadaFrench()
 {
     return getLocale(eCANADA_FRENCH);
 }
@@ -2381,12 +2398,12 @@
 {
     Locale *localeCache = getLocaleCache();
     U_ASSERT((locid < eMAX_LOCALES)&&(locid>=0));
-    if (localeCache == NULL) {
+    if (localeCache == nullptr) {
         // Failure allocating the locale cache.
-        //   The best we can do is return a NULL reference.
+        //   The best we can do is return a nullptr reference.
         locid = 0;
     }
-    return localeCache[locid]; /*operating on NULL*/
+    return localeCache[locid]; /*operating on nullptr*/
 }
 
 /*
@@ -2394,7 +2411,7 @@
 initialization and static destruction.
  */
 Locale *
-Locale::getLocaleCache(void)
+Locale::getLocaleCache()
 {
     UErrorCode status = U_ZERO_ERROR;
     umtx_initOnce(gLocaleCacheInitOnce, locale_init, status);
@@ -2402,8 +2419,9 @@
 }
 
 class KeywordEnumeration : public StringEnumeration {
+protected:
+    char *keywords;
 private:
-    char *keywords;
     char *current;
     int32_t length;
     UnicodeString currUSKey;
@@ -2410,17 +2428,17 @@
     static const char fgClassID;/* Warning this is used beyond the typical RTTI usage. */
 
 public:
-    static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; }
-    virtual UClassID getDynamicClassID(void) const override { return getStaticClassID(); }
+    static UClassID U_EXPORT2 getStaticClassID() { return (UClassID)&fgClassID; }
+    virtual UClassID getDynamicClassID() 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) {
         if(U_SUCCESS(status) && keywordLen != 0) {
-            if(keys == NULL || keywordLen < 0) {
+            if(keys == nullptr || keywordLen < 0) {
                 status = U_ILLEGAL_ARGUMENT_ERROR;
             } else {
                 keywords = (char *)uprv_malloc(keywordLen+1);
-                if (keywords == NULL) {
+                if (keywords == nullptr) {
                     status = U_MEMORY_ALLOCATION_ERROR;
                 }
                 else {
@@ -2458,14 +2476,14 @@
             result = current;
             len = (int32_t)uprv_strlen(current);
             current += len+1;
-            if(resultLength != NULL) {
+            if(resultLength != nullptr) {
                 *resultLength = len;
             }
         } else {
-            if(resultLength != NULL) {
+            if(resultLength != nullptr) {
                 *resultLength = 0;
             }
-            result = NULL;
+            result = nullptr;
         }
         return result;
     }
@@ -2510,6 +2528,17 @@
         if (resultLength != nullptr) *resultLength = 0;
         return nullptr;
     }
+    virtual int32_t count(UErrorCode &/*status*/) const override {
+        char *kw = keywords;
+        int32_t result = 0;
+        while(*kw) {
+            if (uloc_toUnicodeLocaleKey(kw) != nullptr) {
+                result++;
+            }
+            kw += uprv_strlen(kw)+1;
+        }
+        return result;
+    }
 };
 
 // Out-of-line virtual destructor to serve as the "key function".
@@ -2518,7 +2547,7 @@
 StringEnumeration *
 Locale::createKeywords(UErrorCode &status) const
 {
-    StringEnumeration *result = NULL;
+    StringEnumeration *result = nullptr;
 
     if (U_FAILURE(status)) {
         return result;
@@ -2547,7 +2576,7 @@
 StringEnumeration *
 Locale::createUnicodeKeywords(UErrorCode &status) const
 {
-    StringEnumeration *result = NULL;
+    StringEnumeration *result = nullptr;
 
     if (U_FAILURE(status)) {
         return result;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -31,83 +31,11 @@
 #include "charstr.h"
 #include "cmemory.h"
 #include "cstring.h"
+#include "loclikelysubtags.h"
 #include "ulocimp.h"
 #include "ustr_imp.h"
 
 /**
- * These are the canonical strings for unknown languages, scripts and regions.
- **/
-static const char* const unknownLanguage = "und";
-static const char* const unknownScript = "Zzzz";
-static const char* const unknownRegion = "ZZ";
-
-/**
- * This function looks for the localeID in the likelySubtags resource.
- *
- * @param localeID The tag to find.
- * @param buffer A buffer to hold the matching entry
- * @param bufferLength The length of the output buffer
- * @return A pointer to "buffer" if found, or a null pointer if not.
- */
-static const char*  U_CALLCONV
-findLikelySubtags(const char* localeID,
-                  char* buffer,
-                  int32_t bufferLength,
-                  UErrorCode* err) {
-    const char* result = NULL;
-
-    if (!U_FAILURE(*err)) {
-        int32_t resLen = 0;
-        const UChar* s = NULL;
-        UErrorCode tmpErr = U_ZERO_ERROR;
-        icu::LocalUResourceBundlePointer subtags(ures_openDirect(NULL, "likelySubtags", &tmpErr));
-        if (U_SUCCESS(tmpErr)) {
-            icu::CharString und;
-            if (localeID != NULL) {
-                if (*localeID == '\0') {
-                    localeID = unknownLanguage;
-                } else if (*localeID == '_') {
-                    und.append(unknownLanguage, *err);
-                    und.append(localeID, *err);
-                    if (U_FAILURE(*err)) {
-                        return NULL;
-                    }
-                    localeID = und.data();
-                }
-            }
-            s = ures_getStringByKey(subtags.getAlias(), localeID, &resLen, &tmpErr);
-
-            if (U_FAILURE(tmpErr)) {
-                /*
-                 * If a resource is missing, it's not really an error, it's
-                 * just that we don't have any data for that particular locale ID.
-                 */
-                if (tmpErr != U_MISSING_RESOURCE_ERROR) {
-                    *err = tmpErr;
-                }
-            }
-            else if (resLen >= bufferLength) {
-                /* The buffer should never overflow. */
-                *err = U_INTERNAL_PROGRAM_ERROR;
-            }
-            else {
-                u_UCharsToChars(s, buffer, resLen + 1);
-                if (resLen >= 3 &&
-                    uprv_strnicmp(buffer, unknownLanguage, 3) == 0 &&
-                    (resLen == 3 || buffer[3] == '_')) {
-                    uprv_memmove(buffer, buffer + 3, resLen - 3 + 1);
-                }
-                result = buffer;
-            }
-        } else {
-            *err = tmpErr;
-        }
-    }
-
-    return result;
-}
-
-/**
  * Append a tag to a buffer, adding the separator if necessary.  The buffer
  * must be large enough to contain the resulting tag plus any separator
  * necessary. The tag must not be a zero-length string.
@@ -140,12 +68,12 @@
 
 /**
  * Create a tag string from the supplied parameters.  The lang, script and region
- * parameters may be NULL pointers. If they are, their corresponding length parameters
+ * parameters may be nullptr pointers. If they are, their corresponding length parameters
  * must be less than or equal to 0.
  *
  * If any of the language, script or region parameters are empty, and the alternateTags
- * parameter is not NULL, it will be parsed for potential language, script and region tags
- * to be used when constructing the new tag.  If the alternateTags parameter is NULL, or
+ * parameter is not nullptr, it will be parsed for potential language, script and region tags
+ * to be used when constructing the new tag.  If the alternateTags parameter is nullptr, or
  * it contains no language tag, the default tag for the unknown language is used.
  *
  * If the length of the new string exceeds the capacity of the output buffer, 
@@ -211,7 +139,7 @@
                 &tagLength,
                 /*withSeparator=*/false);
         }
-        else if (alternateTags == NULL) {
+        else if (alternateTags == nullptr) {
             /*
              * Use the empty string for an unknown language, if
              * we found no language.
@@ -258,7 +186,7 @@
                 &tagLength,
                 /*withSeparator=*/true);
         }
-        else if (alternateTags != NULL) {
+        else if (alternateTags != nullptr) {
             /*
              * Parse the alternateTags string for the script.
              */
@@ -295,7 +223,7 @@
 
             regionAppended = true;
         }
-        else if (alternateTags != NULL) {
+        else if (alternateTags != nullptr) {
             /*
              * Parse the alternateTags string for the region.
              */
@@ -361,57 +289,6 @@
 }
 
 /**
- * Create a tag string from the supplied parameters.  The lang, script and region
- * parameters may be NULL pointers. If they are, their corresponding length parameters
- * must be less than or equal to 0.  If the lang parameter is an empty string, the
- * default value for an unknown language is written to the output buffer.
- *
- * If the length of the new string exceeds the capacity of the output buffer, 
- * the function copies as many bytes to the output buffer as it can, and returns
- * the error U_BUFFER_OVERFLOW_ERROR.
- *
- * If an illegal argument is provided, the function returns the error
- * U_ILLEGAL_ARGUMENT_ERROR.
- *
- * @param lang The language tag to use.
- * @param langLength The length of the language tag.
- * @param script The script tag to use.
- * @param scriptLength The length of the script tag.
- * @param region The region tag to use.
- * @param regionLength The length of the region tag.
- * @param trailing Any trailing data to append to the new tag.
- * @param trailingLength The length of the trailing data.
- * @param sink The output sink receiving the tag string.
- * @param err A pointer to a UErrorCode for error reporting.
- **/
-static void U_CALLCONV
-createTagString(
-    const char* lang,
-    int32_t langLength,
-    const char* script,
-    int32_t scriptLength,
-    const char* region,
-    int32_t regionLength,
-    const char* trailing,
-    int32_t trailingLength,
-    icu::ByteSink& sink,
-    UErrorCode* err)
-{
-    createTagStringWithAlternates(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                region,
-                regionLength,
-                trailing,
-                trailingLength,
-                NULL,
-                sink,
-                err);
-}
-
-/**
  * Parse the language, script, and region subtags from a tag string, and copy the
  * results into the corresponding output parameters. The buffers are null-terminated,
  * unless overflow occurs.
@@ -454,13 +331,13 @@
     int32_t subtagLength = 0;
 
     if(U_FAILURE(*err) ||
-       localeID == NULL ||
-       lang == NULL ||
-       langLength == NULL ||
-       script == NULL ||
-       scriptLength == NULL ||
-       region == NULL ||
-       regionLength == NULL) {
+       localeID == nullptr ||
+       lang == nullptr ||
+       langLength == nullptr ||
+       script == nullptr ||
+       scriptLength == nullptr ||
+       region == nullptr ||
+       regionLength == nullptr) {
         goto error;
     }
 
@@ -494,13 +371,6 @@
     *scriptLength = subtagLength;
 
     if (*scriptLength > 0) {
-        if (uprv_strnicmp(script, unknownScript, *scriptLength) == 0) {
-            /**
-             * If the script part is the "unknown" script, then don't return it.
-             **/
-            *scriptLength = 0;
-        }
-
         /*
          * Move past any separator.
          */
@@ -517,14 +387,7 @@
 
     *regionLength = subtagLength;
 
-    if (*regionLength > 0) {
-        if (uprv_strnicmp(region, unknownRegion, *regionLength) == 0) {
-            /**
-             * If the region part is the "unknown" region, then don't return it.
-             **/
-            *regionLength = 0;
-        }
-    } else if (*position != 0 && *position != '@') {
+    if (*regionLength <= 0 && *position != 0 && *position != '@') {
         /* back up over consumed trailing separator */
         --position;
     }
@@ -546,264 +409,6 @@
     goto exit;
 }
 
-static UBool U_CALLCONV
-createLikelySubtagsString(
-    const char* lang,
-    int32_t langLength,
-    const char* script,
-    int32_t scriptLength,
-    const char* region,
-    int32_t regionLength,
-    const char* variants,
-    int32_t variantsLength,
-    icu::ByteSink& sink,
-    UErrorCode* err) {
-    /**
-     * ULOC_FULLNAME_CAPACITY will provide enough capacity
-     * that we can build a string that contains the language,
-     * script and region code without worrying about overrunning
-     * the user-supplied buffer.
-     **/
-    char likelySubtagsBuffer[ULOC_FULLNAME_CAPACITY];
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    /**
-     * Try the language with the script and region first.
-     **/
-    if (scriptLength > 0 && regionLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink sink(&tagBuffer);
-            createTagString(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                region,
-                regionLength,
-                NULL,
-                0,
-                sink,
-                err);
-        }
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer.data(),
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        sink,
-                        err);
-            return true;
-        }
-    }
-
-    /**
-     * Try the language with just the script.
-     **/
-    if (scriptLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink sink(&tagBuffer);
-            createTagString(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                sink,
-                err);
-        }
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer.data(),
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        region,
-                        regionLength,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        sink,
-                        err);
-            return true;
-        }
-    }
-
-    /**
-     * Try the language with just the region.
-     **/
-    if (regionLength > 0) {
-
-        const char* likelySubtags = NULL;
-
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink sink(&tagBuffer);
-            createTagString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                region,
-                regionLength,
-                NULL,
-                0,
-                sink,
-                err);
-        }
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer.data(),
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        script,
-                        scriptLength,
-                        NULL,
-                        0,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        sink,
-                        err);
-            return true;
-        }
-    }
-
-    /**
-     * Finally, try just the language.
-     **/
-    {
-        const char* likelySubtags = NULL;
-
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink sink(&tagBuffer);
-            createTagString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                NULL,
-                0,
-                sink,
-                err);
-        }
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        likelySubtags =
-            findLikelySubtags(
-                tagBuffer.data(),
-                likelySubtagsBuffer,
-                sizeof(likelySubtagsBuffer),
-                err);
-        if(U_FAILURE(*err)) {
-            goto error;
-        }
-
-        if (likelySubtags != NULL) {
-            /* Always use the language tag from the
-               maximal string, since it may be more
-               specific than the one provided. */
-            createTagStringWithAlternates(
-                        NULL,
-                        0,
-                        script,
-                        scriptLength,
-                        region,
-                        regionLength,
-                        variants,
-                        variantsLength,
-                        likelySubtags,
-                        sink,
-                        err);
-            return true;
-        }
-    }
-
-    return false;
-
-error:
-
-    if (!U_FAILURE(*err)) {
-        *err = U_ILLEGAL_ARGUMENT_ERROR;
-    }
-
-    return false;
-}
-
 #define CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength) UPRV_BLOCK_MACRO_BEGIN { \
     int32_t count = 0; \
     int32_t i; \
@@ -836,12 +441,11 @@
     const char* trailing = "";
     int32_t trailingLength = 0;
     int32_t trailingIndex = 0;
-    UBool success = false;
 
     if(U_FAILURE(*err)) {
         goto error;
     }
-    if (localeID == NULL) {
+    if (localeID == nullptr) {
         goto error;
     }
 
@@ -862,6 +466,9 @@
 
         goto error;
     }
+    if (langLength > 3) {
+        goto error;
+    }
 
     /* Find the length of the trailing portion. */
     while (_isIDSeparator(localeID[trailingIndex])) {
@@ -871,31 +478,43 @@
     trailingLength = (int32_t)uprv_strlen(trailing);
 
     CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength);
-
-    success =
-        createLikelySubtagsString(
-            lang,
-            langLength,
-            script,
-            scriptLength,
-            region,
-            regionLength,
+    {
+        const icu::XLikelySubtags* likelySubtags = icu::XLikelySubtags::getSingleton(*err);
+        if(U_FAILURE(*err)) {
+            goto error;
+        }
+        // We need to keep l on the stack because lsr may point into internal
+        // memory of l.
+        icu::Locale l = icu::Locale::createFromName(localeID);
+        if (l.isBogus()) {
+            goto error;
+        }
+        icu::LSR lsr = likelySubtags->makeMaximizedLsrFrom(l, true, *err);
+        if(U_FAILURE(*err)) {
+            goto error;
+        }
+        const char* language = lsr.language;
+        if (uprv_strcmp(language, "und") == 0) {
+            language = "";
+        }
+        createTagStringWithAlternates(
+            language,
+            (int32_t)uprv_strlen(language),
+            lsr.script,
+            (int32_t)uprv_strlen(lsr.script),
+            lsr.region,
+            (int32_t)uprv_strlen(lsr.region),
             trailing,
             trailingLength,
+            nullptr,
             sink,
             err);
-
-    if (!success) {
-        const int32_t localIDLength = (int32_t)uprv_strlen(localeID);
-
-        /*
-         * If we get here, we need to return localeID.
-         */
-        sink.Append(localeID, localIDLength);
+        if(U_FAILURE(*err)) {
+            goto error;
+        }
     }
+    return true;
 
-    return success;
-
 error:
 
     if (!U_FAILURE(*err)) {
@@ -913,6 +532,7 @@
 static void
 _uloc_minimizeSubtags(const char* localeID,
                       icu::ByteSink& sink,
+                      bool favorScript,
                       UErrorCode* err) {
     icu::CharString maximizedTagBuffer;
 
@@ -925,12 +545,11 @@
     const char* trailing = "";
     int32_t trailingLength = 0;
     int32_t trailingIndex = 0;
-    UBool successGetMax = false;
 
     if(U_FAILURE(*err)) {
         goto error;
     }
-    else if (localeID == NULL) {
+    else if (localeID == nullptr) {
         goto error;
     }
 
@@ -964,213 +583,38 @@
     CHECK_TRAILING_VARIANT_SIZE(trailing, trailingLength);
 
     {
-        icu::CharString base;
-        {
-            icu::CharStringByteSink baseSink(&base);
-            createTagString(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                region,
-                regionLength,
-                NULL,
-                0,
-                baseSink,
-                err);
-        }
-
-        /**
-         * First, we need to first get the maximization
-         * from AddLikelySubtags.
-         **/
-        {
-            icu::CharStringByteSink maxSink(&maximizedTagBuffer);
-            successGetMax = _ulocimp_addLikelySubtags(base.data(), maxSink, err);
-        }
-    }
-
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    if (!successGetMax) {
-        /**
-         * If we got here, return the locale ID parameter unchanged.
-         **/
-        const int32_t localeIDLength = (int32_t)uprv_strlen(localeID);
-        sink.Append(localeID, localeIDLength);
-        return;
-    }
-
-    // In the following, the lang, script, region are referring to those in
-    // the maximizedTagBuffer, not the one in the localeID.
-    langLength = sizeof(lang);
-    scriptLength = sizeof(script);
-    regionLength = sizeof(region);
-    parseTagString(
-        maximizedTagBuffer.data(),
-        lang,
-        &langLength,
-        script,
-        &scriptLength,
-        region,
-        &regionLength,
-        err);
-    if(U_FAILURE(*err)) {
-        goto error;
-    }
-
-    /**
-     * Start first with just the language.
-     **/
-    {
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink tagSink(&tagBuffer);
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                NULL,
-                0,
-                tagSink,
-                err);
-        }
-
+        const icu::XLikelySubtags* likelySubtags = icu::XLikelySubtags::getSingleton(*err);
         if(U_FAILURE(*err)) {
             goto error;
         }
-        else if (!tagBuffer.isEmpty() &&
-                 uprv_strnicmp(
-                    maximizedTagBuffer.data(),
-                    tagBuffer.data(),
-                    tagBuffer.length()) == 0) {
-
-            createTagString(
-                        lang,
-                        langLength,
-                        NULL,
-                        0,
-                        NULL,
-                        0,
-                        trailing,
-                        trailingLength,
-                        sink,
-                        err);
-            return;
-        }
-    }
-
-    /**
-     * Next, try the language and region.
-     **/
-    if (regionLength > 0) {
-
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink tagSink(&tagBuffer);
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                NULL,
-                0,
-                region,
-                regionLength,
-                NULL,
-                0,
-                tagSink,
-                err);
-        }
-
+        icu::LSR lsr = likelySubtags->minimizeSubtags(
+            {lang, langLength},
+            {script, scriptLength},
+            {region, regionLength},
+            favorScript,
+            *err);
         if(U_FAILURE(*err)) {
             goto error;
         }
-        else if (!tagBuffer.isEmpty() &&
-                 uprv_strnicmp(
-                    maximizedTagBuffer.data(),
-                    tagBuffer.data(),
-                    tagBuffer.length()) == 0) {
-
-            createTagString(
-                        lang,
-                        langLength,
-                        NULL,
-                        0,
-                        region,
-                        regionLength,
-                        trailing,
-                        trailingLength,
-                        sink,
-                        err);
-            return;
+        const char* language = lsr.language;
+        if (uprv_strcmp(language, "und") == 0) {
+            language = "";
         }
-    }
-
-    /**
-     * Finally, try the language and script.  This is our last chance,
-     * since trying with all three subtags would only yield the
-     * maximal version that we already have.
-     **/
-    if (scriptLength > 0) {
-        icu::CharString tagBuffer;
-        {
-            icu::CharStringByteSink tagSink(&tagBuffer);
-            createLikelySubtagsString(
-                lang,
-                langLength,
-                script,
-                scriptLength,
-                NULL,
-                0,
-                NULL,
-                0,
-                tagSink,
-                err);
-        }
-
+        createTagStringWithAlternates(
+            language,
+            (int32_t)uprv_strlen(language),
+            lsr.script,
+            (int32_t)uprv_strlen(lsr.script),
+            lsr.region,
+            (int32_t)uprv_strlen(lsr.region),
+            trailing,
+            trailingLength,
+            nullptr,
+            sink,
+            err);
         if(U_FAILURE(*err)) {
             goto error;
         }
-        else if (!tagBuffer.isEmpty() &&
-                 uprv_strnicmp(
-                    maximizedTagBuffer.data(),
-                    tagBuffer.data(),
-                    tagBuffer.length()) == 0) {
-
-            createTagString(
-                        lang,
-                        langLength,
-                        script,
-                        scriptLength,
-                        NULL,
-                        0,
-                        trailing,
-                        trailingLength,
-                        sink,
-                        err);
-            return;
-        }
-    }
-
-    {
-        /**
-         * If we got here, return the max + trail.
-         **/
-        createTagString(
-                    lang,
-                    langLength,
-                    script,
-                    scriptLength,
-                    region,
-                    regionLength,
-                    trailing,
-                    trailingLength,
-                    sink,
-                    err);
         return;
     }
 
@@ -1181,31 +625,6 @@
     }
 }
 
-static int32_t
-do_canonicalize(const char*    localeID,
-         char* buffer,
-         int32_t bufferCapacity,
-         UErrorCode* err)
-{
-    int32_t canonicalizedSize = uloc_canonicalize(
-        localeID,
-        buffer,
-        bufferCapacity,
-        err);
-
-    if (*err == U_STRING_NOT_TERMINATED_WARNING ||
-        *err == U_BUFFER_OVERFLOW_ERROR) {
-        return canonicalizedSize;
-    }
-    else if (U_FAILURE(*err)) {
-
-        return -1;
-    }
-    else {
-        return canonicalizedSize;
-    }
-}
-
 U_CAPI int32_t U_EXPORT2
 uloc_addLikelySubtags(const char* localeID,
                       char* maximizedLocaleID,
@@ -1239,14 +658,13 @@
 _ulocimp_addLikelySubtags(const char* localeID,
                           icu::ByteSink& sink,
                           UErrorCode* status) {
-    PreflightingLocaleIDBuffer localeBuffer;
-    do {
-        localeBuffer.requestedCapacity = do_canonicalize(localeID, localeBuffer.getBuffer(),
-            localeBuffer.getCapacity(), status);
-    } while (localeBuffer.needToTryAgain(status));
-    
+    icu::CharString localeBuffer;
+    {
+        icu::CharStringByteSink localeSink(&localeBuffer);
+        ulocimp_canonicalize(localeID, localeSink, status);
+    }
     if (U_SUCCESS(*status)) {
-        return _uloc_addLikelySubtags(localeBuffer.getBuffer(), sink, status);
+        return _uloc_addLikelySubtags(localeBuffer.data(), sink, status);
     } else {
         return false;
     }
@@ -1271,7 +689,7 @@
     icu::CheckedArrayByteSink sink(
             minimizedLocaleID, minimizedLocaleIDCapacity);
 
-    ulocimp_minimizeSubtags(localeID, sink, status);
+    ulocimp_minimizeSubtags(localeID, sink, false, status);
     int32_t reslen = sink.NumberOfBytesAppended();
 
     if (U_FAILURE(*status)) {
@@ -1291,14 +709,14 @@
 U_CAPI void U_EXPORT2
 ulocimp_minimizeSubtags(const char* localeID,
                         icu::ByteSink& sink,
+                        bool favorScript,
                         UErrorCode* status) {
-    PreflightingLocaleIDBuffer localeBuffer;
-    do {
-        localeBuffer.requestedCapacity = do_canonicalize(localeID, localeBuffer.getBuffer(),
-            localeBuffer.getCapacity(), status);
-    } while (localeBuffer.needToTryAgain(status));
-    
-    _uloc_minimizeSubtags(localeBuffer.getBuffer(), sink, status);
+    icu::CharString localeBuffer;
+    {
+        icu::CharStringByteSink localeSink(&localeBuffer);
+        ulocimp_canonicalize(localeID, localeSink, status);
+    }
+    _uloc_minimizeSubtags(localeBuffer.data(), sink, favorScript, status);
 }
 
 // Pairs of (language subtag, + or -) for finding out fast if common languages
@@ -1324,7 +742,7 @@
         }
         if (langLength > 0) {
             const char* langPtr = uprv_strstr(LANG_DIR_STRING, lang);
-            if (langPtr != NULL) {
+            if (langPtr != nullptr) {
                 switch (langPtr[langLength]) {
                 case '-': return false;
                 case '+': return true;
@@ -1374,16 +792,26 @@
     UErrorCode rgStatus = U_ZERO_ERROR;
 
     // First check for rg keyword value
-    int32_t rgLen = uloc_getKeywordValue(localeID, "rg", rgBuf, ULOC_RG_BUFLEN, &rgStatus);
-    if (U_FAILURE(rgStatus) || rgLen != 6) {
+    icu::CharString rg;
+    {
+        icu::CharStringByteSink sink(&rg);
+        ulocimp_getKeywordValue(localeID, "rg", sink, &rgStatus);
+    }
+    int32_t rgLen = rg.length();
+    if (U_FAILURE(rgStatus) || rgLen < 3 || rgLen > 7) {
         rgLen = 0;
     } else {
-        // rgBuf guaranteed to be zero terminated here, with text len 6
-        char *rgPtr = rgBuf;
-        for (; *rgPtr!= 0; rgPtr++) {
-            *rgPtr = uprv_toupper(*rgPtr);
+        // chop off the subdivision code (which will generally be "zzzz" anyway)
+        const char* const data = rg.data();
+        if (uprv_isASCIILetter(data[0])) {
+            rgLen = 2;
+            rgBuf[0] = uprv_toupper(data[0]);
+            rgBuf[1] = uprv_toupper(data[1]);
+        } else {
+            // assume three-digit region code
+            rgLen = 3;
+            uprv_memcpy(rgBuf, data, rgLen);
         }
-        rgLen = (uprv_strcmp(rgBuf+2, "ZZZZ") == 0)? 2: 0;
     }
 
     if (rgLen == 0) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -11,6 +11,7 @@
 #include "unicode/locid.h"
 #include "unicode/uobject.h"
 #include "unicode/ures.h"
+#include "unicode/uscript.h"
 #include "charstr.h"
 #include "cstring.h"
 #include "loclikelysubtags.h"
@@ -23,6 +24,7 @@
 #include "uniquecharstr.h"
 #include "uresdata.h"
 #include "uresimp.h"
+#include "uvector.h"
 
 U_NAMESPACE_BEGIN
 
@@ -81,11 +83,18 @@
         // Read all strings in the resource bundle and convert them to invariant char *.
         LocalMemory<int32_t> languageIndexes, regionIndexes, lsrSubtagIndexes;
         int32_t languagesLength = 0, regionsLength = 0, lsrSubtagsLength = 0;
+        ResourceArray m49Array;
+        if (likelyTable.findValue("m49", value)) {
+            m49Array = value.getArray(errorCode);
+        } else {
+            errorCode = U_MISSING_RESOURCE_ERROR;
+            return;
+        }
         if (!readStrings(likelyTable, "languageAliases", value,
                          languageIndexes, languagesLength, errorCode) ||
                 !readStrings(likelyTable, "regionAliases", value,
                              regionIndexes, regionsLength, errorCode) ||
-                !readStrings(likelyTable, "lsrs", value,
+                !readLSREncodedStrings(likelyTable, "lsrnum", value, m49Array,
                              lsrSubtagIndexes,lsrSubtagsLength, errorCode)) {
             return;
         }
@@ -136,7 +145,7 @@
 
             if (!readStrings(matchTable, "partitions", value,
                              partitionIndexes, partitionsLength, errorCode) ||
-                    !readStrings(matchTable, "paradigms", value,
+                    !readLSREncodedStrings(matchTable, "paradigmnum", value, m49Array,
                                  paradigmSubtagIndexes, paradigmSubtagsLength, errorCode)) {
                 return;
             }
@@ -233,10 +242,96 @@
                 return false;
             }
             for (int i = 0; i < length; ++i) {
-                stringArray.getValue(i, value);  // returns true because i < length
-                rawIndexes[i] = strings.add(value.getUnicodeString(errorCode), errorCode);
+                if (stringArray.getValue(i, value)) {  // returns true because i < length
+                    int32_t strLength = 0;
+                    rawIndexes[i] = strings.add(value.getString(strLength, errorCode), errorCode);
+                    if (U_FAILURE(errorCode)) { return false; }
+                }
+            }
+        }
+        return true;
+    }
+    UnicodeString toLanguage(int encoded) {
+        if (encoded == 0) {
+            return UNICODE_STRING_SIMPLE("");
+        }
+        if (encoded == 1) {
+            return UNICODE_STRING_SIMPLE("skip");
+        }
+        encoded &= 0x00ffffff;
+        encoded %= 27*27*27;
+        char lang[3];
+        lang[0] = 'a' + ((encoded % 27) - 1);
+        lang[1] = 'a' + (((encoded / 27 ) % 27) - 1);
+        if (encoded / (27 * 27) == 0) {
+            return UnicodeString(lang, 2, US_INV);
+        }
+        lang[2] = 'a' + ((encoded / (27 * 27)) - 1);
+        return UnicodeString(lang, 3, US_INV);
+    }
+    UnicodeString toScript(int encoded) {
+        if (encoded == 0) {
+            return UNICODE_STRING_SIMPLE("");
+        }
+        if (encoded == 1) {
+            return UNICODE_STRING_SIMPLE("script");
+        }
+        encoded = (encoded >> 24) & 0x000000ff;
+        const char* script = uscript_getShortName(static_cast<UScriptCode>(encoded));
+        if (script == nullptr) {
+            return UNICODE_STRING_SIMPLE("");
+        }
+        U_ASSERT(uprv_strlen(script) == 4);
+        return UnicodeString(script, 4, US_INV);
+    }
+    UnicodeString m49IndexToCode(const ResourceArray &m49Array, ResourceValue &value, int index, UErrorCode &errorCode) {
+        if (U_FAILURE(errorCode)) {
+            return UNICODE_STRING_SIMPLE("");
+        }
+        if (m49Array.getValue(index, value)) {
+            return value.getUnicodeString(errorCode);
+        }
+        // "m49" does not include the index.
+        errorCode = U_MISSING_RESOURCE_ERROR;
+        return UNICODE_STRING_SIMPLE("");
+    }
+
+    UnicodeString toRegion(const ResourceArray& m49Array, ResourceValue &value, int encoded, UErrorCode &errorCode) {
+        if (encoded == 0 || encoded == 1) {
+            return UNICODE_STRING_SIMPLE("");
+        }
+        encoded &= 0x00ffffff;
+        encoded /= 27 * 27 * 27;
+        encoded %= 27 * 27;
+        if (encoded < 27) {
+            // Selected M49 code index, find the code from "m49" resource.
+            return  m49IndexToCode(m49Array, value, encoded, errorCode);
+        }
+        char region[2];
+        region[0] = 'A' + ((encoded % 27) - 1);
+        region[1] = 'A' + (((encoded / 27) % 27) - 1);
+        return UnicodeString(region, 2, US_INV);
+    }
+
+    bool readLSREncodedStrings(const ResourceTable &table, const char* key, ResourceValue &value, const ResourceArray& m49Array,
+                     LocalMemory<int32_t> &indexes, int32_t &length, UErrorCode &errorCode) {
+        if (table.findValue(key, value)) {
+            const int32_t* vectors = value.getIntVector(length, errorCode);
+            if (U_FAILURE(errorCode)) { return false; }
+            if (length == 0) { return true; }
+            int32_t *rawIndexes = indexes.allocateInsteadAndCopy(length * 3);
+            if (rawIndexes == nullptr) {
+                errorCode = U_MEMORY_ALLOCATION_ERROR;
+                return false;
+            }
+            for (int i = 0; i < length; ++i) {
+                rawIndexes[i*3] = strings.addByValue(toLanguage(vectors[i]), errorCode);
+                rawIndexes[i*3+1] = strings.addByValue(toScript(vectors[i]), errorCode);
+                rawIndexes[i*3+2] = strings.addByValue(
+                    toRegion(m49Array, value, vectors[i], errorCode), errorCode);
                 if (U_FAILURE(errorCode)) { return false; }
             }
+            length *= 3;
         }
         return true;
     }
@@ -245,15 +340,52 @@
 namespace {
 
 XLikelySubtags *gLikelySubtags = nullptr;
+UVector *gMacroregions = nullptr;
 UInitOnce gInitOnce {};
 
 UBool U_CALLCONV cleanup() {
     delete gLikelySubtags;
     gLikelySubtags = nullptr;
+    delete gMacroregions;
+    gMacroregions = nullptr;
     gInitOnce.reset();
     return true;
 }
 
+static const char16_t RANGE_MARKER = 0x7E; /* '~' */
+UVector* loadMacroregions(UErrorCode &status) {
+    LocalPointer<UVector> newMacroRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
+
+    LocalUResourceBundlePointer supplementalData(ures_openDirect(nullptr,"supplementalData",&status));
+    LocalUResourceBundlePointer idValidity(ures_getByKey(supplementalData.getAlias(),"idValidity",nullptr,&status));
+    LocalUResourceBundlePointer regionList(ures_getByKey(idValidity.getAlias(),"region",nullptr,&status));
+    LocalUResourceBundlePointer regionMacro(ures_getByKey(regionList.getAlias(),"macroregion",nullptr,&status));
+
+    if (U_FAILURE(status)) {
+        return nullptr;
+    }
+
+    while (U_SUCCESS(status) && ures_hasNext(regionMacro.getAlias())) {
+        UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),nullptr,&status);
+        int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER);
+        char16_t buf[6];
+        regionName.extract(buf,6,status);
+        if ( rangeMarkerLocation > 0 ) {
+            char16_t endRange = regionName.charAt(rangeMarkerLocation+1);
+            buf[rangeMarkerLocation] = 0;
+            while ( buf[rangeMarkerLocation-1] <= endRange && U_SUCCESS(status)) {
+                LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
+                newMacroRegions->adoptElement(newRegion.orphan(),status);
+                buf[rangeMarkerLocation-1]++;
+            }
+        } else {
+            LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
+            newMacroRegions->adoptElement(newRegion.orphan(),status);
+        }
+    }
+    return newMacroRegions.orphan();
+}
+
 }  // namespace
 
 void U_CALLCONV XLikelySubtags::initLikelySubtags(UErrorCode &errorCode) {
@@ -263,10 +395,14 @@
     data.load(errorCode);
     if (U_FAILURE(errorCode)) { return; }
     gLikelySubtags = new XLikelySubtags(data);
-    if (gLikelySubtags == nullptr) {
+    gMacroregions = loadMacroregions(errorCode);
+    if (U_FAILURE(errorCode) || gLikelySubtags == nullptr || gMacroregions == nullptr) {
+        delete gLikelySubtags;
+        delete gMacroregions;
         errorCode = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
+
     ucln_common_registerCleanup(UCLN_COMMON_LIKELY_SUBTAGS, cleanup);
 }
 
@@ -317,7 +453,13 @@
     delete[] lsrs;
 }
 
-LSR XLikelySubtags::makeMaximizedLsrFrom(const Locale &locale, UErrorCode &errorCode) const {
+LSR XLikelySubtags::makeMaximizedLsrFrom(const Locale &locale,
+                                         bool returnInputIfUnmatch,
+                                         UErrorCode &errorCode) const {
+    if (locale.isBogus()) {
+        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+        return LSR("", "", "", LSR::EXPLICIT_LSR);
+    }
     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... which CLDR changes to
@@ -324,8 +466,19 @@
         // und-x-subtag-subtag...
         return LSR(name, "", "", LSR::EXPLICIT_LSR);
     }
-    return makeMaximizedLsr(locale.getLanguage(), locale.getScript(), locale.getCountry(),
-                            locale.getVariant(), errorCode);
+    LSR max = makeMaximizedLsr(locale.getLanguage(), locale.getScript(), locale.getCountry(),
+                            locale.getVariant(), returnInputIfUnmatch, errorCode);
+
+    if (uprv_strlen(max.language) == 0 &&
+        uprv_strlen(max.script) == 0 &&
+        uprv_strlen(max.region) == 0) {
+        // No match. ICU API mandate us to
+        // If the provided ULocale instance is already in the maximal form, or
+        // there is no data available available for maximization, it will be
+        // returned.
+        return LSR(locale.getLanguage(), locale.getScript(), locale.getCountry(), LSR::EXPLICIT_LSR, errorCode);
+    }
+    return max;
 }
 
 namespace {
@@ -338,7 +491,9 @@
 }  // namespace
 
 LSR XLikelySubtags::makeMaximizedLsr(const char *language, const char *script, const char *region,
-                                     const char *variant, UErrorCode &errorCode) const {
+                                     const char *variant,
+                                     bool returnInputIfUnmatch,
+                                     UErrorCode &errorCode) const {
     // Handle pseudolocales like en-XA, ar-XB, fr-PSCRACK.
     // They should match only themselves,
     // not other locales with what looks like the same language and script subtags.
@@ -378,64 +533,91 @@
     language = getCanonical(languageAliases, language);
     // (We have no script mappings.)
     region = getCanonical(regionAliases, region);
-    return maximize(language, script, region);
+    return maximize(language, script, region, returnInputIfUnmatch, errorCode);
 }
 
-LSR XLikelySubtags::maximize(const char *language, const char *script, const char *region) const {
-    if (uprv_strcmp(language, "und") == 0) {
+LSR XLikelySubtags::maximize(const char *language, const char *script, const char *region,
+                             bool returnInputIfUnmatch,
+                             UErrorCode &errorCode) const {
+    return maximize({language, (int32_t)uprv_strlen(language)},
+                    {script, (int32_t)uprv_strlen(script)},
+                    {region, (int32_t)uprv_strlen(region)},
+                    returnInputIfUnmatch,
+                    errorCode);
+}
+
+bool XLikelySubtags::isMacroregion(StringPiece& region, UErrorCode& errorCode) const {
+    // In Java, we use Region class. In C++, since Region is under i18n,
+    // we read the same data used by Region into gMacroregions avoid dependency
+    // from common to i18n/region.cpp
+    if (U_FAILURE(errorCode)) { return false; }
+    umtx_initOnce(gInitOnce, &XLikelySubtags::initLikelySubtags, errorCode);
+    if (U_FAILURE(errorCode)) { return false; }
+    UnicodeString str(UnicodeString::fromUTF8(region));
+    return gMacroregions->contains((void *)&str);
+}
+
+LSR XLikelySubtags::maximize(StringPiece language, StringPiece script, StringPiece region,
+                             bool returnInputIfUnmatch,
+                             UErrorCode &errorCode) const {
+    if (U_FAILURE(errorCode)) {
+        return LSR(language, script, region, LSR::EXPLICIT_LSR, errorCode);
+    }
+    if (language.compare("und") == 0) {
         language = "";
     }
-    if (uprv_strcmp(script, "Zzzz") == 0) {
+    if (script.compare("Zzzz") == 0) {
         script = "";
     }
-    if (uprv_strcmp(region, "ZZ") == 0) {
+    if (region.compare("ZZ") == 0) {
         region = "";
     }
-    if (*script != 0 && *region != 0 && *language != 0) {
-        return LSR(language, script, region, LSR::EXPLICIT_LSR);  // already maximized
+    if (!script.empty() && !region.empty() && !language.empty()) {
+        return LSR(language, script, region, LSR::EXPLICIT_LSR, errorCode);  // already maximized
     }
+    bool retainLanguage = false;
+    bool retainScript = false;
+    bool retainRegion = false;
 
-    uint32_t retainOldMask = 0;
     BytesTrie iter(trie);
     uint64_t state;
     int32_t value;
     // Small optimization: Array lookup for first language letter.
     int32_t c0;
-    if (0 <= (c0 = uprv_lowerOrdinal(language[0])) && c0 <= 25 &&
-            language[1] != 0 &&  // language.length() >= 2
+    if (0 <= (c0 = uprv_lowerOrdinal(language.data()[0])) && c0 <= 25 &&
+            language.length() >= 2 &&
             (state = trieFirstLetterStates[c0]) != 0) {
         value = trieNext(iter.resetToState64(state), language, 1);
     } else {
         value = trieNext(iter, language, 0);
     }
+    bool matchLanguage = (value >= 0);
+    bool matchScript = false;
     if (value >= 0) {
-        if (*language != 0) {
-            retainOldMask |= 4;
-        }
+        retainLanguage = !language.empty();
         state = iter.getState64();
     } else {
-        retainOldMask |= 4;
+        retainLanguage = true;
         iter.resetToState64(trieUndState);  // "und" ("*")
         state = 0;
     }
 
+    if (value >= 0 && !script.empty()) {
+        matchScript = true;
+    }
     if (value > 0) {
         // Intermediate or final value from just language.
         if (value == SKIP_SCRIPT) {
             value = 0;
         }
-        if (*script != 0) {
-            retainOldMask |= 2;
-        }
+        retainScript = !script.empty();
     } else {
         value = trieNext(iter, script, 0);
         if (value >= 0) {
-            if (*script != 0) {
-                retainOldMask |= 2;
-            }
+            retainScript = !script.empty();
             state = iter.getState64();
         } else {
-            retainOldMask |= 2;
+            retainScript = true;
             if (state == 0) {
                 iter.resetToState64(trieUndZzzzState);  // "und-Zzzz" ("**")
             } else {
@@ -447,19 +629,19 @@
         }
     }
 
+    bool matchRegion = false;
     if (value > 0) {
         // Final value from just language or language+script.
-        if (*region != 0) {
-            retainOldMask |= 1;
-        }
+        retainRegion = !region.empty();
     } else {
         value = trieNext(iter, region, 0);
         if (value >= 0) {
-            if (*region != 0) {
-                retainOldMask |= 1;
+            if (!region.empty() && !isMacroregion(region, errorCode)) {
+                retainRegion = true;
+                matchRegion = true;
             }
         } else {
-            retainOldMask |= 1;
+            retainRegion = true;
             if (state == 0) {
                 value = defaultLsrIndex;
             } else {
@@ -470,28 +652,33 @@
         }
     }
     U_ASSERT(value < lsrsLength);
-    const LSR &result = lsrs[value];
+    const LSR &matched = lsrs[value];
 
-    if (*language == 0) {
-        language = "und";
+    if (returnInputIfUnmatch &&
+        (!(matchLanguage || matchScript || (matchRegion && language.empty())))) {
+      return LSR("", "", "", LSR::EXPLICIT_LSR, errorCode);  // no matching.
     }
+    if (language.empty()) {
+        language = StringPiece("und");
+    }
 
-    if (retainOldMask == 0) {
+    if (!(retainLanguage || retainScript || retainRegion)) {
         // Quickly return a copy of the lookup-result LSR
         // without new allocation of the subtags.
-        return LSR(result.language, result.script, result.region, result.flags);
+        return LSR(matched.language, matched.script, matched.region, matched.flags);
     }
-    if ((retainOldMask & 4) == 0) {
-        language = result.language;
+    if (!retainLanguage) {
+        language = matched.language;
     }
-    if ((retainOldMask & 2) == 0) {
-        script = result.script;
+    if (!retainScript) {
+        script = matched.script;
     }
-    if ((retainOldMask & 1) == 0) {
-        region = result.region;
+    if (!retainRegion) {
+        region = matched.region;
     }
+    int32_t retainMask = (retainLanguage ? 4 : 0) + (retainScript ? 2 : 0) + (retainRegion ? 1 : 0);
     // retainOldMask flags = LSR explicit-subtag flags
-    return LSR(language, script, region, retainOldMask);
+    return LSR(language, script, region, retainMask, errorCode);
 }
 
 int32_t XLikelySubtags::compareLikely(const LSR &lsr, const LSR &other, int32_t likelyInfo) const {
@@ -627,57 +814,97 @@
     default: return -1;
     }
 }
+int32_t XLikelySubtags::trieNext(BytesTrie &iter, StringPiece s, int32_t i) {
+    UStringTrieResult result;
+    uint8_t c;
+    if (s.length() == i) {
+        result = iter.next(u'*');
+    } else {
+        c = s.data()[i];
+        for (;;) {
+            c = uprv_invCharToAscii(c);
+            // EBCDIC: If s[i] is not an invariant character,
+            // then c is now 0 and will simply not match anything, which is harmless.
+            if (i+1 != s.length()) {
+                if (!USTRINGTRIE_HAS_NEXT(iter.next(c))) {
+                    return -1;
+                }
+                c = s.data()[++i];
+            } else {
+                // last character of this subtag
+                result = iter.next(c | 0x80);
+                break;
+            }
+        }
+    }
+    switch (result) {
+    case USTRINGTRIE_NO_MATCH: return -1;
+    case USTRINGTRIE_NO_VALUE: return 0;
+    case USTRINGTRIE_INTERMEDIATE_VALUE:
+        U_ASSERT(iter.getValue() == SKIP_SCRIPT);
+        return SKIP_SCRIPT;
+    case USTRINGTRIE_FINAL_VALUE: return iter.getValue();
+    default: return -1;
+    }
+}
 
-// TODO(ICU-20777): Switch Locale/uloc_ likely-subtags API from the old code
-// in loclikely.cpp to this new code, including activating this
-// minimizeSubtags() function. The LocaleMatcher does not minimize.
-#if 0
-LSR XLikelySubtags::minimizeSubtags(const char *languageIn, const char *scriptIn,
-                                    const char *regionIn, ULocale.Minimize fieldToFavor,
+LSR XLikelySubtags::minimizeSubtags(StringPiece language, StringPiece script,
+                                    StringPiece region,
+                                    bool favorScript,
                                     UErrorCode &errorCode) const {
-    LSR result = maximize(languageIn, scriptIn, regionIn);
+    LSR max = maximize(language, script, region, true, errorCode);
+    if (U_FAILURE(errorCode)) {
+        return max;
+    }
+    // If no match, return it.
+    if (uprv_strlen(max.language) == 0 &&
+        uprv_strlen(max.script) == 0 &&
+        uprv_strlen(max.region) == 0) {
+        // No match. ICU API mandate us to
+        // "If this Locale is already in the minimal form, or not valid, or
+        // there is no data available for minimization, the Locale will be
+        // unchanged."
+        return LSR(language, script, region, LSR::EXPLICIT_LSR, errorCode);
+    }
+    // try language
+    LSR test = maximize(max.language, "", "", true, errorCode);
+    if (U_FAILURE(errorCode)) {
+        return max;
+    }
+    if (test.isEquivalentTo(max)) {
+        return LSR(max.language, "", "", LSR::DONT_CARE_FLAGS, errorCode);
+    }
 
-    // We could try just a series of checks, like:
-    // LSR result2 = addLikelySubtags(languageIn, "", "");
-    // if result.equals(result2) return result2;
-    // However, we can optimize 2 of the cases:
-    //   (languageIn, "", "")
-    //   (languageIn, "", regionIn)
-
-    // value00 = lookup(result.language, "", "")
-    BytesTrie iter = new BytesTrie(trie);
-    int value = trieNext(iter, result.language, 0);
-    U_ASSERT(value >= 0);
-    if (value == 0) {
-        value = trieNext(iter, "", 0);
-        U_ASSERT(value >= 0);
-        if (value == 0) {
-            value = trieNext(iter, "", 0);
+    if (!favorScript) {
+        // favor Region
+        // try language and region
+        test = maximize(max.language, "", max.region, true, errorCode);
+        if (U_FAILURE(errorCode)) {
+            return max;
         }
+        if (test.isEquivalentTo(max)) {
+            return LSR(max.language, "", max.region, LSR::DONT_CARE_FLAGS, errorCode);
+        }
     }
-    U_ASSERT(value > 0);
-    LSR value00 = lsrs[value];
-    boolean favorRegionOk = false;
-    if (result.script.equals(value00.script)) { //script is default
-        if (result.region.equals(value00.region)) {
-            return new LSR(result.language, "", "", LSR.DONT_CARE_FLAGS);
-        } else if (fieldToFavor == ULocale.Minimize.FAVOR_REGION) {
-            return new LSR(result.language, "", result.region, LSR.DONT_CARE_FLAGS);
-        } else {
-            favorRegionOk = true;
+    // try language and script
+    test = maximize(max.language, max.script, "", true, errorCode);
+    if (U_FAILURE(errorCode)) {
+        return max;
+    }
+    if (test.isEquivalentTo(max)) {
+        return LSR(max.language, max.script, "", LSR::DONT_CARE_FLAGS, errorCode);
+    }
+    if (favorScript) {
+        // try language and region
+        test = maximize(max.language, "", max.region, true, errorCode);
+        if (U_FAILURE(errorCode)) {
+            return max;
         }
+        if (test.isEquivalentTo(max)) {
+            return LSR(max.language, "", max.region, LSR::DONT_CARE_FLAGS, errorCode);
+        }
     }
-
-    // The last case is not as easy to optimize.
-    // Maybe do later, but for now use the straightforward code.
-    LSR result2 = maximize(languageIn, scriptIn, "");
-    if (result2.equals(result)) {
-        return new LSR(result.language, result.script, "", LSR.DONT_CARE_FLAGS);
-    } else if (favorRegionOk) {
-        return new LSR(result.language, "", result.region, LSR.DONT_CARE_FLAGS);
-    }
-    return result;
+    return LSR(max.language, max.script, max.region, LSR::DONT_CARE_FLAGS, errorCode);
 }
-#endif
 
 U_NAMESPACE_END

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -11,6 +11,7 @@
 #include "unicode/utypes.h"
 #include "unicode/bytestrie.h"
 #include "unicode/locid.h"
+#include "unicode/stringpiece.h"
 #include "unicode/uobject.h"
 #include "unicode/ures.h"
 #include "charstrmap.h"
@@ -47,7 +48,9 @@
     static const XLikelySubtags *getSingleton(UErrorCode &errorCode);
 
     // VisibleForTesting
-    LSR makeMaximizedLsrFrom(const Locale &locale, UErrorCode &errorCode) const;
+    LSR makeMaximizedLsrFrom(const Locale &locale,
+                             bool returnInputIfUnmatch,
+                             UErrorCode &errorCode) const;
 
     /**
      * Tests whether lsr is "more likely" than other.
@@ -61,13 +64,9 @@
      */
     int32_t compareLikely(const LSR &lsr, const LSR &other, int32_t likelyInfo) const;
 
-    // TODO(ICU-20777): Switch Locale/uloc_ likely-subtags API from the old code
-    // in loclikely.cpp to this new code, including activating this
-    // minimizeSubtags() function. The LocaleMatcher does not minimize.
-#if 0
-    LSR minimizeSubtags(const char *languageIn, const char *scriptIn, const char *regionIn,
-                        ULocale.Minimize fieldToFavor, UErrorCode &errorCode) const;
-#endif
+    LSR minimizeSubtags(StringPiece language, StringPiece script, StringPiece region,
+                        bool favorScript,
+                        UErrorCode &errorCode) const;
 
     // visible for LocaleDistance
     const LocaleDistanceData &getDistanceData() const { return distanceData; }
@@ -80,16 +79,25 @@
     static void initLikelySubtags(UErrorCode &errorCode);
 
     LSR makeMaximizedLsr(const char *language, const char *script, const char *region,
-                         const char *variant, UErrorCode &errorCode) const;
+                         const char *variant,
+                         bool returnInputIfUnmatch,
+                         UErrorCode &errorCode) const;
 
     /**
      * Raw access to addLikelySubtags. Input must be in canonical format, eg "en", not "eng" or "EN".
      */
-    LSR maximize(const char *language, const char *script, const char *region) const;
+    LSR maximize(const char *language, const char *script, const char *region,
+                 bool returnInputIfUnmatch,
+                 UErrorCode &errorCode) const;
+    LSR maximize(StringPiece language, StringPiece script, StringPiece region,
+                 bool returnInputIfUnmatch,
+                 UErrorCode &errorCode) const;
 
     int32_t getLikelyIndex(const char *language, const char *script) const;
+    bool isMacroregion(StringPiece& region, UErrorCode &errorCode) const;
 
     static int32_t trieNext(BytesTrie &iter, const char *s, int32_t i);
+    static int32_t trieNext(BytesTrie &iter, StringPiece s, int32_t i);
 
     UResourceBundle *langInfoBundle;
     // We could store the strings by value, except that if there were few enough strings,

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -1054,7 +1054,7 @@
     uint16_t langID;
     uint32_t localeIndex;
     UBool bLookup = true;
-    const char *pPosixID = NULL;
+    const char *pPosixID = nullptr;
 
 #if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API
     static_assert(ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH, "Windows locale names have smaller length than ICU locale names.");
@@ -1110,7 +1110,7 @@
 #endif
 
     if (bLookup) {
-        const char *pCandidate = NULL;
+        const char *pCandidate = nullptr;
         langID = LANGUAGE_LCID(hostid);
 
         for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) {
@@ -1123,7 +1123,7 @@
         /* On Windows, when locale name has a variant, we still look up the hardcoded table.
            If a match in the hardcoded table is longer than the Windows locale name without
            variant, we use the one as the result */
-        if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
+        if (pCandidate && (pPosixID == nullptr || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
             pPosixID = pCandidate;
         }
     }
@@ -1170,7 +1170,7 @@
     // conversion functionality when available.
 #if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API
     int32_t len;
-    char baseName[ULOC_FULLNAME_CAPACITY] = {};
+    icu::CharString baseName;
     const char * mylocaleID = localeID;
 
     // Check any for keywords.
@@ -1189,19 +1189,23 @@
         else
         {
             // If the locale ID contains keywords other than collation, just use the base name.
-            len = uloc_getBaseName(localeID, baseName, UPRV_LENGTHOF(baseName) - 1, status);
-
-            if (U_SUCCESS(*status) && len > 0)
             {
-                baseName[len] = 0;
-                mylocaleID = baseName;
+                icu::CharStringByteSink sink(&baseName);
+                ulocimp_getBaseName(localeID, sink, status);
             }
+            if (U_SUCCESS(*status) && !baseName.isEmpty())
+            {
+                mylocaleID = baseName.data();
+            }
         }
     }
 
-    char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
     // this will change it from de_DE at collation=phonebook to de-DE-u-co-phonebk form
-    (void)uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), false, status);
+    icu::CharString asciiBCP47Tag;
+    {
+        icu::CharStringByteSink sink(&asciiBCP47Tag);
+        ulocimp_toLanguageTag(mylocaleID, sink, false, status);
+    }
 
     if (U_SUCCESS(*status))
     {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -24,6 +24,8 @@
 #include "unicode/putil.h"
 #include "unicode/uloc.h"
 #include "unicode/ures.h"
+#include "bytesinkutil.h"
+#include "charstr.h"
 #include "cstring.h"
 #include "ulocimp.h"
 #include "uresimp.h"
@@ -41,7 +43,7 @@
  * default locale because that would result in a mix of languages that is
  * unpredictable to the programmer and most likely useless.
  */
-U_CAPI const UChar * U_EXPORT2
+U_CAPI const char16_t * U_EXPORT2
 uloc_getTableStringWithFallback(const char *path, const char *locale,
                               const char *tableKey, const char *subTableKey,
                               const char *itemKey,
@@ -49,7 +51,7 @@
                               UErrorCode *pErrorCode)
 {
 /*    char localeBuffer[ULOC_FULLNAME_CAPACITY*4];*/
-    const UChar *item=NULL;
+    const char16_t *item=nullptr;
     UErrorCode errorCode;
     char explicitFallbackName[ULOC_FULLNAME_CAPACITY] = {0};
 
@@ -63,7 +65,7 @@
     if(U_FAILURE(errorCode)) {
         /* total failure, not even root could be opened */
         *pErrorCode=errorCode;
-        return NULL;
+        return nullptr;
     } else if(errorCode==U_USING_DEFAULT_WARNING ||
                 (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING)
     ) {
@@ -76,7 +78,7 @@
         icu::StackUResourceBundle subTable;
         ures_getByKeyWithFallback(rb.getAlias(), tableKey, table.getAlias(), &errorCode);
 
-        if (subTableKey != NULL) {
+        if (subTableKey != nullptr) {
             /*
             ures_getByKeyWithFallback(table.getAlias(), subTableKey, subTable.getAlias(), &errorCode);
             item = ures_getStringByKeyWithFallback(subTable.getAlias(), itemKey, pLength, &errorCode);
@@ -91,7 +93,7 @@
         if(U_SUCCESS(errorCode)){
             item = ures_getStringByKeyWithFallback(table.getAlias(), itemKey, pLength, &errorCode);
             if(U_FAILURE(errorCode)){
-                const char* replacement = NULL;
+                const char* replacement = nullptr;
                 *pErrorCode = errorCode; /*save the errorCode*/
                 errorCode = U_ZERO_ERROR;
                 /* may be a deprecated code */
@@ -101,7 +103,7 @@
                     replacement =  uloc_getCurrentLanguageID(itemKey);
                 }
                 /*pointer comparison is ok since uloc_getCurrentCountryID & uloc_getCurrentLanguageID return the key itself is replacement is not found*/
-                if(replacement!=NULL && itemKey != replacement){
+                if(replacement!=nullptr && itemKey != replacement){
                     item = ures_getStringByKeyWithFallback(table.getAlias(), replacement, pLength, &errorCode);
                     if(U_SUCCESS(errorCode)){
                         *pErrorCode = errorCode;
@@ -117,7 +119,7 @@
 
             /* still can't figure out ?.. try the fallback mechanism */
             int32_t len = 0;
-            const UChar* fallbackLocale =  NULL;
+            const char16_t* fallbackLocale =  nullptr;
             *pErrorCode = errorCode;
             errorCode = U_ZERO_ERROR;
 
@@ -156,18 +158,20 @@
     ULayoutType result = ULOC_LAYOUT_UNKNOWN;
 
     if (!U_FAILURE(*status)) {
-        int32_t length = 0;
-        char localeBuffer[ULOC_FULLNAME_CAPACITY];
+        icu::CharString localeBuffer;
+        {
+            icu::CharStringByteSink sink(&localeBuffer);
+            ulocimp_canonicalize(localeId, sink, status);
+        }
 
-        uloc_canonicalize(localeId, localeBuffer, sizeof(localeBuffer), status);
-
         if (!U_FAILURE(*status)) {
-            const UChar* const value =
+            int32_t length = 0;
+            const char16_t* const value =
                 uloc_getTableStringWithFallback(
-                    NULL,
-                    localeBuffer,
+                    nullptr,
+                    localeBuffer.data(),
                     "layout",
-                    NULL,
+                    nullptr,
                     key,
                     &length,
                     status);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -22,11 +22,11 @@
 
 // see LocaleUtility::getAvailableLocaleNames
 static icu::UInitOnce   LocaleUtilityInitOnce {};
-static icu::Hashtable * LocaleUtility_cache = NULL;
+static icu::Hashtable * LocaleUtility_cache = nullptr;
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 /*
  ******************************************************************
@@ -36,10 +36,10 @@
  * Release all static memory held by Locale Utility.  
  */
 U_CDECL_BEGIN
-static UBool U_CALLCONV service_cleanup(void) {
+static UBool U_CALLCONV service_cleanup() {
     if (LocaleUtility_cache) {
         delete LocaleUtility_cache;
-        LocaleUtility_cache = NULL;
+        LocaleUtility_cache = nullptr;
     }
     return true;
 }
@@ -47,15 +47,15 @@
 
 static void U_CALLCONV locale_utility_init(UErrorCode &status) {
     using namespace icu;
-    U_ASSERT(LocaleUtility_cache == NULL);
+    U_ASSERT(LocaleUtility_cache == nullptr);
     ucln_common_registerCleanup(UCLN_COMMON_SERVICE, service_cleanup);
     LocaleUtility_cache = new Hashtable(status);
     if (U_FAILURE(status)) {
         delete LocaleUtility_cache;
-        LocaleUtility_cache = NULL;
+        LocaleUtility_cache = nullptr;
         return;
     }
-    if (LocaleUtility_cache == NULL) {
+    if (LocaleUtility_cache == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -69,7 +69,7 @@
 UnicodeString&
 LocaleUtility::canonicalLocaleString(const UnicodeString* id, UnicodeString& result)
 {
-  if (id == NULL) {
+  if (id == nullptr) {
     result.setToBogus();
   } else {
     // Fix case only (no other changes) up to the first '@' or '.' or
@@ -94,7 +94,7 @@
       n = end;
     }
     for (; i < n; ++i) {
-      UChar c = result.charAt(i);
+      char16_t c = result.charAt(i);
       if (c >= 0x0041 && c <= 0x005a) {
         c += 0x20;
         result.setCharAt(i, c);
@@ -101,7 +101,7 @@
       }
     }
     for (n = end; i < n; ++i) {
-      UChar c = result.charAt(i);
+      char16_t c = result.charAt(i);
       if (c >= 0x0061 && c <= 0x007a) {
         c -= 0x20;
         result.setCharAt(i, c);
@@ -112,7 +112,7 @@
 
 #if 0
     // This code does a proper full level 2 canonicalization of id.
-    // It's nasty to go from UChar to char to char to UChar -- but
+    // It's nasty to go from char16_t to char to char to char16_t -- but
     // that's what you have to do to use the uloc_canonicalize
     // function on UnicodeStrings.
 
@@ -172,7 +172,7 @@
         int32_t prev, i;
         prev = 0;
         for(;;) {
-            i = id.indexOf((UChar)0x40, prev);
+            i = id.indexOf((char16_t)0x40, prev);
             if(i < 0) {
                 // no @ between prev and the rest of the string
                 id.extract(prev, INT32_MAX, buffer + prev, BUFLEN - prev, US_INV);
@@ -214,26 +214,26 @@
     UErrorCode status = U_ZERO_ERROR;
     umtx_initOnce(LocaleUtilityInitOnce, locale_utility_init, status);
     Hashtable *cache = LocaleUtility_cache;
-    if (cache == NULL) {
+    if (cache == nullptr) {
         // Catastrophic failure.
-        return NULL;
+        return nullptr;
     }
 
     Hashtable* htp;
-    umtx_lock(NULL);
+    umtx_lock(nullptr);
     htp = (Hashtable*) cache->get(bundleID);
-    umtx_unlock(NULL);
+    umtx_unlock(nullptr);
 
-    if (htp == NULL) {
+    if (htp == nullptr) {
         htp = new Hashtable(status);
         if (htp && U_SUCCESS(status)) {
             CharString cbundleID;
             cbundleID.appendInvariantChars(bundleID, status);
-            const char* path = cbundleID.isEmpty() ? NULL : cbundleID.data();
+            const char* path = cbundleID.isEmpty() ? nullptr : cbundleID.data();
             icu::LocalUEnumerationPointer uenum(ures_openAvailableLocales(path, &status));
             for (;;) {
-                const UChar* id = uenum_unext(uenum.getAlias(), NULL, &status);
-                if (id == NULL) {
+                const char16_t* id = uenum_unext(uenum.getAlias(), nullptr, &status);
+                if (id == nullptr) {
                     break;
                 }
                 htp->put(UnicodeString(id), (void*)htp, status);
@@ -240,19 +240,19 @@
             }
             if (U_FAILURE(status)) {
                 delete htp;
-                return NULL;
+                return nullptr;
             }
-            umtx_lock(NULL);
+            umtx_lock(nullptr);
             Hashtable *t = static_cast<Hashtable *>(cache->get(bundleID));
-            if (t != NULL) {
+            if (t != nullptr) {
                 // Another thread raced through this code, creating the cache entry first.
                 // Discard ours and return theirs.
-                umtx_unlock(NULL);
+                umtx_unlock(nullptr);
                 delete htp;
                 htp = t;
             } else {
                 cache->put(bundleID, (void*)htp, status);
-                umtx_unlock(NULL);
+                umtx_unlock(nullptr);
             }
         }
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/lsr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/lsr.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/lsr.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -31,7 +31,27 @@
     }
 }
 
-LSR::LSR(LSR &&other) U_NOEXCEPT :
+LSR::LSR(StringPiece lang, StringPiece scr, StringPiece r, int32_t f,
+         UErrorCode &errorCode) :
+        language(nullptr), script(nullptr), region(nullptr),
+        regionIndex(indexForRegion(r.data())), flags(f) {
+    if (U_SUCCESS(errorCode)) {
+        CharString data;
+        data.append(lang, errorCode).append('\0', errorCode);
+        int32_t scriptOffset = data.length();
+        data.append(scr, errorCode).append('\0', errorCode);
+        int32_t regionOffset = data.length();
+        data.append(r, errorCode);
+        owned = data.cloneData(errorCode);
+        if (U_SUCCESS(errorCode)) {
+            language = owned;
+            script = owned + scriptOffset;
+            region = owned + regionOffset;
+        }
+    }
+}
+
+LSR::LSR(LSR &&other) noexcept :
         language(other.language), script(other.script), region(other.region), owned(other.owned),
         regionIndex(other.regionIndex), flags(other.flags),
         hashCode(other.hashCode) {
@@ -46,7 +66,7 @@
     uprv_free(owned);
 }
 
-LSR &LSR::operator=(LSR &&other) U_NOEXCEPT {
+LSR &LSR::operator=(LSR &&other) noexcept {
     this->~LSR();
     language = other.language;
     script = other.script;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/lsr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/lsr.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/lsr.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -7,6 +7,7 @@
 #ifndef __LSR_H__
 #define __LSR_H__
 
+#include "unicode/stringpiece.h"
 #include "unicode/utypes.h"
 #include "unicode/uobject.h"
 #include "cstring.h"
@@ -45,7 +46,9 @@
      */
     LSR(char prefix, const char *lang, const char *scr, const char *r, int32_t f,
         UErrorCode &errorCode);
-    LSR(LSR &&other) U_NOEXCEPT;
+    LSR(StringPiece lang, StringPiece scr, StringPiece r, int32_t f,
+        UErrorCode &errorCode);
+    LSR(LSR &&other) noexcept;
     LSR(const LSR &other) = delete;
     inline ~LSR() {
         // Pure inline code for almost all instances.
@@ -54,7 +57,7 @@
         }
     }
 
-    LSR &operator=(LSR &&other) U_NOEXCEPT;
+    LSR &operator=(LSR &&other) noexcept;
     LSR &operator=(const LSR &other) = delete;
 
     /**

Modified: trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -361,7 +361,7 @@
     ~LSTMData();
     UHashtable* fDict;
     EmbeddingType fType;
-    const UChar* fName;
+    const char16_t* fName;
     ConstArray2D fEmbedding;
     ConstArray2D fForwardW;
     ConstArray2D fForwardU;
@@ -394,7 +394,7 @@
         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);
+    const char16_t* 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;
@@ -419,7 +419,7 @@
     int32_t stringLength;
     for (int32_t idx = 0; idx < num_index; idx++) {
         stringArray.getValue(idx, value);
-        const UChar* str = value.getString(stringLength, status);
+        const char16_t* str = value.getString(stringLength, status);
         uhash_putiAllowZero(fDict, (void*)str, idx, &status);
         if (U_FAILURE(status)) return;
 #ifdef LSTM_VECTORIZER_DEBUG
@@ -477,7 +477,7 @@
                            UVector32 &offsets, UVector32 &indices,
                            UErrorCode &status) const = 0;
 protected:
-    int32_t stringToIndex(const UChar* str) const {
+    int32_t stringToIndex(const char16_t* str) const {
         UBool found = false;
         int32_t ret = uhash_getiAndFound(fDict, (const void*)str, &found);
         if (!found) {
@@ -524,13 +524,13 @@
         if (U_FAILURE(status)) return;
         utext_setNativeIndex(text, startPos);
         int32_t current;
-        UChar str[2] = {0, 0};
+        char16_t 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);
+            str[0] = (char16_t) utext_next32(text);
             U_ASSERT(!U_IS_SURROGATE(str[0]));
             offsets.addElement(current, status);
             indices.addElement(stringToIndex(str), status);
@@ -576,7 +576,7 @@
     }
     int32_t last = startPos;
     int32_t current = startPos;
-    UChar str[MAX_GRAPHEME_CLSTER_LENGTH];
+    char16_t str[MAX_GRAPHEME_CLSTER_LENGTH];
     while ((current = graphemeIter->next()) != BreakIterator::DONE) {
         if (current >= endPos) {
             break;
@@ -777,7 +777,7 @@
     delete fVectorizer;
 }
 
-const UChar* LSTMBreakEngine::name() const {
+const char16_t* LSTMBreakEngine::name() const {
     return fData->fName;
 }
 
@@ -846,7 +846,7 @@
     delete data;
 }
 
-U_CAPI const UChar* U_EXPORT2 LSTMDataName(const LSTMData* data)
+U_CAPI const char16_t* U_EXPORT2 LSTMDataName(const LSTMData* data)
 {
     return data->fName;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/lstmbe.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -45,7 +45,7 @@
      */
     virtual ~LSTMBreakEngine();
 
-    virtual const UChar* name() const;
+    virtual const char16_t* name() const;
 
 protected:
     /**
@@ -79,7 +79,7 @@
     UScriptCode script, UErrorCode& status);
 
 U_CAPI void U_EXPORT2 DeleteLSTMData(const LSTMData* data);
-U_CAPI const UChar* U_EXPORT2 LSTMDataName(const LSTMData* data);
+U_CAPI const char16_t* U_EXPORT2 LSTMDataName(const LSTMData* data);
 
 U_NAMESPACE_END
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -32,56 +32,56 @@
 
 // Unicode character/code point constants ---------------------------------- ***
 
-static const UChar u_pound=0x23;
-static const UChar u_apos=0x27;
-static const UChar u_plus=0x2B;
-static const UChar u_comma=0x2C;
-static const UChar u_minus=0x2D;
-static const UChar u_dot=0x2E;
-static const UChar u_colon=0x3A;
-static const UChar u_lessThan=0x3C;
-static const UChar u_equal=0x3D;
-static const UChar u_A=0x41;
-static const UChar u_C=0x43;
-static const UChar u_D=0x44;
-static const UChar u_E=0x45;
-static const UChar u_H=0x48;
-static const UChar u_I=0x49;
-static const UChar u_L=0x4C;
-static const UChar u_N=0x4E;
-static const UChar u_O=0x4F;
-static const UChar u_P=0x50;
-static const UChar u_R=0x52;
-static const UChar u_S=0x53;
-static const UChar u_T=0x54;
-static const UChar u_U=0x55;
-static const UChar u_Z=0x5A;
-static const UChar u_a=0x61;
-static const UChar u_c=0x63;
-static const UChar u_d=0x64;
-static const UChar u_e=0x65;
-static const UChar u_f=0x66;
-static const UChar u_h=0x68;
-static const UChar u_i=0x69;
-static const UChar u_l=0x6C;
-static const UChar u_n=0x6E;
-static const UChar u_o=0x6F;
-static const UChar u_p=0x70;
-static const UChar u_r=0x72;
-static const UChar u_s=0x73;
-static const UChar u_t=0x74;
-static const UChar u_u=0x75;
-static const UChar u_z=0x7A;
-static const UChar u_leftCurlyBrace=0x7B;
-static const UChar u_pipe=0x7C;
-static const UChar u_rightCurlyBrace=0x7D;
-static const UChar u_lessOrEqual=0x2264;  // U+2264 is <=
+static const char16_t u_pound=0x23;
+static const char16_t u_apos=0x27;
+static const char16_t u_plus=0x2B;
+static const char16_t u_comma=0x2C;
+static const char16_t u_minus=0x2D;
+static const char16_t u_dot=0x2E;
+static const char16_t u_colon=0x3A;
+static const char16_t u_lessThan=0x3C;
+static const char16_t u_equal=0x3D;
+static const char16_t u_A=0x41;
+static const char16_t u_C=0x43;
+static const char16_t u_D=0x44;
+static const char16_t u_E=0x45;
+static const char16_t u_H=0x48;
+static const char16_t u_I=0x49;
+static const char16_t u_L=0x4C;
+static const char16_t u_N=0x4E;
+static const char16_t u_O=0x4F;
+static const char16_t u_P=0x50;
+static const char16_t u_R=0x52;
+static const char16_t u_S=0x53;
+static const char16_t u_T=0x54;
+static const char16_t u_U=0x55;
+static const char16_t u_Z=0x5A;
+static const char16_t u_a=0x61;
+static const char16_t u_c=0x63;
+static const char16_t u_d=0x64;
+static const char16_t u_e=0x65;
+static const char16_t u_f=0x66;
+static const char16_t u_h=0x68;
+static const char16_t u_i=0x69;
+static const char16_t u_l=0x6C;
+static const char16_t u_n=0x6E;
+static const char16_t u_o=0x6F;
+static const char16_t u_p=0x70;
+static const char16_t u_r=0x72;
+static const char16_t u_s=0x73;
+static const char16_t u_t=0x74;
+static const char16_t u_u=0x75;
+static const char16_t u_z=0x7A;
+static const char16_t u_leftCurlyBrace=0x7B;
+static const char16_t u_pipe=0x7C;
+static const char16_t u_rightCurlyBrace=0x7D;
+static const char16_t u_lessOrEqual=0x2264;  // U+2264 is <=
 
-static const UChar kOffsetColon[]={  // "offset:"
+static const char16_t kOffsetColon[]={  // "offset:"
     u_o, u_f, u_f, u_s, u_e, u_t, u_colon
 };
 
-static const UChar kOther[]={  // "other"
+static const char16_t kOther[]={  // "other"
     u_o, u_t, u_h, u_e, u_r
 };
 
@@ -112,7 +112,7 @@
         int32_t length,
         UErrorCode &errorCode) {
     if(U_SUCCESS(errorCode) && length>0) {
-        if(length>a.getCapacity() && NULL==a.resize(length)) {
+        if(length>a.getCapacity() && nullptr==a.resize(length)) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             return;
         }
@@ -126,7 +126,7 @@
     if(U_FAILURE(errorCode)) {
         return false;
     }
-    if(a.getCapacity()>oldLength || a.resize(2*oldLength, oldLength)!=NULL) {
+    if(a.getCapacity()>oldLength || a.resize(2*oldLength, oldLength)!=nullptr) {
         return true;
     }
     errorCode=U_MEMORY_ALLOCATION_ERROR;
@@ -145,8 +145,8 @@
 
 MessagePattern::MessagePattern(UErrorCode &errorCode)
         : aposMode(UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
+          partsList(nullptr), parts(nullptr), partsLength(0),
+          numericValuesList(nullptr), numericValues(nullptr), numericValuesLength(0),
           hasArgNames(false), hasArgNumbers(false), needsAutoQuoting(false) {
     init(errorCode);
 }
@@ -153,8 +153,8 @@
 
 MessagePattern::MessagePattern(UMessagePatternApostropheMode mode, UErrorCode &errorCode)
         : aposMode(mode),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
+          partsList(nullptr), parts(nullptr), partsLength(0),
+          numericValuesList(nullptr), numericValues(nullptr), numericValuesLength(0),
           hasArgNames(false), hasArgNumbers(false), needsAutoQuoting(false) {
     init(errorCode);
 }
@@ -161,8 +161,8 @@
 
 MessagePattern::MessagePattern(const UnicodeString &pattern, UParseError *parseError, UErrorCode &errorCode)
         : aposMode(UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
+          partsList(nullptr), parts(nullptr), partsLength(0),
+          numericValuesList(nullptr), numericValues(nullptr), numericValuesLength(0),
           hasArgNames(false), hasArgNumbers(false), needsAutoQuoting(false) {
     if(init(errorCode)) {
         parse(pattern, parseError, errorCode);
@@ -175,7 +175,7 @@
         return false;
     }
     partsList=new MessagePatternPartsList();
-    if(partsList==NULL) {
+    if(partsList==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         return false;
     }
@@ -185,8 +185,8 @@
 
 MessagePattern::MessagePattern(const MessagePattern &other)
         : UObject(other), aposMode(other.aposMode), msg(other.msg),
-          partsList(NULL), parts(NULL), partsLength(0),
-          numericValuesList(NULL), numericValues(NULL), numericValuesLength(0),
+          partsList(nullptr), parts(nullptr), partsLength(0),
+          numericValuesList(nullptr), numericValues(nullptr), numericValuesLength(0),
           hasArgNames(other.hasArgNames), hasArgNumbers(other.hasArgNumbers),
           needsAutoQuoting(other.needsAutoQuoting) {
     UErrorCode errorCode=U_ZERO_ERROR;
@@ -217,13 +217,13 @@
     if(U_FAILURE(errorCode)) {
         return false;
     }
-    parts=NULL;
+    parts=nullptr;
     partsLength=0;
-    numericValues=NULL;
+    numericValues=nullptr;
     numericValuesLength=0;
-    if(partsList==NULL) {
+    if(partsList==nullptr) {
         partsList=new MessagePatternPartsList();
-        if(partsList==NULL) {
+        if(partsList==nullptr) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             return false;
         }
@@ -238,9 +238,9 @@
         partsLength=other.partsLength;
     }
     if(other.numericValuesLength>0) {
-        if(numericValuesList==NULL) {
+        if(numericValuesList==nullptr) {
             numericValuesList=new MessagePatternDoubleList();
-            if(numericValuesList==NULL) {
+            if(numericValuesList==nullptr) {
                 errorCode=U_MEMORY_ALLOCATION_ERROR;
                 return false;
             }
@@ -351,7 +351,7 @@
     for(int32_t i=count; i>0;) {
         const Part &part=getPart(--i);
         if(part.getType()==UMSGPAT_PART_TYPE_INSERT_CHAR) {
-           modified.insert(part.index, (UChar)part.value);
+           modified.insert(part.index, (char16_t)part.value);
         }
     }
     return modified;
@@ -407,7 +407,7 @@
     if(U_FAILURE(errorCode)) {
         return;
     }
-    if(parseError!=NULL) {
+    if(parseError!=nullptr) {
         parseError->line=0;
         parseError->offset=0;
         parseError->preContext[0]=0;
@@ -422,10 +422,10 @@
 
 void
 MessagePattern::postParse() {
-    if(partsList!=NULL) {
+    if(partsList!=nullptr) {
         parts=partsList->a.getAlias();
     }
-    if(numericValuesList!=NULL) {
+    if(numericValuesList!=nullptr) {
         numericValues=numericValuesList->a.getAlias();
     }
 }
@@ -451,7 +451,7 @@
         if(index>=msg.length()) {
             break;
         }
-        UChar c=msg.charAt(index++);
+        char16_t c=msg.charAt(index++);
         if(c==u_apos) {
             if(index==msg.length()) {
                 // The apostrophe is the last character in the pattern. 
@@ -582,7 +582,7 @@
         errorCode=U_UNMATCHED_BRACES;
         return 0;
     }
-    UChar c=msg.charAt(index);
+    char16_t c=msg.charAt(index);
     if(c==u_rightCurlyBrace) {
         // all done
     } else if(c!=u_comma) {
@@ -663,7 +663,7 @@
     int32_t start=index;
     int32_t nestedBraces=0;
     while(index<msg.length()) {
-        UChar c=msg.charAt(index++);
+        char16_t c=msg.charAt(index++);
         if(c==u_apos) {
             // Treat apostrophe as quoting but include it in the style part.
             // Find the end of the quoted literal text.
@@ -738,7 +738,7 @@
             errorCode=U_PATTERN_SYNTAX_ERROR;
             return 0;
         }
-        UChar c=msg.charAt(index);
+        char16_t c=msg.charAt(index);
         if(!(c==u_pound || c==u_lessThan || c==u_lessOrEqual)) {  // U+2264 is <=
             setParseError(parseError, start);  // Expected choice separator (#<\u2264) instead of c.
             errorCode=U_PATTERN_SYNTAX_ERROR;
@@ -895,7 +895,7 @@
     int32_t number;
     // Defer numeric errors until we know there are only digits.
     UBool badNumber;
-    UChar c=s.charAt(start++);
+    char16_t c=s.charAt(start++);
     if(c==0x30) {
         if(start==limit) {
             return 0;
@@ -941,7 +941,7 @@
         int32_t value=0;
         int32_t isNegative=0;  // not boolean so that we can easily add it to value
         int32_t index=start;
-        UChar c=msg.charAt(index++);
+        char16_t c=msg.charAt(index++);
         if(c==u_minus) {
             isNegative=1;
             if(index==limit) {
@@ -1004,17 +1004,17 @@
 
 int32_t
 MessagePattern::skipWhiteSpace(int32_t index) {
-    const UChar *s=msg.getBuffer();
+    const char16_t *s=msg.getBuffer();
     int32_t msgLength=msg.length();
-    const UChar *t=PatternProps::skipWhiteSpace(s+index, msgLength-index);
+    const char16_t *t=PatternProps::skipWhiteSpace(s+index, msgLength-index);
     return (int32_t)(t-s);
 }
 
 int32_t
 MessagePattern::skipIdentifier(int32_t index) {
-    const UChar *s=msg.getBuffer();
+    const char16_t *s=msg.getBuffer();
     int32_t msgLength=msg.length();
-    const UChar *t=PatternProps::skipIdentifier(s+index, msgLength-index);
+    const char16_t *t=PatternProps::skipIdentifier(s+index, msgLength-index);
     return (int32_t)(t-s);
 }
 
@@ -1022,7 +1022,7 @@
 MessagePattern::skipDouble(int32_t index) {
     int32_t msgLength=msg.length();
     while(index<msgLength) {
-        UChar c=msg.charAt(index);
+        char16_t c=msg.charAt(index);
         // U+221E: Allow the infinity symbol, for ChoiceFormat patterns.
         if((c<0x30 && c!=u_plus && c!=u_minus && c!=u_dot) || (c>0x39 && c!=u_e && c!=u_E && c!=0x221e)) {
             break;
@@ -1039,7 +1039,7 @@
 
 UBool
 MessagePattern::isChoice(int32_t index) {
-    UChar c;
+    char16_t c;
     return
         ((c=msg.charAt(index++))==u_c || c==u_C) &&
         ((c=msg.charAt(index++))==u_h || c==u_H) &&
@@ -1051,7 +1051,7 @@
 
 UBool
 MessagePattern::isPlural(int32_t index) {
-    UChar c;
+    char16_t c;
     return
         ((c=msg.charAt(index++))==u_p || c==u_P) &&
         ((c=msg.charAt(index++))==u_l || c==u_L) &&
@@ -1063,7 +1063,7 @@
 
 UBool
 MessagePattern::isSelect(int32_t index) {
-    UChar c;
+    char16_t c;
     return
         ((c=msg.charAt(index++))==u_s || c==u_S) &&
         ((c=msg.charAt(index++))==u_e || c==u_E) &&
@@ -1075,7 +1075,7 @@
 
 UBool
 MessagePattern::isOrdinal(int32_t index) {
-    UChar c;
+    char16_t c;
     return
         ((c=msg.charAt(index++))==u_o || c==u_O) &&
         ((c=msg.charAt(index++))==u_r || c==u_R) &&
@@ -1127,9 +1127,9 @@
         return;
     }
     int32_t numericIndex=numericValuesLength;
-    if(numericValuesList==NULL) {
+    if(numericValuesList==nullptr) {
         numericValuesList=new MessagePatternDoubleList();
-        if(numericValuesList==NULL) {
+        if(numericValuesList==nullptr) {
             errorCode=U_MEMORY_ALLOCATION_ERROR;
             return;
         }
@@ -1147,7 +1147,7 @@
 
 void
 MessagePattern::setParseError(UParseError *parseError, int32_t index) {
-    if(parseError==NULL) {
+    if(parseError==nullptr) {
         return;
     }
     parseError->offset=index;

Added: trunk/Build/source/libs/icu/icu-src/source/common/mlbe.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/mlbe.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/mlbe.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,270 @@
+// © 2022 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 "cmemory.h"
+#include "mlbe.h"
+#include "uassert.h"
+#include "ubrkimpl.h"
+#include "unicode/resbund.h"
+#include "unicode/udata.h"
+#include "unicode/utf16.h"
+#include "uresimp.h"
+#include "util.h"
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+enum class ModelIndex { kUWStart = 0, kBWStart = 6, kTWStart = 9 };
+
+MlBreakEngine::MlBreakEngine(const UnicodeSet &digitOrOpenPunctuationOrAlphabetSet,
+                             const UnicodeSet &closePunctuationSet, UErrorCode &status)
+    : fDigitOrOpenPunctuationOrAlphabetSet(digitOrOpenPunctuationOrAlphabetSet),
+      fClosePunctuationSet(closePunctuationSet),
+      fNegativeSum(0) {
+    if (U_FAILURE(status)) {
+        return;
+    }
+    loadMLModel(status);
+}
+
+MlBreakEngine::~MlBreakEngine() {}
+
+int32_t MlBreakEngine::divideUpRange(UText *inText, int32_t rangeStart, int32_t rangeEnd,
+                                     UVector32 &foundBreaks, const UnicodeString &inString,
+                                     const LocalPointer<UVector32> &inputMap,
+                                     UErrorCode &status) const {
+    if (U_FAILURE(status)) {
+        return 0;
+    }
+    if (rangeStart >= rangeEnd) {
+        status = U_ILLEGAL_ARGUMENT_ERROR;
+        return 0;
+    }
+
+    UVector32 boundary(inString.countChar32() + 1, status);
+    if (U_FAILURE(status)) {
+        return 0;
+    }
+    int32_t numBreaks = 0;
+    int32_t codePointLength = inString.countChar32();
+    // The ML algorithm groups six char and evaluates whether the 4th char is a breakpoint.
+    // In each iteration, it evaluates the 4th char and then moves forward one char like a sliding
+    // window. Initially, the first six values in the indexList are [-1, -1, 0, 1, 2, 3]. After
+    // moving forward, finally the last six values in the indexList are
+    // [length-4, length-3, length-2, length-1, -1, -1]. The "+4" here means four extra "-1".
+    int32_t indexSize = codePointLength + 4;
+    int32_t *indexList = (int32_t *)uprv_malloc(indexSize * sizeof(int32_t));
+    if (indexList == nullptr) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return 0;
+    }
+    int32_t numCodeUnits = initIndexList(inString, indexList, status);
+
+    // Add a break for the start.
+    boundary.addElement(0, status);
+    numBreaks++;
+    if (U_FAILURE(status)) return 0;
+
+    for (int32_t idx = 0; idx + 1 < codePointLength && U_SUCCESS(status); idx++) {
+        numBreaks =
+            evaluateBreakpoint(inString, indexList, idx, numCodeUnits, numBreaks, boundary, status);
+        if (idx + 4 < codePointLength) {
+            indexList[idx + 6] = numCodeUnits;
+            numCodeUnits += U16_LENGTH(inString.char32At(indexList[idx + 6]));
+        }
+    }
+    uprv_free(indexList);
+
+    if (U_FAILURE(status)) return 0;
+
+    // Add a break for the end if there is not one there already.
+    if (boundary.lastElementi() != inString.countChar32()) {
+        boundary.addElement(inString.countChar32(), status);
+        numBreaks++;
+    }
+
+    int32_t prevCPPos = -1;
+    int32_t prevUTextPos = -1;
+    int32_t correctedNumBreaks = 0;
+    for (int32_t i = 0; i < numBreaks; i++) {
+        int32_t cpPos = boundary.elementAti(i);
+        int32_t utextPos = inputMap.isValid() ? inputMap->elementAti(cpPos) : cpPos + rangeStart;
+        U_ASSERT(cpPos > prevCPPos);
+        U_ASSERT(utextPos >= prevUTextPos);
+
+        if (utextPos > prevUTextPos) {
+            if (utextPos != rangeStart ||
+                (utextPos > 0 &&
+                 fClosePunctuationSet.contains(utext_char32At(inText, utextPos - 1)))) {
+                foundBreaks.push(utextPos, status);
+                correctedNumBreaks++;
+            }
+        } else {
+            // Normalization expanded the input text, the dictionary found a boundary
+            // within the expansion, giving two boundaries with the same index in the
+            // original text. Ignore the second. See ticket #12918.
+            --numBreaks;
+        }
+        prevCPPos = cpPos;
+        prevUTextPos = utextPos;
+    }
+    (void)prevCPPos;  // suppress compiler warnings about unused variable
+
+    UChar32 nextChar = utext_char32At(inText, rangeEnd);
+    if (!foundBreaks.isEmpty() && foundBreaks.peeki() == rangeEnd) {
+        // In phrase breaking, there has to be a breakpoint between Cj character and
+        // the number/open punctuation.
+        // E.g. る文字「そうだ、京都」->る▁文字▁「そうだ、▁京都」-> breakpoint between 字 and「
+        // E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and 9
+        // E.g. しかもロゴがUnicode! -> しかも▁ロゴが▁Unicode!-> breakpoint between が and U
+        if (!fDigitOrOpenPunctuationOrAlphabetSet.contains(nextChar)) {
+            foundBreaks.popi();
+            correctedNumBreaks--;
+        }
+    }
+
+    return correctedNumBreaks;
+}
+
+int32_t MlBreakEngine::evaluateBreakpoint(const UnicodeString &inString, int32_t *indexList,
+                                          int32_t startIdx, int32_t numCodeUnits, int32_t numBreaks,
+                                          UVector32 &boundary, UErrorCode &status) const {
+    if (U_FAILURE(status)) {
+        return numBreaks;
+    }
+    int32_t start = 0, end = 0;
+    int32_t score = fNegativeSum;
+
+    for (int i = 0; i < 6; i++) {
+        // UW1 ~ UW6
+        start = startIdx + i;
+        if (indexList[start] != -1) {
+            end = (indexList[start + 1] != -1) ? indexList[start + 1] : numCodeUnits;
+            score += fModel[static_cast<int32_t>(ModelIndex::kUWStart) + i].geti(
+                inString.tempSubString(indexList[start], end - indexList[start]));
+        }
+    }
+    for (int i = 0; i < 3; i++) {
+        // BW1 ~ BW3
+        start = startIdx + i + 1;
+        if (indexList[start] != -1 && indexList[start + 1] != -1) {
+            end = (indexList[start + 2] != -1) ? indexList[start + 2] : numCodeUnits;
+            score += fModel[static_cast<int32_t>(ModelIndex::kBWStart) + i].geti(
+                inString.tempSubString(indexList[start], end - indexList[start]));
+        }
+    }
+    for (int i = 0; i < 4; i++) {
+        // TW1 ~ TW4
+        start = startIdx + i;
+        if (indexList[start] != -1 && indexList[start + 1] != -1 && indexList[start + 2] != -1) {
+            end = (indexList[start + 3] != -1) ? indexList[start + 3] : numCodeUnits;
+            score += fModel[static_cast<int32_t>(ModelIndex::kTWStart) + i].geti(
+                inString.tempSubString(indexList[start], end - indexList[start]));
+        }
+    }
+
+    if (score > 0) {
+        boundary.addElement(startIdx + 1, status);
+        numBreaks++;
+    }
+    return numBreaks;
+}
+
+int32_t MlBreakEngine::initIndexList(const UnicodeString &inString, int32_t *indexList,
+                                     UErrorCode &status) const {
+    if (U_FAILURE(status)) {
+        return 0;
+    }
+    int32_t index = 0;
+    int32_t length = inString.countChar32();
+    // Set all (lenght+4) items inside indexLength to -1 presuming -1 is 4 bytes of 0xff.
+    uprv_memset(indexList, 0xff, (length + 4) * sizeof(int32_t));
+    if (length > 0) {
+        indexList[2] = 0;
+        index = U16_LENGTH(inString.char32At(0));
+        if (length > 1) {
+            indexList[3] = index;
+            index += U16_LENGTH(inString.char32At(index));
+            if (length > 2) {
+                indexList[4] = index;
+                index += U16_LENGTH(inString.char32At(index));
+                if (length > 3) {
+                    indexList[5] = index;
+                    index += U16_LENGTH(inString.char32At(index));
+                }
+            }
+        }
+    }
+    return index;
+}
+
+void MlBreakEngine::loadMLModel(UErrorCode &error) {
+    // BudouX's model consists of thirteen categories, each of which is make up of pairs of the
+    // feature and its score. As integrating it into jaml.txt, we define thirteen kinds of key and
+    // value to represent the feature and the corresponding score respectively.
+
+    if (U_FAILURE(error)) return;
+
+    UnicodeString key;
+    StackUResourceBundle stackTempBundle;
+    ResourceDataValue modelKey;
+
+    LocalUResourceBundlePointer rbp(ures_openDirect(U_ICUDATA_BRKITR, "jaml", &error));
+    UResourceBundle *rb = rbp.getAlias();
+    if (U_FAILURE(error)) return;
+
+    int32_t index = 0;
+    initKeyValue(rb, "UW1Keys", "UW1Values", fModel[index++], error);
+    initKeyValue(rb, "UW2Keys", "UW2Values", fModel[index++], error);
+    initKeyValue(rb, "UW3Keys", "UW3Values", fModel[index++], error);
+    initKeyValue(rb, "UW4Keys", "UW4Values", fModel[index++], error);
+    initKeyValue(rb, "UW5Keys", "UW5Values", fModel[index++], error);
+    initKeyValue(rb, "UW6Keys", "UW6Values", fModel[index++], error);
+    initKeyValue(rb, "BW1Keys", "BW1Values", fModel[index++], error);
+    initKeyValue(rb, "BW2Keys", "BW2Values", fModel[index++], error);
+    initKeyValue(rb, "BW3Keys", "BW3Values", fModel[index++], error);
+    initKeyValue(rb, "TW1Keys", "TW1Values", fModel[index++], error);
+    initKeyValue(rb, "TW2Keys", "TW2Values", fModel[index++], error);
+    initKeyValue(rb, "TW3Keys", "TW3Values", fModel[index++], error);
+    initKeyValue(rb, "TW4Keys", "TW4Values", fModel[index++], error);
+    fNegativeSum /= 2;
+}
+
+void MlBreakEngine::initKeyValue(UResourceBundle *rb, const char *keyName, const char *valueName,
+                                 Hashtable &model, UErrorCode &error) {
+    int32_t keySize = 0;
+    int32_t valueSize = 0;
+    int32_t stringLength = 0;
+    UnicodeString key;
+    StackUResourceBundle stackTempBundle;
+    ResourceDataValue modelKey;
+
+    // get modelValues
+    LocalUResourceBundlePointer modelValue(ures_getByKey(rb, valueName, nullptr, &error));
+    const int32_t *value = ures_getIntVector(modelValue.getAlias(), &valueSize, &error);
+    if (U_FAILURE(error)) return;
+
+    // get modelKeys
+    ures_getValueWithFallback(rb, keyName, stackTempBundle.getAlias(), modelKey, error);
+    ResourceArray stringArray = modelKey.getArray(error);
+    keySize = stringArray.getSize();
+    if (U_FAILURE(error)) return;
+
+    for (int32_t idx = 0; idx < keySize; idx++) {
+        stringArray.getValue(idx, modelKey);
+        key = UnicodeString(modelKey.getString(stringLength, error));
+        if (U_SUCCESS(error)) {
+            U_ASSERT(idx < valueSize);
+            fNegativeSum -= value[idx];
+            model.puti(key, value[idx], error);
+        }
+    }
+}
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/mlbe.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/source/common/mlbe.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/mlbe.h	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/mlbe.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -0,0 +1,116 @@
+// © 2022 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef MLBREAKENGINE_H
+#define MLBREAKENGINE_H
+
+#include "hash.h"
+#include "unicode/resbund.h"
+#include "unicode/uniset.h"
+#include "unicode/utext.h"
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+/**
+ * A machine learning break engine for the phrase breaking in Japanese.
+ */
+class MlBreakEngine : public UMemory {
+   public:
+    /**
+     * Constructor.
+     *
+     * @param digitOrOpenPunctuationOrAlphabetSet An UnicodeSet with the digit, open punctuation and
+     * alphabet.
+     * @param closePunctuationSet An UnicodeSet with close punctuation.
+     * @param status Information on any errors encountered.
+     */
+    MlBreakEngine(const UnicodeSet &digitOrOpenPunctuationOrAlphabetSet,
+                  const UnicodeSet &closePunctuationSet, UErrorCode &status);
+
+    /**
+     * Virtual destructor.
+     */
+    virtual ~MlBreakEngine();
+
+   public:
+    /**
+     * Divide up a range of characters handled by this break engine.
+     *
+     * @param inText A UText representing the text
+     * @param rangeStart The start of the range of the characters
+     * @param rangeEnd The end of the range of the characters
+     * @param foundBreaks Output of C array of int32_t break positions, or 0
+     * @param inString The normalized string of text ranging from rangeStart to rangeEnd
+     * @param inputMap The vector storing the native index of inText
+     * @param status Information on any errors encountered.
+     * @return The number of breaks found
+     */
+    int32_t divideUpRange(UText *inText, int32_t rangeStart, int32_t rangeEnd,
+                          UVector32 &foundBreaks, const UnicodeString &inString,
+                          const LocalPointer<UVector32> &inputMap, UErrorCode &status) const;
+
+   private:
+    /**
+     * Load the machine learning's model file.
+     *
+     * @param error Information on any errors encountered.
+     */
+    void loadMLModel(UErrorCode &error);
+
+    /**
+     * In the machine learning's model file, specify the name of the key and value to load the
+     * corresponding feature and its score.
+     *
+     * @param rb A ResouceBundle corresponding to the model file.
+     * @param keyName The kay name in the model file.
+     * @param valueName The value name in the model file.
+     * @param model A hashtable to store the pairs of the feature and its score.
+     * @param error Information on any errors encountered.
+     */
+    void initKeyValue(UResourceBundle *rb, const char *keyName, const char *valueName,
+                      Hashtable &model, UErrorCode &error);
+
+    /**
+     * Initialize the index list from the input string.
+     *
+     * @param inString A input string to be segmented.
+     * @param indexList A code unit index list of inString.
+     * @param status Information on any errors encountered.
+     * @return The number of code units of the first four characters in inString.
+     */
+    int32_t initIndexList(const UnicodeString &inString, int32_t *indexList,
+                          UErrorCode &status) const;
+
+    /**
+     * Evaluate whether the index is a potential breakpoint.
+     *
+     * @param inString A input string to be segmented.
+     * @param indexList A code unit index list of the inString.
+     * @param startIdx The start index of the indexList.
+     * @param numCodeUnits  The current code unit boundary of the indexList.
+     * @param numBreaks The accumulated number of breakpoints.
+     * @param boundary A vector including the index of the breakpoint.
+     * @param status Information on any errors encountered.
+     * @return The number of breakpoints
+     */
+    int32_t evaluateBreakpoint(const UnicodeString &inString, int32_t *indexList, int32_t startIdx,
+                               int32_t numCodeUnits, int32_t numBreaks, UVector32 &boundary,
+                               UErrorCode &status) const;
+
+    void printUnicodeString(const UnicodeString &s) const;
+
+    UnicodeSet fDigitOrOpenPunctuationOrAlphabetSet;
+    UnicodeSet fClosePunctuationSet;
+    Hashtable fModel[13];  // {UW1, UW2, ... UW6, BW1, ... BW3, TW1, TW2, ... TW4} 6+3+4= 13
+    int32_t fNegativeSum;
+};
+
+#endif
+
+U_NAMESPACE_END
+
+/* MLBREAKENGINE_H */
+#endif


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/mlbe.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -10,7 +10,7 @@
 #ifdef INCLUDED_FROM_NORMALIZER2_CPP
 
 static const UVersionInfo norm2_nfc_data_formatVersion={4,0,0,0};
-static const UVersionInfo norm2_nfc_data_dataVersion={0xf,0,0,0};
+static const UVersionInfo norm2_nfc_data_dataVersion={0xf,1,0,0};
 
 static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={
 0x50,0x4cb8,0x8920,0x8a20,0x8a20,0x8a20,0x8a20,0x8a20,0xc0,0x300,0xae2,0x29e0,0x3c66,0xfc00,0x1288,0x3b9c,

Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -38,13 +38,13 @@
     virtual UnicodeString &
     normalize(const UnicodeString &src,
               UnicodeString &dest,
-              UErrorCode &errorCode) const U_OVERRIDE {
+              UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             dest.setToBogus();
             return dest;
         }
-        const UChar *sArray=src.getBuffer();
-        if(&dest==&src || sArray==NULL) {
+        const char16_t *sArray=src.getBuffer();
+        if(&dest==&src || sArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             dest.setToBogus();
             return dest;
@@ -57,7 +57,7 @@
         return dest;
     }
     virtual void
-    normalize(const UChar *src, const UChar *limit,
+    normalize(const char16_t *src, const char16_t *limit,
               ReorderingBuffer &buffer, UErrorCode &errorCode) const = 0;
 
     // normalize and append
@@ -64,13 +64,13 @@
     virtual UnicodeString &
     normalizeSecondAndAppend(UnicodeString &first,
                              const UnicodeString &second,
-                             UErrorCode &errorCode) const U_OVERRIDE {
+                             UErrorCode &errorCode) const override {
         return normalizeSecondAndAppend(first, second, true, errorCode);
     }
     virtual UnicodeString &
     append(UnicodeString &first,
            const UnicodeString &second,
-           UErrorCode &errorCode) const U_OVERRIDE {
+           UErrorCode &errorCode) const override {
         return normalizeSecondAndAppend(first, second, false, errorCode);
     }
     UnicodeString &
@@ -82,8 +82,8 @@
         if(U_FAILURE(errorCode)) {
             return first;
         }
-        const UChar *secondArray=second.getBuffer();
-        if(&first==&second || secondArray==NULL) {
+        const char16_t *secondArray=second.getBuffer();
+        if(&first==&second || secondArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return first;
         }
@@ -103,15 +103,15 @@
         return first;
     }
     virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
+    normalizeAndAppend(const char16_t *src, const char16_t *limit, UBool doNormalize,
                        UnicodeString &safeMiddle,
                        ReorderingBuffer &buffer, UErrorCode &errorCode) const = 0;
     virtual UBool
-    getDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE {
-        UChar buffer[4];
+    getDecomposition(UChar32 c, UnicodeString &decomposition) const override {
+        char16_t buffer[4];
         int32_t length;
-        const UChar *d=impl.getDecomposition(c, buffer, length);
-        if(d==NULL) {
+        const char16_t *d=impl.getDecomposition(c, buffer, length);
+        if(d==nullptr) {
             return false;
         }
         if(d==buffer) {
@@ -122,11 +122,11 @@
         return true;
     }
     virtual UBool
-    getRawDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE {
-        UChar buffer[30];
+    getRawDecomposition(UChar32 c, UnicodeString &decomposition) const override {
+        char16_t buffer[30];
         int32_t length;
-        const UChar *d=impl.getRawDecomposition(c, buffer, length);
-        if(d==NULL) {
+        const char16_t *d=impl.getRawDecomposition(c, buffer, length);
+        if(d==nullptr) {
             return false;
         }
         if(d==buffer) {
@@ -137,47 +137,47 @@
         return true;
     }
     virtual UChar32
-    composePair(UChar32 a, UChar32 b) const U_OVERRIDE {
+    composePair(UChar32 a, UChar32 b) const override {
         return impl.composePair(a, b);
     }
 
     virtual uint8_t
-    getCombiningClass(UChar32 c) const U_OVERRIDE {
+    getCombiningClass(UChar32 c) const override {
         return impl.getCC(impl.getNorm16(c));
     }
 
     // quick checks
     virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return false;
         }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
+        const char16_t *sArray=s.getBuffer();
+        if(sArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return false;
         }
-        const UChar *sLimit=sArray+s.length();
+        const char16_t *sLimit=sArray+s.length();
         return sLimit==spanQuickCheckYes(sArray, sLimit, errorCode);
     }
     virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
+    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const override {
         return Normalizer2WithImpl::isNormalized(s, errorCode) ? UNORM_YES : UNORM_NO;
     }
     virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
+    spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return 0;
         }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
+        const char16_t *sArray=s.getBuffer();
+        if(sArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return 0;
         }
         return (int32_t)(spanQuickCheckYes(sArray, sArray+s.length(), errorCode)-sArray);
     }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const = 0;
+    virtual const char16_t *
+    spanQuickCheckYes(const char16_t *src, const char16_t *limit, UErrorCode &errorCode) const = 0;
 
     virtual UNormalizationCheckResult getQuickCheck(UChar32) const {
         return UNORM_YES;
@@ -193,21 +193,21 @@
 
 private:
     virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+    normalize(const char16_t *src, const char16_t *limit,
+              ReorderingBuffer &buffer, UErrorCode &errorCode) const 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,
+    normalizeAndAppend(const char16_t *src, const char16_t *limit, UBool doNormalize,
                        UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+                       ReorderingBuffer &buffer, UErrorCode &errorCode) const 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 {
+                  Edits *edits, UErrorCode &errorCode) const override {
         if (U_FAILURE(errorCode)) {
             return;
         }
@@ -219,7 +219,7 @@
         sink.Flush();
     }
     virtual UBool
-    isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return false;
         }
@@ -228,21 +228,21 @@
         return sLimit == impl.decomposeUTF8(0, s, sLimit, nullptr, nullptr, errorCode);
     }
 
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const U_OVERRIDE {
-        return impl.decompose(src, limit, NULL, errorCode);
+    virtual const char16_t *
+    spanQuickCheckYes(const char16_t *src, const char16_t *limit, UErrorCode &errorCode) const override {
+        return impl.decompose(src, limit, nullptr, errorCode);
     }
     using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE {
+    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const override {
         return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
     }
-    virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryBefore(UChar32 c) const override {
         return impl.hasDecompBoundaryBefore(c);
     }
-    virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryAfter(UChar32 c) const override {
         return impl.hasDecompBoundaryAfter(c);
     }
-    virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+    virtual UBool isInert(UChar32 c) const override {
         return impl.isDecompInert(c);
     }
 };
@@ -255,8 +255,8 @@
 
 private:
     virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+    normalize(const char16_t *src, const char16_t *limit,
+              ReorderingBuffer &buffer, UErrorCode &errorCode) const override {
         impl.compose(src, limit, onlyContiguous, true, buffer, errorCode);
     }
     using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
@@ -263,7 +263,7 @@
 
     void
     normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
-                  Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+                  Edits *edits, UErrorCode &errorCode) const override {
         if (U_FAILURE(errorCode)) {
             return;
         }
@@ -277,19 +277,19 @@
     }
 
     virtual void
-    normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
+    normalizeAndAppend(const char16_t *src, const char16_t *limit, UBool doNormalize,
                        UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+                       ReorderingBuffer &buffer, UErrorCode &errorCode) const override {
         impl.composeAndAppend(src, limit, doNormalize, onlyContiguous, safeMiddle, buffer, errorCode);
     }
 
     virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return false;
         }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
+        const char16_t *sArray=s.getBuffer();
+        if(sArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return false;
         }
@@ -301,7 +301,7 @@
         return impl.compose(sArray, sArray+s.length(), onlyContiguous, false, buffer, errorCode);
     }
     virtual UBool
-    isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return false;
         }
@@ -309,12 +309,12 @@
         return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode);
     }
     virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
+    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const override {
         if(U_FAILURE(errorCode)) {
             return UNORM_MAYBE;
         }
-        const UChar *sArray=s.getBuffer();
-        if(sArray==NULL) {
+        const char16_t *sArray=s.getBuffer();
+        if(sArray==nullptr) {
             errorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return UNORM_MAYBE;
         }
@@ -322,21 +322,21 @@
         impl.composeQuickCheck(sArray, sArray+s.length(), onlyContiguous, &qcResult);
         return qcResult;
     }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const U_OVERRIDE {
-        return impl.composeQuickCheck(src, limit, onlyContiguous, NULL);
+    virtual const char16_t *
+    spanQuickCheckYes(const char16_t *src, const char16_t *limit, UErrorCode &) const override {
+        return impl.composeQuickCheck(src, limit, onlyContiguous, nullptr);
     }
     using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE {
+    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const override {
         return impl.getCompQuickCheck(impl.getNorm16(c));
     }
-    virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryBefore(UChar32 c) const override {
         return impl.hasCompBoundaryBefore(c);
     }
-    virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryAfter(UChar32 c) const override {
         return impl.hasCompBoundaryAfter(c, onlyContiguous);
     }
-    virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+    virtual UBool isInert(UChar32 c) const override {
         return impl.isCompInert(c, onlyContiguous);
     }
 
@@ -350,29 +350,29 @@
 
 private:
     virtual void
-    normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+    normalize(const char16_t *src, const char16_t *limit,
+              ReorderingBuffer &buffer, UErrorCode &errorCode) const 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,
+    normalizeAndAppend(const char16_t *src, const char16_t *limit, UBool doNormalize,
                        UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
+                       ReorderingBuffer &buffer, UErrorCode &errorCode) const override {
         impl.makeFCDAndAppend(src, limit, doNormalize, safeMiddle, buffer, errorCode);
     }
-    virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const U_OVERRIDE {
-        return impl.makeFCD(src, limit, NULL, errorCode);
+    virtual const char16_t *
+    spanQuickCheckYes(const char16_t *src, const char16_t *limit, UErrorCode &errorCode) const override {
+        return impl.makeFCD(src, limit, nullptr, errorCode);
     }
     using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryBefore(UChar32 c) const override {
         return impl.hasFCDBoundaryBefore(c);
     }
-    virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+    virtual UBool hasBoundaryAfter(UChar32 c) const override {
         return impl.hasFCDBoundaryAfter(c);
     }
-    virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+    virtual UBool isInert(UChar32 c) const override {
         return impl.isFCDInert(c);
     }
 };
@@ -391,6 +391,7 @@
     static const Norm2AllModes *getNFCInstance(UErrorCode &errorCode);
     static const Norm2AllModes *getNFKCInstance(UErrorCode &errorCode);
     static const Norm2AllModes *getNFKC_CFInstance(UErrorCode &errorCode);
+    static const Norm2AllModes *getNFKC_SCFInstance(UErrorCode &errorCode);
 
     Normalizer2Impl *impl;
     ComposeNormalizer2 comp;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -87,7 +87,7 @@
     virtual UnicodeString &
     normalize(const UnicodeString &src,
               UnicodeString &dest,
-              UErrorCode &errorCode) const U_OVERRIDE {
+              UErrorCode &errorCode) const override {
         if(U_SUCCESS(errorCode)) {
             if(&dest!=&src) {
                 dest=src;
@@ -99,7 +99,7 @@
     }
     virtual void
     normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
-                  Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+                  Edits *edits, UErrorCode &errorCode) const override {
         if(U_SUCCESS(errorCode)) {
             if (edits != nullptr) {
                 if ((options & U_EDITS_NO_RESET) == 0) {
@@ -117,7 +117,7 @@
     virtual UnicodeString &
     normalizeSecondAndAppend(UnicodeString &first,
                              const UnicodeString &second,
-                             UErrorCode &errorCode) const U_OVERRIDE {
+                             UErrorCode &errorCode) const override {
         if(U_SUCCESS(errorCode)) {
             if(&first!=&second) {
                 first.append(second);
@@ -130,7 +130,7 @@
     virtual UnicodeString &
     append(UnicodeString &first,
            const UnicodeString &second,
-           UErrorCode &errorCode) const U_OVERRIDE {
+           UErrorCode &errorCode) const override {
         if(U_SUCCESS(errorCode)) {
             if(&first!=&second) {
                 first.append(second);
@@ -141,29 +141,29 @@
         return first;
     }
     virtual UBool
-    getDecomposition(UChar32, UnicodeString &) const U_OVERRIDE {
+    getDecomposition(UChar32, UnicodeString &) const override {
         return false;
     }
-    // No need to U_OVERRIDE the default getRawDecomposition().
+    // No need to override the default getRawDecomposition().
     virtual UBool
-    isNormalized(const UnicodeString &, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalized(const UnicodeString &, UErrorCode &errorCode) const override {
         return U_SUCCESS(errorCode);
     }
     virtual UBool
-    isNormalizedUTF8(StringPiece, UErrorCode &errorCode) const U_OVERRIDE {
+    isNormalizedUTF8(StringPiece, UErrorCode &errorCode) const override {
         return U_SUCCESS(errorCode);
     }
     virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &, UErrorCode &) const U_OVERRIDE {
+    quickCheck(const UnicodeString &, UErrorCode &) const override {
         return UNORM_YES;
     }
     virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const U_OVERRIDE {
+    spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const override {
         return s.length();
     }
-    virtual UBool hasBoundaryBefore(UChar32) const U_OVERRIDE { return true; }
-    virtual UBool hasBoundaryAfter(UChar32) const U_OVERRIDE { return true; }
-    virtual UBool isInert(UChar32) const U_OVERRIDE { return true; }
+    virtual UBool hasBoundaryBefore(UChar32) const override { return true; }
+    virtual UBool hasBoundaryAfter(UChar32) const override { return true; }
+    virtual UBool isInert(UChar32) const override { return true; }
 };
 
 NoopNormalizer2::~NoopNormalizer2() {}
@@ -190,7 +190,7 @@
         return;
     }
     noopSingleton=new NoopNormalizer2;
-    if(noopSingleton==NULL) {
+    if(noopSingleton==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -198,7 +198,7 @@
 }
 
 const Normalizer2 *Normalizer2Factory::getNoopInstance(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) { return NULL; }
+    if(U_FAILURE(errorCode)) { return nullptr; }
     umtx_initOnce(noopInitOnce, &initNoopSingleton, errorCode);
     return noopSingleton;
 }
@@ -216,13 +216,13 @@
 Norm2AllModes::createInstance(Normalizer2Impl *impl, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
         delete impl;
-        return NULL;
+        return nullptr;
     }
     Norm2AllModes *allModes=new Norm2AllModes(impl);
-    if(allModes==NULL) {
+    if(allModes==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         delete impl;
-        return NULL;
+        return nullptr;
     }
     return allModes;
 }
@@ -231,12 +231,12 @@
 Norm2AllModes *
 Norm2AllModes::createNFCInstance(UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     Normalizer2Impl *impl=new Normalizer2Impl;
-    if(impl==NULL) {
+    if(impl==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     impl->init(norm2_nfc_data_indexes, &norm2_nfc_data_trie,
                norm2_nfc_data_extraData, norm2_nfc_data_smallFCD);
@@ -254,7 +254,7 @@
 
 const Norm2AllModes *
 Norm2AllModes::getNFCInstance(UErrorCode &errorCode) {
-    if(U_FAILURE(errorCode)) { return NULL; }
+    if(U_FAILURE(errorCode)) { return nullptr; }
     umtx_initOnce(nfcInitOnce, &initNFCSingleton, errorCode);
     return nfcSingleton;
 }
@@ -262,29 +262,29 @@
 const Normalizer2 *
 Normalizer2::getNFCInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->comp : NULL;
+    return allModes!=nullptr ? &allModes->comp : nullptr;
 }
 
 const Normalizer2 *
 Normalizer2::getNFDInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->decomp : NULL;
+    return allModes!=nullptr ? &allModes->decomp : nullptr;
 }
 
 const Normalizer2 *Normalizer2Factory::getFCDInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcd : NULL;
+    return allModes!=nullptr ? &allModes->fcd : nullptr;
 }
 
 const Normalizer2 *Normalizer2Factory::getFCCInstance(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? &allModes->fcc : NULL;
+    return allModes!=nullptr ? &allModes->fcc : nullptr;
 }
 
 const Normalizer2Impl *
 Normalizer2Factory::getNFCImpl(UErrorCode &errorCode) {
     const Norm2AllModes *allModes=Norm2AllModes::getNFCInstance(errorCode);
-    return allModes!=NULL ? allModes->impl : NULL;
+    return allModes!=nullptr ? allModes->impl : nullptr;
 }
 #endif  // NORM2_HARDCODE_NFC_DATA
 
@@ -292,11 +292,11 @@
 
 static UBool U_CALLCONV uprv_normalizer2_cleanup() {
     delete noopSingleton;
-    noopSingleton = NULL;
+    noopSingleton = nullptr;
     noopInitOnce.reset(); 
 #if NORM2_HARDCODE_NFC_DATA
     delete nfcSingleton;
-    nfcSingleton = NULL;
+    nfcSingleton = nullptr;
     nfcInitOnce.reset(); 
 #endif
     return true;
@@ -327,29 +327,29 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_normalize(const UNormalizer2 *norm2,
-                 const UChar *src, int32_t length,
-                 UChar *dest, int32_t capacity,
+                 const char16_t *src, int32_t length,
+                 char16_t *dest, int32_t capacity,
                  UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if( (src==NULL ? length!=0 : length<-1) ||
-        (dest==NULL ? capacity!=0 : capacity<0) ||
-        (src==dest && src!=NULL)
+    if( (src==nullptr ? length!=0 : length<-1) ||
+        (dest==nullptr ? capacity!=0 : capacity<0) ||
+        (src==dest && src!=nullptr)
     ) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
     UnicodeString destString(dest, 0, capacity);
-    // length==0: Nothing to do, and n2wi->normalize(NULL, NULL, buffer, ...) would crash.
+    // length==0: Nothing to do, and n2wi->normalize(nullptr, nullptr, buffer, ...) would crash.
     if(length!=0) {
         const Normalizer2 *n2=(const Normalizer2 *)norm2;
         const Normalizer2WithImpl *n2wi=dynamic_cast<const Normalizer2WithImpl *>(n2);
-        if(n2wi!=NULL) {
+        if(n2wi!=nullptr) {
             // Avoid duplicate argument checking and support NUL-terminated src.
             ReorderingBuffer buffer(n2wi->impl, destString);
             if(buffer.init(length, *pErrorCode)) {
-                n2wi->normalize(src, length>=0 ? src+length : NULL, buffer, *pErrorCode);
+                n2wi->normalize(src, length>=0 ? src+length : nullptr, buffer, *pErrorCode);
             }
         } else {
             UnicodeString srcString(length<0, src, length);
@@ -361,17 +361,17 @@
 
 static int32_t
 normalizeSecondAndAppend(const UNormalizer2 *norm2,
-                         UChar *first, int32_t firstLength, int32_t firstCapacity,
-                         const UChar *second, int32_t secondLength,
+                         char16_t *first, int32_t firstLength, int32_t firstCapacity,
+                         const char16_t *second, int32_t secondLength,
                          UBool doNormalize,
                          UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if( (second==NULL ? secondLength!=0 : secondLength<-1) ||
-        (first==NULL ? (firstCapacity!=0 || firstLength!=0) :
+    if( (second==nullptr ? secondLength!=0 : secondLength<-1) ||
+        (first==nullptr ? (firstCapacity!=0 || firstLength!=0) :
                        (firstCapacity<0 || firstLength<-1)) ||
-        (first==second && first!=NULL)
+        (first==second && first!=nullptr)
     ) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
@@ -378,17 +378,17 @@
     }
     UnicodeString firstString(first, firstLength, firstCapacity);
     firstLength=firstString.length();  // In case it was -1.
-    // secondLength==0: Nothing to do, and n2wi->normalizeAndAppend(NULL, NULL, buffer, ...) would crash.
+    // secondLength==0: Nothing to do, and n2wi->normalizeAndAppend(nullptr, nullptr, buffer, ...) would crash.
     if(secondLength!=0) {
         const Normalizer2 *n2=(const Normalizer2 *)norm2;
         const Normalizer2WithImpl *n2wi=dynamic_cast<const Normalizer2WithImpl *>(n2);
-        if(n2wi!=NULL) {
+        if(n2wi!=nullptr) {
             // Avoid duplicate argument checking and support NUL-terminated src.
             UnicodeString safeMiddle;
             {
                 ReorderingBuffer buffer(n2wi->impl, firstString);
                 if(buffer.init(firstLength+secondLength+1, *pErrorCode)) {  // destCapacity>=-1
-                    n2wi->normalizeAndAppend(second, secondLength>=0 ? second+secondLength : NULL,
+                    n2wi->normalizeAndAppend(second, secondLength>=0 ? second+secondLength : nullptr,
                                              doNormalize, safeMiddle, buffer, *pErrorCode);
                 }
             }  // The ReorderingBuffer destructor finalizes firstString.
@@ -396,7 +396,7 @@
                 // Restore the modified suffix of the first string.
                 // This does not restore first[] array contents between firstLength and firstCapacity.
                 // (That might be uninitialized memory, as far as we know.)
-                if(first!=NULL) { /* don't dereference NULL */
+                if(first!=nullptr) { /* don't dereference nullptr */
                   safeMiddle.extract(0, 0x7fffffff, first+firstLength-safeMiddle.length());
                   if(firstLength<firstCapacity) {
                     first[firstLength]=0;  // NUL-terminate in case it was originally.
@@ -417,8 +417,8 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2,
-                                UChar *first, int32_t firstLength, int32_t firstCapacity,
-                                const UChar *second, int32_t secondLength,
+                                char16_t *first, int32_t firstLength, int32_t firstCapacity,
+                                const char16_t *second, int32_t secondLength,
                                 UErrorCode *pErrorCode) {
     return normalizeSecondAndAppend(norm2,
                                     first, firstLength, firstCapacity,
@@ -428,8 +428,8 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_append(const UNormalizer2 *norm2,
-              UChar *first, int32_t firstLength, int32_t firstCapacity,
-              const UChar *second, int32_t secondLength,
+              char16_t *first, int32_t firstLength, int32_t firstCapacity,
+              const char16_t *second, int32_t secondLength,
               UErrorCode *pErrorCode) {
     return normalizeSecondAndAppend(norm2,
                                     first, firstLength, firstCapacity,
@@ -439,12 +439,12 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_getDecomposition(const UNormalizer2 *norm2,
-                        UChar32 c, UChar *decomposition, int32_t capacity,
+                        UChar32 c, char16_t *decomposition, int32_t capacity,
                         UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if(decomposition==NULL ? capacity!=0 : capacity<0) {
+    if(decomposition==nullptr ? capacity!=0 : capacity<0) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -458,12 +458,12 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_getRawDecomposition(const UNormalizer2 *norm2,
-                           UChar32 c, UChar *decomposition, int32_t capacity,
+                           UChar32 c, char16_t *decomposition, int32_t capacity,
                            UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if(decomposition==NULL ? capacity!=0 : capacity<0) {
+    if(decomposition==nullptr ? capacity!=0 : capacity<0) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -487,12 +487,12 @@
 
 U_CAPI UBool U_EXPORT2
 unorm2_isNormalized(const UNormalizer2 *norm2,
-                    const UChar *s, int32_t length,
+                    const char16_t *s, int32_t length,
                     UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if((s==NULL && length!=0) || length<-1) {
+    if((s==nullptr && length!=0) || length<-1) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -502,12 +502,12 @@
 
 U_CAPI UNormalizationCheckResult U_EXPORT2
 unorm2_quickCheck(const UNormalizer2 *norm2,
-                  const UChar *s, int32_t length,
+                  const char16_t *s, int32_t length,
                   UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return UNORM_NO;
     }
-    if((s==NULL && length!=0) || length<-1) {
+    if((s==nullptr && length!=0) || length<-1) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return UNORM_NO;
     }
@@ -517,12 +517,12 @@
 
 U_CAPI int32_t U_EXPORT2
 unorm2_spanQuickCheckYes(const UNormalizer2 *norm2,
-                         const UChar *s, int32_t length,
+                         const char16_t *s, int32_t length,
                          UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if((s==NULL && length!=0) || length<-1) {
+    if((s==nullptr && length!=0) || length<-1) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -81,8 +81,8 @@
     case 2:
         return ((c&0x1f)<<6) | (cpStart[1]&0x3f);
     case 3:
-        // no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar)
-        return (UChar)((c<<12) | ((cpStart[1]&0x3f)<<6) | (cpStart[2]&0x3f));
+        // no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (char16_t)
+        return (char16_t)((c<<12) | ((cpStart[1]&0x3f)<<6) | (cpStart[2]&0x3f));
     case 4:
         return ((c&7)<<18) | ((cpStart[1]&0x3f)<<12) | ((cpStart[2]&0x3f)<<6) | (cpStart[3]&0x3f);
     default:
@@ -182,7 +182,7 @@
 UBool ReorderingBuffer::init(int32_t destCapacity, UErrorCode &errorCode) {
     int32_t length=str.length();
     start=str.getBuffer(destCapacity);
-    if(start==NULL) {
+    if(start==nullptr) {
         // getBuffer() already did str.setToBogus()
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         return false;
@@ -204,7 +204,7 @@
     return true;
 }
 
-UBool ReorderingBuffer::equals(const UChar *otherStart, const UChar *otherLimit) const {
+UBool ReorderingBuffer::equals(const char16_t *otherStart, const char16_t *otherLimit) const {
     int32_t length=(int32_t)(limit-start);
     return
         length==(int32_t)(otherLimit-otherStart) &&
@@ -256,7 +256,7 @@
     return true;
 }
 
-UBool ReorderingBuffer::append(const UChar *s, int32_t length, UBool isNFD,
+UBool ReorderingBuffer::append(const char16_t *s, int32_t length, UBool isNFD,
                                uint8_t leadCC, uint8_t trailCC,
                                UErrorCode &errorCode) {
     if(length==0) {
@@ -272,7 +272,7 @@
         } else if(leadCC<=1) {
             reorderStart=limit+1;  // Ok if not a code point boundary.
         }
-        const UChar *sLimit=s+length;
+        const char16_t *sLimit=s+length;
         do { *limit++=*s++; } while(s!=sLimit);
         lastCC=trailCC;
     } else {
@@ -304,7 +304,7 @@
     }
     remainingCapacity-=cpLength;
     if(cpLength==1) {
-        *limit++=(UChar)c;
+        *limit++=(char16_t)c;
     } else {
         limit[0]=U16_LEAD(c);
         limit[1]=U16_TRAIL(c);
@@ -315,7 +315,7 @@
     return true;
 }
 
-UBool ReorderingBuffer::appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode) {
+UBool ReorderingBuffer::appendZeroCC(const char16_t *s, const char16_t *sLimit, UErrorCode &errorCode) {
     if(s==sLimit) {
         return true;
     }
@@ -362,7 +362,7 @@
         newCapacity=256;
     }
     start=str.getBuffer(newCapacity);
-    if(start==NULL) {
+    if(start==nullptr) {
         // getBuffer() already did str.setToBogus()
         errorCode=U_MEMORY_ALLOCATION_ERROR;
         return false;
@@ -375,7 +375,7 @@
 
 void ReorderingBuffer::skipPrevious() {
     codePointLimit=codePointStart;
-    UChar c=*--codePointStart;
+    char16_t c=*--codePointStart;
     if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(*(codePointStart-1))) {
         --codePointStart;
     }
@@ -387,7 +387,7 @@
         return 0;
     }
     UChar32 c=*--codePointStart;
-    UChar c2;
+    char16_t c2;
     if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(c2=*(codePointStart-1))) {
         --codePointStart;
         c=U16_GET_SUPPLEMENTARY(c2, c);
@@ -400,8 +400,8 @@
 void ReorderingBuffer::insert(UChar32 c, uint8_t cc) {
     for(setIterator(), skipPrevious(); previousCC()>cc;) {}
     // insert c at codePointLimit, after the character with prevCC<=cc
-    UChar *q=limit;
-    UChar *r=limit+=U16_LENGTH(c);
+    char16_t *q=limit;
+    char16_t *r=limit+=U16_LENGTH(c);
     do {
         *--r=*--q;
     } while(codePointLimit!=q);
@@ -429,9 +429,9 @@
 void
 Normalizer2Impl::init(const int32_t *inIndexes, const UCPTrie *inTrie,
                       const uint16_t *inExtraData, const uint8_t *inSmallFCD) {
-    minDecompNoCP = static_cast<UChar>(inIndexes[IX_MIN_DECOMP_NO_CP]);
-    minCompNoMaybeCP = static_cast<UChar>(inIndexes[IX_MIN_COMP_NO_MAYBE_CP]);
-    minLcccCP = static_cast<UChar>(inIndexes[IX_MIN_LCCC_CP]);
+    minDecompNoCP = static_cast<char16_t>(inIndexes[IX_MIN_DECOMP_NO_CP]);
+    minCompNoMaybeCP = static_cast<char16_t>(inIndexes[IX_MIN_COMP_NO_MAYBE_CP]);
+    minLcccCP = static_cast<char16_t>(inIndexes[IX_MIN_LCCC_CP]);
 
     minYesNo = static_cast<uint16_t>(inIndexes[IX_MIN_YES_NO]);
     minYesNoMappingsOnly = static_cast<uint16_t>(inIndexes[IX_MIN_YES_NO_MAPPINGS_ONLY]);
@@ -503,7 +503,7 @@
     }
 
     /* add Hangul LV syllables and LV+1 because of skippables */
-    for(UChar c=Hangul::HANGUL_BASE; c<Hangul::HANGUL_LIMIT; c+=Hangul::JAMO_T_COUNT) {
+    for(char16_t c=Hangul::HANGUL_BASE; c<Hangul::HANGUL_LIMIT; c+=Hangul::JAMO_T_COUNT) {
         sa->add(sa->set, c);
         sa->add(sa->set, c+1);
     }
@@ -524,8 +524,8 @@
     }
 }
 
-const UChar *
-Normalizer2Impl::copyLowPrefixFromNulTerminated(const UChar *src,
+const char16_t *
+Normalizer2Impl::copyLowPrefixFromNulTerminated(const char16_t *src,
                                                 UChar32 minNeedDataCP,
                                                 ReorderingBuffer *buffer,
                                                 UErrorCode &errorCode) const {
@@ -534,13 +534,13 @@
     // data and check the first part of the string.
     // After this prefix, determine the string length to simplify the rest
     // of the code.
-    const UChar *prevSrc=src;
-    UChar c;
+    const char16_t *prevSrc=src;
+    char16_t c;
     while((c=*src++)<minNeedDataCP && c!=0) {}
     // Back out the last character for full processing.
     // Copy this prefix.
     if(--src!=prevSrc) {
-        if(buffer!=NULL) {
+        if(buffer!=nullptr) {
             buffer->appendZeroCC(prevSrc, src, errorCode);
         }
     }
@@ -554,8 +554,8 @@
         dest.setToBogus();
         return dest;
     }
-    const UChar *sArray=src.getBuffer();
-    if(&dest==&src || sArray==NULL) {
+    const char16_t *sArray=src.getBuffer();
+    if(&dest==&src || sArray==nullptr) {
         errorCode=U_ILLEGAL_ARGUMENT_ERROR;
         dest.setToBogus();
         return dest;
@@ -565,11 +565,11 @@
 }
 
 void
-Normalizer2Impl::decompose(const UChar *src, const UChar *limit,
+Normalizer2Impl::decompose(const char16_t *src, const char16_t *limit,
                            UnicodeString &dest,
                            int32_t destLengthEstimate,
                            UErrorCode &errorCode) const {
-    if(destLengthEstimate<0 && limit!=NULL) {
+    if(destLengthEstimate<0 && limit!=nullptr) {
         destLengthEstimate=(int32_t)(limit-src);
     }
     dest.remove();
@@ -580,14 +580,14 @@
 }
 
 // Dual functionality:
-// buffer!=NULL: normalize
-// buffer==NULL: isNormalized/spanQuickCheckYes
-const UChar *
-Normalizer2Impl::decompose(const UChar *src, const UChar *limit,
+// buffer!=nullptr: normalize
+// buffer==nullptr: isNormalized/spanQuickCheckYes
+const char16_t *
+Normalizer2Impl::decompose(const char16_t *src, const char16_t *limit,
                            ReorderingBuffer *buffer,
                            UErrorCode &errorCode) const {
     UChar32 minNoCP=minDecompNoCP;
-    if(limit==NULL) {
+    if(limit==nullptr) {
         src=copyLowPrefixFromNulTerminated(src, minNoCP, buffer, errorCode);
         if(U_FAILURE(errorCode)) {
             return src;
@@ -595,12 +595,12 @@
         limit=u_strchr(src, 0);
     }
 
-    const UChar *prevSrc;
+    const char16_t *prevSrc;
     UChar32 c=0;
     uint16_t norm16=0;
 
     // only for quick check
-    const UChar *prevBoundary=src;
+    const char16_t *prevBoundary=src;
     uint8_t prevCC=0;
 
     for(;;) {
@@ -613,7 +613,7 @@
             } else if(!U16_IS_LEAD(c)) {
                 break;
             } else {
-                UChar c2;
+                char16_t c2;
                 if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
                     c=U16_GET_SUPPLEMENTARY(c, c2);
                     norm16=UCPTRIE_FAST_SUPP_GET(normTrie, UCPTRIE_16, c);
@@ -629,7 +629,7 @@
         }
         // copy these code units all at once
         if(src!=prevSrc) {
-            if(buffer!=NULL) {
+            if(buffer!=nullptr) {
                 if(!buffer->appendZeroCC(prevSrc, src, errorCode)) {
                     break;
                 }
@@ -644,7 +644,7 @@
 
         // Check one above-minimum, relevant code point.
         src+=U16_LENGTH(c);
-        if(buffer!=NULL) {
+        if(buffer!=nullptr) {
             if(!decompose(c, norm16, *buffer, errorCode)) {
                 break;
             }
@@ -669,8 +669,8 @@
 // fail the quick check loop and/or where the quick check loop's overhead
 // is unlikely to be amortized.
 // Called by the compose() and makeFCD() implementations.
-const UChar *
-Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
+const char16_t *
+Normalizer2Impl::decomposeShort(const char16_t *src, const char16_t *limit,
                                 UBool stopAtCompBoundary, UBool onlyContiguous,
                                 ReorderingBuffer &buffer, UErrorCode &errorCode) const {
     if (U_FAILURE(errorCode)) {
@@ -680,7 +680,7 @@
         if (stopAtCompBoundary && *src < minCompNoMaybeCP) {
             return src;
         }
-        const UChar *prevSrc = src;
+        const char16_t *prevSrc = src;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_NEXT(normTrie, UCPTRIE_16, src, limit, c, norm16);
@@ -714,7 +714,7 @@
         return buffer.append(c, 0, errorCode);
     } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
         // Hangul syllable: decompose algorithmically
-        UChar jamos[3];
+        char16_t jamos[3];
         return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
     }
     // c decomposes, get everything from the variable-length extra data
@@ -728,7 +728,7 @@
     } else {
         leadCC=0;
     }
-    return buffer.append((const UChar *)mapping+1, length, true, leadCC, trailCC, errorCode);
+    return buffer.append((const char16_t *)mapping+1, length, true, leadCC, trailCC, errorCode);
 }
 
 // Dual functionality:
@@ -943,14 +943,14 @@
     return src;
 }
 
-const UChar *
-Normalizer2Impl::getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const {
+const char16_t *
+Normalizer2Impl::getDecomposition(UChar32 c, char16_t buffer[4], int32_t &length) const {
     uint16_t norm16;
     if(c<minDecompNoCP || isMaybeOrNonZeroCC(norm16=getNorm16(c))) {
         // c does not decompose
         return nullptr;
     }
-    const UChar *decomp = nullptr;
+    const char16_t *decomp = nullptr;
     if(isDecompNoAlgorithmic(norm16)) {
         // Maps to an isCompYesAndZeroCC.
         c=mapAlgorithmic(c, norm16);
@@ -970,7 +970,7 @@
     // c decomposes, get everything from the variable-length extra data
     const uint16_t *mapping=getMapping(norm16);
     length=*mapping&MAPPING_LENGTH_MASK;
-    return (const UChar *)mapping+1;
+    return (const char16_t *)mapping+1;
 }
 
 // The capacity of the buffer must be 30=MAPPING_LENGTH_MASK-1
@@ -977,12 +977,12 @@
 // so that a raw mapping fits that consists of one unit ("rm0")
 // plus all but the first two code units of the normal mapping.
 // The maximum length of a normal mapping is 31=MAPPING_LENGTH_MASK.
-const UChar *
-Normalizer2Impl::getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const {
+const char16_t *
+Normalizer2Impl::getRawDecomposition(UChar32 c, char16_t buffer[30], int32_t &length) const {
     uint16_t norm16;
     if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
         // c does not decompose
-        return NULL;
+        return nullptr;
     } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
         // Hangul syllable: decompose algorithmically
         Hangul::getRawDecomposition(c, buffer);
@@ -1005,21 +1005,21 @@
         uint16_t rm0=*rawMapping;
         if(rm0<=MAPPING_LENGTH_MASK) {
             length=rm0;
-            return (const UChar *)rawMapping-rm0;
+            return (const char16_t *)rawMapping-rm0;
         } else {
             // Copy the normal mapping and replace its first two code units with rm0.
-            buffer[0]=(UChar)rm0;
-            u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
+            buffer[0]=(char16_t)rm0;
+            u_memcpy(buffer+1, (const char16_t *)mapping+1+2, mLength-2);
             length=mLength-1;
             return buffer;
         }
     } else {
         length=mLength;
-        return (const UChar *)mapping+1;
+        return (const char16_t *)mapping+1;
     }
 }
 
-void Normalizer2Impl::decomposeAndAppend(const UChar *src, const UChar *limit,
+void Normalizer2Impl::decomposeAndAppend(const char16_t *src, const char16_t *limit,
                                          UBool doDecompose,
                                          UnicodeString &safeMiddle,
                                          ReorderingBuffer &buffer,
@@ -1032,9 +1032,9 @@
     // Just merge the strings at the boundary.
     bool isFirst = true;
     uint8_t firstCC = 0, prevCC = 0, cc;
-    const UChar *p = src;
+    const char16_t *p = src;
     while (p != limit) {
-        const UChar *codePointStart = p;
+        const char16_t *codePointStart = p;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_NEXT(normTrie, UCPTRIE_16, p, limit, c, norm16);
@@ -1048,7 +1048,7 @@
         }
         prevCC = cc;
     }
-    if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
+    if(limit==nullptr) {  // appendZeroCC() needs limit!=nullptr
         limit=u_strchr(p, 0);
     }
 
@@ -1218,13 +1218,13 @@
  */
 void Normalizer2Impl::recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex,
                                 UBool onlyContiguous) const {
-    UChar *p=buffer.getStart()+recomposeStartIndex;
-    UChar *limit=buffer.getLimit();
+    char16_t *p=buffer.getStart()+recomposeStartIndex;
+    char16_t *limit=buffer.getLimit();
     if(p==limit) {
         return;
     }
 
-    UChar *starter, *pRemove, *q, *r;
+    char16_t *starter, *pRemove, *q, *r;
     const uint16_t *compositionsList;
     UChar32 c, compositeAndFwd;
     uint16_t norm16;
@@ -1233,8 +1233,8 @@
 
     // Some of the following variables are not used until we have a forward-combining starter
     // and are only initialized now to avoid compiler warnings.
-    compositionsList=NULL;  // used as indicator for whether we have a forward-combining starter
-    starter=NULL;
+    compositionsList=nullptr;  // used as indicator for whether we have a forward-combining starter
+    starter=nullptr;
     starterIsSupplementary=false;
     prevCC=0;
 
@@ -1244,7 +1244,7 @@
         if( // this character combines backward and
             isMaybe(norm16) &&
             // we have seen a starter that combines forward and
-            compositionsList!=NULL &&
+            compositionsList!=nullptr &&
             // the backward-combining character is not blocked
             (prevCC<cc || prevCC==0)
         ) {
@@ -1252,15 +1252,15 @@
                 // c is a Jamo V/T, see if we can compose it with the previous character.
                 if(c<Hangul::JAMO_T_BASE) {
                     // c is a Jamo Vowel, compose with previous Jamo L and following Jamo T.
-                    UChar prev=(UChar)(*starter-Hangul::JAMO_L_BASE);
+                    char16_t prev=(char16_t)(*starter-Hangul::JAMO_L_BASE);
                     if(prev<Hangul::JAMO_L_COUNT) {
                         pRemove=p-1;
-                        UChar syllable=(UChar)
+                        char16_t syllable=(char16_t)
                             (Hangul::HANGUL_BASE+
                              (prev*Hangul::JAMO_V_COUNT+(c-Hangul::JAMO_V_BASE))*
                              Hangul::JAMO_T_COUNT);
-                        UChar t;
-                        if(p!=limit && (t=(UChar)(*p-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
+                        char16_t t;
+                        if(p!=limit && (t=(char16_t)(*p-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
                             ++p;
                             syllable+=t;  // The next character was a Jamo T.
                         }
@@ -1284,7 +1284,7 @@
                 if(p==limit) {
                     break;
                 }
-                compositionsList=NULL;
+                compositionsList=nullptr;
                 continue;
             } else if((compositeAndFwd=combine(compositionsList, c))>=0) {
                 // The starter and the combining mark (c) do combine.
@@ -1298,7 +1298,7 @@
                         starter[0]=U16_LEAD(composite);
                         starter[1]=U16_TRAIL(composite);
                     } else {
-                        *starter=(UChar)composite;
+                        *starter=(char16_t)composite;
                         // The composite is shorter than the starter,
                         // move the intermediate characters forward one.
                         starterIsSupplementary=false;
@@ -1323,7 +1323,7 @@
                     *--starter=U16_LEAD(composite);  // undo the temporary increment
                 } else {
                     // both are on the BMP
-                    *starter=(UChar)composite;
+                    *starter=(char16_t)composite;
                 }
 
                 /* remove the combining mark by moving the following text over it */
@@ -1346,7 +1346,7 @@
                     compositionsList=
                         getCompositionsListForComposite(getRawNorm16(composite));
                 } else {
-                    compositionsList=NULL;
+                    compositionsList=nullptr;
                 }
 
                 // We combined; continue with looking for compositions.
@@ -1363,7 +1363,7 @@
         // If c did not combine, then check if it is a starter.
         if(cc==0) {
             // Found a new starter.
-            if((compositionsList=getCompositionsListForDecompYes(norm16))!=NULL) {
+            if((compositionsList=getCompositionsListForDecompYes(norm16))!=nullptr) {
                 // It may combine with something, prepare for it.
                 if(U_IS_BMP(c)) {
                     starterIsSupplementary=false;
@@ -1375,7 +1375,7 @@
             }
         } else if(onlyContiguous) {
             // FCC: no discontiguous compositions; any intervening character blocks.
-            compositionsList=NULL;
+            compositionsList=nullptr;
         }
     }
     buffer.setReorderingLimit(limit);
@@ -1435,16 +1435,16 @@
 // doCompose: normalize
 // !doCompose: isNormalized (buffer must be empty and initialized)
 UBool
-Normalizer2Impl::compose(const UChar *src, const UChar *limit,
+Normalizer2Impl::compose(const char16_t *src, const char16_t *limit,
                          UBool onlyContiguous,
                          UBool doCompose,
                          ReorderingBuffer &buffer,
                          UErrorCode &errorCode) const {
-    const UChar *prevBoundary=src;
+    const char16_t *prevBoundary=src;
     UChar32 minNoMaybeCP=minCompNoMaybeCP;
-    if(limit==NULL) {
+    if(limit==nullptr) {
         src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP,
-                                           doCompose ? &buffer : NULL,
+                                           doCompose ? &buffer : nullptr,
                                            errorCode);
         if(U_FAILURE(errorCode)) {
             return false;
@@ -1463,7 +1463,7 @@
     for (;;) {
         // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
         // or with (compYes && ccc==0) properties.
-        const UChar *prevSrc;
+        const char16_t *prevSrc;
         UChar32 c = 0;
         uint16_t norm16 = 0;
         for (;;) {
@@ -1482,7 +1482,7 @@
                 if(!U16_IS_LEAD(c)) {
                     break;
                 } else {
-                    UChar c2;
+                    char16_t c2;
                     if(src!=limit && U16_IS_TRAIL(c2=*src)) {
                         ++src;
                         c=U16_GET_SUPPLEMENTARY(c, c2);
@@ -1528,7 +1528,7 @@
                     if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
                         break;
                     }
-                    const UChar *mapping = reinterpret_cast<const UChar *>(getMapping(norm16));
+                    const char16_t *mapping = reinterpret_cast<const char16_t *>(getMapping(norm16));
                     int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
                     if(!buffer.appendZeroCC(mapping, mapping + length, errorCode)) {
                         break;
@@ -1552,11 +1552,11 @@
             // Other "noNo" type, or need to examine more text around this character:
             // Fall through to the slow path.
         } else if (isJamoVT(norm16) && prevBoundary != prevSrc) {
-            UChar prev=*(prevSrc-1);
+            char16_t prev=*(prevSrc-1);
             if(c<Hangul::JAMO_T_BASE) {
                 // The current character is a Jamo Vowel,
                 // compose with previous Jamo L and following Jamo T.
-                UChar l = (UChar)(prev-Hangul::JAMO_L_BASE);
+                char16_t l = (char16_t)(prev-Hangul::JAMO_L_BASE);
                 if(l<Hangul::JAMO_L_COUNT) {
                     if (!doCompose) {
                         return false;
@@ -1581,7 +1581,7 @@
                         if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
                             break;
                         }
-                        if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+                        if(!buffer.appendBMP((char16_t)syllable, 0, errorCode)) {
                             break;
                         }
                         prevBoundary = src;
@@ -1606,7 +1606,7 @@
                 if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
                     break;
                 }
-                if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+                if(!buffer.appendBMP((char16_t)syllable, 0, errorCode)) {
                     break;
                 }
                 prevBoundary = src;
@@ -1627,7 +1627,7 @@
             } else {
                 // If !onlyContiguous (not FCC), then we ignore the tccc of
                 // the previous character which passed the quick check "yes && ccc==0" test.
-                const UChar *nextSrc;
+                const char16_t *nextSrc;
                 uint16_t n16;
                 for (;;) {
                     if (src == limit) {
@@ -1667,7 +1667,7 @@
         // Slow path: Find the nearest boundaries around the current character,
         // decompose and recompose.
         if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) {
-            const UChar *p = prevSrc;
+            const char16_t *p = prevSrc;
             UCPTRIE_FAST_U16_PREV(normTrie, UCPTRIE_16, prevBoundary, p, c, norm16);
             if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
                 prevSrc = p;
@@ -1703,17 +1703,17 @@
 }
 
 // Very similar to compose(): Make the same changes in both places if relevant.
-// pQCResult==NULL: spanQuickCheckYes
-// pQCResult!=NULL: quickCheck (*pQCResult must be UNORM_YES)
-const UChar *
-Normalizer2Impl::composeQuickCheck(const UChar *src, const UChar *limit,
+// pQCResult==nullptr: spanQuickCheckYes
+// pQCResult!=nullptr: quickCheck (*pQCResult must be UNORM_YES)
+const char16_t *
+Normalizer2Impl::composeQuickCheck(const char16_t *src, const char16_t *limit,
                                    UBool onlyContiguous,
                                    UNormalizationCheckResult *pQCResult) const {
-    const UChar *prevBoundary=src;
+    const char16_t *prevBoundary=src;
     UChar32 minNoMaybeCP=minCompNoMaybeCP;
-    if(limit==NULL) {
+    if(limit==nullptr) {
         UErrorCode errorCode=U_ZERO_ERROR;
-        src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, NULL, errorCode);
+        src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, nullptr, errorCode);
         limit=u_strchr(src, 0);
         if (prevBoundary != src) {
             if (hasCompBoundaryAfter(*(src-1), onlyContiguous)) {
@@ -1727,7 +1727,7 @@
     for(;;) {
         // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
         // or with (compYes && ccc==0) properties.
-        const UChar *prevSrc;
+        const char16_t *prevSrc;
         UChar32 c = 0;
         uint16_t norm16 = 0;
         for (;;) {
@@ -1743,7 +1743,7 @@
                 if(!U16_IS_LEAD(c)) {
                     break;
                 } else {
-                    UChar c2;
+                    char16_t c2;
                     if(src!=limit && U16_IS_TRAIL(c2=*src)) {
                         ++src;
                         c=U16_GET_SUPPLEMENTARY(c, c2);
@@ -1766,7 +1766,7 @@
             if (norm16HasCompBoundaryBefore(norm16)) {
                 prevBoundary = prevSrc;
             } else {
-                const UChar *p = prevSrc;
+                const char16_t *p = prevSrc;
                 uint16_t n16;
                 UCPTRIE_FAST_U16_PREV(normTrie, UCPTRIE_16, prevBoundary, p, c, n16);
                 if (norm16HasCompBoundaryAfter(n16, onlyContiguous)) {
@@ -1788,7 +1788,7 @@
             } else {
                 // If !onlyContiguous (not FCC), then we ignore the tccc of
                 // the previous character which passed the quick check "yes && ccc==0" test.
-                const UChar *nextSrc;
+                const char16_t *nextSrc;
                 for (;;) {
                     if (norm16 < MIN_YES_YES_WITH_CC) {
                         if (pQCResult != nullptr) {
@@ -1821,7 +1821,7 @@
                 }
             }
         }
-        if(pQCResult!=NULL) {
+        if(pQCResult!=nullptr) {
             *pQCResult=UNORM_NO;
         }
         return prevBoundary;
@@ -1828,7 +1828,7 @@
     }
 }
 
-void Normalizer2Impl::composeAndAppend(const UChar *src, const UChar *limit,
+void Normalizer2Impl::composeAndAppend(const char16_t *src, const char16_t *limit,
                                        UBool doCompose,
                                        UBool onlyContiguous,
                                        UnicodeString &safeMiddle,
@@ -1835,9 +1835,9 @@
                                        ReorderingBuffer &buffer,
                                        UErrorCode &errorCode) const {
     if(!buffer.isEmpty()) {
-        const UChar *firstStarterInSrc=findNextCompBoundary(src, limit, onlyContiguous);
+        const char16_t *firstStarterInSrc=findNextCompBoundary(src, limit, onlyContiguous);
         if(src!=firstStarterInSrc) {
-            const UChar *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(),
+            const char16_t *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(),
                                                                     buffer.getLimit(), onlyContiguous);
             int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastStarterInDest);
             UnicodeString middle(lastStarterInDest, destSuffixLength);
@@ -1844,7 +1844,7 @@
             buffer.removeSuffix(destSuffixLength);
             safeMiddle=middle;
             middle.append(src, (int32_t)(firstStarterInSrc-src));
-            const UChar *middleStart=middle.getBuffer();
+            const char16_t *middleStart=middle.getBuffer();
             compose(middleStart, middleStart+middle.length(), onlyContiguous,
                     true, buffer, errorCode);
             if(U_FAILURE(errorCode)) {
@@ -1856,7 +1856,7 @@
     if(doCompose) {
         compose(src, limit, onlyContiguous, true, buffer, errorCode);
     } else {
-        if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
+        if(limit==nullptr) {  // appendZeroCC() needs limit!=nullptr
             limit=u_strchr(src, 0);
         }
         buffer.appendZeroCC(src, limit, errorCode);
@@ -1933,7 +1933,7 @@
                     }
                     const uint16_t *mapping = getMapping(norm16);
                     int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
-                    if (!ByteSinkUtil::appendChange(prevSrc, src, (const UChar *)mapping, length,
+                    if (!ByteSinkUtil::appendChange(prevSrc, src, (const char16_t *)mapping, length,
                                                     *sink, edits, errorCode)) {
                         break;
                     }
@@ -2120,7 +2120,7 @@
     return true;
 }
 
-UBool Normalizer2Impl::hasCompBoundaryBefore(const UChar *src, const UChar *limit) const {
+UBool Normalizer2Impl::hasCompBoundaryBefore(const char16_t *src, const char16_t *limit) const {
     if (src == limit || *src < minCompNoMaybeCP) {
         return true;
     }
@@ -2139,7 +2139,7 @@
     return norm16HasCompBoundaryBefore(norm16);
 }
 
-UBool Normalizer2Impl::hasCompBoundaryAfter(const UChar *start, const UChar *p,
+UBool Normalizer2Impl::hasCompBoundaryAfter(const char16_t *start, const char16_t *p,
                                             UBool onlyContiguous) const {
     if (start == p) {
         return true;
@@ -2160,10 +2160,10 @@
     return norm16HasCompBoundaryAfter(norm16, onlyContiguous);
 }
 
-const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p,
+const char16_t *Normalizer2Impl::findPreviousCompBoundary(const char16_t *start, const char16_t *p,
                                                        UBool onlyContiguous) const {
     while (p != start) {
-        const UChar *codePointLimit = p;
+        const char16_t *codePointLimit = p;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_PREV(normTrie, UCPTRIE_16, start, p, c, norm16);
@@ -2177,10 +2177,10 @@
     return p;
 }
 
-const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit,
+const char16_t *Normalizer2Impl::findNextCompBoundary(const char16_t *p, const char16_t *limit,
                                                    UBool onlyContiguous) const {
     while (p != limit) {
-        const UChar *codePointStart = p;
+        const char16_t *codePointStart = p;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_NEXT(normTrie, UCPTRIE_16, p, limit, c, norm16);
@@ -2194,7 +2194,7 @@
     return p;
 }
 
-uint8_t Normalizer2Impl::getPreviousTrailCC(const UChar *start, const UChar *p) const {
+uint8_t Normalizer2Impl::getPreviousTrailCC(const char16_t *start, const char16_t *p) const {
     if (start == p) {
         return 0;
     }
@@ -2267,17 +2267,17 @@
 #endif
 
 // Dual functionality:
-// buffer!=NULL: normalize
-// buffer==NULL: isNormalized/quickCheck/spanQuickCheckYes
-const UChar *
-Normalizer2Impl::makeFCD(const UChar *src, const UChar *limit,
+// buffer!=nullptr: normalize
+// buffer==nullptr: isNormalized/quickCheck/spanQuickCheckYes
+const char16_t *
+Normalizer2Impl::makeFCD(const char16_t *src, const char16_t *limit,
                          ReorderingBuffer *buffer,
                          UErrorCode &errorCode) const {
     // Tracks the last FCD-safe boundary, before lccc=0 or after properly-ordered tccc<=1.
     // Similar to the prevBoundary in the compose() implementation.
-    const UChar *prevBoundary=src;
+    const char16_t *prevBoundary=src;
     int32_t prevFCD16=0;
-    if(limit==NULL) {
+    if(limit==nullptr) {
         src=copyLowPrefixFromNulTerminated(src, minLcccCP, buffer, errorCode);
         if(U_FAILURE(errorCode)) {
             return src;
@@ -2300,7 +2300,7 @@
     // The exception is the call to decomposeShort() which uses the buffer
     // in the normal way.
 
-    const UChar *prevSrc;
+    const char16_t *prevSrc;
     UChar32 c=0;
     uint16_t fcd16=0;
 
@@ -2315,7 +2315,7 @@
                 ++src;
             } else {
                 if(U16_IS_LEAD(c)) {
-                    UChar c2;
+                    char16_t c2;
                     if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
                         c=U16_GET_SUPPLEMENTARY(c, c2);
                     }
@@ -2330,7 +2330,7 @@
         }
         // copy these code units all at once
         if(src!=prevSrc) {
-            if(buffer!=NULL && !buffer->appendZeroCC(prevSrc, src, errorCode)) {
+            if(buffer!=nullptr && !buffer->appendZeroCC(prevSrc, src, errorCode)) {
                 break;
             }
             if(src==limit) {
@@ -2350,7 +2350,7 @@
                     }
                 }
             } else {
-                const UChar *p=src-1;
+                const char16_t *p=src-1;
                 if(U16_IS_TRAIL(*p) && prevSrc<p && U16_IS_LEAD(*(p-1))) {
                     --p;
                     // Need to fetch the previous character's FCD value because
@@ -2376,12 +2376,12 @@
             if((fcd16&0xff)<=1) {
                 prevBoundary=src;
             }
-            if(buffer!=NULL && !buffer->appendZeroCC(c, errorCode)) {
+            if(buffer!=nullptr && !buffer->appendZeroCC(c, errorCode)) {
                 break;
             }
             prevFCD16=fcd16;
             continue;
-        } else if(buffer==NULL) {
+        } else if(buffer==nullptr) {
             return prevBoundary;  // quick check "no"
         } else {
             /*
@@ -2410,15 +2410,15 @@
     return src;
 }
 
-void Normalizer2Impl::makeFCDAndAppend(const UChar *src, const UChar *limit,
+void Normalizer2Impl::makeFCDAndAppend(const char16_t *src, const char16_t *limit,
                                        UBool doMakeFCD,
                                        UnicodeString &safeMiddle,
                                        ReorderingBuffer &buffer,
                                        UErrorCode &errorCode) const {
     if(!buffer.isEmpty()) {
-        const UChar *firstBoundaryInSrc=findNextFCDBoundary(src, limit);
+        const char16_t *firstBoundaryInSrc=findNextFCDBoundary(src, limit);
         if(src!=firstBoundaryInSrc) {
-            const UChar *lastBoundaryInDest=findPreviousFCDBoundary(buffer.getStart(),
+            const char16_t *lastBoundaryInDest=findPreviousFCDBoundary(buffer.getStart(),
                                                                     buffer.getLimit());
             int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastBoundaryInDest);
             UnicodeString middle(lastBoundaryInDest, destSuffixLength);
@@ -2425,7 +2425,7 @@
             buffer.removeSuffix(destSuffixLength);
             safeMiddle=middle;
             middle.append(src, (int32_t)(firstBoundaryInSrc-src));
-            const UChar *middleStart=middle.getBuffer();
+            const char16_t *middleStart=middle.getBuffer();
             makeFCD(middleStart, middleStart+middle.length(), &buffer, errorCode);
             if(U_FAILURE(errorCode)) {
                 return;
@@ -2436,7 +2436,7 @@
     if(doMakeFCD) {
         makeFCD(src, limit, &buffer, errorCode);
     } else {
-        if(limit==NULL) {  // appendZeroCC() needs limit!=NULL
+        if(limit==nullptr) {  // appendZeroCC() needs limit!=nullptr
             limit=u_strchr(src, 0);
         }
         buffer.appendZeroCC(src, limit, errorCode);
@@ -2443,9 +2443,9 @@
     }
 }
 
-const UChar *Normalizer2Impl::findPreviousFCDBoundary(const UChar *start, const UChar *p) const {
+const char16_t *Normalizer2Impl::findPreviousFCDBoundary(const char16_t *start, const char16_t *p) const {
     while(start<p) {
-        const UChar *codePointLimit = p;
+        const char16_t *codePointLimit = p;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_PREV(normTrie, UCPTRIE_16, start, p, c, norm16);
@@ -2459,9 +2459,9 @@
     return p;
 }
 
-const UChar *Normalizer2Impl::findNextFCDBoundary(const UChar *p, const UChar *limit) const {
+const char16_t *Normalizer2Impl::findNextFCDBoundary(const char16_t *p, const char16_t *limit) const {
     while(p<limit) {
-        const UChar *codePointStart=p;
+        const char16_t *codePointStart=p;
         UChar32 c;
         uint16_t norm16;
         UCPTRIE_FAST_U16_NEXT(normTrie, UCPTRIE_16, p, limit, c, norm16);
@@ -2479,7 +2479,7 @@
 
 CanonIterData::CanonIterData(UErrorCode &errorCode) :
         mutableTrie(umutablecptrie_open(0, 0, &errorCode)), trie(nullptr),
-        canonStartSets(uprv_deleteUObject, NULL, errorCode) {}
+        canonStartSets(uprv_deleteUObject, nullptr, errorCode) {}
 
 CanonIterData::~CanonIterData() {
     umutablecptrie_close(mutableTrie);
@@ -2535,9 +2535,9 @@
 U_CDECL_END
 
 void InitCanonIterData::doInit(Normalizer2Impl *impl, UErrorCode &errorCode) {
-    U_ASSERT(impl->fCanonIterData == NULL);
+    U_ASSERT(impl->fCanonIterData == nullptr);
     impl->fCanonIterData = new CanonIterData(errorCode);
-    if (impl->fCanonIterData == NULL) {
+    if (impl->fCanonIterData == nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
     }
     if (U_SUCCESS(errorCode)) {
@@ -2562,7 +2562,7 @@
     }
     if (U_FAILURE(errorCode)) {
         delete impl->fCanonIterData;
-        impl->fCanonIterData = NULL;
+        impl->fCanonIterData = nullptr;
     }
 }
 
@@ -2710,7 +2710,7 @@
 
     /* udata_swapDataHeader checks the arguments */
     headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode);
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
@@ -2733,7 +2733,7 @@
     }
 
     inBytes=(const uint8_t *)inData+headerSize;
-    outBytes=(uint8_t *)outData+headerSize;
+    outBytes=(outData == nullptr) ? nullptr : (uint8_t *)outData+headerSize;
 
     inIndexes=(const int32_t *)inBytes;
     int32_t minIndexesLength;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -99,16 +99,16 @@
      * Decomposes c, which must be a Hangul syllable, into buffer
      * and returns the length of the decomposition (2 or 3).
      */
-    static inline int32_t decompose(UChar32 c, UChar buffer[3]) {
+    static inline int32_t decompose(UChar32 c, char16_t buffer[3]) {
         c-=HANGUL_BASE;
         UChar32 c2=c%JAMO_T_COUNT;
         c/=JAMO_T_COUNT;
-        buffer[0]=(UChar)(JAMO_L_BASE+c/JAMO_V_COUNT);
-        buffer[1]=(UChar)(JAMO_V_BASE+c%JAMO_V_COUNT);
+        buffer[0]=(char16_t)(JAMO_L_BASE+c/JAMO_V_COUNT);
+        buffer[1]=(char16_t)(JAMO_V_BASE+c%JAMO_V_COUNT);
         if(c2==0) {
             return 2;
         } else {
-            buffer[2]=(UChar)(JAMO_T_BASE+c2);
+            buffer[2]=(char16_t)(JAMO_T_BASE+c2);
             return 3;
         }
     }
@@ -117,17 +117,17 @@
      * Decomposes c, which must be a Hangul syllable, into buffer.
      * This is the raw, not recursive, decomposition. Its length is always 2.
      */
-    static inline void getRawDecomposition(UChar32 c, UChar buffer[2]) {
+    static inline void getRawDecomposition(UChar32 c, char16_t buffer[2]) {
         UChar32 orig=c;
         c-=HANGUL_BASE;
         UChar32 c2=c%JAMO_T_COUNT;
         if(c2==0) {
             c/=JAMO_T_COUNT;
-            buffer[0]=(UChar)(JAMO_L_BASE+c/JAMO_V_COUNT);
-            buffer[1]=(UChar)(JAMO_V_BASE+c%JAMO_V_COUNT);
+            buffer[0]=(char16_t)(JAMO_L_BASE+c/JAMO_V_COUNT);
+            buffer[1]=(char16_t)(JAMO_V_BASE+c%JAMO_V_COUNT);
         } else {
-            buffer[0]=(UChar)(orig-c2);  // LV syllable
-            buffer[1]=(UChar)(JAMO_T_BASE+c2);
+            buffer[0]=(char16_t)(orig-c2);  // LV syllable
+            buffer[1]=(char16_t)(JAMO_T_BASE+c2);
         }
     }
 private:
@@ -154,22 +154,22 @@
 
     UBool isEmpty() const { return start==limit; }
     int32_t length() const { return (int32_t)(limit-start); }
-    UChar *getStart() { return start; }
-    UChar *getLimit() { return limit; }
+    char16_t *getStart() { return start; }
+    char16_t *getLimit() { return limit; }
     uint8_t getLastCC() const { return lastCC; }
 
-    UBool equals(const UChar *start, const UChar *limit) const;
+    UBool equals(const char16_t *start, const char16_t *limit) const;
     UBool equals(const uint8_t *otherStart, const uint8_t *otherLimit) const;
 
     UBool append(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
         return (c<=0xffff) ?
-            appendBMP((UChar)c, cc, errorCode) :
+            appendBMP((char16_t)c, cc, errorCode) :
             appendSupplementary(c, cc, errorCode);
     }
-    UBool append(const UChar *s, int32_t length, UBool isNFD,
+    UBool append(const char16_t *s, int32_t length, UBool isNFD,
                  uint8_t leadCC, uint8_t trailCC,
                  UErrorCode &errorCode);
-    UBool appendBMP(UChar c, uint8_t cc, UErrorCode &errorCode) {
+    UBool appendBMP(char16_t c, uint8_t cc, UErrorCode &errorCode) {
         if(remainingCapacity==0 && !resize(1, errorCode)) {
             return false;
         }
@@ -186,10 +186,10 @@
         return true;
     }
     UBool appendZeroCC(UChar32 c, UErrorCode &errorCode);
-    UBool appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode);
+    UBool appendZeroCC(const char16_t *s, const char16_t *sLimit, UErrorCode &errorCode);
     void remove();
     void removeSuffix(int32_t suffixLength);
-    void setReorderingLimit(UChar *newLimit) {
+    void setReorderingLimit(char16_t *newLimit) {
         remainingCapacity+=(int32_t)(limit-newLimit);
         reorderStart=limit=newLimit;
         lastCC=0;
@@ -213,9 +213,9 @@
 
     UBool appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode);
     void insert(UChar32 c, uint8_t cc);
-    static void writeCodePoint(UChar *p, UChar32 c) {
+    static void writeCodePoint(char16_t *p, UChar32 c) {
         if(c<=0xffff) {
-            *p=(UChar)c;
+            *p=(char16_t)c;
         } else {
             p[0]=U16_LEAD(c);
             p[1]=U16_TRAIL(c);
@@ -225,7 +225,7 @@
 
     const Normalizer2Impl &impl;
     UnicodeString &str;
-    UChar *start, *reorderStart, *limit;
+    char16_t *start, *reorderStart, *limit;
     int32_t remainingCapacity;
     uint8_t lastCC;
 
@@ -234,7 +234,7 @@
     void skipPrevious();  // Requires start<codePointStart.
     uint8_t previousCC();  // Returns 0 if there is no previous character.
 
-    UChar *codePointStart, *codePointLimit;
+    char16_t *codePointStart, *codePointLimit;
 };
 
 /**
@@ -322,12 +322,12 @@
      * @param limit The end of the string, or NULL.
      * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
      */
-    uint16_t nextFCD16(const UChar *&s, const UChar *limit) const {
+    uint16_t nextFCD16(const char16_t *&s, const char16_t *limit) const {
         UChar32 c=*s++;
         if(c<minDecompNoCP || !singleLeadMightHaveNonZeroFCD16(c)) {
             return 0;
         }
-        UChar c2;
+        char16_t c2;
         if(U16_IS_LEAD(c) && s!=limit && U16_IS_TRAIL(c2=*s)) {
             c=U16_GET_SUPPLEMENTARY(c, c2);
             ++s;
@@ -340,7 +340,7 @@
      * @param s A valid pointer into a string. Requires start<s.
      * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
      */
-    uint16_t previousFCD16(const UChar *start, const UChar *&s) const {
+    uint16_t previousFCD16(const char16_t *start, const char16_t *&s) const {
         UChar32 c=*--s;
         if(c<minDecompNoCP) {
             return 0;
@@ -350,7 +350,7 @@
                 return 0;
             }
         } else {
-            UChar c2;
+            char16_t c2;
             if(start<s && U16_IS_LEAD(c2=*(s-1))) {
                 c=U16_GET_SUPPLEMENTARY(c2, c);
                 --s;
@@ -376,7 +376,7 @@
      * @param length out-only, takes the length of the decomposition, if any
      * @return pointer to the decomposition, or NULL if none
      */
-    const UChar *getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const;
+    const char16_t *getDecomposition(UChar32 c, char16_t buffer[4], int32_t &length) const;
 
     /**
      * Gets the raw decomposition for one code point.
@@ -385,7 +385,7 @@
      * @param length out-only, takes the length of the decomposition, if any
      * @return pointer to the decomposition, or NULL if none
      */
-    const UChar *getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const;
+    const char16_t *getRawDecomposition(UChar32 c, char16_t buffer[30], int32_t &length) const;
 
     UChar32 composePair(UChar32 a, UChar32 b) const;
 
@@ -480,13 +480,13 @@
      * limit can be NULL if src is NUL-terminated.
      * destLengthEstimate is the initial dest buffer capacity and can be -1.
      */
-    void decompose(const UChar *src, const UChar *limit,
+    void decompose(const char16_t *src, const char16_t *limit,
                    UnicodeString &dest, int32_t destLengthEstimate,
                    UErrorCode &errorCode) const;
 
-    const UChar *decompose(const UChar *src, const UChar *limit,
+    const char16_t *decompose(const char16_t *src, const char16_t *limit,
                            ReorderingBuffer *buffer, UErrorCode &errorCode) const;
-    void decomposeAndAppend(const UChar *src, const UChar *limit,
+    void decomposeAndAppend(const char16_t *src, const char16_t *limit,
                             UBool doDecompose,
                             UnicodeString &safeMiddle,
                             ReorderingBuffer &buffer,
@@ -497,15 +497,15 @@
                                  const uint8_t *src, const uint8_t *limit,
                                  ByteSink *sink, Edits *edits, UErrorCode &errorCode) const;
 
-    UBool compose(const UChar *src, const UChar *limit,
+    UBool compose(const char16_t *src, const char16_t *limit,
                   UBool onlyContiguous,
                   UBool doCompose,
                   ReorderingBuffer &buffer,
                   UErrorCode &errorCode) const;
-    const UChar *composeQuickCheck(const UChar *src, const UChar *limit,
+    const char16_t *composeQuickCheck(const char16_t *src, const char16_t *limit,
                                    UBool onlyContiguous,
                                    UNormalizationCheckResult *pQCResult) const;
-    void composeAndAppend(const UChar *src, const UChar *limit,
+    void composeAndAppend(const char16_t *src, const char16_t *limit,
                           UBool doCompose,
                           UBool onlyContiguous,
                           UnicodeString &safeMiddle,
@@ -517,9 +517,9 @@
                       const uint8_t *src, const uint8_t *limit,
                       ByteSink *sink, icu::Edits *edits, UErrorCode &errorCode) const;
 
-    const UChar *makeFCD(const UChar *src, const UChar *limit,
+    const char16_t *makeFCD(const char16_t *src, const char16_t *limit,
                          ReorderingBuffer *buffer, UErrorCode &errorCode) const;
-    void makeFCDAndAppend(const UChar *src, const UChar *limit,
+    void makeFCDAndAppend(const char16_t *src, const char16_t *limit,
                           UBool doMakeFCD,
                           UnicodeString &safeMiddle,
                           ReorderingBuffer &buffer,
@@ -608,7 +608,7 @@
             return (uint8_t)(*getMapping(norm16)>>8);  // tccc from yesNo
         }
     }
-    uint8_t getPreviousTrailCC(const UChar *start, const UChar *p) const;
+    uint8_t getPreviousTrailCC(const char16_t *start, const char16_t *p) const;
     uint8_t getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const;
 
     // Requires algorithmic-NoNo.
@@ -651,7 +651,7 @@
                 getCompositionsListForComposite(norm16);
     }
 
-    const UChar *copyLowPrefixFromNulTerminated(const UChar *src,
+    const char16_t *copyLowPrefixFromNulTerminated(const char16_t *src,
                                                 UChar32 minNeedDataCP,
                                                 ReorderingBuffer *buffer,
                                                 UErrorCode &errorCode) const;
@@ -658,7 +658,7 @@
 
     enum StopAt { STOP_AT_LIMIT, STOP_AT_DECOMP_BOUNDARY, STOP_AT_COMP_BOUNDARY };
 
-    const UChar *decomposeShort(const UChar *src, const UChar *limit,
+    const char16_t *decomposeShort(const char16_t *src, const char16_t *limit,
                                 UBool stopAtCompBoundary, UBool onlyContiguous,
                                 ReorderingBuffer &buffer, UErrorCode &errorCode) const;
     UBool decompose(UChar32 c, uint16_t norm16,
@@ -679,9 +679,9 @@
     UBool norm16HasCompBoundaryBefore(uint16_t norm16) const  {
         return norm16 < minNoNoCompNoMaybeCC || isAlgorithmicNoNo(norm16);
     }
-    UBool hasCompBoundaryBefore(const UChar *src, const UChar *limit) const;
+    UBool hasCompBoundaryBefore(const char16_t *src, const char16_t *limit) const;
     UBool hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const;
-    UBool hasCompBoundaryAfter(const UChar *start, const UChar *p,
+    UBool hasCompBoundaryAfter(const char16_t *start, const char16_t *p,
                                UBool onlyContiguous) const;
     UBool hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p,
                                UBool onlyContiguous) const;
@@ -695,11 +695,11 @@
             (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1 : *getMapping(norm16) <= 0x1ff);
     }
 
-    const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p, UBool onlyContiguous) const;
-    const UChar *findNextCompBoundary(const UChar *p, const UChar *limit, UBool onlyContiguous) const;
+    const char16_t *findPreviousCompBoundary(const char16_t *start, const char16_t *p, UBool onlyContiguous) const;
+    const char16_t *findNextCompBoundary(const char16_t *p, const char16_t *limit, UBool onlyContiguous) const;
 
-    const UChar *findPreviousFCDBoundary(const UChar *start, const UChar *p) const;
-    const UChar *findNextFCDBoundary(const UChar *p, const UChar *limit) const;
+    const char16_t *findPreviousFCDBoundary(const char16_t *start, const char16_t *p) const;
+    const char16_t *findNextFCDBoundary(const char16_t *p, const char16_t *limit) const;
 
     void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16,
                                      CanonIterData &newData, UErrorCode &errorCode) const;
@@ -710,9 +710,9 @@
     // UVersionInfo dataVersion;
 
     // BMP code point thresholds for quick check loops looking at single UTF-16 code units.
-    UChar minDecompNoCP;
-    UChar minCompNoMaybeCP;
-    UChar minLcccCP;
+    char16_t minDecompNoCP;
+    char16_t minCompNoMaybeCP;
+    char16_t minLcccCP;
 
     // Norm16 value thresholds for quick check combinations and types of extra data.
     uint16_t minYesNo;
@@ -789,7 +789,8 @@
  *
  * Normalizer2 .nrm data files provide data for the Unicode Normalization algorithms.
  * ICU ships with data files for standard Unicode Normalization Forms
- * NFC and NFD (nfc.nrm), NFKC and NFKD (nfkc.nrm) and NFKC_Casefold (nfkc_cf.nrm).
+ * NFC and NFD (nfc.nrm), NFKC and NFKD (nfkc.nrm),
+ * NFKC_Casefold (nfkc_cf.nrm) and NFKC_Simple_Casefold (nfkc_scf.nrm).
  * Custom (application-specific) data can be built into additional .nrm files
  * with the gennorm2 build tool.
  * ICU ships with one such file, uts46.nrm, for the implementation of UTS #46.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -38,7 +38,7 @@
 //-------------------------------------------------------------------------
 
 Normalizer::Normalizer(const UnicodeString& str, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
+    UObject(), fFilteredNorm2(nullptr), fNorm2(nullptr), fUMode(mode), fOptions(0),
     text(new StringCharacterIterator(str)),
     currentIndex(0), nextIndex(0),
     buffer(), bufferPos(0)
@@ -47,7 +47,7 @@
 }
 
 Normalizer::Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
+    UObject(), fFilteredNorm2(nullptr), fNorm2(nullptr), fUMode(mode), fOptions(0),
     text(new UCharCharacterIterator(str, length)),
     currentIndex(0), nextIndex(0),
     buffer(), bufferPos(0)
@@ -56,7 +56,7 @@
 }
 
 Normalizer::Normalizer(const CharacterIterator& iter, UNormalizationMode mode) :
-    UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
+    UObject(), fFilteredNorm2(nullptr), fNorm2(nullptr), fUMode(mode), fOptions(0),
     text(iter.clone()),
     currentIndex(0), nextIndex(0),
     buffer(), bufferPos(0)
@@ -65,7 +65,7 @@
 }
 
 Normalizer::Normalizer(const Normalizer &copy) :
-    UObject(copy), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(copy.fUMode), fOptions(copy.fOptions),
+    UObject(copy), fFilteredNorm2(nullptr), fNorm2(nullptr), fUMode(copy.fUMode), fOptions(copy.fOptions),
     text(copy.text->clone()),
     currentIndex(copy.currentIndex), nextIndex(copy.nextIndex),
     buffer(copy.buffer), bufferPos(copy.bufferPos)
@@ -410,7 +410,7 @@
         return;
     }
     CharacterIterator *newIter = new StringCharacterIterator(newText);
-    if (newIter == NULL) {
+    if (newIter == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -431,7 +431,7 @@
         return;
     }
     CharacterIterator *newIter = newText.clone();
-    if (newIter == NULL) {
+    if (newIter == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -449,7 +449,7 @@
         return;
     }
     CharacterIterator *newIter = new UCharCharacterIterator(newText, length);
-    if (newIter == NULL) {
+    if (newIter == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -164,8 +164,8 @@
     }
 }
 
-const UChar *
-PatternProps::skipWhiteSpace(const UChar *s, int32_t length) {
+const char16_t *
+PatternProps::skipWhiteSpace(const char16_t *s, int32_t length) {
     while(length>0 && isWhiteSpace(*s)) {
         ++s;
         --length;
@@ -183,8 +183,8 @@
     return i;
 }
 
-const UChar *
-PatternProps::trimWhiteSpace(const UChar *s, int32_t &length) {
+const char16_t *
+PatternProps::trimWhiteSpace(const char16_t *s, int32_t &length) {
     if(length<=0 || (!isWhiteSpace(s[0]) && !isWhiteSpace(s[length-1]))) {
         return s;
     }
@@ -205,11 +205,11 @@
 }
 
 UBool
-PatternProps::isIdentifier(const UChar *s, int32_t length) {
+PatternProps::isIdentifier(const char16_t *s, int32_t length) {
     if(length<=0) {
         return false;
     }
-    const UChar *limit=s+length;
+    const char16_t *limit=s+length;
     do {
         if(isSyntaxOrWhiteSpace(*s++)) {
             return false;
@@ -218,8 +218,8 @@
     return true;
 }
 
-const UChar *
-PatternProps::skipIdentifier(const UChar *s, int32_t length) {
+const char16_t *
+PatternProps::skipIdentifier(const char16_t *s, int32_t length) {
     while(length>0 && !isSyntaxOrWhiteSpace(*s)) {
         ++s;
         --length;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -62,7 +62,7 @@
      * Skips over Pattern_White_Space starting at s.
      * @return The smallest pointer at or after s with a non-white space character.
      */
-    static const UChar *skipWhiteSpace(const UChar *s, int32_t length);
+    static const char16_t *skipWhiteSpace(const char16_t *s, int32_t length);
 
     /**
      * Skips over Pattern_White_Space starting at index start in s.
@@ -73,7 +73,7 @@
     /**
      * @return s except with leading and trailing Pattern_White_Space removed and length adjusted.
      */
-    static const UChar *trimWhiteSpace(const UChar *s, int32_t &length);
+    static const char16_t *trimWhiteSpace(const char16_t *s, int32_t &length);
 
     /**
      * Tests whether the string contains a "pattern identifier", that is,
@@ -80,7 +80,7 @@
      * whether it contains only non-Pattern_White_Space, non-Pattern_Syntax characters.
      * @return true if there are no Pattern_White_Space or Pattern_Syntax characters in s.
      */
-    static UBool isIdentifier(const UChar *s, int32_t length);
+    static UBool isIdentifier(const char16_t *s, int32_t length);
 
     /**
      * Skips over a "pattern identifier" starting at index s.
@@ -87,7 +87,7 @@
      * @return The smallest pointer at or after s with
      *         a Pattern_White_Space or Pattern_Syntax character.
      */
-    static const UChar *skipIdentifier(const UChar *s, int32_t length);
+    static const char16_t *skipIdentifier(const char16_t *s, int32_t length);
 
 private:
     PatternProps() = delete;  // no constructor: all static methods

Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -36,7 +36,7 @@
 const char *PluralMapBase::getCategoryName(Category c) {
     int32_t index = c;
     return (index < 0 || index >= UPRV_LENGTHOF(gPluralForms)) ?
-            NULL : gPluralForms[index];
+            nullptr : gPluralForms[index];
 }
 
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -53,7 +53,7 @@
 
     /**
      * Converts a category to a name.
-     * Passing NONE or CATEGORY_COUNT for category returns NULL.
+     * Passing NONE or CATEGORY_COUNT for category returns nullptr.
      */
     static const char *getCategoryName(Category category);
 };
@@ -89,7 +89,7 @@
         fVariants[0] = &fOtherVariant;
         for (int32_t i = 1; i < UPRV_LENGTHOF(fVariants); ++i) {
             fVariants[i] = other.fVariants[i] ?
-                    new T(*other.fVariants[i]) : NULL;
+                    new T(*other.fVariants[i]) : nullptr;
         }
     }
 
@@ -98,12 +98,12 @@
             return *this;
         }
         for (int32_t i = 0; i < UPRV_LENGTHOF(fVariants); ++i) {
-            if (fVariants[i] != NULL && other.fVariants[i] != NULL) {
+            if (fVariants[i] != nullptr && other.fVariants[i] != nullptr) {
                 *fVariants[i] = *other.fVariants[i];
-            } else if (fVariants[i] != NULL) {
+            } else if (fVariants[i] != nullptr) {
                 delete fVariants[i];
-                fVariants[i] = NULL;
-            } else if (other.fVariants[i] != NULL) {
+                fVariants[i] = nullptr;
+            } else if (other.fVariants[i] != nullptr) {
                 fVariants[i] = new T(*other.fVariants[i]);
             } else {
                 // do nothing
@@ -125,7 +125,7 @@
         *fVariants[0] = T();
         for (int32_t i = 1; i < UPRV_LENGTHOF(fVariants); ++i) {
             delete fVariants[i];
-            fVariants[i] = NULL;
+            fVariants[i] = nullptr;
         }
     }
 
@@ -132,21 +132,21 @@
     /**
      * Iterates through the mappings in this instance, set index to NONE
      * prior to using. Call next repeatedly to get the values until it
-     * returns NULL. Each time next returns, caller may pass index
+     * returns nullptr. Each time next returns, caller may pass index
      * to getCategoryName() to get the name of the plural category.
-     * When this function returns NULL, index is CATEGORY_COUNT
+     * When this function returns nullptr, index is CATEGORY_COUNT
      */
     const T *next(Category &index) const {
         int32_t idx = index;
         ++idx;
         for (; idx < UPRV_LENGTHOF(fVariants); ++idx) {
-            if (fVariants[idx] != NULL) {
+            if (fVariants[idx] != nullptr) {
                 index = static_cast<Category>(idx);
                 return fVariants[idx];
             }
         }
         index = static_cast<Category>(idx);
-        return NULL;
+        return nullptr;
     }
 
     /**
@@ -172,7 +172,7 @@
      */
     const T &get(Category v) const {
         int32_t index = v;
-        if (index < 0 || index >= UPRV_LENGTHOF(fVariants) || fVariants[index] == NULL) {
+        if (index < 0 || index >= UPRV_LENGTHOF(fVariants) || fVariants[index] == nullptr) {
             return *fVariants[0];
         }
         return *fVariants[index];
@@ -207,7 +207,7 @@
     T *getMutable(
             Category category,
             UErrorCode &status) {
-        return getMutable(category, NULL, status);
+        return getMutable(category, nullptr, status);
     }
 
     /**
@@ -218,7 +218,7 @@
     T *getMutable(
             const char *category,
             UErrorCode &status) {
-        return getMutable(toCategory(category), NULL, status);
+        return getMutable(toCategory(category), nullptr, status);
     }
 
     /**
@@ -243,7 +243,7 @@
             if (fVariants[i] == rhs.fVariants[i]) {
                 continue;
             }
-            if (fVariants[i] == NULL || rhs.fVariants[i] == NULL) {
+            if (fVariants[i] == nullptr || rhs.fVariants[i] == nullptr) {
                 return false;
             }
             if (!eqFunc(*fVariants[i], *rhs.fVariants[i])) {
@@ -262,15 +262,15 @@
             const T *defaultValue,
             UErrorCode &status) {
         if (U_FAILURE(status)) {
-            return NULL;
+            return nullptr;
         }
         int32_t index = category;
         if (index < 0 || index >= UPRV_LENGTHOF(fVariants)) {
             status = U_ILLEGAL_ARGUMENT_ERROR;
-            return NULL;
+            return nullptr;
         }
-        if (fVariants[index] == NULL) {
-            fVariants[index] = defaultValue == NULL ?
+        if (fVariants[index] == nullptr) {
+            fVariants[index] = defaultValue == nullptr ?
                     new T() : new T(*defaultValue);
         }
         if (!fVariants[index]) {
@@ -282,7 +282,7 @@
     void initializeNew() {
         fVariants[0] = &fOtherVariant;
         for (int32_t i = 1; i < UPRV_LENGTHOF(fVariants); ++i) {
-            fVariants[i] = NULL;
+            fVariants[i] = nullptr;
         }
     }
 };

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -204,7 +204,7 @@
 const char *PropNameData::getName(const char *nameGroup, int32_t nameIndex) {
     int32_t numNames=*nameGroup++;
     if(nameIndex<0 || numNames<=nameIndex) {
-        return NULL;
+        return nullptr;
     }
     // Skip nameIndex names.
     for(; nameIndex>0; --nameIndex) {
@@ -211,13 +211,13 @@
         nameGroup=uprv_strchr(nameGroup, 0)+1;
     }
     if(*nameGroup==0) {
-        return NULL;  // no name (Property[Value]Aliases.txt has "n/a")
+        return nullptr;  // no name (Property[Value]Aliases.txt has "n/a")
     }
     return nameGroup;
 }
 
 UBool PropNameData::containsName(BytesTrie &trie, const char *name) {
-    if(name==NULL) {
+    if(name==nullptr) {
         return false;
     }
     UStringTrieResult result=USTRINGTRIE_NO_VALUE;
@@ -239,7 +239,7 @@
 const char *PropNameData::getPropertyName(int32_t property, int32_t nameChoice) {
     int32_t valueMapIndex=findProperty(property);
     if(valueMapIndex==0) {
-        return NULL;  // Not a known property.
+        return nullptr;  // Not a known property.
     }
     return getName(nameGroups+valueMaps[valueMapIndex], nameChoice);
 }
@@ -247,11 +247,11 @@
 const char *PropNameData::getPropertyValueName(int32_t property, int32_t value, int32_t nameChoice) {
     int32_t valueMapIndex=findProperty(property);
     if(valueMapIndex==0) {
-        return NULL;  // Not a known property.
+        return nullptr;  // Not a known property.
     }
     int32_t nameGroupOffset=findPropertyValueNameGroup(valueMaps[valueMapIndex+1], value);
     if(nameGroupOffset==0) {
-        return NULL;
+        return nullptr;
     }
     return getName(nameGroups+nameGroupOffset, nameChoice);
 }
@@ -289,7 +289,10 @@
 
 U_CAPI const char* U_EXPORT2
 u_getPropertyName(UProperty property,
-                  UPropertyNameChoice nameChoice) {
+                  UPropertyNameChoice nameChoice) UPRV_NO_SANITIZE_UNDEFINED {
+    // The nameChoice is really an integer with a couple of named constants.
+    // Unicode allows for names other than short and long ones.
+    // If present, these will be returned for U_LONG_PROPERTY_NAME + i, where i=1, 2,...
     U_NAMESPACE_USE
     return PropNameData::getPropertyName(property, nameChoice);
 }
@@ -303,7 +306,10 @@
 U_CAPI const char* U_EXPORT2
 u_getPropertyValueName(UProperty property,
                        int32_t value,
-                       UPropertyNameChoice nameChoice) {
+                       UPropertyNameChoice nameChoice) UPRV_NO_SANITIZE_UNDEFINED {
+    // The nameChoice is really an integer with a couple of named constants.
+    // Unicode allows for names other than short and long ones.
+    // If present, these will be returned for U_LONG_PROPERTY_NAME + i, where i=1, 2,...
     U_NAMESPACE_USE
     return PropNameData::getPropertyValueName(property, value, nameChoice);
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -11,101 +11,102 @@
 
 U_NAMESPACE_BEGIN
 
-const int32_t PropNameData::indexes[8]={0x20,0x1660,0x5294,0xacd0,0xacd0,0xacd0,0x31,0};
+const int32_t PropNameData::indexes[8]={0x20,0x1690,0x5337,0xae61,0xae61,0xae61,0x31,0};
 
-const int32_t PropNameData::valueMaps[1424]={
-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,0x3279,0xf7,0x3298,0x2d4,0x33d6,0x2ea,0x3430,
-0x2f4,0x368d,0x316,0x3fb8,0x382,0x4028,0x38c,0x42c2,0x3bb,0x4300,0x3c3,0x4e45,0x48f,0x4ec3,0x499,0x4ee8,
-0x49f,0x4f02,0x4a5,0x4f23,0x4ac,0x4f3d,0xf7,0x4f62,0xf7,0x4f88,0x4b3,0x5032,0x4c9,0x50ab,0x4dc,0x515d,
-0x4f7,0x5194,0x4fe,0x5374,0x512,0x57f4,0x53a,0x2000,0x2001,0x5853,0x542,0x3000,0x3001,0x58df,0,0x4000,
-0x400e,0x58f1,0,0x58fa,0,0x5914,0,0x5925,0,0x5936,0,0x594c,0,0x5955,0,0x5972,
-0,0x5990,0,0x59ae,0,0x59cc,0,0x59e2,0,0x59f6,0,0x5a0c,0,0x7000,0x7001,0x5a25,
-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,0x148,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,0x3196,0x31b6,0x31e4,
-0x3208,0x3230,0x3255,0x3260,0x1fa9,1,0,0x12,0x32af,0x32bf,0x32d2,0x32e2,0x32f2,0x3301,0x3311,0x3323,
-0x3336,0x3348,0x3358,0x3368,0x3377,0x3386,0x3396,0x33a3,0x33b2,0x33c6,0x2067,1,0,6,0x33eb,0x33f6,
-0x3403,0x3410,0x341d,0x3428,0x20ab,1,0,0x1e,0x3445,0x3454,0x3469,0x347e,0x3493,0x34a7,0x34b8,0x34cc,
-0x34df,0x34f0,0x3509,0x351b,0x352c,0x3540,0x3553,0x356b,0x357d,0x3588,0x3598,0x35a6,0x35bb,0x35d0,0x35e6,0x3600,
-0x3616,0x3626,0x363a,0x364e,0x365f,0x3677,0x22d6,1,0,0x68,0x369f,0x36c2,0x36cb,0x36d8,0x36e3,0x36ec,
-0x36f7,0x3700,0x3719,0x371e,0x3727,0x3744,0x374d,0x375a,0x3763,0x3787,0x378e,0x3797,0x37aa,0x37b5,0x37be,0x37c9,
-0x37e2,0x37eb,0x37fa,0x3805,0x380e,0x3819,0x3822,0x3829,0x3832,0x383d,0x3846,0x385f,0x3868,0x3875,0x3880,0x3891,
-0x389c,0x38b1,0x38c8,0x38d1,0x38da,0x38f3,0x38fe,0x3907,0x3910,0x3927,0x3944,0x394f,0x3960,0x396b,0x3972,0x397f,
-0x398c,0x39b9,0x39ce,0x39d7,0x39f2,0x3a15,0x3a36,0x3a57,0x3a7c,0x3aa3,0x3ac4,0x3ae7,0x3b08,0x3b2f,0x3b50,0x3b75,
-0x3b94,0x3bb3,0x3bd2,0x3bef,0x3c10,0x3c31,0x3c54,0x3c79,0x3c98,0x3cb7,0x3cd8,0x3cff,0x3d24,0x3d43,0x3d64,0x3d87,
-0x3da2,0x3dbb,0x3dd6,0x3def,0x3e0c,0x3e27,0x3e44,0x3e63,0x3e80,0x3e9d,0x3ebc,0x3ed9,0x3ef4,0x3f11,0x3f2e,0x3f61,
-0x3f88,0x3f9b,0x2639,1,0,6,0x3fc9,0x3fd8,0x3fe8,0x3ff8,0x4008,0x4019,0x2697,1,0,0x2b,
-0x4037,0x4043,0x4051,0x4060,0x406f,0x407f,0x4090,0x40a4,0x40b9,0x40cf,0x40e2,0x40f6,0x4106,0x410f,0x411a,0x412a,
-0x4146,0x4158,0x4166,0x4175,0x4181,0x4196,0x41aa,0x41bd,0x41cb,0x41df,0x41ed,0x41f7,0x4209,0x4215,0x4223,0x4233,
-0x423a,0x4241,0x4248,0x424f,0x4256,0x426c,0x428d,0x870,0x429f,0x42aa,0x42b9,0x28f0,1,0,4,0x42d3,
-0x42de,0x42ea,0x42f4,0x2916,1,0,0xc8,0x430b,0x4318,0x432d,0x433a,0x4349,0x4357,0x4366,0x4375,0x4387,
-0x4396,0x43a4,0x43b5,0x43c4,0x43d3,0x43e0,0x43ec,0x43fb,0x440a,0x4414,0x4421,0x442e,0x443d,0x444b,0x445a,0x4466,
-0x4470,0x447c,0x448c,0x449c,0x44aa,0x44b6,0x44c7,0x44d3,0x44df,0x44ed,0x44fa,0x4506,0x4513,0xe2f,0x4520,0x452e,
-0x4548,0x4551,0x455f,0x456d,0x4579,0x4588,0x4596,0x45a4,0x45b0,0x45bf,0x45cd,0x45db,0x45e8,0x45f7,0x4612,0x4621,
-0x4632,0x4643,0x4656,0x4668,0x4677,0x4689,0x4698,0x46a4,0x46af,0x1f3f,0x46bc,0x46c7,0x46d2,0x46dd,0x46e8,0x4703,
-0x470e,0x4719,0x4724,0x4737,0x474b,0x4756,0x4765,0x4774,0x477f,0x478a,0x4797,0x47a6,0x47b4,0x47bf,0x47da,0x47e4,
-0x47f5,0x4806,0x4815,0x4826,0x4831,0x483c,0x4847,0x4852,0x485d,0x4868,0x4873,0x487d,0x4888,0x4898,0x48a3,0x48b1,
-0x48be,0x48c9,0x48d8,0x48e5,0x48f2,0x4901,0x490e,0x491f,0x4931,0x4941,0x494c,0x495f,0x4976,0x4984,0x4991,0x499c,
-0x49a9,0x49ba,0x49d6,0x49ec,0x49f7,0x4a14,0x4a24,0x4a33,0x4a3e,0x4a49,0x2059,0x4a55,0x4a60,0x4a78,0x4a88,0x4a97,
-0x4aa5,0x4ab3,0x4abe,0x4ac9,0x4add,0x4af4,0x4b0c,0x4b1c,0x4b2c,0x4b3c,0x4b4e,0x4b59,0x4b64,0x4b6e,0x4b7a,0x4b88,
-0x4b9b,0x4ba7,0x4bb4,0x4bbf,0x4bdb,0x4be8,0x4bf6,0x4c0f,0x2959,0x4c1e,0x277a,0x4c2b,0x4c39,0x4c4b,0x4c59,0x4c65,
-0x4c75,0x2b94,0x4c83,0x4c8f,0x4c9a,0x4ca5,0x4cb0,0x4cc4,0x4cd2,0x4ce9,0x4cf5,0x4d09,0x4d17,0x4d29,0x4d3f,0x4d4d,
-0x4d5f,0x4d6d,0x4d8a,0x4d9c,0x4da9,0x4dba,0x4dcc,0x4de6,0x4df3,0x4e06,0x4e17,0x3111,0x4e24,0x3255,0x4e33,0x3370,
-1,0,6,0x4e5f,0x4e72,0x4e82,0x4e90,0x4ea1,0x4eb1,0x33cc,0x12,0,1,0x4edb,0x4ee1,0x33d9,
-0x12,0,1,0x4edb,0x4ee1,0x33e6,1,0,3,0x4edb,0x4ee1,0x4f1a,0x33fc,1,0,3,
-0x4edb,0x4ee1,0x4f1a,0x3412,1,0,0x12,0x4fa4,0x4fae,0x4fba,0x4fc1,0x4fcc,0x4fd1,0x4fd8,0x4fdf,0x4fe8,
-0x4fed,0x4ff2,0x5002,0x870,0x429f,0x500e,0x42aa,0x501e,0x42b9,0x34bb,1,0,0xf,0x4fa4,0x5045,0x504f,
-0x5059,0x5064,0x4175,0x506e,0x507a,0x5082,0x5089,0x5093,0x4fba,0x4fc1,0x4fd1,0x509d,0x3542,1,0,0x17,
-0x4fa4,0x50ba,0x5059,0x50c6,0x50d3,0x50e1,0x4175,0x50ec,0x4fba,0x50fd,0x4fd1,0x510c,0x511a,0x870,0x428d,0x5126,
-0x5137,0x429f,0x500e,0x42aa,0x501e,0x42b9,0x5148,0x365f,1,0,3,0x517b,0x5183,0x518b,0x3678,1,
-0,0x10,0x51b4,0x51bb,0x51ca,0x51eb,0x520e,0x5219,0x5238,0x524f,0x525c,0x5265,0x5284,0x52b7,0x52d2,0x5301,
-0x531e,0x5343,0x3711,1,0,0x24,0x5392,0x539f,0x53b2,0x53bf,0x53ec,0x5411,0x5426,0x5445,0x5466,0x5493,
-0x54cc,0x54ef,0x5512,0x553f,0x5574,0x559b,0x55c4,0x55fb,0x562a,0x564b,0x5670,0x567f,0x56a2,0x56b9,0x56c6,0x56d5,
-0x56f2,0x570b,0x572e,0x5753,0x576c,0x5781,0x5790,0x57a1,0x57ae,0x57cf,0x38e1,1,0,4,0x580d,0x5818,
-0x5830,0x5848,0x391d,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,0x3445,0x3454,0x3469,0x347e,0x5881,0x3493,
-0x34a7,0x5877,0x34b8,0x34cc,0x34df,0x5892,0x34f0,0x3509,0x351b,0x58a9,0x352c,0x3540,0x3553,0x58d2,0x356b,0x357d,
-0x3588,0x3598,0x586e,0x35a6,0x35bb,0x35d0,0x35e6,0x3600,0x3616,0x3626,0x363a,0x364e,0x58c8,0x365f,0x3677,0x58b3
+const int32_t PropNameData::valueMaps[1436]={
+6,0,0x4b,0,0xf7,0x368,0xf7,0x37e,0xf7,0x393,0xf7,0x3a9,0xf7,0x3b4,0xf7,0x3d5,
+0xf7,0x3e5,0xf7,0x3f4,0xf7,0x402,0xf7,0x426,0xf7,0x43d,0xf7,0x455,0xf7,0x46c,0xf7,0x47b,
+0xf7,0x48a,0xf7,0x49b,0xf7,0x4a9,0xf7,0x4bb,0xf7,0x4d5,0xf7,0x4f0,0xf7,0x505,0xf7,0x522,
+0xf7,0x533,0xf7,0x53e,0xf7,0x55d,0xf7,0x573,0xf7,0x584,0xf7,0x594,0xf7,0x5af,0xf7,0x5c8,
+0xf7,0x5d9,0xf7,0x5f3,0xf7,0x606,0xf7,0x616,0xf7,0x630,0xf7,0x649,0xf7,0x660,0xf7,0x674,
+0xf7,0x68a,0xf7,0x69e,0xf7,0x6b4,0xf7,0x6ce,0xf7,0x6e6,0xf7,0x702,0xf7,0x70a,0xf7,0x712,
+0xf7,0x71a,0xf7,0x722,0xf7,0x72b,0xf7,0x738,0xf7,0x74b,0xf7,0x768,0xf7,0x785,0xf7,0x7a2,
+0xf7,0x7c0,0xf7,0x7de,0xf7,0x802,0xf7,0x80f,0xf7,0x829,0xf7,0x83e,0xf7,0x859,0xf7,0x870,
+0xf7,0x887,0xf7,0x8a9,0xf7,0x8c8,0xf7,0x8e1,0xf7,0x90e,0xf7,0x947,0xf7,0x978,0xf7,0x9a7,
+0xf7,0x9d6,0xf7,0x9eb,0xf7,0xa04,0xf7,0xa2f,0xf7,0x1000,0x1019,0xa60,0x173,0xc80,0x18e,0x331c,
+0xfd,0x333b,0x2db,0x3479,0x2f1,0x34d3,0x2fb,0x3730,0x31d,0x405b,0x389,0x40cb,0x393,0x43b0,0x3c7,0x43ee,
+0x3cf,0x4f33,0x49b,0x4fb1,0x4a5,0x4fd6,0x4ab,0x4ff0,0x4b1,0x5011,0x4b8,0x502b,0xfd,0x5050,0xfd,0x5076,
+0x4bf,0x5120,0x4d5,0x5199,0x4e8,0x524b,0x503,0x5282,0x50a,0x5462,0x51e,0x58e2,0x546,0x2000,0x2001,0x5941,
+0x54e,0x3000,0x3001,0x59cd,0,0x4000,0x400e,0x59df,0,0x59e8,0,0x5a02,0,0x5a13,0,0x5a24,
+0,0x5a3a,0,0x5a43,0,0x5a60,0,0x5a7e,0,0x5a9c,0,0x5aba,0,0x5ad0,0,0x5ae4,
+0,0x5afa,0,0x7000,0x7001,0x5b13,0,0x87a,0x12,0,1,0x12,0x20,0x898,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,0xa39,1,0,0x17,0xa6f,0xa80,0xa91,0xaa5,0xabc,0xad4,0xae6,0xafb,0xb12,
+0xb27,0xb37,0xb49,0xb66,0xb82,0xb94,0xbb1,0xbcd,0xbe9,0xbfe,0xc13,0xc2d,0xc48,0xc63,0xbdb,1,
+0,0x149,0xc8b,0xc98,0xcab,0xcd3,0xcf1,0xd0f,0xd27,0xd52,0xd7c,0xd94,0xda7,0xdba,0xdc9,0xdd8,
+0xde7,0xdf6,0xe0d,0xe1e,0xe31,0xe44,0xe51,0xe5e,0xe6d,0xe7e,0xe93,0xea4,0xeaf,0xeb8,0xec9,0xeda,
+0xeed,0xeff,0xf12,0xf25,0xf64,0xf71,0xf7e,0xf8b,0xfa0,0xfd0,0xfea,0x100b,0x1036,0x1059,0x10b7,0x10de,
+0x10f9,0x1108,0x112f,0x1157,0x117a,0x119d,0x11c7,0x11e0,0x11ff,0x1222,0x1246,0x1259,0x1273,0x129d,0x12b5,0x12dd,
+0x1306,0x1319,0x132c,0x133f,0x1366,0x1375,0x1395,0x13c3,0x13e1,0x140f,0x142b,0x1446,0x145f,0x1478,0x1499,0x14c9,
+0x14e8,0x150a,0x153e,0x156b,0x15b0,0x15d1,0x15fb,0x161c,0x1645,0x1658,0x168b,0x16a2,0x16b1,0x16c2,0x16ed,0x1704,
+0x1735,0x1763,0x17a6,0x17b1,0x17ea,0x17fb,0x180c,0x1819,0x182c,0x1866,0x188a,0x18ae,0x18e8,0x1920,0x194b,0x1963,
+0x198f,0x19bb,0x19c8,0x19d7,0x19f4,0x1a16,0x1a44,0x1a64,0x1a8b,0x1ab2,0x1ad1,0x1ae4,0x1af5,0x1b06,0x1b2b,0x1b50,
+0x1b77,0x1bab,0x1bd8,0x1bf6,0x1c09,0x1c22,0x1c5b,0x1c6a,0x1c8a,0x1cac,0x1cce,0x1ce5,0x1cfc,0x1d29,0x1d42,0x1d5b,
+0x1d8c,0x1db6,0x1dd1,0x1de4,0x1e03,0x1e0c,0x1e1f,0x1e3d,0x1e5b,0x1e6e,0x1e85,0x1e9a,0x1ecf,0x1ef3,0x1f08,0x1f17,
+0x1f2a,0x1f4e,0x1f57,0x1f7b,0x1f92,0x1fa5,0x1fb4,0x1fbf,0x1fe0,0x1ff8,0x2007,0x2016,0x2025,0x203c,0x2051,0x2066,
+0x209f,0x20b2,0x20ce,0x20d9,0x20e6,0x2114,0x2138,0x215b,0x216e,0x2190,0x21a3,0x21be,0x21e1,0x2204,0x2229,0x223a,
+0x2269,0x2296,0x22ad,0x22c8,0x22d7,0x2302,0x233a,0x2374,0x23a2,0x23b3,0x23c0,0x23e4,0x23f3,0x240f,0x2429,0x2446,
+0x247e,0x2493,0x24c0,0x24df,0x250d,0x252d,0x2561,0x2570,0x259a,0x25bd,0x25e8,0x25f3,0x2604,0x261f,0x2643,0x2650,
+0x2665,0x268c,0x26b7,0x26ee,0x2701,0x2712,0x2742,0x2753,0x2762,0x2777,0x2795,0x27a8,0x27bb,0x27d2,0x27ef,0x27fa,
+0x2803,0x2825,0x283a,0x285f,0x2876,0x289f,0x28ba,0x28cf,0x28e8,0x2909,0x293e,0x294f,0x2980,0x29a4,0x29b5,0x29ce,
+0x29d9,0x2a06,0x2a28,0x2a56,0x2a89,0x2a98,0x2aa9,0x2ac6,0x2b08,0x2b2f,0x2b3c,0x2b51,0x2b75,0x2b9b,0x2bd4,0x2be5,
+0x2c09,0x2c14,0x2c21,0x2c30,0x2c55,0x2c83,0x2c9f,0x2cbc,0x2cc9,0x2cda,0x2cf8,0x2d1b,0x2d38,0x2d45,0x2d65,0x2d82,
+0x2da3,0x2dcc,0x2ddd,0x2dfc,0x2e15,0x2e2e,0x2e3f,0x2e88,0x2e99,0x2eb2,0x2ee1,0x2f0e,0x2f33,0x2f75,0x2f91,0x2fa0,
+0x2fb7,0x2fe5,0x2ffe,0x3027,0x3041,0x307c,0x309a,0x30a9,0x30c9,0x30e4,0x3108,0x3124,0x3142,0x3160,0x3177,0x3186,
+0x3191,0x31ce,0x31e1,0x320b,0x322b,0x3259,0x327d,0x32a5,0x32ca,0x32d5,0x32ee,0x1fe5,1,0,0x12,0x3352,
+0x3362,0x3375,0x3385,0x3395,0x33a4,0x33b4,0x33c6,0x33d9,0x33eb,0x33fb,0x340b,0x341a,0x3429,0x3439,0x3446,0x3455,
+0x3469,0x20a3,1,0,6,0x348e,0x3499,0x34a6,0x34b3,0x34c0,0x34cb,0x20e7,1,0,0x1e,0x34e8,
+0x34f7,0x350c,0x3521,0x3536,0x354a,0x355b,0x356f,0x3582,0x3593,0x35ac,0x35be,0x35cf,0x35e3,0x35f6,0x360e,0x3620,
+0x362b,0x363b,0x3649,0x365e,0x3673,0x3689,0x36a3,0x36b9,0x36c9,0x36dd,0x36f1,0x3702,0x371a,0x2312,1,0,
+0x68,0x3742,0x3765,0x376e,0x377b,0x3786,0x378f,0x379a,0x37a3,0x37bc,0x37c1,0x37ca,0x37e7,0x37f0,0x37fd,0x3806,
+0x382a,0x3831,0x383a,0x384d,0x3858,0x3861,0x386c,0x3885,0x388e,0x389d,0x38a8,0x38b1,0x38bc,0x38c5,0x38cc,0x38d5,
+0x38e0,0x38e9,0x3902,0x390b,0x3918,0x3923,0x3934,0x393f,0x3954,0x396b,0x3974,0x397d,0x3996,0x39a1,0x39aa,0x39b3,
+0x39ca,0x39e7,0x39f2,0x3a03,0x3a0e,0x3a15,0x3a22,0x3a2f,0x3a5c,0x3a71,0x3a7a,0x3a95,0x3ab8,0x3ad9,0x3afa,0x3b1f,
+0x3b46,0x3b67,0x3b8a,0x3bab,0x3bd2,0x3bf3,0x3c18,0x3c37,0x3c56,0x3c75,0x3c92,0x3cb3,0x3cd4,0x3cf7,0x3d1c,0x3d3b,
+0x3d5a,0x3d7b,0x3da2,0x3dc7,0x3de6,0x3e07,0x3e2a,0x3e45,0x3e5e,0x3e79,0x3e92,0x3eaf,0x3eca,0x3ee7,0x3f06,0x3f23,
+0x3f40,0x3f5f,0x3f7c,0x3f97,0x3fb4,0x3fd1,0x4004,0x402b,0x403e,0x2675,1,0,6,0x406c,0x407b,0x408b,
+0x409b,0x40ab,0x40bc,0x26d3,1,0,0x30,0x40da,0x40e6,0x40f4,0x4103,0x4112,0x4122,0x4133,0x4147,0x415c,
+0x4172,0x4185,0x4199,0x41a9,0x41b2,0x41bd,0x41cd,0x41e9,0x41fb,0x4209,0x4218,0x4224,0x4239,0x424d,0x4260,0x426e,
+0x4282,0x4290,0x429a,0x42ac,0x42b8,0x42c6,0x42d6,0x42dd,0x42e4,0x42eb,0x42f2,0x42f9,0x430f,0x4330,0x870,0x4342,
+0x434d,0x435c,0x4365,0x4370,0x4383,0x4394,0x43a5,0x2963,1,0,4,0x43c1,0x43cc,0x43d8,0x43e2,0x2989,
+1,0,0xc8,0x43f9,0x4406,0x441b,0x4428,0x4437,0x4445,0x4454,0x4463,0x4475,0x4484,0x4492,0x44a3,0x44b2,
+0x44c1,0x44ce,0x44da,0x44e9,0x44f8,0x4502,0x450f,0x451c,0x452b,0x4539,0x4548,0x4554,0x455e,0x456a,0x457a,0x458a,
+0x4598,0x45a4,0x45b5,0x45c1,0x45cd,0x45db,0x45e8,0x45f4,0x4601,0xea4,0x460e,0x461c,0x4636,0x463f,0x464d,0x465b,
+0x4667,0x4676,0x4684,0x4692,0x469e,0x46ad,0x46bb,0x46c9,0x46d6,0x46e5,0x4700,0x470f,0x4720,0x4731,0x4744,0x4756,
+0x4765,0x4777,0x4786,0x4792,0x479d,0x1fb4,0x47aa,0x47b5,0x47c0,0x47cb,0x47d6,0x47f1,0x47fc,0x4807,0x4812,0x4825,
+0x4839,0x4844,0x4853,0x4862,0x486d,0x4878,0x4885,0x4894,0x48a2,0x48ad,0x48c8,0x48d2,0x48e3,0x48f4,0x4903,0x4914,
+0x491f,0x492a,0x4935,0x4940,0x494b,0x4956,0x4961,0x496b,0x4976,0x4986,0x4991,0x499f,0x49ac,0x49b7,0x49c6,0x49d3,
+0x49e0,0x49ef,0x49fc,0x4a0d,0x4a1f,0x4a2f,0x4a3a,0x4a4d,0x4a64,0x4a72,0x4a7f,0x4a8a,0x4a97,0x4aa8,0x4ac4,0x4ada,
+0x4ae5,0x4b02,0x4b12,0x4b21,0x4b2c,0x4b37,0x20ce,0x4b43,0x4b4e,0x4b66,0x4b76,0x4b85,0x4b93,0x4ba1,0x4bac,0x4bb7,
+0x4bcb,0x4be2,0x4bfa,0x4c0a,0x4c1a,0x4c2a,0x4c3c,0x4c47,0x4c52,0x4c5c,0x4c68,0x4c76,0x4c89,0x4c95,0x4ca2,0x4cad,
+0x4cc9,0x4cd6,0x4ce4,0x4cfd,0x29ce,0x4d0c,0x27ef,0x4d19,0x4d27,0x4d39,0x4d47,0x4d53,0x4d63,0x2c09,0x4d71,0x4d7d,
+0x4d88,0x4d93,0x4d9e,0x4db2,0x4dc0,0x4dd7,0x4de3,0x4df7,0x4e05,0x4e17,0x4e2d,0x4e3b,0x4e4d,0x4e5b,0x4e78,0x4e8a,
+0x4e97,0x4ea8,0x4eba,0x4ed4,0x4ee1,0x4ef4,0x4f05,0x3186,0x4f12,0x32ca,0x4f21,0x33e3,1,0,6,0x4f4d,
+0x4f60,0x4f70,0x4f7e,0x4f8f,0x4f9f,0x343f,0x12,0,1,0x4fc9,0x4fcf,0x344c,0x12,0,1,0x4fc9,
+0x4fcf,0x3459,1,0,3,0x4fc9,0x4fcf,0x5008,0x346f,1,0,3,0x4fc9,0x4fcf,0x5008,0x3485,
+1,0,0x12,0x5092,0x509c,0x50a8,0x50af,0x50ba,0x50bf,0x50c6,0x50cd,0x50d6,0x50db,0x50e0,0x50f0,0x870,
+0x4342,0x50fc,0x434d,0x510c,0x435c,0x352e,1,0,0xf,0x5092,0x5133,0x513d,0x5147,0x5152,0x4218,0x515c,
+0x5168,0x5170,0x5177,0x5181,0x50a8,0x50af,0x50bf,0x518b,0x35b5,1,0,0x17,0x5092,0x51a8,0x5147,0x51b4,
+0x51c1,0x51cf,0x4218,0x51da,0x50a8,0x51eb,0x50bf,0x51fa,0x5208,0x870,0x4330,0x5214,0x5225,0x4342,0x50fc,0x434d,
+0x510c,0x435c,0x5236,0x36d2,1,0,3,0x5269,0x5271,0x5279,0x36eb,1,0,0x10,0x52a2,0x52a9,
+0x52b8,0x52d9,0x52fc,0x5307,0x5326,0x533d,0x534a,0x5353,0x5372,0x53a5,0x53c0,0x53ef,0x540c,0x5431,0x3784,1,
+0,0x24,0x5480,0x548d,0x54a0,0x54ad,0x54da,0x54ff,0x5514,0x5533,0x5554,0x5581,0x55ba,0x55dd,0x5600,0x562d,
+0x5662,0x5689,0x56b2,0x56e9,0x5718,0x5739,0x575e,0x576d,0x5790,0x57a7,0x57b4,0x57c3,0x57e0,0x57f9,0x581c,0x5841,
+0x585a,0x586f,0x587e,0x588f,0x589c,0x58bd,0x3954,1,0,4,0x58fb,0x5906,0x591e,0x5936,0x3990,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,0x34e8,0x34f7,0x350c,0x3521,0x596f,0x3536,0x354a,0x5965,0x355b,0x356f,
+0x3582,0x5980,0x3593,0x35ac,0x35be,0x5997,0x35cf,0x35e3,0x35f6,0x59c0,0x360e,0x3620,0x362b,0x363b,0x595c,0x3649,
+0x365e,0x3673,0x3689,0x36a3,0x36b9,0x36c9,0x36dd,0x36f1,0x59b6,0x3702,0x371a,0x59a1
 };
 
-const uint8_t PropNameData::bytesTries[15412]={
+const uint8_t PropNameData::bytesTries[15527]={
 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,
@@ -166,8 +167,8 @@
 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,
+0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc2,0x2e,0x69,
+0xc1,0x72,0x69,0xa2,0x6f,0x6a,0xa4,0x3f,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,
@@ -174,905 +175,912 @@
 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,0x20,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,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,
-0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x13,0x62,0x6f,0x6c,0x73,
-1,0x61,0x4c,0x66,0x10,0x6f,0x1f,0x72,0x6c,0x65,0x67,0x61,0x63,0x79,0x63,0x6f,
-0x6d,0x70,0x75,0x74,0x69,0x6e,0x67,0xa5,0x32,0x1f,0x6e,0x64,0x70,0x69,0x63,0x74,
-0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x78,0x74,1,0x61,0xa5,0x2a,0x65,0x14,
-0x6e,0x64,0x65,0x64,0x61,0xa5,0x2a,2,0x67,0x34,0x72,0x3e,0x79,0x13,0x6f,0x6d,
-0x62,0x6f,0xa5,0x16,0x13,0x64,0x69,0x61,0x6e,0xa5,0x23,0x17,0x61,0x73,0x6f,0x6d,
-0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,
-0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,
-0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,
-0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,
-0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,
-0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,
-0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,
-0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,
-0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,
-0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,
-0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,
-0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,
-0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,
-0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,
-0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,
-0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,
-0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,
-0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x88,0x68,0xa2,0x48,0x69,0xa2,
-0x71,0x6d,0x12,0x61,0x6c,0x6c,1,0x66,0x46,0x6b,0x15,0x61,0x6e,0x61,0x65,0x78,
-0x74,0xa4,0x29,0x15,0x65,0x6e,0x73,0x69,0x6f,0x6e,0xa5,0x29,0x12,0x6f,0x72,0x6d,
-1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,
-0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,
-0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,
-0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,
-0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,
-0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,
-0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,
-0x61,0x6d,0xa3,0xf8,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,
-0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,
-0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,
-0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,
-0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,
-0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,
-0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,
-0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,
-0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,
-0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
-0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,
-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,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,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,2,0x62,0x3c,0x67,0x4a,0x6e,0x17,0x64,0x69,0x6e,
-0x61,0x67,0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,
-0x16,0x6d,0x75,0x6e,0x64,0x61,0x72,0x69,0xa5,0x47,0x67,0xc4,0x5d,0x6a,0xc1,0xe4,
-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,5,0x74,0x35,0x74,0x34,0x77,0x7a,0x79,0x13,0x61,0x68,
-0x6c,0x69,0xa3,0xa2,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,0x10,0x69,0xa5,0x46,0x69,0xa2,0x4e,
-0x6b,0xa2,0x51,0x6e,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,0x12,0x74,
-0x68,0x69,0xa3,0xc1,0x1c,0x74,0x6f,0x76,0x69,0x6b,0x6e,0x75,0x6d,0x65,0x72,0x61,
-0x6c,0x73,0xa5,0x45,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,0x59,
-0x63,0xa8,0x2e,0x64,0xac,0xe3,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,0xf2,0x6e,0x3e,0x72,
-0xa2,0x5d,0x73,0xa2,0xe5,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,0x7e,0x72,0x12,0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,
-3,0x65,0x4a,0x6d,0x80,0x70,0xa2,0x50,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,0x78,0x74,3,0x61,0xa3,0xd2,0x62,
-0xa5,0x35,0x63,0xa5,0x41,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,0xa3,0xd2,0x62,
-0xa5,0x35,0x63,0xa5,0x41,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,0x60,0x6f,0xa2,0x69,0x75,0xa4,0x24,0x79,1,0x70,0xa2,0x44,
-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,4,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x64,0xa5,
-0x43,0x65,0x13,0x6e,0x64,0x65,0x64,3,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,
-9,0x64,0xa5,0x43,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,0x4c,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,0xe4,0x68,0xa4,0xe,0x6a,0x10,0x6b,0xa2,0x47,
-4,0x63,0x8c,0x65,0xa2,0x80,0x72,0xa2,0x9b,0x73,0xa2,0xad,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,7,0x65,0x6b,0x65,0xa5,0,
-0x66,0xa5,0x12,0x67,0xa5,0x2e,0x68,0xa5,0x42,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,7,0x65,0xc,0x65,0xa5,0,0x66,
-0xa5,0x12,0x67,0xa5,0x2e,0x68,0xa5,0x42,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,
-0xc5,0x64,0xa3,0xd1,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,0x8e,0x6f,0xa2,
-0x71,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x60,0x76,0x16,
-0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,1,0x61,
-0xa5,0x44,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0xb3,0x10,0x61,0xa5,0x44,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,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,0x6f,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,0xa4,1,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,0x9e,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,
-0x14,0x61,0x69,0x6c,0x75,0x65,0x97,3,0x62,0x32,0x67,0x40,0x6e,0x56,0x72,0x10,
-0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0x8f,0x10,0x6d,0xa2,0xc7,
-0x15,0x75,0x6e,0x64,0x61,0x72,0x69,0xa3,0xc7,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,0x15,0x6b,0xc2,0x2c,
-0x6b,0xa4,0x17,0x6c,0xa4,0xba,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,0x32,0x68,0xa2,0x44,0x69,0x11,0x74,0x73,
-0xa3,0xbf,5,0x74,0x23,0x74,0x34,0x77,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,
-0x4f,0x14,0x61,0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,
-0x61,0x6e,0x61,0x8d,0x10,0x69,0xa3,0xc6,0x69,0x38,0x6c,0x40,0x6e,1,0x61,0x4d,
-0x6e,0x12,0x61,0x64,0x61,0x4b,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,0x69,0xa3,0x4f,
-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
+0x61,0x6b,0xc3,8,2,0x64,0x4a,0x6e,0xa2,0x91,0x73,1,0x63,0xd9,0x40,3,
+0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0xa2,0x44,
+0x65,0xa2,0x6c,0x73,0x40,2,0x62,0x48,0x74,0x64,0x75,0xa2,0x48,0x1b,0x6e,0x61,
+0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0xa3,0x48,0x44,0x1c,0x69,0x6e,
+0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x46,1,0x61,0x40,
+0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x47,
+0x11,0x72,0x74,0x41,0x3e,0x10,0x6f,1,0x6d,0x30,0x6e,0x14,0x74,0x69,0x6e,0x75,
+0x65,0x3f,0x16,0x70,0x61,0x74,0x6d,0x61,0x74,0x68,1,0x63,0x30,0x73,0x13,0x74,
+0x61,0x72,0x74,0xa3,0x49,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0xa3,0x4a,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,0x20,
+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,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,0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,
+0x8f,0x13,0x62,0x6f,0x6c,0x73,1,0x61,0x4c,0x66,0x10,0x6f,0x1f,0x72,0x6c,0x65,
+0x67,0x61,0x63,0x79,0x63,0x6f,0x6d,0x70,0x75,0x74,0x69,0x6e,0x67,0xa5,0x32,0x1f,
+0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x78,0x74,
+1,0x61,0xa5,0x2a,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa5,0x2a,2,0x67,0x34,
+0x72,0x3e,0x79,0x13,0x6f,0x6d,0x62,0x6f,0xa5,0x16,0x13,0x64,0x69,0x61,0x6e,0xa5,
+0x23,0x17,0x61,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,
+0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,
+0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,
+0x48,0x70,0x76,0x74,0x1d,0x74,0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,
+0x69,0x6e,0x67,0xa5,6,0x15,0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,
+0x75,0x70,0xa2,0xdb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,
+0xa2,0xa8,0x65,0x5c,0x6d,0x9e,0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,
+0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,
+0xa5,5,0x10,0x72,1,0x61,0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,
+0x61,0x6e,0x64,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,
+0x64,0x73,0x75,0x62,0x73,0x1b,0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,
+0x72,0x73,0xa3,0x6a,1,0x6c,0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,
+0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,
+0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,
+0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,
+0x41,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,
+0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,
+2,0x61,0xa3,0x67,0x62,0xa3,0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,
+0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0xa3,0x6a,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,
+0x88,0x68,0xa2,0x48,0x69,0xa2,0x71,0x6d,0x12,0x61,0x6c,0x6c,1,0x66,0x46,0x6b,
+0x15,0x61,0x6e,0x61,0x65,0x78,0x74,0xa4,0x29,0x15,0x65,0x6e,0x73,0x69,0x6f,0x6e,
+0xa5,0x29,0x12,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69,0x61,
+0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74,0x72,
+0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52,0x6f,
+0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,
+0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,
+0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61,0x6c,
+0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,
+0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,5,0x72,0x35,0x72,0x44,0x73,
+0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,
+0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,
+0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61,0x72,
+0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68,0x61,
+0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,
+0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e,0x16,
+0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75,0x70,
+0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70,0x70,
+0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,
+0x97,1,0x67,0x3e,0x69,0x13,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,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,
+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,2,0x62,0x3c,0x67,
+0x4a,0x6e,0x17,0x64,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,
+0x61,0x65,0x61,0x6e,0xa3,0xef,0x16,0x6d,0x75,0x6e,0x64,0x61,0x72,0x69,0xa5,0x47,
+0x67,0xc4,0x5d,0x6a,0xc1,0xe4,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,5,0x74,0x35,0x74,0x34,
+0x77,0x7a,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,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,0x10,
+0x69,0xa5,0x46,0x69,0xa2,0x4e,0x6b,0xa2,0x51,0x6e,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,0x12,0x74,0x68,0x69,0xa3,0xc1,0x1c,0x74,0x6f,0x76,0x69,0x6b,
+0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa5,0x45,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,0x59,0x63,0xa8,0x2e,0x64,0xac,0xe9,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,0xf2,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xe5,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,0x7e,0x72,0x12,0x6f,0x77,0x73,
+0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x80,0x70,0xa2,0x50,0x73,0x11,
+0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,0x78,
+0x74,3,0x61,0xa3,0xd2,0x62,0xa5,0x35,0x63,0xa5,0x41,0x65,0x13,0x6e,0x64,0x65,
+0x64,2,0x61,0xa3,0xd2,0x62,0xa5,0x35,0x63,0xa5,0x41,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,0x60,0x6f,0xa2,0x69,0x75,0xa4,
+0x24,0x79,1,0x70,0xa2,0x44,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,4,0x61,0xa3,0x9e,0x62,0xa3,
+0xa0,0x63,0xa5,9,0x64,0xa5,0x43,0x65,0x13,0x6e,0x64,0x65,0x64,3,0x61,0xa3,
+0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x64,0xa5,0x43,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,0x52,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,0xea,0x68,0xa4,
+0x14,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x92,0x65,0xa2,0x83,0x72,0xa2,0xa1,0x73,
+0xa2,0xb3,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,
+8,0x65,0x71,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,0x68,0xa5,0x42,0x69,
+0xa5,0x48,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,8,0x65,0xf,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,0x68,0xa5,
+0x42,0x69,0xa5,0x48,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,
+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,0x8e,0x6f,0xa2,0x71,0x75,0x15,0x70,
+0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x60,0x76,0x16,0x61,0x6e,0x61,0x67,
+0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,1,0x61,0xa5,0x44,0x65,0x13,
+0x6e,0x64,0x65,0x64,0xa2,0xb3,0x10,0x61,0xa5,0x44,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,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,0x14,0x6e,0xc0,0xe5,0x73,0x5e,0x77,0x23,0x77,0x40,0x78,0x58,
+0x7a,0x10,0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,1,0x6a,
+0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x73,
+0x4a,0x75,0x7a,0x76,1,0x66,0x7d,0x69,0x7e,0x13,0x72,0x61,0x6d,0x61,0x7e,0x14,
+0x66,0x69,0x6e,0x61,0x6c,0x7d,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,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,0x42,0x62,0xa2,0x49,0x63,
+0xa2,0x76,0x65,0xa2,0xfc,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,5,0x6d,0xf,
+0x6d,0x28,0x70,0x79,0x73,0x7b,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x69,
+0x23,0x6b,0x38,0x6c,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,0x76,
+0x13,0x73,0x61,0x72,0x61,0x76,1,0x70,0x2e,0x73,0x13,0x74,0x61,0x72,0x74,0x7b,
+0x15,0x72,0x65,0x62,0x61,0x73,0x65,0x79,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,0x6f,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,0xa4,1,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,0x9e,0x65,0x10,0x77,1,0x61,
+0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,3,0x62,0x32,0x67,0x40,0x6e,
+0x56,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0x8f,0x10,
+0x6d,0xa2,0xc7,0x15,0x75,0x6e,0x64,0x61,0x72,0x69,0xa3,0xc7,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,0x15,
+0x6b,0xc2,0x2c,0x6b,0xa4,0x17,0x6c,0xa4,0xba,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,0x32,0x68,0xa2,0x44,0x69,
+0x11,0x74,0x73,0xa3,0xbf,5,0x74,0x23,0x74,0x34,0x77,0x56,0x79,0x13,0x61,0x68,
+0x6c,0x69,0xa3,0x4f,0x14,0x61,0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,
+0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,0x10,0x69,0xa3,0xc6,0x69,0x38,0x6c,0x40,0x6e,
+1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,
+0x69,0xa3,0x4f,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[23100]={
+const char PropNameData::nameGroups[23338]={
 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,
@@ -1176,6 +1184,10 @@
 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,'I','D','S','U',0,'I','D','S','_','U','n','a','r','y','_','O','p','e','r','a','t','o','r',0,
+2,'I','D','_','C','o','m','p','a','t','_','M','a','t','h','_','S','t','a','r','t',0,'I','D','_','C','o','m','p','a','t','_',
+'M','a','t','h','_','S','t','a','r','t',0,2,'I','D','_','C','o','m','p','a','t','_','M','a','t','h','_','C','o','n','t','i',
+'n','u','e',0,'I','D','_','C','o','m','p','a','t','_','M','a','t','h','_','C','o','n','t','i','n','u','e',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,
@@ -1568,9 +1580,11 @@
 'e','n','d','e','d','_','A',0,2,'K','a','k','t','o','v','i','k','_','N','u','m','e','r','a','l','s',0,
 'K','a','k','t','o','v','i','k','_','N','u','m','e','r','a','l','s',0,
 2,'K','a','w','i',0,'K','a','w','i',0,2,'N','a','g','_','M','u','n','d','a','r','i',0,
-'N','a','g','_','M','u','n','d','a','r','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,
+'N','a','g','_','M','u','n','d','a','r','i',0,2,'C','J','K','_','E','x','t','_','I',0,'C','J','K','_','U','n','i','f','i',
+'e','d','_','I','d','e','o','g','r','a','p','h','s','_','E','x','t','e','n','s','i','o','n','_','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,
 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,
@@ -1739,7 +1753,11 @@
 's','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a',
 'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0,
 2,'E','B',0,'E','_','B','a','s','e',0,2,'E','M',0,'E','_','M','o','d','i','f','i','e','r',0,
-2,'Z','W','J',0,'Z','W','J',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0,
+2,'Z','W','J',0,'Z','W','J',0,2,'A','K',0,'A','k','s','a','r','a',0,
+2,'A','P',0,'A','k','s','a','r','a','_','P','r','e','b','a','s','e',0,
+2,'A','S',0,'A','k','s','a','r','a','_','S','t','a','r','t',0,
+2,'V','F',0,'V','i','r','a','m','a','_','F','i','n','a','l',0,
+2,'V','I',0,'V','i','r','a','m','a',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0,
 2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0,
 2,'D','i',0,'D','i','g','i','t',0,2,'N','u',0,'N','u','m','e','r','i','c',0,
 2,'s','c',0,'S','c','r','i','p','t',0,2,'Z','y','y','y',0,'C','o','m','m','o','n',0,

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -47,21 +47,21 @@
     uint32_t cp;
 
     if(U_FAILURE(*pErrorCode)) {
-        return NULL;
+        return nullptr;
     }
     if(columns<1) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     columns+=2; /* count range start and limit columns */
 
     pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
     v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
-    if(pv==NULL || v==NULL) {
+    if(pv==nullptr || v==nullptr) {
         uprv_free(pv);
         uprv_free(v);
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     uprv_memset(pv, 0, sizeof(UPropsVectors));
     pv->v=v;
@@ -85,7 +85,7 @@
 
 U_CAPI void U_EXPORT2
 upvec_close(UPropsVectors *pv) {
-    if(pv!=NULL) {
+    if(pv!=nullptr) {
         uprv_free(pv->v);
         uprv_free(pv);
     }
@@ -165,7 +165,7 @@
     if(U_FAILURE(*pErrorCode)) {
         return;
     }
-    if( pv==NULL ||
+    if( pv==nullptr ||
         start<0 || start>end || end>UPVEC_MAX_CP ||
         column<0 || column>=(pv->columns-2)
     ) {
@@ -216,7 +216,7 @@
                 return;
             }
             newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
-            if(newVectors==NULL) {
+            if(newVectors==nullptr) {
                 *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
                 return;
             }
@@ -296,15 +296,15 @@
     int32_t columns;
 
     if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
-        return NULL;
+        return nullptr;
     }
 
     columns=pv->columns;
     row=pv->v+rowIndex*columns;
-    if(pRangeStart!=NULL) {
+    if(pRangeStart!=nullptr) {
         *pRangeStart=(UChar32)row[0];
     }
-    if(pRangeEnd!=NULL) {
+    if(pRangeEnd!=nullptr) {
         *pRangeEnd=(UChar32)row[1]-1;
     }
     return row+2;
@@ -342,7 +342,7 @@
     if(U_FAILURE(*pErrorCode)) {
         return;
     }
-    if(handler==NULL) {
+    if(handler==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -437,12 +437,12 @@
 U_CAPI const uint32_t * U_EXPORT2
 upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
     if(!pv->isCompacted) {
-        return NULL;
+        return nullptr;
     }
-    if(pRows!=NULL) {
+    if(pRows!=nullptr) {
         *pRows=pv->rows;
     }
-    if(pColumns!=NULL) {
+    if(pColumns!=nullptr) {
         *pColumns=pv->columns-2;
     }
     return pv->v;
@@ -455,23 +455,23 @@
     int32_t byteLength;
 
     if(U_FAILURE(*pErrorCode)) {
-        return NULL;
+        return nullptr;
     }
     if(!pv->isCompacted) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     byteLength=pv->rows*(pv->columns-2)*4;
     clonedArray=(uint32_t *)uprv_malloc(byteLength);
-    if(clonedArray==NULL) {
+    if(clonedArray==nullptr) {
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     uprv_memcpy(clonedArray, pv->v, byteLength);
-    if(pRows!=NULL) {
+    if(pRows!=nullptr) {
         *pRows=pv->rows;
     }
-    if(pColumns!=NULL) {
+    if(pColumns!=nullptr) {
         *pColumns=pv->columns-2;
     }
     return clonedArray;
@@ -479,12 +479,12 @@
 
 U_CAPI UTrie2 * U_EXPORT2
 upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
-    UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 };
+    UPVecToUTrie2Context toUTrie2={ nullptr, 0, 0, 0 };
     upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
     utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
     if(U_FAILURE(*pErrorCode)) {
         utrie2_close(toUTrie2.trie);
-        toUTrie2.trie=NULL;
+        toUTrie2.trie=nullptr;
     }
     return toUTrie2.trie;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -179,21 +179,21 @@
 
 // encode
 U_CAPI int32_t
-u_strToPunycode(const UChar *src, int32_t srcLength,
-                UChar *dest, int32_t destCapacity,
+u_strToPunycode(const char16_t *src, int32_t srcLength,
+                char16_t *dest, int32_t destCapacity,
                 const UBool *caseFlags,
                 UErrorCode *pErrorCode) {
 
     int32_t cpBuffer[ENCODE_MAX_CODE_UNITS];
     int32_t n, delta, handledCPCount, basicLength, destLength, bias, j, m, q, k, t, srcCPCount;
-    UChar c, c2;
+    char16_t c, c2;
 
     /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
-    if(src==NULL || srcLength<-1 || (dest==NULL && destCapacity!=0)) {
+    if(src==nullptr || srcLength<-1 || (dest==nullptr && destCapacity!=0)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -221,13 +221,13 @@
                 cpBuffer[srcCPCount++]=0;
                 if(destLength<destCapacity) {
                     dest[destLength]=
-                        caseFlags!=NULL ?
+                        caseFlags!=nullptr ?
                             asciiCaseMap((char)c, caseFlags[j]) :
                             (char)c;
                 }
                 ++destLength;
             } else {
-                n=(caseFlags!=NULL && caseFlags[j])<<31L;
+                n=(caseFlags!=nullptr && caseFlags[j])<<31L;
                 if(U16_IS_SINGLE(c)) {
                     n|=c;
                 } else if(U16_IS_LEAD(c) && U16_IS_TRAIL(c2=src[j+1])) {
@@ -249,13 +249,13 @@
                 cpBuffer[srcCPCount++]=0;
                 if(destLength<destCapacity) {
                     dest[destLength]=
-                        caseFlags!=NULL ?
+                        caseFlags!=nullptr ?
                             asciiCaseMap((char)c, caseFlags[j]) :
                             (char)c;
                 }
                 ++destLength;
             } else {
-                n=(caseFlags!=NULL && caseFlags[j])<<31L;
+                n=(caseFlags!=nullptr && caseFlags[j])<<31L;
                 if(U16_IS_SINGLE(c)) {
                     n|=c;
                 } else if(U16_IS_LEAD(c) && (j+1)<srcLength && U16_IS_TRAIL(c2=src[j+1])) {
@@ -371,20 +371,20 @@
 
 // decode
 U_CAPI int32_t
-u_strFromPunycode(const UChar *src, int32_t srcLength,
-                  UChar *dest, int32_t destCapacity,
+u_strFromPunycode(const char16_t *src, int32_t srcLength,
+                  char16_t *dest, int32_t destCapacity,
                   UBool *caseFlags,
                   UErrorCode *pErrorCode) {
     int32_t n, destLength, i, bias, basicLength, j, in, oldi, w, k, digit, t,
             destCPCount, firstSupplementaryIndex, cpLength;
-    UChar b;
+    char16_t b;
 
     /* argument checking */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
-    if(src==NULL || srcLength<-1 || (dest==NULL && destCapacity!=0)) {
+    if(src==nullptr || srcLength<-1 || (dest==nullptr && destCapacity!=0)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -421,9 +421,9 @@
         }
 
         if(j<destCapacity) {
-            dest[j]=(UChar)b;
+            dest[j]=(char16_t)b;
 
-            if(caseFlags!=NULL) {
+            if(caseFlags!=nullptr) {
                 caseFlags[j]=IS_BASIC_UPPERCASE(b);
             }
         }
@@ -525,7 +525,7 @@
 
         /* Insert n at position i of the output: */
         cpLength=U16_LENGTH(n);
-        if(dest!=NULL && ((destLength+cpLength)<=destCapacity)) {
+        if(dest!=nullptr && ((destLength+cpLength)<=destCapacity)) {
             int32_t codeUnitIndex;
 
             /*
@@ -550,12 +550,12 @@
                 U16_FWD_N(dest, codeUnitIndex, destLength, i-codeUnitIndex);
             }
 
-            /* use the UChar index codeUnitIndex instead of the code point index i */
+            /* use the char16_t index codeUnitIndex instead of the code point index i */
             if(codeUnitIndex<destLength) {
                 uprv_memmove(dest+codeUnitIndex+cpLength,
                              dest+codeUnitIndex,
                              (destLength-codeUnitIndex)*U_SIZEOF_UCHAR);
-                if(caseFlags!=NULL) {
+                if(caseFlags!=nullptr) {
                     uprv_memmove(caseFlags+codeUnitIndex+cpLength,
                                  caseFlags+codeUnitIndex,
                                  destLength-codeUnitIndex);
@@ -563,13 +563,13 @@
             }
             if(cpLength==1) {
                 /* BMP, insert one code unit */
-                dest[codeUnitIndex]=(UChar)n;
+                dest[codeUnitIndex]=(char16_t)n;
             } else {
                 /* supplementary character, insert two code units */
                 dest[codeUnitIndex]=U16_LEAD(n);
                 dest[codeUnitIndex+1]=U16_TRAIL(n);
             }
-            if(caseFlags!=NULL) {
+            if(caseFlags!=nullptr) {
                 /* Case of last character determines uppercase flag: */
                 caseFlags[codeUnitIndex]=IS_BASIC_UPPERCASE(src[in-1]);
                 if(cpLength==2) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -248,7 +248,7 @@
 
 static UDate getUTCtime_real() {
     struct timeval posixTime;
-    gettimeofday(&posixTime, NULL);
+    gettimeofday(&posixTime, nullptr);
     return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
 }
 
@@ -258,7 +258,7 @@
     if(!fakeClock_set) {
         UDate real = getUTCtime_real();
         const char *fake_start = getenv("U_FAKETIME_START");
-        if((fake_start!=NULL) && (fake_start[0]!=0)) {
+        if((fake_start!=nullptr) && (fake_start[0]!=0)) {
             sscanf(fake_start,"%lf",&fakeClock_t0);
             fakeClock_dt = fakeClock_t0 - real;
             fprintf(stderr,"U_DEBUG_FAKETIME was set at compile time, so the ICU clock will start at a preset value\n"
@@ -319,7 +319,7 @@
 
 #if HAVE_GETTIMEOFDAY
     struct timeval posixTime;
-    gettimeofday(&posixTime, NULL);
+    gettimeofday(&posixTime, nullptr);
     return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
 #else
     time_t epochtime;
@@ -580,7 +580,7 @@
  * type of arbitrary bit length.
  */
 U_CAPI double U_EXPORT2
-uprv_maxMantissa(void)
+uprv_maxMantissa()
 {
     return pow(2.0, DBL_MANT_DIG + 1.0) - 1.0;
 }
@@ -612,11 +612,11 @@
      * Unlike other operating systems, the pointer model isn't determined at
      * compile time on i5/OS.
      */
-    if ((base != NULL) && (_TESTPTR(base, _C_TERASPACE_CHECK))) {
+    if ((base != nullptr) && (_TESTPTR(base, _C_TERASPACE_CHECK))) {
         /* if it is a TERASPACE pointer the max is 2GB - 4k */
         return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0x7fffefff)));
     }
-    /* otherwise 16MB since NULL ptr is not checkable or the ptr is not TERASPACE */
+    /* otherwise 16MB since nullptr ptr is not checkable or the ptr is not TERASPACE */
     return ((void *)(((char *)base)-((uint32_t)(base))+((uint32_t)0xffefff)));
 
 #else
@@ -722,7 +722,7 @@
 #include <dirent.h>  /* Needed to search through system timezone files */
 #endif
 static char gTimeZoneBuffer[PATH_MAX];
-static char *gTimeZoneBufferPtr = NULL;
+static const char *gTimeZoneBufferPtr = nullptr;
 #endif
 
 #if !U_PLATFORM_USES_ONLY_WIN32_API
@@ -879,7 +879,7 @@
             return OFFSET_ZONE_MAPPINGS[idx].olsonID;
         }
     }
-    return NULL;
+    return nullptr;
 }
 #endif
 
@@ -907,7 +907,7 @@
     char bufferFile[MAX_READ_SIZE];
     UBool result = true;
 
-    if (tzInfo->defaultTZFilePtr == NULL) {
+    if (tzInfo->defaultTZFilePtr == nullptr) {
         tzInfo->defaultTZFilePtr = fopen(defaultTZFileName, "r");
     }
     file = fopen(TZFileName, "r");
@@ -914,7 +914,7 @@
 
     tzInfo->defaultTZPosition = 0; /* reset position to begin search */
 
-    if (file != NULL && tzInfo->defaultTZFilePtr != NULL) {
+    if (file != nullptr && tzInfo->defaultTZFilePtr != nullptr) {
         /* First check that the file size are equal. */
         if (tzInfo->defaultTZFileSize == 0) {
             fseek(tzInfo->defaultTZFilePtr, 0, SEEK_END);
@@ -930,7 +930,7 @@
             /* Store the data from the files in separate buffers and
              * compare each byte to determine equality.
              */
-            if (tzInfo->defaultTZBuffer == NULL) {
+            if (tzInfo->defaultTZBuffer == nullptr) {
                 rewind(tzInfo->defaultTZFilePtr);
                 tzInfo->defaultTZBuffer = (char*)uprv_malloc(sizeof(char) * tzInfo->defaultTZFileSize);
                 sizeFileRead = fread(tzInfo->defaultTZBuffer, 1, tzInfo->defaultTZFileSize, tzInfo->defaultTZFilePtr);
@@ -953,7 +953,7 @@
         result = false;
     }
 
-    if (file != NULL) {
+    if (file != nullptr) {
         fclose(file);
     }
 
@@ -964,8 +964,8 @@
 /* dirent also lists two entries: "." and ".." that we can safely ignore. */
 #define SKIP1 "."
 #define SKIP2 ".."
-static UBool U_CALLCONV putil_cleanup(void);
-static CharString *gSearchTZFileResult = NULL;
+static UBool U_CALLCONV putil_cleanup();
+static CharString *gSearchTZFileResult = nullptr;
 
 /*
  * This method recursively traverses the directory given for a matching TZ file and returns the first match.
@@ -972,9 +972,9 @@
  * This function is not thread safe - it uses a global, gSearchTZFileResult, to hold its results.
  */
 static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
-    DIR* dirp = NULL;
-    struct dirent* dirEntry = NULL;
-    char* result = NULL;
+    DIR* dirp = nullptr;
+    struct dirent* dirEntry = nullptr;
+    char* result = nullptr;
     UErrorCode status = U_ZERO_ERROR;
 
     /* Save the current path */
@@ -984,13 +984,13 @@
     }
 
     dirp = opendir(path);
-    if (dirp == NULL) {
+    if (dirp == nullptr) {
         goto cleanupAndReturn;
     }
 
-    if (gSearchTZFileResult == NULL) {
+    if (gSearchTZFileResult == nullptr) {
         gSearchTZFileResult = new CharString;
-        if (gSearchTZFileResult == NULL) {
+        if (gSearchTZFileResult == nullptr) {
             goto cleanupAndReturn;
         }
         ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
@@ -997,7 +997,7 @@
     }
 
     /* Check each entry in the directory. */
-    while((dirEntry = readdir(dirp)) != NULL) {
+    while((dirEntry = readdir(dirp)) != nullptr) {
         const char* dirName = dirEntry->d_name;
         if (uprv_strcmp(dirName, SKIP1) != 0 && uprv_strcmp(dirName, SKIP2) != 0
             && uprv_strcmp(TZFILE_SKIP, dirName) != 0 && uprv_strcmp(TZFILE_SKIP2, dirName) != 0) {
@@ -1008,8 +1008,8 @@
                 break;
             }
 
-            DIR* subDirp = NULL;
-            if ((subDirp = opendir(newpath.data())) != NULL) {
+            DIR* subDirp = nullptr;
+            if ((subDirp = opendir(newpath.data())) != nullptr) {
                 /* If this new path is a directory, make a recursive call with the newpath. */
                 closedir(subDirp);
                 newpath.append('/', status);
@@ -1021,11 +1021,11 @@
                  Have to get out here. Otherwise, we'd keep looking
                  and return the first match in the top-level directory
                  if there's a match in the top-level. If not, this function
-                 would return NULL and set gTimeZoneBufferPtr to NULL in initDefault().
+                 would return nullptr and set gTimeZoneBufferPtr to nullptr in initDefault().
                  It worked without this in most cases because we have a fallback of calling
                  localtime_r to figure out the default timezone.
                 */
-                if (result != NULL)
+                if (result != nullptr)
                     break;
             } else {
                 if(compareBinaryFiles(TZDEFAULT, newpath.data(), tzInfo)) {
@@ -1074,7 +1074,7 @@
 #endif
 
 U_CAPI void U_EXPORT2
-uprv_tzname_clear_cache(void)
+uprv_tzname_clear_cache()
 {
 #if U_PLATFORM == U_PF_ANDROID
     /* Android's timezone is stored in system property. */
@@ -1104,7 +1104,7 @@
 #endif
 
 #if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
-    gTimeZoneBufferPtr = NULL;
+    gTimeZoneBufferPtr = nullptr;
 #endif
 }
 
@@ -1112,11 +1112,11 @@
 uprv_tzname(int n)
 {
     (void)n; // Avoid unreferenced parameter warning.
-    const char *tzid = NULL;
+    const char *tzid = nullptr;
 #if U_PLATFORM_USES_ONLY_WIN32_API
     tzid = uprv_detectWindowsTimeZone();
 
-    if (tzid != NULL) {
+    if (tzid != nullptr) {
         return tzid;
     }
 
@@ -1134,7 +1134,7 @@
     int ret;
 
     tzid = getenv("TZFILE");
-    if (tzid != NULL) {
+    if (tzid != nullptr) {
         return tzid;
     }
 #endif*/
@@ -1146,7 +1146,7 @@
 #else
     tzid = getenv("TZ");
 #endif
-    if (tzid != NULL && isValidOlsonID(tzid)
+    if (tzid != nullptr && isValidOlsonID(tzid)
 #if U_PLATFORM == U_PF_SOLARIS
     /* Don't misinterpret TZ "localtime" on Solaris as a time zone name. */
         && uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
@@ -1165,30 +1165,45 @@
 
 #if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
     /* Caller must handle threading issues */
-    if (gTimeZoneBufferPtr == NULL) {
+    if (gTimeZoneBufferPtr == nullptr) {
         /*
         This is a trick to look at the name of the link to get the Olson ID
         because the tzfile contents is underspecified.
         This isn't guaranteed to work because it may not be a symlink.
         */
-        int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
-        if (0 < ret) {
+        char *ret = realpath(TZDEFAULT, gTimeZoneBuffer);
+        if (ret != nullptr && uprv_strcmp(TZDEFAULT, gTimeZoneBuffer) != 0) {
             int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL);
-            gTimeZoneBuffer[ret] = 0;
-            char *  tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
-
-            if (tzZoneInfoTailPtr != NULL
-                && isValidOlsonID(tzZoneInfoTailPtr + tzZoneInfoTailLen))
-            {
-                return (gTimeZoneBufferPtr = tzZoneInfoTailPtr + tzZoneInfoTailLen);
+            const char *tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
+            // MacOS14 has the realpath as something like
+            // /usr/share/zoneinfo.default/Australia/Melbourne
+            // which will not have "/zoneinfo/" in the path.
+            // Therefore if we fail, we fall back to read the link which is
+            // /var/db/timezone/zoneinfo/Australia/Melbourne
+            // We also fall back to reading the link if the realpath leads to something like
+            // /usr/share/zoneinfo/posixrules
+            if (tzZoneInfoTailPtr == nullptr ||
+                    uprv_strcmp(tzZoneInfoTailPtr + tzZoneInfoTailLen, "posixrules") == 0) {
+                ssize_t size = readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
+                if (size > 0) {
+                    gTimeZoneBuffer[size] = 0;
+                    tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
+                }
             }
+            if (tzZoneInfoTailPtr != nullptr) {
+                tzZoneInfoTailPtr += tzZoneInfoTailLen;
+                skipZoneIDPrefix(&tzZoneInfoTailPtr);
+                if (isValidOlsonID(tzZoneInfoTailPtr)) {
+                    return (gTimeZoneBufferPtr = tzZoneInfoTailPtr);
+                }
+            }
         } else {
 #if defined(SEARCH_TZFILE)
             DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo));
-            if (tzInfo != NULL) {
-                tzInfo->defaultTZBuffer = NULL;
+            if (tzInfo != nullptr) {
+                tzInfo->defaultTZBuffer = nullptr;
                 tzInfo->defaultTZFileSize = 0;
-                tzInfo->defaultTZFilePtr = NULL;
+                tzInfo->defaultTZFilePtr = nullptr;
                 tzInfo->defaultTZstatus = false;
                 tzInfo->defaultTZPosition = 0;
 
@@ -1195,16 +1210,16 @@
                 gTimeZoneBufferPtr = searchForTZFile(TZZONEINFO, tzInfo);
 
                 /* Free previously allocated memory */
-                if (tzInfo->defaultTZBuffer != NULL) {
+                if (tzInfo->defaultTZBuffer != nullptr) {
                     uprv_free(tzInfo->defaultTZBuffer);
                 }
-                if (tzInfo->defaultTZFilePtr != NULL) {
+                if (tzInfo->defaultTZFilePtr != nullptr) {
                     fclose(tzInfo->defaultTZFilePtr);
                 }
                 uprv_free(tzInfo);
             }
 
-            if (gTimeZoneBufferPtr != NULL && isValidOlsonID(gTimeZoneBufferPtr)) {
+            if (gTimeZoneBufferPtr != nullptr && isValidOlsonID(gTimeZoneBufferPtr)) {
                 return gTimeZoneBufferPtr;
             }
 #endif
@@ -1247,7 +1262,7 @@
           daylightType = U_DAYLIGHT_NONE;
         }
         tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
-        if (tzid != NULL) {
+        if (tzid != nullptr) {
             return tzid;
         }
     }
@@ -1261,37 +1276,37 @@
 /* Get and set the ICU data directory --------------------------------------- */
 
 static icu::UInitOnce gDataDirInitOnce {};
-static char *gDataDirectory = NULL;
+static char *gDataDirectory = nullptr;
 
 UInitOnce gTimeZoneFilesInitOnce {};
-static CharString *gTimeZoneFilesDirectory = NULL;
+static CharString *gTimeZoneFilesDirectory = nullptr;
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
- static const char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
+ static const char *gCorrectedPOSIXLocale = nullptr; /* Sometimes heap allocated */
  static bool gCorrectedPOSIXLocaleHeapAllocated = false;
 #endif
 
-static UBool U_CALLCONV putil_cleanup(void)
+static UBool U_CALLCONV putil_cleanup()
 {
     if (gDataDirectory && *gDataDirectory) {
         uprv_free(gDataDirectory);
     }
-    gDataDirectory = NULL;
+    gDataDirectory = nullptr;
     gDataDirInitOnce.reset();
 
     delete gTimeZoneFilesDirectory;
-    gTimeZoneFilesDirectory = NULL;
+    gTimeZoneFilesDirectory = nullptr;
     gTimeZoneFilesInitOnce.reset();
 
 #ifdef SEARCH_TZFILE
     delete gSearchTZFileResult;
-    gSearchTZFileResult = NULL;
+    gSearchTZFileResult = nullptr;
 #endif
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
     if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) {
         uprv_free(const_cast<char *>(gCorrectedPOSIXLocale));
-        gCorrectedPOSIXLocale = NULL;
+        gCorrectedPOSIXLocale = nullptr;
         gCorrectedPOSIXLocaleHeapAllocated = false;
     }
 #endif
@@ -1307,9 +1322,9 @@
     char *newDataDir;
     int32_t length;
 
-    if(directory==NULL || *directory==0) {
+    if(directory==nullptr || *directory==0) {
         /* A small optimization to prevent the malloc and copy when the
-        shared library is used, and this is a way to make sure that NULL
+        shared library is used, and this is a way to make sure that nullptr
         is never returned.
         */
         newDataDir = (char *)"";
@@ -1318,7 +1333,7 @@
         length=(int32_t)uprv_strlen(directory);
         newDataDir = (char *)uprv_malloc(length + 2);
         /* Exit out if newDataDir could not be created. */
-        if (newDataDir == NULL) {
+        if (newDataDir == nullptr) {
             return;
         }
         uprv_strcpy(newDataDir, directory);
@@ -1326,7 +1341,7 @@
 #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
         {
             char *p;
-            while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != NULL) {
+            while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != nullptr) {
                 *p = U_FILE_SEP_CHAR;
             }
         }
@@ -1389,7 +1404,7 @@
         UErrorCode status = U_ZERO_ERROR;
         int32_t windowsPathUtf8Len = 0;
         u_strToUTF8(windowsPathUtf8, static_cast<int32_t>(UPRV_LENGTHOF(windowsPathUtf8)),
-            &windowsPathUtf8Len, reinterpret_cast<const UChar*>(windowsPath), -1, &status);
+            &windowsPathUtf8Len, reinterpret_cast<const char16_t*>(windowsPath), -1, &status);
 
         if (U_SUCCESS(status) && (status != U_STRING_NOT_TERMINATED_WARNING) &&
             (windowsPathUtf8Len < (UPRV_LENGTHOF(windowsPathUtf8) - 1))) {
@@ -1419,7 +1434,7 @@
         return;
     }
 
-    const char *path = NULL;
+    const char *path = nullptr;
 #if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
     char datadir_path_buffer[PATH_MAX];
 #endif
@@ -1452,7 +1467,7 @@
      * set their own path.
      */
 #if defined(ICU_DATA_DIR) || defined(U_ICU_DATA_DEFAULT_DIR)
-    if(path==NULL || *path==0) {
+    if(path==nullptr || *path==0) {
 # if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
         const char *prefix = getenv(ICU_DATA_DIR_PREFIX_ENV_VAR);
 # endif
@@ -1462,8 +1477,8 @@
         path=U_ICU_DATA_DEFAULT_DIR;
 # endif
 # if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
-        if (prefix != NULL) {
-            snprintf(datadir_path_buffer, PATH_MAX, "%s%s", prefix, path);
+        if (prefix != nullptr) {
+            snprintf(datadir_path_buffer, sizeof(datadir_path_buffer), "%s%s", prefix, path);
             path=datadir_path_buffer;
         }
 # endif
@@ -1477,7 +1492,7 @@
     }
 #endif
 
-    if(path==NULL) {
+    if(path==nullptr) {
         /* It looks really bad, set it to something. */
         path = "";
     }
@@ -1487,7 +1502,7 @@
 }
 
 U_CAPI const char * U_EXPORT2
-u_getDataDirectory(void) {
+u_getDataDirectory() {
     umtx_initOnce(gDataDirInitOnce, &dataDirectoryInitFn);
     return gDataDirectory;
 }
@@ -1500,7 +1515,7 @@
     gTimeZoneFilesDirectory->append(path, status);
 #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
     char *p = gTimeZoneFilesDirectory->data();
-    while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != NULL) {
+    while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != nullptr) {
         *p = U_FILE_SEP_CHAR;
     }
 #endif
@@ -1510,10 +1525,10 @@
 #define TO_STRING_2(x) #x
 
 static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
-    U_ASSERT(gTimeZoneFilesDirectory == NULL);
+    U_ASSERT(gTimeZoneFilesDirectory == nullptr);
     ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
     gTimeZoneFilesDirectory = new CharString();
-    if (gTimeZoneFilesDirectory == NULL) {
+    if (gTimeZoneFilesDirectory == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -1541,19 +1556,19 @@
 #endif // U_PLATFORM_HAS_WINUWP_API
 
 #if defined(U_TIMEZONE_FILES_DIR)
-    if (dir == NULL) {
+    if (dir == nullptr) {
         // Build time configuration setting.
         dir = TO_STRING(U_TIMEZONE_FILES_DIR);
     }
 #endif
 
-    if (dir == NULL) {
+    if (dir == nullptr) {
         dir = "";
     }
 
 #if defined(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR)
-    if (prefix != NULL) {
-        snprintf(timezonefilesdir_path_buffer, PATH_MAX, "%s%s", prefix, dir);
+    if (prefix != nullptr) {
+        snprintf(timezonefilesdir_path_buffer, sizeof(timezonefilesdir_path_buffer), "%s%s", prefix, dir);
         dir = timezonefilesdir_path_buffer;
     }
 #endif
@@ -1586,7 +1601,7 @@
  */
 static const char *uprv_getPOSIXIDForCategory(int category)
 {
-    const char* posixID = NULL;
+    const char* posixID = nullptr;
     if (category == LC_MESSAGES || category == LC_CTYPE) {
         /*
         * On Solaris two different calls to setlocale can result in
@@ -1596,7 +1611,7 @@
         *
         * LC_ALL can't be used because it's platform dependent. The LANG
         * environment variable seems to affect LC_CTYPE variable by default.
-        * Here is what setlocale(LC_ALL, NULL) can return.
+        * Here is what setlocale(LC_ALL, nullptr) can return.
         * HPUX can return 'C C C C C C C'
         * Solaris can return /en_US/C/C/C/C/C on the second try.
         * Linux can return LC_CTYPE=C;LC_NUMERIC=C;...
@@ -1604,9 +1619,9 @@
         * The default codepage detection also needs to use LC_CTYPE.
         *
         * Do not call setlocale(LC_*, "")! Using an empty string instead
-        * of NULL, will modify the libc behavior.
+        * of nullptr, will modify the libc behavior.
         */
-        posixID = setlocale(category, NULL);
+        posixID = setlocale(category, nullptr);
         if ((posixID == 0)
             || (uprv_strcmp("C", posixID) == 0)
             || (uprv_strcmp("POSIX", posixID) == 0))
@@ -1647,9 +1662,9 @@
 /* Return just the POSIX id for the default locale, whatever happens to be in
  * it. It gets the value from LC_MESSAGES and indirectly from LC_ALL and LANG.
  */
-static const char *uprv_getPOSIXIDForDefaultLocale(void)
+static const char *uprv_getPOSIXIDForDefaultLocale()
 {
-    static const char* posixID = NULL;
+    static const char* posixID = nullptr;
     if (posixID == 0) {
         posixID = uprv_getPOSIXIDForCategory(LC_MESSAGES);
     }
@@ -1660,9 +1675,9 @@
 /* Return just the POSIX id for the default codepage, whatever happens to be in
  * it. It gets the value from LC_CTYPE and indirectly from LC_ALL and LANG.
  */
-static const char *uprv_getPOSIXIDForDefaultCodepage(void)
+static const char *uprv_getPOSIXIDForDefaultCodepage()
 {
-    static const char* posixID = NULL;
+    static const char* posixID = nullptr;
     if (posixID == 0) {
         posixID = uprv_getPOSIXIDForCategory(LC_CTYPE);
     }
@@ -1861,16 +1876,16 @@
     const  char *localeID = getenv("LC_ALL");
            char *p;
 
-    if (localeID == NULL)
+    if (localeID == nullptr)
         localeID = getenv("LANG");
-    if (localeID == NULL)
-        localeID = setlocale(LC_ALL, NULL);
+    if (localeID == nullptr)
+        localeID = setlocale(LC_ALL, nullptr);
     /* Make sure we have something... */
-    if (localeID == NULL)
+    if (localeID == nullptr)
         return "en_US_POSIX";
 
     /* Extract the locale name from the path. */
-    if((p = uprv_strrchr(localeID, '/')) != NULL)
+    if((p = uprv_strrchr(localeID, '/')) != nullptr)
     {
         /* Increment p to start of locale name. */
         p++;
@@ -1881,7 +1896,7 @@
     uprv_strcpy(correctedLocale, localeID);
 
     /* Strip off the '.locale' extension. */
-    if((p = uprv_strchr(correctedLocale, '.')) != NULL) {
+    if((p = uprv_strchr(correctedLocale, '.')) != nullptr) {
         *p = 0;
     }
 
@@ -1961,12 +1976,12 @@
 */
 static const char*
 remapPlatformDependentCodepage(const char *locale, const char *name) {
-    if (locale != NULL && *locale == 0) {
+    if (locale != nullptr && *locale == 0) {
         /* Make sure that an empty locale is handled the same way. */
-        locale = NULL;
+        locale = nullptr;
     }
-    if (name == NULL) {
-        return NULL;
+    if (name == nullptr) {
+        return nullptr;
     }
 #if U_PLATFORM == U_PF_AIX
     if (uprv_strcmp(name, "IBM-943") == 0) {
@@ -1978,7 +1993,7 @@
         name = "IBM-5348";
     }
 #elif U_PLATFORM == U_PF_SOLARIS
-    if (locale != NULL && uprv_strcmp(name, "EUC") == 0) {
+    if (locale != nullptr && uprv_strcmp(name, "EUC") == 0) {
         /* Solaris underspecifies the "EUC" name. */
         if (uprv_strcmp(locale, "zh_CN") == 0) {
             name = "EUC-CN";
@@ -2005,7 +2020,7 @@
         name = "ISO-8859-1";
     }
 #elif U_PLATFORM_IS_DARWIN_BASED
-    if (locale == NULL && *name == 0) {
+    if (locale == nullptr && *name == 0) {
         /*
         No locale was specified, and an empty name was passed in.
         This usually indicates that nl_langinfo didn't return valid information.
@@ -2017,7 +2032,7 @@
         /* Remap CP949 to a similar codepage to avoid issues with backslash and won symbol. */
         name = "EUC-KR";
     }
-    else if (locale != NULL && uprv_strcmp(locale, "en_US_POSIX") != 0 && uprv_strcmp(name, "US-ASCII") == 0) {
+    else if (locale != nullptr && uprv_strcmp(locale, "en_US_POSIX") != 0 && uprv_strcmp(name, "US-ASCII") == 0) {
         /*
          * For non C/POSIX locale, default the code page to UTF-8 instead of US-ASCII.
          */
@@ -2029,7 +2044,7 @@
         name = "EUC-KR";
     }
 #elif U_PLATFORM == U_PF_HPUX
-    if (locale != NULL && uprv_strcmp(locale, "zh_HK") == 0 && uprv_strcmp(name, "big5") == 0) {
+    if (locale != nullptr && uprv_strcmp(locale, "zh_HK") == 0 && uprv_strcmp(name, "big5") == 0) {
         /* HP decided to extend big5 as hkbig5 even though it's not compatible :-( */
         /* zh_TW.big5 is not the same charset as zh_HK.big5! */
         name = "hkbig5";
@@ -2043,7 +2058,7 @@
         name = "eucjis";
     }
 #elif U_PLATFORM == U_PF_LINUX
-    if (locale != NULL && uprv_strcmp(name, "euc") == 0) {
+    if (locale != nullptr && uprv_strcmp(name, "euc") == 0) {
         /* Linux underspecifies the "EUC" name. */
         if (uprv_strcmp(locale, "korean") == 0) {
             name = "EUC-KR";
@@ -2061,7 +2076,7 @@
         */
         name = "eucjis";
     }
-    else if (locale != NULL && uprv_strcmp(locale, "en_US_POSIX") != 0 &&
+    else if (locale != nullptr && uprv_strcmp(locale, "en_US_POSIX") != 0 &&
             (uprv_strcmp(name, "ANSI_X3.4-1968") == 0 || uprv_strcmp(name, "US-ASCII") == 0)) {
         /*
          * For non C/POSIX locale, default the code page to UTF-8 instead of US-ASCII.
@@ -2070,13 +2085,13 @@
     }
     /*
      * Linux returns ANSI_X3.4-1968 for C/POSIX, but the call site takes care of
-     * it by falling back to 'US-ASCII' when NULL is returned from this
+     * it by falling back to 'US-ASCII' when nullptr is returned from this
      * function. So, we don't have to worry about it here.
      */
 #endif
-    /* return NULL when "" is passed in */
+    /* return nullptr when "" is passed in */
     if (*name == 0) {
-        name = NULL;
+        name = nullptr;
     }
     return name;
 }
@@ -2085,16 +2100,16 @@
 getCodepageFromPOSIXID(const char *localeName, char * buffer, int32_t buffCapacity)
 {
     char localeBuf[100];
-    const char *name = NULL;
-    char *variant = NULL;
+    const char *name = nullptr;
+    char *variant = nullptr;
 
-    if (localeName != NULL && (name = (uprv_strchr(localeName, '.'))) != NULL) {
+    if (localeName != nullptr && (name = (uprv_strchr(localeName, '.'))) != nullptr) {
         size_t localeCapacity = uprv_min(sizeof(localeBuf), (name-localeName)+1);
         uprv_strncpy(localeBuf, localeName, localeCapacity);
-        localeBuf[localeCapacity-1] = 0; /* ensure NULL termination */
+        localeBuf[localeCapacity-1] = 0; /* ensure NUL termination */
         name = uprv_strncpy(buffer, name+1, buffCapacity);
-        buffer[buffCapacity-1] = 0; /* ensure NULL termination */
-        if ((variant = const_cast<char *>(uprv_strchr(name, '@'))) != NULL) {
+        buffer[buffCapacity-1] = 0; /* ensure NUL termination */
+        if ((variant = const_cast<char *>(uprv_strchr(name, '@'))) != nullptr) {
             *variant = 0;
         }
         name = remapPlatformDependentCodepage(localeBuf, name);
@@ -2124,7 +2139,7 @@
         }
         /* else use the default */
     }
-    sprintf(codepage,"ibm-%d", ccsid);
+    snprintf(codepage, sizeof(codepage), "ibm-%d", ccsid);
     return codepage;
 
 #elif U_PLATFORM == U_PF_OS390
@@ -2132,7 +2147,7 @@
 
     strncpy(codepage, nl_langinfo(CODESET),63-strlen(UCNV_SWAP_LFNL_OPTION_STRING));
     strcat(codepage,UCNV_SWAP_LFNL_OPTION_STRING);
-    codepage[63] = 0; /* NULL terminate */
+    codepage[63] = 0; /* NUL terminate */
 
     return codepage;
 
@@ -2161,7 +2176,7 @@
     // are between 3 and 19999
     if (codepageNumber > 0 && codepageNumber < 20000)
     {
-        sprintf(codepage, "windows-%ld", codepageNumber);
+        snprintf(codepage, sizeof(codepage), "windows-%ld", codepageNumber);
         return codepage;
     }
     // If the codepage number call failed then return UTF-8
@@ -2169,8 +2184,8 @@
 
 #elif U_POSIX_LOCALE
     static char codesetName[100];
-    const char *localeName = NULL;
-    const char *name = NULL;
+    const char *localeName = nullptr;
+    const char *name = nullptr;
 
     localeName = uprv_getPOSIXIDForDefaultCodepage();
     uprv_memset(codesetName, 0, sizeof(codesetName));
@@ -2193,10 +2208,10 @@
         } else
 #endif
         {
-            codeset = remapPlatformDependentCodepage(NULL, codeset);
+            codeset = remapPlatformDependentCodepage(nullptr, codeset);
         }
 
-        if (codeset != NULL) {
+        if (codeset != nullptr) {
             uprv_strncpy(codesetName, codeset, sizeof(codesetName));
             codesetName[sizeof(codesetName)-1] = 0;
             return codesetName;
@@ -2229,12 +2244,12 @@
 U_CAPI const char*  U_EXPORT2
 uprv_getDefaultCodepage()
 {
-    static char const  *name = NULL;
-    umtx_lock(NULL);
-    if (name == NULL) {
+    static char const  *name = nullptr;
+    umtx_lock(nullptr);
+    if (name == nullptr) {
         name = int_getDefaultCodepage();
     }
-    umtx_unlock(NULL);
+    umtx_unlock(nullptr);
     return name;
 }
 #endif  /* !U_CHARSET_IS_UTF8 */
@@ -2249,11 +2264,11 @@
     char *end;
     uint16_t part=0;
 
-    if(versionArray==NULL) {
+    if(versionArray==nullptr) {
         return;
     }
 
-    if(versionString!=NULL) {
+    if(versionString!=nullptr) {
         for(;;) {
             versionArray[part]=(uint8_t)uprv_strtoul(versionString, &end, 10);
             if(end==versionString || ++part==U_MAX_VERSION_LENGTH || *end!=U_VERSION_DELIMITER) {
@@ -2269,8 +2284,8 @@
 }
 
 U_CAPI void U_EXPORT2
-u_versionFromUString(UVersionInfo versionArray, const UChar *versionString) {
-    if(versionArray!=NULL && versionString!=NULL) {
+u_versionFromUString(UVersionInfo versionArray, const char16_t *versionString) {
+    if(versionArray!=nullptr && versionString!=nullptr) {
         char versionChars[U_MAX_VERSION_STRING_LENGTH+1];
         int32_t len = u_strlen(versionString);
         if(len>U_MAX_VERSION_STRING_LENGTH) {
@@ -2287,11 +2302,11 @@
     uint16_t count, part;
     uint8_t field;
 
-    if(versionString==NULL) {
+    if(versionString==nullptr) {
         return;
     }
 
-    if(versionArray==NULL) {
+    if(versionArray==nullptr) {
         versionString[0]=0;
         return;
     }
@@ -2362,10 +2377,10 @@
 
 U_CAPI void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
-  void *ret = NULL;
+  void *ret = nullptr;
   if(U_FAILURE(*status)) return ret;
   ret =  dlopen(libName, RTLD_NOW|RTLD_GLOBAL);
-  if(ret==NULL) {
+  if(ret==nullptr) {
 #ifdef U_TRACE_DYLOAD
     printf("dlerror on dlopen(%s): %s\n", libName, dlerror());
 #endif
@@ -2386,10 +2401,10 @@
       UVoidFunction *fp;
       void *vp;
   } uret;
-  uret.fp = NULL;
+  uret.fp = nullptr;
   if(U_FAILURE(*status)) return uret.fp;
   uret.vp = dlsym(lib, sym);
-  if(uret.vp == NULL) {
+  if(uret.vp == nullptr) {
 #ifdef U_TRACE_DYLOAD
     printf("dlerror on dlsym(%p,%s): %s\n", lib,sym, dlerror());
 #endif
@@ -2405,13 +2420,13 @@
 
 U_CAPI void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
-  HMODULE lib = NULL;
+  HMODULE lib = nullptr;
 
-  if(U_FAILURE(*status)) return NULL;
+  if(U_FAILURE(*status)) return nullptr;
 
   lib = LoadLibraryA(libName);
 
-  if(lib==NULL) {
+  if(lib==nullptr) {
     *status = U_MISSING_RESOURCE_ERROR;
   }
 
@@ -2431,13 +2446,13 @@
 U_CAPI UVoidFunction* U_EXPORT2
 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
   HMODULE handle = (HMODULE)lib;
-  UVoidFunction* addr = NULL;
+  UVoidFunction* addr = nullptr;
 
-  if(U_FAILURE(*status) || lib==NULL) return NULL;
+  if(U_FAILURE(*status) || lib==nullptr) return nullptr;
 
   addr = (UVoidFunction*)GetProcAddress(handle, sym);
 
-  if(addr==NULL) {
+  if(addr==nullptr) {
     DWORD lastError = GetLastError();
     if(lastError == ERROR_PROC_NOT_FOUND) {
       *status = U_MISSING_RESOURCE_ERROR;
@@ -2456,9 +2471,9 @@
 U_CAPI void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
     (void)libName;
-    if(U_FAILURE(*status)) return NULL;
+    if(U_FAILURE(*status)) return nullptr;
     *status = U_UNSUPPORTED_ERROR;
-    return NULL;
+    return nullptr;
 }
 
 U_CAPI void U_EXPORT2
@@ -2476,7 +2491,7 @@
   if(U_SUCCESS(*status)) {
     *status = U_UNSUPPORTED_ERROR;
   }
-  return (UVoidFunction*)NULL;
+  return (UVoidFunction*)nullptr;
 }
 
 #endif

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -63,9 +63,8 @@
  * tables object that is passed in as a parameter.
  */
 RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status)
- : fSCharIter(UnicodeString())
+ : RuleBasedBreakIterator(&status)
 {
-    init(status);
     fData = new RBBIDataWrapper(data, status); // status checked in constructor
     if (U_FAILURE(status)) {return;}
     if(fData == nullptr) {
@@ -102,13 +101,12 @@
 RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules,
                        uint32_t       ruleLength,
                        UErrorCode     &status)
- : fSCharIter(UnicodeString())
+ : RuleBasedBreakIterator(&status)
 {
-    init(status);
     if (U_FAILURE(status)) {
         return;
     }
-    if (compiledRules == NULL || ruleLength < sizeof(RBBIDataHeader)) {
+    if (compiledRules == nullptr || ruleLength < sizeof(RBBIDataHeader)) {
         status = U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -141,9 +139,8 @@
 //
 //-------------------------------------------------------------------------------
 RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &status)
- : fSCharIter(UnicodeString())
+ : RuleBasedBreakIterator(&status)
 {
-    init(status);
     fData = new RBBIDataWrapper(udm, status); // status checked in constructor
     if (U_FAILURE(status)) {return;}
     if(fData == nullptr) {
@@ -170,9 +167,8 @@
 RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString  &rules,
                                                 UParseError          &parseError,
                                                 UErrorCode           &status)
- : fSCharIter(UnicodeString())
+ : RuleBasedBreakIterator(&status)
 {
-    init(status);
     if (U_FAILURE(status)) {return;}
     RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)
         RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status);
@@ -194,13 +190,42 @@
 //                           of rules.
 //-------------------------------------------------------------------------------
 RuleBasedBreakIterator::RuleBasedBreakIterator()
- : fSCharIter(UnicodeString())
+ : RuleBasedBreakIterator(nullptr)
 {
-    UErrorCode status = U_ZERO_ERROR;
-    init(status);
 }
 
+/**
+ * Simple Constructor with an error code.
+ * Handles common initialization for all other constructors.
+ */
+RuleBasedBreakIterator::RuleBasedBreakIterator(UErrorCode *status) {
+    UErrorCode ec = U_ZERO_ERROR;
+    if (status == nullptr) {
+        status = &ec;
+    }
+    utext_openUChars(&fText, nullptr, 0, status);
+    LocalPointer<DictionaryCache> lpDictionaryCache(new DictionaryCache(this, *status), *status);
+    LocalPointer<BreakCache> lpBreakCache(new BreakCache(this, *status), *status);
+    if (U_FAILURE(*status)) {
+        fErrorCode = *status;
+        return;
+    }
+    fDictionaryCache = lpDictionaryCache.orphan();
+    fBreakCache = lpBreakCache.orphan();
 
+#ifdef RBBI_DEBUG
+    static UBool debugInitDone = false;
+    if (debugInitDone == false) {
+        char *debugEnv = getenv("U_RBBIDEBUG");
+        if (debugEnv && uprv_strstr(debugEnv, "trace")) {
+            gTrace = true;
+        }
+        debugInitDone = true;
+    }
+#endif
+}
+
+
 //-------------------------------------------------------------------------------
 //
 //   Copy constructor.  Will produce a break iterator with the same behavior,
@@ -208,11 +233,8 @@
 //
 //-------------------------------------------------------------------------------
 RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& other)
-: BreakIterator(other),
-  fSCharIter(UnicodeString())
+: RuleBasedBreakIterator()
 {
-    UErrorCode status = U_ZERO_ERROR;
-    this->init(status);
     *this = other;
 }
 
@@ -261,9 +283,9 @@
     }
     BreakIterator::operator=(that);
 
-    if (fLanguageBreakEngines != NULL) {
+    if (fLanguageBreakEngines != nullptr) {
         delete fLanguageBreakEngines;
-        fLanguageBreakEngines = NULL;   // Just rebuild for now
+        fLanguageBreakEngines = nullptr;   // Just rebuild for now
     }
     // TODO: clone fLanguageBreakEngines from "that"
     UErrorCode status = U_ZERO_ERROR;
@@ -274,7 +296,7 @@
     }
     fCharIter = &fSCharIter;
 
-    if (that.fCharIter != NULL && that.fCharIter != &that.fSCharIter) {
+    if (that.fCharIter != nullptr && that.fCharIter != &that.fSCharIter) {
         // 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.
@@ -281,15 +303,15 @@
         fCharIter = that.fCharIter->clone();
     }
     fSCharIter = that.fSCharIter;
-    if (fCharIter == NULL) {
+    if (fCharIter == nullptr) {
         fCharIter = &fSCharIter;
     }
 
-    if (fData != NULL) {
+    if (fData != nullptr) {
         fData->removeReference();
-        fData = NULL;
+        fData = nullptr;
     }
-    if (that.fData != NULL) {
+    if (that.fData != nullptr) {
         fData = that.fData->addReference();
     }
 
@@ -315,60 +337,8 @@
     return *this;
 }
 
-
-
 //-----------------------------------------------------------------------------
 //
-//    init()      Shared initialization routine.   Used by all the constructors.
-//                Initializes all fields, leaving the object in a consistent state.
-//
-//-----------------------------------------------------------------------------
-void RuleBasedBreakIterator::init(UErrorCode &status) {
-    fCharIter             = nullptr;
-    fData                 = nullptr;
-    fPosition             = 0;
-    fRuleStatusIndex      = 0;
-    fDone                 = false;
-    fDictionaryCharCount  = 0;
-    fLanguageBreakEngines = nullptr;
-    fUnhandledBreakEngine = nullptr;
-    fBreakCache           = nullptr;
-    fDictionaryCache      = nullptr;
-    fLookAheadMatches     = nullptr;
-    fIsPhraseBreaking     = false;
-
-    // Note: IBM xlC is unable to assign or initialize member fText from UTEXT_INITIALIZER.
-    // fText                 = UTEXT_INITIALIZER;
-    static const UText initializedUText = UTEXT_INITIALIZER;
-    uprv_memcpy(&fText, &initializedUText, sizeof(UText));
-
-   if (U_FAILURE(status)) {
-        return;
-    }
-
-    utext_openUChars(&fText, NULL, 0, &status);
-    fDictionaryCache = new DictionaryCache(this, status);
-    fBreakCache      = new BreakCache(this, status);
-    if (U_SUCCESS(status) && (fDictionaryCache == NULL || fBreakCache == NULL)) {
-        status = U_MEMORY_ALLOCATION_ERROR;
-    }
-
-#ifdef RBBI_DEBUG
-    static UBool debugInitDone = false;
-    if (debugInitDone == false) {
-        char *debugEnv = getenv("U_RBBIDEBUG");
-        if (debugEnv && uprv_strstr(debugEnv, "trace")) {
-            gTrace = true;
-        }
-        debugInitDone = true;
-    }
-#endif
-}
-
-
-
-//-----------------------------------------------------------------------------
-//
 //    clone - Returns a newly-constructed RuleBasedBreakIterator with the same
 //            behavior, and iterating over the same text, as this one.
 //            Virtual function: does the right thing with subclasses.
@@ -396,7 +366,7 @@
     // and does not implement an equality function that would otherwise be
     // checked at this point.
 
-    const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that;
+    const RuleBasedBreakIterator& that2 = static_cast<const RuleBasedBreakIterator&>(that);
 
     if (!utext_equals(&fText, &that2.fText)) {
         // The two break iterators are operating on different text,
@@ -412,7 +382,7 @@
     }
 
     if (that2.fData == fData ||
-        (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) {
+        (fData != nullptr && that2.fData != nullptr && *that2.fData == *fData)) {
             // The two break iterators are using the same rules.
             return true;
         }
@@ -424,9 +394,9 @@
  * @return A hash code
  */
 int32_t
-RuleBasedBreakIterator::hashCode(void) const {
+RuleBasedBreakIterator::hashCode() const {
     int32_t   hash = 0;
-    if (fData != NULL) {
+    if (fData != nullptr) {
         hash = fData->hashCode();
     }
     return hash;
@@ -447,7 +417,7 @@
     //   Return one over an empty string instead - this is the closest
     //   we can come to signaling a failure.
     //   (GetText() is obsolete, this failure is sort of OK)
-    fSCharIter.setText(UnicodeString());
+    fSCharIter.setText(u"", 0);
 
     if (fCharIter != &fSCharIter) {
         // existing fCharIter was adopted from the outside.  Delete it now.
@@ -494,10 +464,10 @@
     UErrorCode status = U_ZERO_ERROR;
     fBreakCache->reset();
     fDictionaryCache->reset();
-    if (newText==NULL || newText->startIndex() != 0) {
+    if (newText==nullptr || newText->startIndex() != 0) {
         // startIndex !=0 wants to be an error, but there's no way to report it.
         // Make the iterator text be an empty string.
-        utext_openUChars(&fText, NULL, 0, &status);
+        utext_openUChars(&fText, nullptr, 0, &status);
     } else {
         utext_openCharacterIterator(&fText, newText, &status);
     }
@@ -520,7 +490,7 @@
     //   Needed in case someone calls getText().
     //  Can not, unfortunately, do this lazily on the (probably never)
     //  call to getText(), because getText is const.
-    fSCharIter.setText(newText);
+    fSCharIter.setText(newText.getBuffer(), newText.length());
 
     if (fCharIter != &fSCharIter) {
         // old fCharIter was adopted from the outside.  Delete it.
@@ -542,7 +512,7 @@
     if (U_FAILURE(status)) {
         return *this;
     }
-    if (input == NULL) {
+    if (input == nullptr) {
         status = U_ILLEGAL_ARGUMENT_ERROR;
         return *this;
     }
@@ -568,7 +538,7 @@
  * Sets the current iteration position to the beginning of the text, position zero.
  * @return The new iterator position, which is zero.
  */
-int32_t RuleBasedBreakIterator::first(void) {
+int32_t RuleBasedBreakIterator::first() {
     UErrorCode status = U_ZERO_ERROR;
     if (!fBreakCache->seek(0)) {
         fBreakCache->populateNear(0, status);
@@ -582,7 +552,7 @@
  * Sets the current iteration position to the end of the text.
  * @return The text's past-the-end offset.
  */
-int32_t RuleBasedBreakIterator::last(void) {
+int32_t RuleBasedBreakIterator::last() {
     int32_t endPos = (int32_t)utext_nativeLength(&fText);
     UBool endShouldBeBoundary = isBoundary(endPos);      // Has side effect of setting iterator position.
     (void)endShouldBeBoundary;
@@ -620,7 +590,7 @@
  * Advances the iterator to the next boundary position.
  * @return The position of the first boundary after this one.
  */
-int32_t RuleBasedBreakIterator::next(void) {
+int32_t RuleBasedBreakIterator::next() {
     fBreakCache->next();
     return fDone ? UBRK_DONE : fPosition;
 }
@@ -633,7 +603,7 @@
  *
  * @return The position of the boundary position immediately preceding the starting position.
  */
-int32_t RuleBasedBreakIterator::previous(void) {
+int32_t RuleBasedBreakIterator::previous() {
     UErrorCode status = U_ZERO_ERROR;
     fBreakCache->previous(status);
     return fDone ? UBRK_DONE : fPosition;
@@ -730,7 +700,7 @@
  * Returns the current iteration position.
  * @return The current iteration position.
  */
-int32_t RuleBasedBreakIterator::current(void) const {
+int32_t RuleBasedBreakIterator::current() const {
     return fPosition;
 }
 
@@ -1009,7 +979,7 @@
     #endif
 
     // if we're already at the start of the text, return DONE.
-    if (fData == NULL || UTEXT_GETNATIVEINDEX(&fText)==0) {
+    if (fData == nullptr || UTEXT_GETNATIVEINDEX(&fText)==0) {
         return BreakIterator::DONE;
     }
 
@@ -1117,10 +1087,10 @@
 //
 //-------------------------------------------------------------------------------
 const uint8_t  *RuleBasedBreakIterator::getBinaryRules(uint32_t &length) {
-    const uint8_t  *retPtr = NULL;
+    const uint8_t  *retPtr = nullptr;
     length = 0;
 
-    if (fData != NULL) {
+    if (fData != nullptr) {
         retPtr = (const uint8_t *)fData->fHeader;
         length = fData->fHeader->fLength;
     }
@@ -1131,16 +1101,16 @@
 RuleBasedBreakIterator *RuleBasedBreakIterator::createBufferClone(
         void * /*stackBuffer*/, int32_t &bufferSize, UErrorCode &status) {
     if (U_FAILURE(status)){
-        return NULL;
+        return nullptr;
     }
 
     if (bufferSize == 0) {
         bufferSize = 1;  // preflighting for deprecated functionality
-        return NULL;
+        return nullptr;
     }
 
     BreakIterator *clonedBI = clone();
-    if (clonedBI == NULL) {
+    if (clonedBI == nullptr) {
         status = U_MEMORY_ALLOCATION_ERROR;
     } else {
         status = U_SAFECLONE_ALLOCATED_WARNING;
@@ -1155,12 +1125,13 @@
 static const icu::UnicodeString *gEmptyString = nullptr;
 static icu::UInitOnce gLanguageBreakFactoriesInitOnce {};
 static icu::UInitOnce gRBBIInitOnce {};
+static icu::ICULanguageBreakFactory *gICULanguageBreakFactory = nullptr;
 
 /**
  * Release all static memory held by breakiterator.
  */
 U_CDECL_BEGIN
-UBool U_CALLCONV rbbi_cleanup(void) {
+UBool U_CALLCONV rbbi_cleanup() {
     delete gLanguageBreakFactories;
     gLanguageBreakFactories = nullptr;
     delete gEmptyString;
@@ -1183,38 +1154,42 @@
     ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
 }
 
-static void U_CALLCONV initLanguageFactories() {
-    UErrorCode status = U_ZERO_ERROR;
-    U_ASSERT(gLanguageBreakFactories == NULL);
-    gLanguageBreakFactories = new UStack(_deleteFactory, NULL, status);
-    if (gLanguageBreakFactories != NULL && U_SUCCESS(status)) {
-        ICULanguageBreakFactory *builtIn = new ICULanguageBreakFactory(status);
-        gLanguageBreakFactories->push(builtIn, status);
+static void U_CALLCONV initLanguageFactories(UErrorCode& status) {
+    U_ASSERT(gLanguageBreakFactories == nullptr);
+    gLanguageBreakFactories = new UStack(_deleteFactory, nullptr, status);
+    if (gLanguageBreakFactories != nullptr && U_SUCCESS(status)) {
+        LocalPointer<ICULanguageBreakFactory> factory(new ICULanguageBreakFactory(status), status);
+        if (U_SUCCESS(status)) {
+            gICULanguageBreakFactory = factory.orphan();
+            gLanguageBreakFactories->push(gICULanguageBreakFactory, status);
 #ifdef U_LOCAL_SERVICE_HOOK
-        LanguageBreakFactory *extra = (LanguageBreakFactory *)uprv_svc_hook("languageBreakFactory", &status);
-        if (extra != NULL) {
-            gLanguageBreakFactories->push(extra, status);
+            LanguageBreakFactory *extra = (LanguageBreakFactory *)uprv_svc_hook("languageBreakFactory", &status);
+            if (extra != nullptr) {
+                gLanguageBreakFactories->push(extra, status);
+            }
+#endif
         }
-#endif
     }
     ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
 }
 
+void ensureLanguageFactories(UErrorCode& status) {
+    umtx_initOnce(gLanguageBreakFactoriesInitOnce, &initLanguageFactories, status);
+}
 
 static const LanguageBreakEngine*
-getLanguageBreakEngineFromFactory(UChar32 c)
+getLanguageBreakEngineFromFactory(UChar32 c, const char* locale)
 {
-    umtx_initOnce(gLanguageBreakFactoriesInitOnce, &initLanguageFactories);
-    if (gLanguageBreakFactories == NULL) {
-        return NULL;
-    }
+    UErrorCode status = U_ZERO_ERROR;
+    ensureLanguageFactories(status);
+    if (U_FAILURE(status)) return nullptr;
 
     int32_t i = gLanguageBreakFactories->size();
-    const LanguageBreakEngine *lbe = NULL;
+    const LanguageBreakEngine *lbe = nullptr;
     while (--i >= 0) {
         LanguageBreakFactory *factory = (LanguageBreakFactory *)(gLanguageBreakFactories->elementAt(i));
-        lbe = factory->getEngineFor(c);
-        if (lbe != NULL) {
+        lbe = factory->getEngineFor(c, locale);
+        if (lbe != nullptr) {
             break;
         }
     }
@@ -1229,16 +1204,16 @@
 //
 //-------------------------------------------------------------------------------
 const LanguageBreakEngine *
-RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
-    const LanguageBreakEngine *lbe = NULL;
+RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c, const char* locale) {
+    const LanguageBreakEngine *lbe = nullptr;
     UErrorCode status = U_ZERO_ERROR;
 
-    if (fLanguageBreakEngines == NULL) {
+    if (fLanguageBreakEngines == nullptr) {
         fLanguageBreakEngines = new UStack(status);
-        if (fLanguageBreakEngines == NULL || U_FAILURE(status)) {
+        if (fLanguageBreakEngines == nullptr || U_FAILURE(status)) {
             delete fLanguageBreakEngines;
             fLanguageBreakEngines = 0;
-            return NULL;
+            return nullptr;
         }
     }
 
@@ -1245,7 +1220,7 @@
     int32_t i = fLanguageBreakEngines->size();
     while (--i >= 0) {
         lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i));
-        if (lbe->handles(c)) {
+        if (lbe->handles(c, locale)) {
             return lbe;
         }
     }
@@ -1252,10 +1227,10 @@
 
     // No existing dictionary took the character. See if a factory wants to
     // give us a new LanguageBreakEngine for this character.
-    lbe = getLanguageBreakEngineFromFactory(c);
+    lbe = getLanguageBreakEngineFromFactory(c, locale);
 
     // If we got one, use it and push it on our stack.
-    if (lbe != NULL) {
+    if (lbe != nullptr) {
         fLanguageBreakEngines->push((void *)lbe, status);
         // Even if we can't remember it, we can keep looking it up, so
         // return it even if the push fails.
@@ -1264,9 +1239,9 @@
 
     // No engine is forthcoming for this character. Add it to the
     // reject set. Create the reject break engine if needed.
-    if (fUnhandledBreakEngine == NULL) {
+    if (fUnhandledBreakEngine == nullptr) {
         fUnhandledBreakEngine = new UnhandledEngine(status);
-        if (U_SUCCESS(status) && fUnhandledBreakEngine == NULL) {
+        if (U_SUCCESS(status) && fUnhandledBreakEngine == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
             return nullptr;
         }
@@ -1278,7 +1253,7 @@
         if (U_FAILURE(status)) {
             delete fUnhandledBreakEngine;
             fUnhandledBreakEngine = 0;
-            return NULL;
+            return nullptr;
         }
     }
 
@@ -1289,6 +1264,18 @@
     return fUnhandledBreakEngine;
 }
 
+#ifndef U_HIDE_DRAFT_API
+void U_EXPORT2 RuleBasedBreakIterator::registerExternalBreakEngine(
+                  ExternalBreakEngine* toAdopt, UErrorCode& status) {
+    LocalPointer<ExternalBreakEngine> engine(toAdopt, status);
+    if (U_FAILURE(status)) return;
+    ensureLanguageFactories(status);
+    if (U_FAILURE(status)) return;
+    gICULanguageBreakFactory->addExternalEngine(engine.orphan(), status);
+}
+#endif  /* U_HIDE_DRAFT_API */
+
+
 void RuleBasedBreakIterator::dumpCache() {
     fBreakCache->dumpCache();
 }
@@ -1303,7 +1290,7 @@
 
 const UnicodeString&
 RuleBasedBreakIterator::getRules() const {
-    if (fData != NULL) {
+    if (fData != nullptr) {
         return fData->getRuleSourceString();
     } else {
         umtx_initOnce(gRBBIInitOnce, &rbbiInit);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -158,12 +158,13 @@
 
         // We now have a dictionary character. Get the appropriate language object
         // to deal with it.
-        const LanguageBreakEngine *lbe = fBI->getLanguageBreakEngine(c);
+        const LanguageBreakEngine *lbe = fBI->getLanguageBreakEngine(
+            c, fBI->getLocaleID(ULOC_REQUESTED_LOCALE, status));
 
         // 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, fBI->fIsPhraseBreaking, status);
+        if (lbe != nullptr) {
+            foundBreakCount += lbe->findBreaks(text, current, rangeEnd, fBreaks, fBI->fIsPhraseBreaking, status);
         }
 
         // Reload the loop variables for the next go-round

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -78,13 +78,13 @@
 //
 //-----------------------------------------------------------------------------
 void RBBIDataWrapper::init0() {
-    fHeader = NULL;
-    fForwardTable = NULL;
-    fReverseTable = NULL;
-    fRuleSource   = NULL;
-    fRuleStatusTable = NULL;
-    fTrie         = NULL;
-    fUDataMem     = NULL;
+    fHeader = nullptr;
+    fForwardTable = nullptr;
+    fReverseTable = nullptr;
+    fRuleSource   = nullptr;
+    fRuleStatusTable = nullptr;
+    fTrie         = nullptr;
+    fUDataMem     = nullptr;
     fRefCount     = 0;
     fDontFreeData = true;
 }
@@ -246,7 +246,7 @@
     }
     RBBIDebugPrintf("\n");
 
-    if (table == NULL) {
+    if (table == nullptr) {
         RBBIDebugPrintf("         N U L L   T A B L E\n\n");
         return;
     }
@@ -305,10 +305,10 @@
 ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData,
            UErrorCode *status) {
 
-    if (status == NULL || U_FAILURE(*status)) {
+    if (status == nullptr || U_FAILURE(*status)) {
         return 0;
     }
-    if(ds==NULL || inData==NULL || length<-1 || (length>0 && outData==NULL)) {
+    if(ds==nullptr || inData==nullptr || length<-1 || (length>0 && outData==nullptr)) {
         *status=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -85,7 +85,7 @@
     uint32_t         fTrie;           /*  Offset to Trie data for character categories */
     uint32_t         fTrieLen;
     uint32_t         fRuleSource;     /*  Offset to the source for for the break */
-    uint32_t         fRuleSourceLen;  /*    rules.  Stored UChar *. */
+    uint32_t         fRuleSourceLen;  /*    rules.  Stored char16_t *. */
     uint32_t         fStatusTable;    /* Offset to the table of rule status values */
     uint32_t         fStatusTableLen;
 
@@ -205,7 +205,7 @@
 
 U_NAMESPACE_END
 
-U_CFUNC UBool rbbi_cleanup(void);
+U_CFUNC UBool rbbi_cleanup();
 
 #endif /* C++ */
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -52,10 +52,10 @@
     fSerialNum    = ++gLastSerial;
 #endif
     fType         = t;
-    fParent       = NULL;
-    fLeftChild    = NULL;
-    fRightChild   = NULL;
-    fInputSet     = NULL;
+    fParent       = nullptr;
+    fLeftChild    = nullptr;
+    fRightChild   = nullptr;
+    fInputSet     = nullptr;
     fFirstPos     = 0;
     fLastPos      = 0;
     fNullable     = false;
@@ -82,9 +82,9 @@
     fSerialNum   = ++gLastSerial;
 #endif
     fType        = other.fType;
-    fParent      = NULL;
-    fLeftChild   = NULL;
-    fRightChild  = NULL;
+    fParent      = nullptr;
+    fLeftChild   = nullptr;
+    fRightChild  = nullptr;
     fInputSet    = other.fInputSet;
     fPrecedence  = other.fPrecedence;
     fText        = other.fText;
@@ -113,7 +113,7 @@
 RBBINode::~RBBINode() {
     // printf("deleting node %8x   serial %4d\n", this, this->fSerialNum);
     delete fInputSet;
-    fInputSet = NULL;
+    fInputSet = nullptr;
 
     switch (this->fType) {
     case varRef:
@@ -124,9 +124,9 @@
 
     default:
         delete        fLeftChild;
-        fLeftChild =   NULL;
+        fLeftChild =   nullptr;
         delete        fRightChild;
-        fRightChild = NULL;
+        fRightChild = nullptr;
     }
 
 
@@ -158,12 +158,12 @@
     } else {
         n = new RBBINode(*this);
         // Check for null pointer.
-        if (n != NULL) {
-            if (fLeftChild != NULL) {
+        if (n != nullptr) {
+            if (fLeftChild != nullptr) {
                 n->fLeftChild          = fLeftChild->cloneTree();
                 n->fLeftChild->fParent = n;
             }
-            if (fRightChild != NULL) {
+            if (fRightChild != nullptr) {
                 n->fRightChild          = fRightChild->cloneTree();
                 n->fRightChild->fParent = n;
             }
@@ -195,7 +195,7 @@
 RBBINode *RBBINode::flattenVariables() {
     if (fType == varRef) {
         RBBINode *retNode  = fLeftChild->cloneTree();
-        if (retNode != NULL) {
+        if (retNode != nullptr) {
             retNode->fRuleRoot = this->fRuleRoot;
             retNode->fChainIn  = this->fChainIn;
         }
@@ -203,11 +203,11 @@
         return retNode;
     }
 
-    if (fLeftChild != NULL) {
+    if (fLeftChild != nullptr) {
         fLeftChild = fLeftChild->flattenVariables();
         fLeftChild->fParent  = this;
     }
-    if (fRightChild != NULL) {
+    if (fRightChild != nullptr) {
         fRightChild = fRightChild->flattenVariables();
         fRightChild->fParent = this;
     }
@@ -226,7 +226,7 @@
 void RBBINode::flattenSets() {
     U_ASSERT(fType != setRef);
 
-    if (fLeftChild != NULL) {
+    if (fLeftChild != nullptr) {
         if (fLeftChild->fType==setRef) {
             RBBINode *setRefNode = fLeftChild;
             RBBINode *usetNode   = setRefNode->fLeftChild;
@@ -239,7 +239,7 @@
         }
     }
 
-    if (fRightChild != NULL) {
+    if (fRightChild != nullptr) {
         if (fRightChild->fType==setRef) {
             RBBINode *setRefNode = fRightChild;
             RBBINode *usetNode   = setRefNode->fLeftChild;
@@ -270,10 +270,10 @@
     if (fType == kind) {
         dest->addElement(this, status);
     }
-    if (fLeftChild != NULL) {
+    if (fLeftChild != nullptr) {
         fLeftChild->findNodes(dest, kind, status);
     }
-    if (fRightChild != NULL) {
+    if (fRightChild != nullptr) {
         fRightChild->findNodes(dest, kind, status);
     }
 }
@@ -287,7 +287,7 @@
 #ifdef RBBI_DEBUG
 
 static int32_t serial(const RBBINode *node) {
-    return (node == NULL? -1 : node->fSerialNum);
+    return (node == nullptr? -1 : node->fSerialNum);
 }
 
 
@@ -311,7 +311,7 @@
                 "opLParen"
     };
 
-    if (node==NULL) {
+    if (node==nullptr) {
         RBBIDebugPrintf("%10p", (void *)node);
     } else {
         RBBIDebugPrintf("%10p %5d %12s %c%c  %5d       %5d     %5d       %6d     %d ",
@@ -350,15 +350,15 @@
         printNodeHeader();
     }
     printNode(node);
-    if (node != NULL) {
+    if (node != nullptr) {
         // Only dump the definition under a variable reference if asked to.
         // Unconditionally dump children of all other node types.
         if (node->fType != varRef) {
-            if (node->fLeftChild != NULL) {
+            if (node->fLeftChild != nullptr) {
                 printTree(node->fLeftChild, false);
             }
             
-            if (node->fRightChild != NULL) {
+            if (node->fRightChild != nullptr) {
                 printTree(node->fRightChild, false);
             }
         }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -52,26 +52,25 @@
 {
     fStatus = &status; // status is checked below
     fParseError = parseErr;
-    fDebugEnv   = NULL;
+    fDebugEnv   = nullptr;
 #ifdef RBBI_DEBUG
     fDebugEnv   = getenv("U_RBBIDEBUG");
 #endif
 
 
-    fForwardTree        = NULL;
-    fReverseTree        = NULL;
-    fSafeFwdTree        = NULL;
-    fSafeRevTree        = NULL;
+    fForwardTree        = nullptr;
+    fReverseTree        = nullptr;
+    fSafeFwdTree        = nullptr;
+    fSafeRevTree        = nullptr;
     fDefaultTree        = &fForwardTree;
-    fForwardTable       = NULL;
-    fRuleStatusVals     = NULL;
+    fForwardTable       = nullptr;
+    fRuleStatusVals     = nullptr;
     fChainRules         = false;
-    fLBCMNoChain        = false;
     fLookAheadHardBreak = false;
-    fUSetNodes          = NULL;
-    fRuleStatusVals     = NULL;
-    fScanner            = NULL;
-    fSetBuilder         = NULL;
+    fUSetNodes          = nullptr;
+    fRuleStatusVals     = nullptr;
+    fScanner            = nullptr;
+    fSetBuilder         = nullptr;
     if (parseErr) {
         uprv_memset(parseErr, 0, sizeof(UParseError));
     }
@@ -104,7 +103,7 @@
     int        i;
     for (i=0; ; i++) {
         RBBINode *n = (RBBINode *)fUSetNodes->elementAt(i);
-        if (n==NULL) {
+        if (n==nullptr) {
             break;
         }
         delete n;
@@ -138,7 +137,7 @@
     int32_t    i;
 
     if (U_FAILURE(*fStatus)) {
-        return NULL;
+        return nullptr;
     }
 
     // Remove whitespace from the rules to make it smaller.
@@ -183,9 +182,9 @@
 #endif
 
     RBBIDataHeader  *data     = (RBBIDataHeader *)uprv_malloc(totalSize);
-    if (data == NULL) {
+    if (data == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     uprv_memset(data, 0, totalSize);
 
@@ -226,7 +225,7 @@
                        fStrippedRules.getBuffer(), fStrippedRules.length(),
                        0xfffd, nullptr, fStatus);
     if (U_FAILURE(*fStatus)) {
-        return NULL;
+        return nullptr;
     }
 
     return data;
@@ -250,7 +249,7 @@
     //
     RBBIRuleBuilder  builder(rules, parseError, status);
     if (U_FAILURE(status)) { // status checked here bcos build below doesn't
-        return NULL;
+        return nullptr;
     }
 
     RBBIDataHeader *data = builder.build(status);
@@ -267,9 +266,9 @@
     RuleBasedBreakIterator *This = new RuleBasedBreakIterator(data, status);
     if (U_FAILURE(status)) {
         delete This;
-        This = NULL;
+        This = nullptr;
     } 
-    else if(This == NULL) { // test for NULL
+    else if(This == nullptr) { // test for nullptr
         status = U_MEMORY_ALLOCATION_ERROR;
     }
     return This;
@@ -328,7 +327,7 @@
     //   Package up the compiled data into a memory image
     //      in the run-time format.
     //
-    RBBIDataHeader *data = flattenData(); // returns NULL if error
+    RBBIDataHeader *data = flattenData(); // returns nullptr if error
     if (U_FAILURE(status)) {
         return nullptr;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -159,9 +159,6 @@
     UBool                         fChainRules;       // True for chained Unicode TR style rules.
                                                      // False for traditional regexp rules.
 
-    UBool                         fLBCMNoChain;      // True:  suppress chaining of rules on
-                                                     //   chars with LineBreak property == CM.
-
     UBool                         fLookAheadHardBreak;  // True:  Look ahead matches cause an
                                                      // immediate break, no continuing for the
                                                      // longest match.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -46,7 +46,7 @@
 //              source form of the state transition table for the RBBI rule parser.
 //
 //------------------------------------------------------------------------------
-static const UChar gRuleSet_rule_char_pattern[]       = {
+static const char16_t gRuleSet_rule_char_pattern[]       = {
  // Characters that may appear as literals in patterns without escaping or quoting.
  //   [    ^      [    \     p     {      Z     }     \     u    0      0    2      0
     0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30,
@@ -55,19 +55,19 @@
  //   {     L     }    ]     -     [      \     p     {     N    }      ]     ]
     0x7b, 0x4c, 0x7d, 0x5d, 0x2d, 0x5b, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0x5d, 0};
 
-static const UChar gRuleSet_name_char_pattern[]       = {
+static const char16_t gRuleSet_name_char_pattern[]       = {
 //    [    _      \    p     {     L      }     \     p     {    N      }     ]
     0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0};
 
-static const UChar gRuleSet_digit_char_pattern[] = {
+static const char16_t gRuleSet_digit_char_pattern[] = {
 //    [    0      -    9     ]
     0x5b, 0x30, 0x2d, 0x39, 0x5d, 0};
 
-static const UChar gRuleSet_name_start_char_pattern[] = {
+static const char16_t gRuleSet_name_start_char_pattern[] = {
 //    [    _      \    p     {     L      }     ]
     0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5d, 0 };
 
-static const UChar kAny[] = {0x61, 0x6e, 0x79, 0x00};  // "any"
+static const char16_t kAny[] = {0x61, 0x6e, 0x79, 0x00};  // "any"
 
 
 U_CDECL_BEGIN
@@ -97,10 +97,10 @@
     fCharNum            = 0;
     fLastChar           = 0;
     
-    fStateTable         = NULL;
+    fStateTable         = nullptr;
     fStack[0]           = 0;
     fStackPtr           = 0;
-    fNodeStack[0]       = NULL;
+    fNodeStack[0]       = nullptr;
     fNodeStackPtr       = 0;
 
     fReverseRule        = false;
@@ -107,8 +107,8 @@
     fLookAheadRule      = false;
     fNoChainInRule      = false;
 
-    fSymbolTable        = NULL;
-    fSetTable           = NULL;
+    fSymbolTable        = nullptr;
+    fSetTable           = nullptr;
     fRuleNum            = 0;
     fOptionStart        = 0;
 
@@ -146,11 +146,11 @@
     }
 
     fSymbolTable = new RBBISymbolTable(this, rb->fRules, *rb->fStatus);
-    if (fSymbolTable == NULL) {
+    if (fSymbolTable == nullptr) {
         *rb->fStatus = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
-    fSetTable    = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, rb->fStatus);
+    fSetTable    = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, rb->fStatus);
     if (U_FAILURE(*rb->fStatus)) {
         return;
     }
@@ -166,9 +166,9 @@
 //------------------------------------------------------------------------------
 RBBIRuleScanner::~RBBIRuleScanner() {
     delete fSymbolTable;
-    if (fSetTable != NULL) {
+    if (fSetTable != nullptr) {
          uhash_close(fSetTable);
-         fSetTable = NULL;
+         fSetTable = nullptr;
 
     }
 
@@ -199,7 +199,7 @@
 //------------------------------------------------------------------------------
 UBool RBBIRuleScanner::doParseActions(int32_t action)
 {
-    RBBINode *n       = NULL;
+    RBBINode *n       = nullptr;
 
     UBool   returnVal = true;
 
@@ -374,7 +374,7 @@
         //
         RBBINode **destRules = (fReverseRule? &fRB->fSafeRevTree : fRB->fDefaultTree);
 
-        if (*destRules != NULL) {
+        if (*destRules != nullptr) {
             // This is not the first rule encountered.
             // OR previous stuff  (from *destRules)
             // with the current rule expression (on the Node Stack)
@@ -547,8 +547,6 @@
             UnicodeString opt(fRB->fRules, fOptionStart, fScanIndex-fOptionStart);
             if (opt == UNICODE_STRING("chain", 5)) {
                 fRB->fChainRules = true;
-            } else if (opt == UNICODE_STRING("LBCMNoChain", 11)) {
-                fRB->fLBCMNoChain = true;
             } else if (opt == UNICODE_STRING("forward", 7)) {
                 fRB->fDefaultTree   = &fRB->fForwardTree;
             } else if (opt == UNICODE_STRING("reverse", 7)) {
@@ -583,7 +581,7 @@
 
     case doEndVariableName:
         n = fNodeStack[fNodeStackPtr];
-        if (n==NULL || n->fType != RBBINode::varRef) {
+        if (n==nullptr || n->fType != RBBINode::varRef) {
             error(U_BRK_INTERNAL_ERROR);
             break;
         }
@@ -598,7 +596,7 @@
 
     case doCheckVarDef:
         n = fNodeStack[fNodeStackPtr];
-        if (n->fLeftChild == NULL) {
+        if (n->fLeftChild == nullptr) {
             error(U_BRK_UNDEFINED_VARIABLE);
             returnVal = false;
         }
@@ -737,7 +735,7 @@
     // If so, just use the cached set in the new node.
     //   delete any set provided by the caller, since we own it.
     el = (RBBISetTableEl *)uhash_get(fSetTable, &s);
-    if (el != NULL) {
+    if (el != nullptr) {
         delete setToAdopt;
         node->fLeftChild = el->val;
         U_ASSERT(node->fLeftChild->fType == RBBINode::uset);
@@ -747,7 +745,7 @@
     // Haven't seen this set before.
     // If the caller didn't provide us with a prebuilt set,
     //   create a new UnicodeSet now.
-    if (setToAdopt == NULL) {
+    if (setToAdopt == nullptr) {
         if (s.compare(kAny, -1) == 0) {
             setToAdopt = new UnicodeSet(0x000000, 0x10ffff);
         } else {
@@ -762,7 +760,7 @@
     // This new uset node becomes the child of the caller's setReference node.
     //
     RBBINode *usetNode    = new RBBINode(RBBINode::uset);
-    if (usetNode == NULL) {
+    if (usetNode == nullptr) {
         error(U_MEMORY_ALLOCATION_ERROR);
         return;
     }
@@ -783,14 +781,14 @@
     //
     el      = (RBBISetTableEl *)uprv_malloc(sizeof(RBBISetTableEl));
     UnicodeString *tkey = new UnicodeString(s);
-    if (tkey == NULL || el == NULL || setToAdopt == NULL) {
+    if (tkey == nullptr || el == nullptr || setToAdopt == nullptr) {
         // Delete to avoid memory leak
         delete tkey;
-        tkey = NULL;
+        tkey = nullptr;
         uprv_free(el);
-        el = NULL;
+        el = nullptr;
         delete setToAdopt;
-        setToAdopt = NULL;
+        setToAdopt = nullptr;
 
         error(U_MEMORY_ALLOCATION_ERROR);
         return;
@@ -809,15 +807,15 @@
 //     Numeric because there is no portable way to enter them as literals.
 //     (Think EBCDIC).
 //
-static const UChar      chCR        = 0x0d;      // New lines, for terminating comments.
-static const UChar      chLF        = 0x0a;
-static const UChar      chNEL       = 0x85;      //    NEL newline variant
-static const UChar      chLS        = 0x2028;    //    Unicode Line Separator
-static const UChar      chApos      = 0x27;      //  single quote, for quoted chars.
-static const UChar      chPound     = 0x23;      // '#', introduces a comment.
-static const UChar      chBackSlash = 0x5c;      // '\'  introduces a char escape
-static const UChar      chLParen    = 0x28;
-static const UChar      chRParen    = 0x29;
+static const char16_t   chCR        = 0x0d;      // New lines, for terminating comments.
+static const char16_t   chLF        = 0x0a;
+static const char16_t   chNEL       = 0x85;      //    NEL newline variant
+static const char16_t   chLS        = 0x2028;    //    Unicode Line Separator
+static const char16_t   chApos      = 0x27;      //  single quote, for quoted chars.
+static const char16_t   chPound     = 0x23;      // '#', introduces a comment.
+static const char16_t   chBackSlash = 0x5c;      // '\'  introduces a char escape
+static const char16_t   chLParen    = 0x28;
+static const char16_t   chRParen    = 0x29;
 
 
 //------------------------------------------------------------------------------
@@ -918,7 +916,7 @@
             //   Toggle quoting mode.
             //   Return either '('  or ')', because quotes cause a grouping of the quoted text.
             fQuoteMode = !fQuoteMode;
-            if (fQuoteMode == true) {
+            if (fQuoteMode) {
                 c.fChar = chLParen;
             } else {
                 c.fChar = chRParen;
@@ -1119,7 +1117,7 @@
     
     // If there are no forward rules set an error.
     //
-    if (fRB->fForwardTree == NULL) {
+    if (fRB->fForwardTree == nullptr) {
         error(U_BRK_RULE_SYNTAX);
         return;
     }
@@ -1169,16 +1167,16 @@
 //------------------------------------------------------------------------------
 RBBINode  *RBBIRuleScanner::pushNewNode(RBBINode::NodeType  t) {
     if (U_FAILURE(*fRB->fStatus)) {
-        return NULL;
+        return nullptr;
     }
     if (fNodeStackPtr >= kStackSize - 1) {
         error(U_BRK_RULE_SYNTAX);
         RBBIDebugPuts("RBBIRuleScanner::pushNewNode - stack overflow.");
-        return NULL;
+        return nullptr;
     }
     fNodeStackPtr++;
     fNodeStack[fNodeStackPtr] = new RBBINode(t);
-    if (fNodeStack[fNodeStackPtr] == NULL) {
+    if (fNodeStack[fNodeStackPtr] == nullptr) {
         *fRB->fStatus = U_MEMORY_ALLOCATION_ERROR;
     }
     return fNodeStack[fNodeStackPtr];
@@ -1214,7 +1212,7 @@
     startPos = fScanIndex;
     UErrorCode localStatus = U_ZERO_ERROR;
     uset = new UnicodeSet();
-    if (uset == NULL) {
+    if (uset == nullptr) {
         localStatus = U_MEMORY_ALLOCATION_ERROR;
     } else {
         uset->applyPatternIgnoreSpace(fRB->fRules, pos, fSymbolTable, localStatus);
@@ -1232,7 +1230,7 @@
 
     // Verify that the set contains at least one code point.
     //
-    U_ASSERT(uset!=NULL);
+    U_ASSERT(uset!=nullptr);
     if (uset->isEmpty()) {
         // This set is empty.
         //  Make it an error, because it almost certainly is not what the user wanted.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -86,7 +86,7 @@
     void        error(UErrorCode e);                   // error reporting convenience function.
     void        fixOpStack(RBBINode::OpPrecedence p);
                                                        //   a character.
-    void        findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt = NULL);
+    void        findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt = nullptr);
 
     UChar32     nextCharLL();
 #ifdef RBBI_DEBUG

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -74,7 +74,7 @@
     RangeDescriptor   *nextRangeDesc;
 
     // Walk through & delete the linked list of RangeDescriptors
-    for (nextRangeDesc = fRangeList; nextRangeDesc!=NULL;) {
+    for (nextRangeDesc = fRangeList; nextRangeDesc!=nullptr;) {
         RangeDescriptor *r = nextRangeDesc;
         nextRangeDesc      = r->fNext;
         delete r;
@@ -104,7 +104,7 @@
     //  that is in no sets.
     //
     fRangeList                = new RangeDescriptor(*fStatus); // will check for status here
-    if (fRangeList == NULL) {
+    if (fRangeList == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -121,7 +121,7 @@
     int  ni;
     for (ni=0; ; ni++) {        // Loop over each of the UnicodeSets encountered in the input rules
         usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni);
-        if (usetNode==NULL) {
+        if (usetNode==nullptr) {
             break;
         }
 
@@ -252,7 +252,7 @@
     UnicodeString bofString(u"bof");
     for (ni=0; ; ni++) {        // Loop over each of the UnicodeSets encountered in the input rules
         usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni);
-        if (usetNode==NULL) {
+        if (usetNode==nullptr) {
             break;
         }
         UnicodeSet      *inputSet = usetNode->fInputSet;
@@ -376,12 +376,12 @@
 
 void  RBBISetBuilder::addValToSet(RBBINode *usetNode, uint32_t val) {
     RBBINode *leafNode = new RBBINode(RBBINode::leafChar);
-    if (leafNode == NULL) {
+    if (leafNode == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
     leafNode->fVal = (unsigned short)val;
-    if (usetNode->fLeftChild == NULL) {
+    if (usetNode->fLeftChild == nullptr) {
         usetNode->fLeftChild = leafNode;
         leafNode->fParent    = usetNode;
     } else {
@@ -389,7 +389,7 @@
         // Set up an OR node, with the previous stuff as the left child
         //   and the new value as the right child.
         RBBINode *orNode = new RBBINode(RBBINode::opOr);
-        if (orNode == NULL) {
+        if (orNode == nullptr) {
             *fStatus = U_MEMORY_ALLOCATION_ERROR;
             return;
         }
@@ -507,9 +507,9 @@
                 RBBINode       *usetNode    = (RBBINode *)rlRange->fIncludesSets->elementAt(i);
                 UnicodeString   setName = UNICODE_STRING("anon", 4);
                 RBBINode       *setRef = usetNode->fParent;
-                if (setRef != NULL) {
+                if (setRef != nullptr) {
                     RBBINode *varRef = setRef->fParent;
-                    if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
+                    if (varRef != nullptr  &&  varRef->fType == RBBINode::varRef) {
                         setName = varRef->fText;
                     }
                 }
@@ -551,7 +551,7 @@
         UnicodeString    setName;
 
         usetNode = (RBBINode *)fRB->fUSetNodes->elementAt(i);
-        if (usetNode == NULL) {
+        if (usetNode == nullptr) {
             break;
         }
 
@@ -558,9 +558,9 @@
         RBBIDebugPrintf("%3d    ", i);
         setName = UNICODE_STRING("anonymous", 9);
         setRef = usetNode->fParent;
-        if (setRef != NULL) {
+        if (setRef != nullptr) {
             varRef = setRef->fParent;
-            if (varRef != NULL  &&  varRef->fType == RBBINode::varRef) {
+            if (varRef != nullptr  &&  varRef->fType == RBBINode::varRef) {
                 setName = varRef->fText;
             }
         }
@@ -568,7 +568,7 @@
         RBBIDebugPrintf("   ");
         RBBI_DEBUG_printUnicodeString(usetNode->fText);
         RBBIDebugPrintf("\n");
-        if (usetNode->fLeftChild != NULL) {
+        if (usetNode->fLeftChild != nullptr) {
             RBBINode::printTree(usetNode->fLeftChild, true);
         }
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -41,12 +41,12 @@
 U_NAMESPACE_BEGIN
 
 RBBISymbolTable::RBBISymbolTable(RBBIRuleScanner *rs, const UnicodeString &rules, UErrorCode &status)
-    :fRules(rules), fRuleScanner(rs), ffffString(UChar(0xffff))
+    :fRules(rules), fRuleScanner(rs), ffffString(char16_t(0xffff))
 {
-    fHashTable       = NULL;
-    fCachedSetLookup = NULL;
+    fHashTable       = nullptr;
+    fCachedSetLookup = nullptr;
     
-    fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status);
+    fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, &status);
     // uhash_open checks status
     if (U_FAILURE(status)) {
         return;
@@ -79,8 +79,8 @@
     RBBISymbolTable       *This = (RBBISymbolTable *)this;   // cast off const
 
     el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &s);
-    if (el == NULL) {
-        return NULL;
+    if (el == nullptr) {
+        return nullptr;
     }
 
     varRefNode = el->val;
@@ -98,7 +98,7 @@
         // The variable refers to something other than just a set.
         // return the original source string for the expression
         retString = &exprNode->fText;
-        This->fCachedSetLookup = NULL;
+        This->fCachedSetLookup = nullptr;
     }
     return retString;
 }
@@ -118,7 +118,7 @@
 //    and we just need to remember what set to return between these two calls.
 const UnicodeFunctor *RBBISymbolTable::lookupMatcher(UChar32 ch) const
 {
-    UnicodeSet *retVal = NULL;
+    UnicodeSet *retVal = nullptr;
     RBBISymbolTable *This = (RBBISymbolTable *)this;   // cast off const
     if (ch == 0xffff) {
         retVal = fCachedSetLookup;
@@ -144,7 +144,7 @@
     int32_t i = start;
     UnicodeString result;
     while (i < limit) {
-        UChar c = text.charAt(i);
+        char16_t c = text.charAt(i);
         if ((i==start && !u_isIDStart(c)) || !u_isIDPart(c)) {
             break;
         }
@@ -163,15 +163,15 @@
 //
 // RBBISymbolTable::lookupNode      Given a key (a variable name), return the
 //                                  corresponding RBBI Node.  If there is no entry
-//                                  in the table for this name, return NULL.
+//                                  in the table for this name, return nullptr.
 //
 RBBINode       *RBBISymbolTable::lookupNode(const UnicodeString &key) const{
 
-    RBBINode             *retNode = NULL;
+    RBBINode             *retNode = nullptr;
     RBBISymbolTableEntry *el;
 
     el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key);
-    if (el != NULL) {
+    if (el != nullptr) {
         retNode = el->val;
     }
     return retNode;
@@ -191,13 +191,13 @@
         return;
     }
     e = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key);
-    if (e != NULL) {
+    if (e != nullptr) {
         err = U_BRK_VARIABLE_REDFINITION;
         return;
     }
 
     e = new RBBISymbolTableEntry;
-    if (e == NULL) {
+    if (e == nullptr) {
         err = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -207,7 +207,7 @@
 }
 
 
-RBBISymbolTableEntry::RBBISymbolTableEntry() : UMemory(), key(), val(NULL) {}
+RBBISymbolTableEntry::RBBISymbolTableEntry() : UMemory(), key(), val(nullptr) {}
 
 RBBISymbolTableEntry::~RBBISymbolTableEntry() {
     // The "val" of a symbol table entry is a variable reference node.
@@ -215,7 +215,7 @@
     // Unlike other node types, children of variable reference nodes are not
     //    automatically recursively deleted.  We do it manually here.
     delete val->fLeftChild;
-    val->fLeftChild = NULL;
+    val->fLeftChild = nullptr;
 
     delete  val;
 
@@ -233,10 +233,10 @@
            "-------------------------------------------------------------------\n");
 
     int32_t pos = UHASH_FIRST;
-    const UHashElement  *e   = NULL;
+    const UHashElement  *e   = nullptr;
     for (;;) {
         e = uhash_nextElement(fHashTable,  &pos);
-        if (e == NULL ) {
+        if (e == nullptr ) {
             break;
         }
         RBBISymbolTableEntry  *s   = (RBBISymbolTableEntry *)e->value.pointer;
@@ -249,7 +249,7 @@
     pos = -1;
     for (;;) {
         e = uhash_nextElement(fHashTable,  &pos);
-        if (e == NULL ) {
+        if (e == nullptr ) {
             break;
         }
         RBBISymbolTableEntry  *s   = (RBBISymbolTableEntry *)e->value.pointer;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -73,7 +73,7 @@
 
     // If there were no rules, just return.  This situation can easily arise
     //   for the reverse rules.
-    if (fTree==NULL) {
+    if (fTree==nullptr) {
         return;
     }
 
@@ -99,7 +99,7 @@
         RBBINode *bofTop    = new RBBINode(RBBINode::opCat);
         RBBINode *bofLeaf   = new RBBINode(RBBINode::leafChar);
         // Delete and exit if memory allocation failed.
-        if (bofTop == NULL || bofLeaf == NULL) {
+        if (bofTop == nullptr || bofLeaf == nullptr) {
             *fStatus = U_MEMORY_ALLOCATION_ERROR;
             delete bofTop;
             delete bofLeaf;
@@ -119,7 +119,7 @@
     //
     RBBINode *cn = new RBBINode(RBBINode::opCat);
     // Exit if memory allocation failed.
-    if (cn == NULL) {
+    if (cn == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -127,7 +127,7 @@
     fTree->fParent = cn;
     RBBINode *endMarkerNode = cn->fRightChild = new RBBINode(RBBINode::endMark);
     // Delete and exit if memory allocation failed.
-    if (cn->fRightChild == NULL) {
+    if (cn->fRightChild == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         delete cn;
         return;
@@ -203,7 +203,7 @@
 //
 //-----------------------------------------------------------------------------
 void RBBITableBuilder::calcNullable(RBBINode *n) {
-    if (n == NULL) {
+    if (n == nullptr) {
         return;
     }
     if (n->fType == RBBINode::setRef ||
@@ -250,7 +250,7 @@
 //
 //-----------------------------------------------------------------------------
 void RBBITableBuilder::calcFirstPos(RBBINode *n) {
-    if (n == NULL) {
+    if (n == nullptr) {
         return;
     }
     if (n->fType == RBBINode::leafChar  ||
@@ -296,7 +296,7 @@
 //
 //-----------------------------------------------------------------------------
 void RBBITableBuilder::calcLastPos(RBBINode *n) {
-    if (n == NULL) {
+    if (n == nullptr) {
         return;
     }
     if (n->fType == RBBINode::leafChar  ||
@@ -342,7 +342,7 @@
 //
 //-----------------------------------------------------------------------------
 void RBBITableBuilder::calcFollowPos(RBBINode *n) {
-    if (n == NULL ||
+    if (n == nullptr ||
         n->fType == RBBINode::leafChar ||
         n->fType == RBBINode::endMark) {
         return;
@@ -387,7 +387,7 @@
 //
 //-----------------------------------------------------------------------------
 void RBBITableBuilder::addRuleRootNodes(UVector *dest, RBBINode *node) {
-    if (node == NULL || U_FAILURE(*fStatus)) {
+    if (node == nullptr || U_FAILURE(*fStatus)) {
         return;
     }
     U_ASSERT(!dest->hasDeleter());
@@ -458,21 +458,6 @@
 
         // We've got a node that can end a match.
 
-        // !!LBCMNoChain implementation:  If this node's val correspond to
-        // the Line Break $CM char class, don't chain from it.
-        // TODO:  Remove this. !!LBCMNoChain is deprecated, and is not used
-        //        by any of the standard ICU rules.
-        if (fRB->fLBCMNoChain) {
-            UChar32 c = this->fRB->fSetBuilder->getFirstChar(endNode->fVal);
-            if (c != -1) {
-                // c == -1 occurs with sets containing only the {eof} marker string.
-                ULineBreak cLBProp = (ULineBreak)u_getIntPropertyValue(c, UCHAR_LINE_BREAK);
-                if (cLBProp == U_LB_COMBINING_MARK) {
-                    continue;
-                }
-            }
-        }
-
         // Now iterate over the nodes that can start a match, looking for ones
         //   with the same char class as our ending node.
         RBBINode *startNode;
@@ -567,21 +552,21 @@
         return;
     }
     RBBIStateDescriptor *failState;
-    // Set it to NULL to avoid uninitialized warning
-    RBBIStateDescriptor *initialState = NULL; 
+    // Set it to nullptr to avoid uninitialized warning
+    RBBIStateDescriptor *initialState = nullptr;
     //
     // Add a dummy state 0 - the stop state.  Not from Aho.
     int      lastInputSymbol = fRB->fSetBuilder->getNumCharCategories() - 1;
     failState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-    if (failState == NULL) {
+    if (failState == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         goto ExitBuildSTdeleteall;
     }
     failState->fPositions = new UVector(*fStatus);
-    if (failState->fPositions == NULL) {
+    if (failState->fPositions == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
     }
-    if (failState->fPositions == NULL || U_FAILURE(*fStatus)) {
+    if (failState->fPositions == nullptr || U_FAILURE(*fStatus)) {
         goto ExitBuildSTdeleteall;
     }
     fDStates->addElement(failState, *fStatus);
@@ -592,7 +577,7 @@
     // initially, the only unmarked state in Dstates is firstpos(root),
     //       where toot is the root of the syntax tree for (r)#;
     initialState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-    if (initialState == NULL) {
+    if (initialState == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
     }
     if (U_FAILURE(*fStatus)) {
@@ -599,7 +584,7 @@
         goto ExitBuildSTdeleteall;
     }
     initialState->fPositions = new UVector(*fStatus);
-    if (initialState->fPositions == NULL) {
+    if (initialState->fPositions == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
     }
     if (U_FAILURE(*fStatus)) {
@@ -613,7 +598,7 @@
 
     // while there is an unmarked state T in Dstates do begin
     for (;;) {
-        RBBIStateDescriptor *T = NULL;
+        RBBIStateDescriptor *T = nullptr;
         int32_t              tx;
         for (tx=1; tx<fDStates->size(); tx++) {
             RBBIStateDescriptor *temp;
@@ -623,7 +608,7 @@
                 break;
             }
         }
-        if (T == NULL) {
+        if (T == nullptr) {
             break;
         }
 
@@ -636,15 +621,15 @@
             // let U be the set of positions that are in followpos(p)
             //    for some position p in T
             //    such that the symbol at position p is a;
-            UVector    *U = NULL;
+            UVector    *U = nullptr;
             RBBINode   *p;
             int32_t     px;
             for (px=0; px<T->fPositions->size(); px++) {
                 p = (RBBINode *)T->fPositions->elementAt(px);
                 if ((p->fType == RBBINode::leafChar) &&  (p->fVal == a)) {
-                    if (U == NULL) {
+                    if (U == nullptr) {
                         U = new UVector(*fStatus);
-                        if (U == NULL) {
+                        if (U == nullptr) {
                         	*fStatus = U_MEMORY_ALLOCATION_ERROR;
                         	goto ExitBuildSTdeleteall;
                         }
@@ -656,7 +641,7 @@
             // if U is not empty and not in DStates then
             int32_t  ux = 0;
             UBool    UinDstates = false;
-            if (U != NULL) {
+            if (U != nullptr) {
                 U_ASSERT(U->size() > 0);
                 int  ix;
                 for (ix=0; ix<fDStates->size(); ix++) {
@@ -675,7 +660,7 @@
                 if (!UinDstates)
                 {
                     RBBIStateDescriptor *newState = new RBBIStateDescriptor(lastInputSymbol, fStatus);
-                    if (newState == NULL) {
+                    if (newState == nullptr) {
                     	*fStatus = U_MEMORY_ALLOCATION_ERROR;
                     }
                     if (U_FAILURE(*fStatus)) {
@@ -942,7 +927,7 @@
     for (n=0; n<fDStates->size(); n++) {
         RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
         UVector *thisStatesTagValues = sd->fTagVals;
-        if (thisStatesTagValues == NULL) {
+        if (thisStatesTagValues == nullptr) {
             // No tag values are explicitly associated with this state.
             //   Set the default tag value.
             sd->fTagsIdx = 0;
@@ -1012,10 +997,10 @@
 void RBBITableBuilder::sortedAdd(UVector **vector, int32_t val) {
     int32_t i;
 
-    if (*vector == NULL) {
+    if (*vector == nullptr) {
         *vector = new UVector(*fStatus);
     }
-    if (*vector == NULL || U_FAILURE(*fStatus)) {
+    if (*vector == nullptr || U_FAILURE(*fStatus)) {
         return;
     }
     UVector *vec = *vector;
@@ -1053,7 +1038,7 @@
     void **destLim, **sourceLim;
 
     if (destOriginalSize > destArray.getCapacity()) {
-        if (destArray.resize(destOriginalSize) == NULL) {
+        if (destArray.resize(destOriginalSize) == nullptr) {
             return;
         }
     }
@@ -1061,7 +1046,7 @@
     destLim = destPtr + destOriginalSize;  // destArray.getArrayLimit()?
 
     if (sourceSize > sourceArray.getCapacity()) {
-        if (sourceArray.resize(sourceSize) == NULL) {
+        if (sourceArray.resize(sourceSize) == nullptr) {
             return;
         }
     }
@@ -1125,7 +1110,7 @@
 //-----------------------------------------------------------------------------
 #ifdef RBBI_DEBUG
 void RBBITableBuilder::printPosSets(RBBINode *n) {
-    if (n==NULL) {
+    if (n==nullptr) {
         return;
     }
     printf("\n");
@@ -1339,7 +1324,7 @@
     int32_t    numCols;
     int32_t    rowSize;
 
-    if (fTree == NULL) {
+    if (fTree == nullptr) {
         return 0;
     }
 
@@ -1373,7 +1358,7 @@
     uint32_t           state;
     int                col;
 
-    if (U_FAILURE(*fStatus) || fTree == NULL) {
+    if (U_FAILURE(*fStatus) || fTree == nullptr) {
         return;
     }
 
@@ -1651,7 +1636,7 @@
     int32_t  i;
     for (i=0; i<s->size(); i++) {
         const RBBINode *v = static_cast<const RBBINode *>(s->elementAt(i));
-        RBBIDebugPrintf("%5d", v==NULL? -1 : v->fSerialNum);
+        RBBIDebugPrintf("%5d", v==nullptr? -1 : v->fSerialNum);
     }
     RBBIDebugPrintf("\n");
 }
@@ -1777,15 +1762,15 @@
     fAccepting = 0;
     fLookAhead = 0;
     fTagsIdx   = 0;
-    fTagVals   = NULL;
-    fPositions = NULL;
-    fDtran     = NULL;
+    fTagVals   = nullptr;
+    fPositions = nullptr;
+    fDtran     = nullptr;
 
     fDtran     = new UVector32(lastInputSymbol+1, *fStatus);
     if (U_FAILURE(*fStatus)) {
         return;
     }
-    if (fDtran == NULL) {
+    if (fDtran == nullptr) {
         *fStatus = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
@@ -1800,9 +1785,9 @@
     delete       fPositions;
     delete       fDtran;
     delete       fTagVals;
-    fPositions = NULL;
-    fDtran     = NULL;
-    fTagVals   = NULL;
+    fPositions = nullptr;
+    fDtran     = nullptr;
+    fTagVals   = nullptr;
 }
 
 U_NAMESPACE_END

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -156,7 +156,7 @@
 public:
 #ifdef RBBI_DEBUG
     void     printSet(UVector *s);
-    void     printPosSets(RBBINode *n /* = NULL*/);
+    void     printPosSets(RBBINode *n /* = nullptr */);
     void     printStates();
     void     printRuleStatusTable();
     void     printReverseTable();

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -177,13 +177,13 @@
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ResourceBundle)
 
 ResourceBundle::ResourceBundle(UErrorCode &err)
-                                :UObject(), fLocale(NULL)
+                                :UObject(), fLocale(nullptr)
 {
     fResource = ures_open(0, Locale::getDefault().getName(), &err);
 }
 
 ResourceBundle::ResourceBundle(const ResourceBundle &other)
-                              :UObject(other), fLocale(NULL)
+                              :UObject(other), fLocale(nullptr)
 {
     UErrorCode status = U_ZERO_ERROR;
 
@@ -191,23 +191,23 @@
         fResource = ures_copyResb(0, other.fResource, &status);
     } else {
         /* Copying a bad resource bundle */
-        fResource = NULL;
+        fResource = nullptr;
     }
 }
 
 ResourceBundle::ResourceBundle(UResourceBundle *res, UErrorCode& err)
-                               :UObject(), fLocale(NULL)
+                               :UObject(), fLocale(nullptr)
 {
     if (res) {
         fResource = ures_copyResb(0, res, &err);
     } else {
         /* Copying a bad resource bundle */
-        fResource = NULL;
+        fResource = nullptr;
     }
 }
 
 ResourceBundle::ResourceBundle(const char* path, const Locale& locale, UErrorCode& err) 
-                               :UObject(), fLocale(NULL)
+                               :UObject(), fLocale(nullptr)
 {
     fResource = ures_open(path, locale.getName(), &err);
 }
@@ -220,11 +220,11 @@
     }
     if(fResource != 0) {
         ures_close(fResource);
-        fResource = NULL;
+        fResource = nullptr;
     }
-    if (fLocale != NULL) {
+    if (fLocale != nullptr) {
         delete fLocale;
-        fLocale = NULL;
+        fLocale = nullptr;
     }
     UErrorCode status = U_ZERO_ERROR;
     if (other.fResource) {
@@ -231,7 +231,7 @@
         fResource = ures_copyResb(0, other.fResource, &status);
     } else {
         /* Copying a bad resource bundle */
-        fResource = NULL;
+        fResource = nullptr;
     }
     return *this;
 }
@@ -241,7 +241,7 @@
     if(fResource != 0) {
         ures_close(fResource);
     }
-    if(fLocale != NULL) {
+    if(fLocale != nullptr) {
       delete(fLocale);
     }
 }
@@ -253,7 +253,7 @@
 
 UnicodeString ResourceBundle::getString(UErrorCode& status) const {
     int32_t len = 0;
-    const UChar *r = ures_getString(fResource, &len, &status);
+    const char16_t *r = ures_getString(fResource, &len, &status);
     return UnicodeString(true, r, len);
 }
 
@@ -273,27 +273,27 @@
     return ures_getInt(fResource, &status);
 }
 
-const char *ResourceBundle::getName(void) const {
+const char *ResourceBundle::getName() const {
     return ures_getName(fResource);
 }
 
-const char *ResourceBundle::getKey(void) const {
+const char *ResourceBundle::getKey() const {
     return ures_getKey(fResource);
 }
 
-UResType ResourceBundle::getType(void) const {
+UResType ResourceBundle::getType() const {
     return ures_getType(fResource);
 }
 
-int32_t ResourceBundle::getSize(void) const {
+int32_t ResourceBundle::getSize() const {
     return ures_getSize(fResource);
 }
 
-UBool ResourceBundle::hasNext(void) const {
+UBool ResourceBundle::hasNext() const {
     return ures_hasNext(fResource);
 }
 
-void ResourceBundle::resetIterator(void) {
+void ResourceBundle::resetIterator() {
     ures_resetIterator(fResource);
 }
 
@@ -311,13 +311,13 @@
 
 UnicodeString ResourceBundle::getNextString(UErrorCode& status) {
     int32_t len = 0;
-    const UChar* r = ures_getNextString(fResource, &len, 0, &status);
+    const char16_t* r = ures_getNextString(fResource, &len, 0, &status);
     return UnicodeString(true, r, len);
 }
 
 UnicodeString ResourceBundle::getNextString(const char ** key, UErrorCode& status) {
     int32_t len = 0;
-    const UChar* r = ures_getNextString(fResource, &len, key, &status);
+    const char16_t* r = ures_getNextString(fResource, &len, key, &status);
     return UnicodeString(true, r, len);
 }
 
@@ -335,7 +335,7 @@
 
 UnicodeString ResourceBundle::getStringEx(int32_t indexS, UErrorCode& status) const {
     int32_t len = 0;
-    const UChar* r = ures_getStringByIndex(fResource, indexS, &len, &status);
+    const char16_t* r = ures_getStringByIndex(fResource, indexS, &len, &status);
     return UnicodeString(true, r, len);
 }
 
@@ -363,7 +363,7 @@
 }
 UnicodeString ResourceBundle::getStringEx(const char* key, UErrorCode& status) const {
     int32_t len = 0;
-    const UChar* r = ures_getStringByKey(fResource, key, &len, &status);
+    const char16_t* r = ures_getStringByKey(fResource, key, &len, &status);
     return UnicodeString(true, r, len);
 }
 
@@ -377,10 +377,10 @@
     ures_getVersion(fResource, versionInfo);
 }
 
-const Locale &ResourceBundle::getLocale(void) const {
+const Locale &ResourceBundle::getLocale() const {
     static UMutex gLocaleLock;
     Mutex lock(&gLocaleLock);
-    if (fLocale != NULL) {
+    if (fLocale != nullptr) {
         return *fLocale;
     }
     UErrorCode status = U_ZERO_ERROR;
@@ -387,7 +387,7 @@
     const char *localeName = ures_getLocaleInternal(fResource, &status);
     ResourceBundle *ncThis = const_cast<ResourceBundle *>(this);
     ncThis->fLocale = new Locale(localeName);
-    return ncThis->fLocale != NULL ? *ncThis->fLocale : Locale::getDefault();
+    return ncThis->fLocale != nullptr ? *ncThis->fLocale : Locale::getDefault();
 }
 
 const Locale ResourceBundle::getLocale(ULocDataLocaleType type, UErrorCode &status) const

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -27,7 +27,7 @@
 ResourceBundle::ResourceBundle( const UnicodeString&    path,
                                 const Locale&           locale,
                                 UErrorCode&              error)
-                                :UObject(), fLocale(NULL)
+                                :UObject(), fLocale(nullptr)
 {
     constructForLocale(path, locale, error);
 }
@@ -34,7 +34,7 @@
 
 ResourceBundle::ResourceBundle( const UnicodeString&    path,
                                 UErrorCode&              error)
-                                :UObject(), fLocale(NULL)
+                                :UObject(), fLocale(nullptr)
 {
     constructForLocale(path, Locale::getDefault(), error);
 }
@@ -45,11 +45,11 @@
                                    UErrorCode& error)
 {
     if (path.isEmpty()) {
-        fResource = ures_open(NULL, locale.getName(), &error);
+        fResource = ures_open(nullptr, locale.getName(), &error);
     }
     else {
         UnicodeString nullTerminatedPath(path);
-        nullTerminatedPath.append((UChar)0);
+        nullTerminatedPath.append((char16_t)0);
         fResource = ures_openU(nullTerminatedPath.getBuffer(), locale.getName(), &error);
     }
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resource.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resource.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resource.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -45,7 +45,7 @@
 class U_COMMON_API ResourceArray {
 public:
     /** Constructs an empty array object. */
-    ResourceArray() : items16(NULL), items32(NULL), length(0) {}
+    ResourceArray() : items16(nullptr), items32(nullptr), length(0) {}
 
     /** Only for implementation use. @internal */
     ResourceArray(const uint16_t *i16, const uint32_t *i32, int32_t len,
@@ -80,7 +80,7 @@
 class U_COMMON_API ResourceTable {
 public:
     /** Constructs an empty table object. */
-    ResourceTable() : keys16(NULL), keys32(NULL), items16(NULL), items32(NULL), length(0) {}
+    ResourceTable() : keys16(nullptr), keys32(nullptr), items16(nullptr), items32(nullptr), length(0) {}
 
     /** Only for implementation use. @internal */
     ResourceTable(const uint16_t *k16, const int32_t *k32,
@@ -136,11 +136,11 @@
      *
      * @see ures_getString()
      */
-    virtual const UChar *getString(int32_t &length, UErrorCode &errorCode) const = 0;
+    virtual const char16_t *getString(int32_t &length, UErrorCode &errorCode) const = 0;
 
     inline UnicodeString getUnicodeString(UErrorCode &errorCode) const {
         int32_t len = 0;
-        const UChar *r = getString(len, errorCode);
+        const char16_t *r = getString(len, errorCode);
         return UnicodeString(true, r, len);
     }
 
@@ -147,11 +147,11 @@
     /**
      * Sets U_RESOURCE_TYPE_MISMATCH if this is not an alias resource.
      */
-    virtual const UChar *getAliasString(int32_t &length, UErrorCode &errorCode) const = 0;
+    virtual const char16_t *getAliasString(int32_t &length, UErrorCode &errorCode) const = 0;
 
     inline UnicodeString getAliasUnicodeString(UErrorCode &errorCode) const {
         int32_t len = 0;
-        const UChar *r = getAliasString(len, errorCode);
+        const char16_t *r = getAliasString(len, errorCode);
         return UnicodeString(true, r, len);
     }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -130,7 +130,7 @@
 UnicodeString& RuleCharacterIterator::toString(UnicodeString& result) const {
     int32_t b = pos.getIndex();
     text.extract(0, b, result);
-    return result.append((UChar) 0x7C).append(text, b, 0x7FFFFFFF); // Insert '|' at index
+    return result.append((char16_t) 0x7C).append(text, b, 0x7FFFFFFF); // Insert '|' at index
 }
 */
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -93,7 +93,7 @@
         return false;
     }
 
-    StringCharacterIterator&    realThat = (StringCharacterIterator&)that;
+    const StringCharacterIterator&    realThat = static_cast<const StringCharacterIterator&>(that);
 
     return text == realThat.text
         && pos == realThat.pos

Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -25,7 +25,7 @@
 ******************************************************************
 */
 
-const UChar ICUServiceKey::PREFIX_DELIMITER = 0x002F;   /* '/' */
+const char16_t ICUServiceKey::PREFIX_DELIMITER = 0x002F;   /* '/' */
 
 ICUServiceKey::ICUServiceKey(const UnicodeString& id) 
 : _id(id) {
@@ -144,7 +144,7 @@
             return service->cloneInstance(_instance); 
         }
     }
-    return NULL;
+    return nullptr;
 }
 
 void 
@@ -243,7 +243,7 @@
     CacheEntry* unref() {
         if ((--refcount) == 0) {
             delete this;
-            return NULL;
+            return nullptr;
         }
         return this;
     }
@@ -294,14 +294,14 @@
 {
     if (U_SUCCESS(status)) {
         StringPair* sp = new StringPair(displayName, id);
-        if (sp == NULL || sp->isBogus()) {
+        if (sp == nullptr || sp->isBogus()) {
             status = U_MEMORY_ALLOCATION_ERROR;
             delete sp;
-            return NULL;
+            return nullptr;
         }
         return sp;
     }
-    return NULL;
+    return nullptr;
 }
 
 UBool 
@@ -332,10 +332,10 @@
 ICUService::ICUService()
 : name()
 , timestamp(0)
-, factories(NULL)
-, serviceCache(NULL)
-, idCache(NULL)
-, dnCache(NULL)
+, factories(nullptr)
+, serviceCache(nullptr)
+, idCache(nullptr)
+, dnCache(nullptr)
 {
 }
 
@@ -342,10 +342,10 @@
 ICUService::ICUService(const UnicodeString& newName) 
 : name(newName)
 , timestamp(0)
-, factories(NULL)
-, serviceCache(NULL)
-, idCache(NULL)
-, dnCache(NULL)
+, factories(nullptr)
+, serviceCache(nullptr)
+, idCache(nullptr)
+, dnCache(nullptr)
 {
 }
 
@@ -355,7 +355,7 @@
         Mutex mutex(&lock);
         clearCaches();
         delete factories;
-        factories = NULL;
+        factories = nullptr;
     }
 }
 
@@ -362,13 +362,13 @@
 UObject* 
 ICUService::get(const UnicodeString& descriptor, UErrorCode& status) const 
 {
-    return get(descriptor, NULL, status);
+    return get(descriptor, nullptr, status);
 }
 
 UObject* 
 ICUService::get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const 
 {
-    UObject* result = NULL;
+    UObject* result = nullptr;
     ICUServiceKey* key = createKey(&descriptor, status);
     if (key) {
         result = getKey(*key, actualReturn, status);
@@ -380,7 +380,7 @@
 UObject* 
 ICUService::getKey(ICUServiceKey& key, UErrorCode& status) const 
 {
-    return getKey(key, NULL, status);
+    return getKey(key, nullptr, status);
 }
 
 // this is a vector that subclasses of ICUService can override to further customize the result object
@@ -389,7 +389,7 @@
 UObject* 
 ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const 
 {
-    return getKey(key, actualReturn, NULL, status);
+    return getKey(key, actualReturn, nullptr, status);
 }
 
 // make it possible to call reentrantly on systems that don't have reentrant mutexes.
@@ -417,7 +417,7 @@
 ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const 
 {
     if (U_FAILURE(status)) {
-        return NULL;
+        return nullptr;
     }
 
     if (isDefault()) {
@@ -426,7 +426,7 @@
 
     ICUService* ncthis = (ICUService*)this; // cast away semantic const
 
-    CacheEntry* result = NULL;
+    CacheEntry* result = nullptr;
     {
         // The factory list can't be modified until we're done, 
         // otherwise we might update the cache with an invalid result.
@@ -437,17 +437,17 @@
         // if factory is not null, we're calling from within the mutex,
         // and since some unix machines don't have reentrant mutexes we
         // need to make sure not to try to lock it again.
-        XMutex mutex(&lock, factory != NULL);
+        XMutex mutex(&lock, factory != nullptr);
 
-        if (serviceCache == NULL) {
+        if (serviceCache == nullptr) {
             ncthis->serviceCache = new Hashtable(status);
-            if (ncthis->serviceCache == NULL) {
+            if (ncthis->serviceCache == nullptr) {
                 status = U_MEMORY_ALLOCATION_ERROR;
-                return NULL;
+                return nullptr;
             }
             if (U_FAILURE(status)) {
                 delete serviceCache;
-                return NULL;
+                return nullptr;
             }
             serviceCache->setValueDeleter(cacheDeleter);
         }
@@ -460,7 +460,7 @@
         int32_t limit = factories->size();
         UBool cacheResult = true;
 
-        if (factory != NULL) {
+        if (factory != nullptr) {
             for (int32_t i = 0; i < limit; ++i) {
                 if (factory == (const ICUServiceFactory*)factories->elementAt(i)) {
                     startIndex = i + 1;
@@ -470,7 +470,7 @@
             if (startIndex == 0) {
                 // throw new InternalError("Factory " + factory + "not registered with service: " + this);
                 status = U_ILLEGAL_ARGUMENT_ERROR;
-                return NULL;
+                return nullptr;
             }
             cacheResult = false;
         }
@@ -479,7 +479,7 @@
             currentDescriptor.remove();
             key.currentDescriptor(currentDescriptor);
             result = (CacheEntry*)serviceCache->get(currentDescriptor);
-            if (result != NULL) {
+            if (result != nullptr) {
                 break;
             }
 
@@ -493,13 +493,13 @@
                 ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(index++);
                 LocalPointer<UObject> service(f->create(key, this, status));
                 if (U_FAILURE(status)) {
-                    return NULL;
+                    return nullptr;
                 }
                 if (service.isValid()) {
                     result = new CacheEntry(currentDescriptor, service.getAlias());
-                    if (result == NULL) {
+                    if (result == nullptr) {
                         status = U_MEMORY_ALLOCATION_ERROR;
-                        return NULL;
+                        return nullptr;
                     }
                     service.orphan(); // result now owns service.
 
@@ -513,32 +513,32 @@
             // fallback to the one that succeeded, we want to hit the
             // cache the first time next goaround.
             if (cacheDescriptorList.isNull()) {
-                cacheDescriptorList.adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, NULL, 5, status), status);
+                cacheDescriptorList.adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, nullptr, 5, status), status);
                 if (U_FAILURE(status)) {
-                    return NULL;
+                    return nullptr;
                 }
             }
 
             LocalPointer<UnicodeString> idToCache(new UnicodeString(currentDescriptor), status);
             if (U_FAILURE(status)) {
-                return NULL;
+                return nullptr;
             }
             if (idToCache->isBogus()) {
                 status = U_MEMORY_ALLOCATION_ERROR;
-                return NULL;
+                return nullptr;
             }
             cacheDescriptorList->adoptElement(idToCache.orphan(), status);
             if (U_FAILURE(status)) {
-                return NULL;
+                return nullptr;
             }
         } while (key.fallback());
 outerEnd:
 
-        if (result != NULL) {
+        if (result != nullptr) {
             if (putInCache && cacheResult) {
                 serviceCache->put(result->actualDescriptor, result, status);
                 if (U_FAILURE(status)) {
-                    return NULL;
+                    return nullptr;
                 }
 
                 if (cacheDescriptorList.isValid()) {
@@ -547,7 +547,7 @@
 
                         serviceCache->put(*desc, result, status);
                         if (U_FAILURE(status)) {
-                            return NULL;
+                            return nullptr;
                         }
 
                         result->ref();
@@ -556,9 +556,9 @@
                 }
             }
 
-            if (actualReturn != NULL) {
+            if (actualReturn != nullptr) {
                 // strip null prefix
-                if (result->actualDescriptor.indexOf((UChar)0x2f) == 0) { // U+002f=slash (/)
+                if (result->actualDescriptor.indexOf((char16_t)0x2f) == 0) { // U+002f=slash (/)
                     actualReturn->remove();
                     actualReturn->append(result->actualDescriptor, 
                         1, 
@@ -570,7 +570,7 @@
                 if (actualReturn->isBogus()) {
                     status = U_MEMORY_ALLOCATION_ERROR;
                     delete result;
-                    return NULL;
+                    return nullptr;
                 }
             }
 
@@ -588,12 +588,12 @@
 UObject* 
 ICUService::handleDefault(const ICUServiceKey& /* key */, UnicodeString* /* actualIDReturn */, UErrorCode& /* status */) const 
 {
-    return NULL;
+    return nullptr;
 }
 
 UVector& 
 ICUService::getVisibleIDs(UVector& result, UErrorCode& status) const {
-    return getVisibleIDs(result, NULL, status);
+    return getVisibleIDs(result, nullptr, status);
 }
 
 UVector& 
@@ -609,17 +609,17 @@
     {
         Mutex mutex(&lock);
         const Hashtable* map = getVisibleIDMap(status);
-        if (map != NULL) {
+        if (map != nullptr) {
             ICUServiceKey* fallbackKey = createKey(matchID, status);
 
             for (int32_t pos = UHASH_FIRST; U_SUCCESS(status); ) {
                 const UHashElement* e = map->nextElement(pos);
-                if (e == NULL) {
+                if (e == nullptr) {
                     break;
                 }
 
                 const UnicodeString* id = (const UnicodeString*)e->key.pointer;
-                if (fallbackKey != NULL) {
+                if (fallbackKey != nullptr) {
                     if (!fallbackKey->isFallbackOf(*id)) {
                         continue;
                     }
@@ -640,16 +640,16 @@
 
 const Hashtable* 
 ICUService::getVisibleIDMap(UErrorCode& status) const {
-    if (U_FAILURE(status)) return NULL;
+    if (U_FAILURE(status)) return nullptr;
 
     // must only be called when lock is already held
 
     ICUService* ncthis = (ICUService*)this; // cast away semantic const
-    if (idCache == NULL) {
+    if (idCache == nullptr) {
         ncthis->idCache = new Hashtable(status);
-        if (idCache == NULL) {
+        if (idCache == nullptr) {
             status = U_MEMORY_ALLOCATION_ERROR;
-        } else if (factories != NULL) {
+        } else if (factories != nullptr) {
             for (int32_t pos = factories->size(); --pos >= 0;) {
                 ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(pos);
                 f->updateVisibleIDs(*idCache, status);
@@ -656,7 +656,7 @@
             }
             if (U_FAILURE(status)) {
                 delete idCache;
-                ncthis->idCache = NULL;
+                ncthis->idCache = nullptr;
             }
         }
     }
@@ -678,9 +678,9 @@
         UErrorCode status = U_ZERO_ERROR;
         Mutex mutex(&lock);
         const Hashtable* map = getVisibleIDMap(status);
-        if (map != NULL) {
+        if (map != nullptr) {
             ICUServiceFactory* f = (ICUServiceFactory*)map->get(id);
-            if (f != NULL) {
+            if (f != nullptr) {
                 f->getDisplayName(id, locale, result);
                 return result;
             }
@@ -688,11 +688,11 @@
             // fallback
             status = U_ZERO_ERROR;
             ICUServiceKey* fallbackKey = createKey(&id, status);
-            while (fallbackKey != NULL && fallbackKey->fallback()) {
+            while (fallbackKey != nullptr && fallbackKey->fallback()) {
                 UnicodeString us;
                 fallbackKey->currentID(us);
                 f = (ICUServiceFactory*)map->get(us);
-                if (f != NULL) {
+                if (f != nullptr) {
                     f->getDisplayName(id, locale, result);
                     delete fallbackKey;
                     return result;
@@ -708,7 +708,7 @@
 UVector& 
 ICUService::getDisplayNames(UVector& result, UErrorCode& status) const 
 {
-    return getDisplayNames(result, Locale::getDefault(), NULL, status);
+    return getDisplayNames(result, Locale::getDefault(), nullptr, status);
 }
 
 
@@ -715,7 +715,7 @@
 UVector& 
 ICUService::getDisplayNames(UVector& result, const Locale& locale, UErrorCode& status) const 
 {
-    return getDisplayNames(result, locale, NULL, status);
+    return getDisplayNames(result, locale, nullptr, status);
 }
 
 UVector& 
@@ -730,25 +730,25 @@
         ICUService* ncthis = (ICUService*)this; // cast away semantic const
         Mutex mutex(&lock);
 
-        if (dnCache != NULL && dnCache->locale != locale) {
+        if (dnCache != nullptr && dnCache->locale != locale) {
             delete dnCache;
-            ncthis->dnCache = NULL;
+            ncthis->dnCache = nullptr;
         }
 
-        if (dnCache == NULL) {
+        if (dnCache == nullptr) {
             const Hashtable* m = getVisibleIDMap(status);
             if (U_FAILURE(status)) {
                 return result;
             }
             ncthis->dnCache = new DNCache(locale); 
-            if (dnCache == NULL) {
+            if (dnCache == nullptr) {
                 status = U_MEMORY_ALLOCATION_ERROR;
                 return result;
             }
 
             int32_t pos = UHASH_FIRST;
-            const UHashElement* entry = NULL;
-            while ((entry = m->nextElement(pos)) != NULL) {
+            const UHashElement* entry = nullptr;
+            while ((entry = m->nextElement(pos)) != nullptr) {
                 const UnicodeString* id = (const UnicodeString*)entry->key.pointer;
                 ICUServiceFactory* f = (ICUServiceFactory*)entry->value.pointer;
                 UnicodeString dname;
@@ -762,7 +762,7 @@
                     }
                 }
                 delete dnCache;
-                ncthis->dnCache = NULL;
+                ncthis->dnCache = nullptr;
                 return result;
             }
         }
@@ -774,10 +774,10 @@
      * at the next position, which in this case will be 0.
      */
     int32_t pos = UHASH_FIRST; 
-    const UHashElement *entry = NULL;
-    while ((entry = dnCache->cache.nextElement(pos)) != NULL) {
+    const UHashElement *entry = nullptr;
+    while ((entry = dnCache->cache.nextElement(pos)) != nullptr) {
         const UnicodeString* id = (const UnicodeString*)entry->value.pointer;
-        if (matchKey != NULL && !matchKey->isFallbackOf(*id)) {
+        if (matchKey != nullptr && !matchKey->isFallbackOf(*id)) {
             continue;
         }
         const UnicodeString* dn = (const UnicodeString*)entry->key.pointer;
@@ -803,18 +803,18 @@
 ICUService::registerInstance(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status) 
 {
     ICUServiceKey* key = createKey(&id, status);
-    if (key != NULL) {
+    if (key != nullptr) {
         UnicodeString canonicalID;
         key->canonicalID(canonicalID);
         delete key;
 
         ICUServiceFactory* f = createSimpleFactory(objToAdopt, canonicalID, visible, status);
-        if (f != NULL) {
+        if (f != nullptr) {
             return registerFactory(f, status);
         }
     }
     delete objToAdopt;
-    return NULL;
+    return nullptr;
 }
 
 ICUServiceFactory* 
@@ -821,12 +821,12 @@
 ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UBool visible, UErrorCode& status)
 {
     if (U_SUCCESS(status)) {
-        if ((objToAdopt != NULL) && (!id.isBogus())) {
+        if ((objToAdopt != nullptr) && (!id.isBogus())) {
             return new SimpleFactory(objToAdopt, id, visible);
         }
         status = U_ILLEGAL_ARGUMENT_ERROR;
     }
-    return NULL;
+    return nullptr;
 }
 
 URegistryKey
@@ -865,7 +865,7 @@
 {
     ICUServiceFactory *factory = (ICUServiceFactory*)rkey;
     UBool result = false;
-    if (factory != NULL && factories != NULL) {
+    if (factory != nullptr && factories != nullptr) {
         Mutex mutex(&lock);
 
         if (factories->removeElement(factory)) {
@@ -896,7 +896,7 @@
 void 
 ICUService::reInitializeFactories() 
 {
-    if (factories != NULL) {
+    if (factories != nullptr) {
         factories->removeAllElements();
     }
 }
@@ -910,7 +910,7 @@
 ICUServiceKey* 
 ICUService::createKey(const UnicodeString* id, UErrorCode& status) const 
 {
-    return (U_FAILURE(status) || id == NULL) ? NULL : new ICUServiceKey(*id);
+    return (U_FAILURE(status) || id == nullptr) ? nullptr : new ICUServiceKey(*id);
 }
 
 void 
@@ -919,10 +919,10 @@
     // callers synchronize before use
     ++timestamp;
     delete dnCache;
-    dnCache = NULL;
+    dnCache = nullptr;
     delete idCache;
-    idCache = NULL;
-    delete serviceCache; serviceCache = NULL;
+    idCache = nullptr;
+    delete serviceCache; serviceCache = nullptr;
 }
 
 void 
@@ -929,19 +929,19 @@
 ICUService::clearServiceCache() 
 {
     // callers synchronize before use
-    delete serviceCache; serviceCache = NULL;
+    delete serviceCache; serviceCache = nullptr;
 }
 
 UBool 
 ICUService::acceptsListener(const EventListener& l) const 
 {
-    return dynamic_cast<const ServiceListener*>(&l) != NULL;
+    return dynamic_cast<const ServiceListener*>(&l) != nullptr;
 }
 
 void 
 ICUService::notifyListener(EventListener& l) const 
 {
-    ((ServiceListener&)l).serviceChanged(*this);
+    (static_cast<ServiceListener&>(l)).serviceChanged(*this);
 }
 
 UnicodeString&
@@ -953,7 +953,7 @@
 int32_t 
 ICUService::countFactories() const 
 {
-    return factories == NULL ? 0 : factories->size();
+    return factories == nullptr ? 0 : factories->size();
 }
 
 int32_t

Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -74,7 +74,7 @@
   const UnicodeString _id;
 
  protected:
-  static const UChar PREFIX_DELIMITER;
+  static const char16_t PREFIX_DELIMITER;
 
  public:
 
@@ -217,7 +217,7 @@
 
     /**
      * <p>Create a service object from the key, if this factory
-     * supports the key.  Otherwise, return NULL.</p>
+     * supports the key.  Otherwise, return nullptr.</p>
      *
      * <p>If the factory supports the key, then it can call
      * the service's getKey(ICUServiceKey, String[], ICUServiceFactory) method
@@ -230,7 +230,7 @@
      * @param key the service key.
      * @param service the service with which this factory is registered.
      * @param status the error code status.
-     * @return the service object, or NULL if the factory does not support the key.
+     * @return the service object, or nullptr if the factory does not support the key.
      */
     virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const = 0;
 
@@ -292,7 +292,7 @@
   /**
    * <p>Construct a SimpleFactory that maps a single ID to a single 
    * service instance.  If visible is true, the ID will be visible.
-   * The instance must not be NULL.  The SimpleFactory will adopt
+   * The instance must not be nullptr.  The SimpleFactory will adopt
    * the instance, which must not be changed subsequent to this call.</p>
    *
    * @param instanceToAdopt the service instance to adopt.
@@ -313,7 +313,7 @@
    * @param key the service key.
    * @param service the service with which this factory is registered.
    * @param status the error code status.
-   * @return the service object, or NULL if the factory does not support the key.
+   * @return the service object, or nullptr if the factory does not support the key.
    */
   virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
 
@@ -420,7 +420,7 @@
    * @param displayName the displayName.
    * @param id the ID.
    * @param status the error code status.
-   * @return a StringPair if the creation was successful, otherwise NULL.
+   * @return a StringPair if the creation was successful, otherwise nullptr.
    */
   static StringPair* create(const UnicodeString& displayName, 
                             const UnicodeString& id,
@@ -593,7 +593,7 @@
      *
      * @param descriptor the descriptor.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     UObject* get(const UnicodeString& descriptor, UErrorCode& status) const;
 
@@ -602,9 +602,9 @@
      * createKey to create a key from the provided descriptor.</p>
      *
      * @param descriptor the descriptor.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
+     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or nullptr.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     UObject* get(const UnicodeString& descriptor, UnicodeString* actualReturn, UErrorCode& status) const;
 
@@ -613,15 +613,15 @@
      *
      * @param key the key.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     UObject* getKey(ICUServiceKey& key, UErrorCode& status) const;
 
     /**
      * <p>Given a key, return a service object, and, if actualReturn
-     * is not NULL, the descriptor with which it was found in the
+     * is not nullptr, the descriptor with which it was found in the
      * first element of actualReturn.  If no service object matches
-     * this key, returns NULL and leaves actualReturn unchanged.</p>
+     * this key, returns nullptr and leaves actualReturn unchanged.</p>
      *
      * <p>This queries the cache using the key's descriptor, and if no
      * object in the cache matches, tries the key on each
@@ -635,9 +635,9 @@
      * result before returning it.
      *
      * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
+     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or nullptr.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     virtual UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const;
 
@@ -648,10 +648,10 @@
      * should not call it directly, but call through one of the other get functions.</p>
      * 
      * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
+     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or nullptr.
      * @param factory the factory making the recursive call.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const;
 
@@ -677,11 +677,11 @@
      * new elements, if any, are added.</p>
      *
      * <p>matchID is passed to createKey to create a key.  If the key
-     * is not NULL, its isFallbackOf method is used to filter out IDs
+     * is not nullptr, its isFallbackOf method is used to filter out IDs
      * that don't match the key or have it as a fallback.</p>
      *
      * @param result a vector to hold the returned IDs.
-     * @param matchID an ID used to filter the result, or NULL if all IDs are desired.
+     * @param matchID an ID used to filter the result, or nullptr if all IDs are desired.
      * @param status the error code status.
      * @return the result vector.
      */
@@ -711,7 +711,7 @@
 
     /**
      * <p>Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that 
-     * uses the current default Locale as the locale and NULL for
+     * uses the current default Locale as the locale and nullptr for
      * the matchID.</p>
      *
      * @param result a vector to hold the returned displayName/id StringPairs.
@@ -722,7 +722,7 @@
 
     /**
      * <p>Convenience override of getDisplayNames(const Locale&, const UnicodeString*) that 
-     * uses NULL for the matchID.</p>
+     * uses nullptr for the matchID.</p>
      *
      * @param result a vector to hold the returned displayName/id StringPairs.
      * @param locale the locale in which to localize the ID.
@@ -746,12 +746,12 @@
      * discarded before new elements, if any, are added.</p>
      *
      * <p>matchID is passed to createKey to create a key.  If the key
-     * is not NULL, its isFallbackOf method is used to filter out IDs
+     * is not nullptr, its isFallbackOf method is used to filter out IDs
      * that don't match the key or have it as a fallback.</p>
      *
      * @param result a vector to hold the returned displayName/id StringPairs.
      * @param locale the locale in which to localize the ID.
-     * @param matchID an ID used to filter the result, or NULL if all IDs are desired.
+     * @param matchID an ID used to filter the result, or nullptr if all IDs are desired.
      * @param status the error code status.
      * @return the result vector.  */
     UVector& getDisplayNames(UVector& result,
@@ -830,7 +830,7 @@
      *
      * <p>This issues a serviceChanged notification to registered listeners.</p>
      */
-    virtual void reset(void);
+    virtual void reset();
 
     /**
      * <p>Return true if the service is in its default state.</p>
@@ -838,10 +838,10 @@
      * <p>The default implementation returns true if there are no 
      * factories registered.</p>
      */
-    virtual UBool isDefault(void) const;
+    virtual UBool isDefault() const;
 
     /**
-     * <p>Create a key from an ID.  If ID is NULL, returns NULL.</p>
+     * <p>Create a key from an ID.  If ID is nullptr, returns nullptr.</p>
      *
      * <p>The default implementation creates an ICUServiceKey instance.
      * Subclasses can override to define more useful keys appropriate
@@ -849,7 +849,7 @@
      *
      * @param a pointer to the ID for which to create a default ICUServiceKey.
      * @param status the error code status.
-     * @return the ICUServiceKey corresponding to ID, or NULL.
+     * @return the ICUServiceKey corresponding to ID, or nullptr.
      */
     virtual ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const;
 
@@ -859,7 +859,7 @@
      * This is public so factories can call it, but should really be protected.</p>
      *
      * @param instance the service instance to clone.
-     * @return a clone of the passed-in instance, or NULL if cloning was unsuccessful.
+     * @return a clone of the passed-in instance, or nullptr if cloning was unsuccessful.
      */
     virtual UObject* cloneInstance(UObject* instance) const = 0;
 
@@ -895,18 +895,18 @@
      * directly, since it must only be called while holding write
      * access to the factory list.</p>
      */
-    virtual void reInitializeFactories(void);
+    virtual void reInitializeFactories();
 
     /**
      * <p>Default handler for this service if no factory in the factory list
      * handled the key passed to getKey.</p>
      *
-     * <p>The default implementation returns NULL.</p>
+     * <p>The default implementation returns nullptr.</p>
      *
      * @param key the key.
-     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or NULL.
+     * @param actualReturn a pointer to a UnicodeString to hold the matched descriptor, or nullptr.
      * @param status the error code status.
-     * @return the service instance, or NULL.
+     * @return the service instance, or nullptr.
      */
     virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const;
 
@@ -918,7 +918,7 @@
      * should generally not call this method directly, as it must only
      * be called while synchronized on the factory lock.</p>
      */
-    virtual void clearCaches(void);
+    virtual void clearCaches();
 
     /**
      * <p>Return true if the listener is accepted.</p>
@@ -955,7 +955,7 @@
      * the resolution of IDs also changes, requiring the cache to be
      * flushed, but not the visible IDs themselves.</p>
      */
-    void clearServiceCache(void);
+    void clearServiceCache();
 
     /**
      * <p>Return a map from visible IDs to factories.
@@ -972,7 +972,7 @@
      *
      * @return the timestamp.
      */
-    int32_t getTimestamp(void) const;
+    int32_t getTimestamp() const;
 
     /**
      * <p>Return the number of registered factories.</p>
@@ -979,7 +979,7 @@
      *
      * @return the number of factories registered at the time of the call.
      */
-    int32_t countFactories(void) const;
+    int32_t countFactories() const;
 
 private:
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -21,9 +21,9 @@
 #include "charstr.h"
 #include "uassert.h"
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 U_NAMESPACE_BEGIN
 
@@ -41,8 +41,8 @@
                                        int32_t kind,
                                        UErrorCode& status)
 {
-    if (primaryID == NULL || U_FAILURE(status)) {
-        return NULL;
+    if (primaryID == nullptr || U_FAILURE(status)) {
+        return nullptr;
     }
     UnicodeString canonicalPrimaryID;
     LocaleUtility::canonicalLocaleString(primaryID, canonicalPrimaryID);
@@ -61,7 +61,7 @@
 {
     _fallbackID.setToBogus();
     if (_primaryID.length() != 0) {
-        if (canonicalFallbackID != NULL && _primaryID != *canonicalFallbackID) {
+        if (canonicalFallbackID != nullptr && _primaryID != *canonicalFallbackID) {
             _fallbackID = *canonicalFallbackID;
         }
     }
@@ -74,7 +74,7 @@
 UnicodeString&
 LocaleKey::prefix(UnicodeString& result) const {
     if (_kind != KIND_ANY) {
-        UChar buffer[64];
+        char16_t buffer[64];
         uprv_itou(buffer, 64, _kind, 10, 0);
         UnicodeString temp(buffer);
         result.append(temp);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -22,9 +22,9 @@
 #include "ucln_cmn.h"
 #include "uassert.h"
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 
 U_NAMESPACE_BEGIN
@@ -47,7 +47,7 @@
 UObject*
 LocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const {
     if (handlesKey(key, status)) {
-        const LocaleKey& lkey = (const LocaleKey&)key;
+        const LocaleKey& lkey = static_cast<const LocaleKey&>(key);
         int32_t kind = lkey.kind();
         Locale loc;
         lkey.currentLocale(loc);
@@ -54,7 +54,7 @@
 
         return handleCreate(loc, kind, service, status);
     }
-    return NULL;
+    return nullptr;
 }
 
 UBool
@@ -63,7 +63,7 @@
     if (supported) {
         UnicodeString id;
         key.currentID(id);
-        return supported->get(id) != NULL;
+        return supported->get(id) != nullptr;
     }
     return false;
 }
@@ -73,9 +73,9 @@
     const Hashtable* supported = getSupportedIDs(status);
     if (supported) {
         UBool visible = (_coverage & 0x1) == 0;
-        const UHashElement* elem = NULL;
+        const UHashElement* elem = nullptr;
         int32_t pos = UHASH_FIRST;
-        while ((elem = supported->nextElement(pos)) != NULL) {
+        while ((elem = supported->nextElement(pos)) != nullptr) {
             const UnicodeString& id = *((const UnicodeString*)elem->key.pointer);
             if (!visible) {
                 result.remove(id);
@@ -109,7 +109,7 @@
                    int32_t /* kind */, 
                    const ICUService* /* service */, 
                    UErrorCode& /* status */) const {
-    return NULL;
+    return nullptr;
 }
 
 //UBool
@@ -120,7 +120,7 @@
 
 const Hashtable*
 LocaleKeyFactory::getSupportedIDs(UErrorCode& /* status */) const {
-    return NULL;
+    return nullptr;
 }
 
 #ifdef SERVICE_DEBUG

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servloc.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servloc.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -258,7 +258,7 @@
 protected:
     /**
      * Utility method used by create(ICUServiceKey, ICUService).  Subclasses can implement
-     * this instead of create.  The default returns NULL.
+     * this instead of create.  The default returns nullptr.
      */
     virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const;
 
@@ -518,7 +518,7 @@
    * Convenience method for callers using locales.  This returns the standard
    * service ID enumeration.
    */
-  virtual StringEnumeration* getAvailableLocales(void) const;
+  virtual StringEnumeration* getAvailableLocales() const;
 
  protected:
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -20,9 +20,9 @@
 #include "charstr.h"
 #include "uassert.h"
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 U_NAMESPACE_BEGIN
 
@@ -44,13 +44,13 @@
 UObject*
 ICULocaleService::get(const Locale& locale, UErrorCode& status) const
 {
-    return get(locale, LocaleKey::KIND_ANY, NULL, status);
+    return get(locale, LocaleKey::KIND_ANY, nullptr, status);
 }
 
 UObject*
 ICULocaleService::get(const Locale& locale, int32_t kind, UErrorCode& status) const
 {
-    return get(locale, kind, NULL, status);
+    return get(locale, kind, nullptr, status);
 }
 
 UObject*
@@ -62,7 +62,7 @@
 UObject*
 ICULocaleService::get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const
 {
-    UObject* result = NULL;
+    UObject* result = nullptr;
     if (U_FAILURE(status)) {
         return result;
     }
@@ -73,13 +73,13 @@
     } else {
         ICUServiceKey* key = createKey(&locName, kind, status);
         if (key) {
-            if (actualReturn == NULL) {
+            if (actualReturn == nullptr) {
                 result = getKey(*key, status);
             } else {
                 UnicodeString temp;
                 result = getKey(*key, &temp, status);
 
-                if (result != NULL) {
+                if (result != nullptr) {
                     key->parseSuffix(temp);
                     LocaleUtility::initLocaleFromName(temp, *actualReturn);
                 }
@@ -117,11 +117,11 @@
 ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, int32_t coverage, UErrorCode& status)
 {
     ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage);
-    if (factory != NULL) {
+    if (factory != nullptr) {
         return registerFactory(factory, status);
     }
     delete objToAdopt;
-    return NULL;
+    return nullptr;
 }
 
 #if 0
@@ -143,11 +143,11 @@
 ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, int32_t kind, int32_t coverage, UErrorCode& status)
 {
     ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage);
-    if (factory != NULL) {
+    if (factory != nullptr) {
         return registerFactory(factory, status);
     }
     delete objToAdopt;
-    return NULL;
+    return nullptr;
 }
 #endif
 
@@ -162,7 +162,7 @@
     ServiceEnumeration(const ICULocaleService* service, UErrorCode &status)
         : _service(service)
         , _timestamp(service->getTimestamp())
-        , _ids(uprv_deleteUObject, NULL, status)
+        , _ids(uprv_deleteUObject, nullptr, status)
         , _pos(0)
     {
         _service->getVisibleIDs(_ids, status);
@@ -171,7 +171,7 @@
     ServiceEnumeration(const ServiceEnumeration &other, UErrorCode &status)
         : _service(other._service)
         , _timestamp(other._timestamp)
-        , _ids(uprv_deleteUObject, NULL, status)
+        , _ids(uprv_deleteUObject, nullptr, status)
         , _pos(0)
     {
         if(U_SUCCESS(status)) {
@@ -197,7 +197,7 @@
             return result;
         }
         delete result;
-        return NULL;
+        return nullptr;
     }
 
     virtual ~ServiceEnumeration();
@@ -207,7 +207,7 @@
         ServiceEnumeration *cl = new ServiceEnumeration(*this, status);
         if(U_FAILURE(status)) {
             delete cl;
-            cl = NULL;
+            cl = nullptr;
         }
         return cl;
     }
@@ -230,7 +230,7 @@
         if (upToDate(status) && (_pos < _ids.size())) {
             return (const UnicodeString*)_ids[_pos++];
         }
-        return NULL;
+        return nullptr;
     }
 
     virtual void reset(UErrorCode& status) override {
@@ -245,8 +245,8 @@
     }
 
 public:
-    static UClassID U_EXPORT2 getStaticClassID(void);
-    virtual UClassID getDynamicClassID(void) const override;
+    static UClassID U_EXPORT2 getStaticClassID();
+    virtual UClassID getDynamicClassID() const override;
 };
 
 ServiceEnumeration::~ServiceEnumeration() {}
@@ -254,7 +254,7 @@
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceEnumeration)
 
 StringEnumeration*
-ICULocaleService::getAvailableLocales(void) const
+ICULocaleService::getAvailableLocales() const
 {
     return ServiceEnumeration::create(this);
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -23,16 +23,16 @@
 
 static UMutex notifyLock;
 
-ICUNotifier::ICUNotifier(void) 
-: listeners(NULL) 
+ICUNotifier::ICUNotifier() 
+: listeners(nullptr) 
 {
 }
 
-ICUNotifier::~ICUNotifier(void) {
+ICUNotifier::~ICUNotifier() {
     {
         Mutex lmx(&notifyLock);
         delete listeners;
-        listeners = NULL;
+        listeners = nullptr;
     }
 }
 
@@ -41,7 +41,7 @@
 ICUNotifier::addListener(const EventListener* l, UErrorCode& status) 
 {
     if (U_SUCCESS(status)) {
-        if (l == NULL) {
+        if (l == nullptr) {
             status = U_ILLEGAL_ARGUMENT_ERROR;
             return;
         }
@@ -48,7 +48,7 @@
 
         if (acceptsListener(*l)) {
             Mutex lmx(&notifyLock);
-            if (listeners == NULL) {
+            if (listeners == nullptr) {
                 LocalPointer<UVector> lpListeners(new UVector(5, status), status);
                 if (U_FAILURE(status)) {
                     return;
@@ -78,7 +78,7 @@
 ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) 
 {
     if (U_SUCCESS(status)) {
-        if (l == NULL) {
+        if (l == nullptr) {
             status = U_ILLEGAL_ARGUMENT_ERROR;
             return;
         }
@@ -85,7 +85,7 @@
 
         {
             Mutex lmx(&notifyLock);
-            if (listeners != NULL) {
+            if (listeners != nullptr) {
                 // identity equality check
                 for (int i = 0, e = listeners->size(); i < e; ++i) {
                     const EventListener* el = (const EventListener*)listeners->elementAt(i);
@@ -93,7 +93,7 @@
                         listeners->removeElementAt(i);
                         if (listeners->size() == 0) {
                             delete listeners;
-                            listeners = NULL;
+                            listeners = nullptr;
                         }
                         return;
                     }
@@ -104,10 +104,10 @@
 }
 
 void 
-ICUNotifier::notifyChanged(void) 
+ICUNotifier::notifyChanged() 
 {
     Mutex lmx(&notifyLock);
-    if (listeners != NULL) {
+    if (listeners != nullptr) {
         for (int i = 0, e = listeners->size(); i < e; ++i) {
             EventListener* el = (EventListener*)listeners->elementAt(i);
             notifyListener(*el);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -75,9 +75,9 @@
 private: UVector* listeners;
          
 public: 
-    ICUNotifier(void);
+    ICUNotifier();
     
-    virtual ~ICUNotifier(void);
+    virtual ~ICUNotifier();
     
     /**
      * Add a listener to be notified when notifyChanged is called.
@@ -101,7 +101,7 @@
      * indefinitely block the calling thread.  Callers should beware of
      * deadlock situations.  
      */
-    virtual void notifyChanged(void);
+    virtual void notifyChanged();
     
 protected: 
     /**

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -22,9 +22,9 @@
 #include "ucln_cmn.h"
 #include "uassert.h"
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 U_NAMESPACE_BEGIN
 
@@ -48,7 +48,7 @@
     if (U_SUCCESS(status)) {
         return LocaleUtility::getAvailableLocaleNames(_bundleName);
     }
-    return NULL;
+    return nullptr;
 }
 
 UObject*
@@ -63,11 +63,11 @@
         int32_t length;
         length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV);
         if(length>=(int32_t)sizeof(pkg)) {
-            return NULL;
+            return nullptr;
         }
         return new ResourceBundle(pkg, loc, status);
     }
-    return NULL;
+    return nullptr;
 }
 
 #ifdef SERVICE_DEBUG

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -21,9 +21,9 @@
 #include "charstr.h"
 #include "uassert.h"
 
-#define UNDERSCORE_CHAR ((UChar)0x005f)
-#define AT_SIGN_CHAR    ((UChar)64)
-#define PERIOD_CHAR     ((UChar)46)
+#define UNDERSCORE_CHAR ((char16_t)0x005f)
+#define AT_SIGN_CHAR    ((char16_t)64)
+#define PERIOD_CHAR     ((char16_t)46)
 
 U_NAMESPACE_BEGIN
 
@@ -57,7 +57,7 @@
 SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
 {
   delete _obj;
-  _obj = NULL;
+  _obj = nullptr;
 }
 
 UObject*
@@ -64,7 +64,7 @@
 SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
 {
     if (U_SUCCESS(status)) {
-        const LocaleKey& lkey = (const LocaleKey&)key;
+        const LocaleKey& lkey = static_cast<const LocaleKey&>(key);
         if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) {
             UnicodeString keyID;
             lkey.currentID(keyID);
@@ -73,7 +73,7 @@
             }
         }
     }
-    return NULL;
+    return nullptr;
 }
 
 //UBool

Modified: trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -57,7 +57,7 @@
     SharedObject() :
             softRefCount(0),
             hardRefCount(0),
-            cachePtr(NULL) {}
+            cachePtr(nullptr) {}
 
     /** Initializes totalRefCount, softRefCount to 0. */
     SharedObject(const SharedObject &other) :
@@ -64,7 +64,7 @@
             UObject(other),
             softRefCount(0),
             hardRefCount(0),
-            cachePtr(NULL) {}
+            cachePtr(nullptr) {}
 
     virtual ~SharedObject();
 
@@ -116,7 +116,7 @@
      * If there are multiple owners, then ptr is replaced with a 
      * copy-constructed clone,
      * and that is returned.
-     * Returns NULL if cloning failed.
+     * Returns nullptr if cloning failed.
      *
      * T must be a subclass of SharedObject.
      */
@@ -125,7 +125,7 @@
         const T *p = ptr;
         if(p->getRefCount() <= 1) { return const_cast<T *>(p); }
         T *p2 = new T(*p);
-        if(p2 == NULL) { return NULL; }
+        if(p2 == nullptr) { return nullptr; }
         p->removeRef();
         ptr = p2;
         p2->addRef();
@@ -135,7 +135,7 @@
     /**
      * Makes dest an owner of the object pointed to by src while adjusting
      * reference counts and deleting the previous object dest pointed to
-     * if necessary. Before this call is made, dest must either be NULL or
+     * if necessary. Before this call is made, dest must either be nullptr or
      * be included in the reference count of the object it points to. 
      *
      * T must be a subclass of SharedObject.
@@ -143,20 +143,20 @@
     template<typename T>
     static void copyPtr(const T *src, const T *&dest) {
         if(src != dest) {
-            if(dest != NULL) { dest->removeRef(); }
+            if(dest != nullptr) { dest->removeRef(); }
             dest = src;
-            if(src != NULL) { src->addRef(); }
+            if(src != nullptr) { src->addRef(); }
         }
     }
 
     /**
-     * Equivalent to copyPtr(NULL, dest).
+     * Equivalent to copyPtr(nullptr, dest).
      */
     template<typename T>
     static void clearPtr(const T *&ptr) {
-        if (ptr != NULL) {
+        if (ptr != nullptr) {
             ptr->removeRef();
-            ptr = NULL;
+            ptr = nullptr;
         }
     }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -25,11 +25,11 @@
  */
 const int32_t ARG_NUM_LIMIT = 0x100;
 /**
- * Initial and maximum char/UChar value set for a text segment.
+ * Initial and maximum char/char16_t value set for a text segment.
  * Segment length char values are from ARG_NUM_LIMIT+1 to this value here.
  * Normally 0xffff, but can be as small as ARG_NUM_LIMIT+1 for testing.
  */
-const UChar SEGMENT_LENGTH_PLACEHOLDER_CHAR = 0xffff;
+const char16_t SEGMENT_LENGTH_PLACEHOLDER_CHAR = 0xffff;
 /**
  * Maximum length of a text segment. Longer segments are split into shorter ones.
  */
@@ -45,7 +45,7 @@
 };
 
 inline UBool isInvalidArray(const void *array, int32_t length) {
-   return (length < 0 || (array == NULL && length != 0));
+   return (length < 0 || (array == nullptr && length != 0));
 }
 
 }  // namespace
@@ -70,15 +70,15 @@
     // Parse consistent with MessagePattern, but
     // - support only simple numbered arguments
     // - build a simple binary structure into the result string
-    const UChar *patternBuffer = pattern.getBuffer();
+    const char16_t *patternBuffer = pattern.getBuffer();
     int32_t patternLength = pattern.length();
     // Reserve the first char for the number of arguments.
-    compiledPattern.setTo((UChar)0);
+    compiledPattern.setTo((char16_t)0);
     int32_t textLength = 0;
     int32_t maxArg = -1;
     UBool inQuote = false;
     for (int32_t i = 0; i < patternLength;) {
-        UChar c = patternBuffer[i++];
+        char16_t c = patternBuffer[i++];
         if (c == APOS) {
             if (i < patternLength && (c = patternBuffer[i]) == APOS) {
                 // double apostrophe, skip the second one
@@ -98,7 +98,7 @@
         } else if (!inQuote && c == OPEN_BRACE) {
             if (textLength > 0) {
                 compiledPattern.setCharAt(compiledPattern.length() - textLength - 1,
-                                          (UChar)(ARG_NUM_LIMIT + textLength));
+                                          (char16_t)(ARG_NUM_LIMIT + textLength));
                 textLength = 0;
             }
             int32_t argNumber;
@@ -129,7 +129,7 @@
             if (argNumber > maxArg) {
                 maxArg = argNumber;
             }
-            compiledPattern.append((UChar)argNumber);
+            compiledPattern.append((char16_t)argNumber);
             continue;
         }  // else: c is part of literal text
         // Append c and track the literal-text segment length.
@@ -144,7 +144,7 @@
     }
     if (textLength > 0) {
         compiledPattern.setCharAt(compiledPattern.length() - textLength - 1,
-                                  (UChar)(ARG_NUM_LIMIT + textLength));
+                                  (char16_t)(ARG_NUM_LIMIT + textLength));
     }
     int32_t argCount = maxArg + 1;
     if (argCount < min || max < argCount) {
@@ -151,7 +151,7 @@
         errorCode = U_ILLEGAL_ARGUMENT_ERROR;
         return false;
     }
-    compiledPattern.setCharAt(0, (UChar)argCount);
+    compiledPattern.setCharAt(0, (char16_t)argCount);
     return true;
 }
 
@@ -159,7 +159,7 @@
         const UnicodeString &value0,
         UnicodeString &appendTo, UErrorCode &errorCode) const {
     const UnicodeString *values[] = { &value0 };
-    return formatAndAppend(values, 1, appendTo, NULL, 0, errorCode);
+    return formatAndAppend(values, 1, appendTo, nullptr, 0, errorCode);
 }
 
 UnicodeString& SimpleFormatter::format(
@@ -167,7 +167,7 @@
         const UnicodeString &value1,
         UnicodeString &appendTo, UErrorCode &errorCode) const {
     const UnicodeString *values[] = { &value0, &value1 };
-    return formatAndAppend(values, 2, appendTo, NULL, 0, errorCode);
+    return formatAndAppend(values, 2, appendTo, nullptr, 0, errorCode);
 }
 
 UnicodeString& SimpleFormatter::format(
@@ -176,7 +176,7 @@
         const UnicodeString &value2,
         UnicodeString &appendTo, UErrorCode &errorCode) const {
     const UnicodeString *values[] = { &value0, &value1, &value2 };
-    return formatAndAppend(values, 3, appendTo, NULL, 0, errorCode);
+    return formatAndAppend(values, 3, appendTo, nullptr, 0, errorCode);
 }
 
 UnicodeString& SimpleFormatter::formatAndAppend(
@@ -192,7 +192,7 @@
         return appendTo;
     }
     return format(compiledPattern.getBuffer(), compiledPattern.length(), values,
-                  appendTo, NULL, true,
+                  appendTo, nullptr, true,
                   offsets, offsetsLength, errorCode);
 }
 
@@ -207,7 +207,7 @@
         errorCode = U_ILLEGAL_ARGUMENT_ERROR;
         return result;
     }
-    const UChar *cp = compiledPattern.getBuffer();
+    const char16_t *cp = compiledPattern.getBuffer();
     int32_t cpLength = compiledPattern.length();
     if (valuesLength < getArgumentLimit(cp, cpLength)) {
         errorCode = U_ILLEGAL_ARGUMENT_ERROR;
@@ -246,7 +246,7 @@
 }
 
 UnicodeString SimpleFormatter::getTextWithNoArguments(
-        const UChar *compiledPattern,
+        const char16_t *compiledPattern,
         int32_t compiledPatternLength,
         int32_t* offsets,
         int32_t offsetsLength) {
@@ -272,7 +272,7 @@
 }
 
 UnicodeString &SimpleFormatter::format(
-        const UChar *compiledPattern, int32_t compiledPatternLength,
+        const char16_t *compiledPattern, int32_t compiledPatternLength,
         const UnicodeString *const *values,
         UnicodeString &result, const UnicodeString *resultCopy, UBool forbidResultAsValue,
         int32_t *offsets, int32_t offsetsLength,
@@ -287,7 +287,7 @@
         int32_t n = compiledPattern[i++];
         if (n < ARG_NUM_LIMIT) {
             const UnicodeString *value = values[n];
-            if (value == NULL) {
+            if (value == nullptr) {
                 errorCode = U_ILLEGAL_ARGUMENT_ERROR;
                 return result;
             }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/sources.txt
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/sources.txt	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/sources.txt	2023-12-22 17:28:50 UTC (rev 69195)
@@ -43,6 +43,7 @@
 lsr.cpp
 lstmbe.cpp
 messagepattern.cpp
+mlbe.cpp
 normalizer2.cpp
 normalizer2impl.cpp
 normlzr.cpp
@@ -138,6 +139,8 @@
 uloc.cpp
 uloc_keytype.cpp
 uloc_tag.cpp
+ulocale.cpp
+ulocbuilder.cpp
 umapfile.cpp
 umath.cpp
 umutablecptrie.cpp

Modified: trunk/Build/source/libs/icu/icu-src/source/common/static_unicode_sets.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/static_unicode_sets.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/static_unicode_sets.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -72,7 +72,7 @@
 
 class ParseDataSink : public ResourceSink {
   public:
-    void put(const char* key, ResourceValue& value, UBool /*noFallback*/, UErrorCode& status) U_OVERRIDE {
+    void put(const char* key, ResourceValue& value, UBool /*noFallback*/, UErrorCode& status) override {
         ResourceTable contextsTable = value.getTable(status);
         if (U_FAILURE(status)) { return; }
         for (int i = 0; contextsTable.getKeyAndValue(i, key, value); i++) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -16,7 +16,7 @@
 U_NAMESPACE_BEGIN
 
 StringPiece::StringPiece(const char* str)
-    : ptr_(str), length_((str == NULL) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
+    : ptr_(str), length_((str == nullptr) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
 
 StringPiece::StringPiece(const StringPiece& x, int32_t pos) {
   if (pos < 0) {
@@ -45,7 +45,7 @@
 
 void StringPiece::set(const char* str) {
   ptr_ = str;
-  if (str != NULL)
+  if (str != nullptr)
     length_ = static_cast<int32_t>(uprv_strlen(str));
   else
     length_ = 0;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -36,7 +36,7 @@
 
 U_NAMESPACE_BEGIN
 
-StringTrieBuilder::StringTrieBuilder() : nodes(NULL) {}
+StringTrieBuilder::StringTrieBuilder() : nodes(nullptr) {}
 
 StringTrieBuilder::~StringTrieBuilder() {
     deleteCompactBuilder();
@@ -47,10 +47,10 @@
     if(U_FAILURE(errorCode)) {
         return;
     }
-    nodes=uhash_openSize(hashStringTrieNode, equalStringTrieNodes, NULL,
+    nodes=uhash_openSize(hashStringTrieNode, equalStringTrieNodes, nullptr,
                          sizeGuess, &errorCode);
     if(U_SUCCESS(errorCode)) {
-        if(nodes==NULL) {
+        if(nodes==nullptr) {
           errorCode=U_MEMORY_ALLOCATION_ERROR;
         } else {
           uhash_setKeyDeleter(nodes, uprv_deleteUObject);
@@ -61,7 +61,7 @@
 void
 StringTrieBuilder::deleteCompactBuilder() {
     uhash_close(nodes);
-    nodes=NULL;
+    nodes=nullptr;
 }
 
 void
@@ -133,7 +133,7 @@
 // length different units at unitIndex
 int32_t
 StringTrieBuilder::writeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex, int32_t length) {
-    UChar middleUnits[kMaxSplitBranchLevels];
+    char16_t middleUnits[kMaxSplitBranchLevels];
     int32_t lessThan[kMaxSplitBranchLevels];
     int32_t ltLength=0;
     while(length>getMaxBranchLinearSubNodeLength()) {
@@ -154,7 +154,7 @@
     int32_t unitNumber=0;
     do {
         int32_t i=starts[unitNumber]=start;
-        UChar unit=getElementUnit(i++, unitIndex);
+        char16_t unit=getElementUnit(i++, unitIndex);
         i=indexOfElementWithNextUnit(i, unitIndex, unit);
         isFinal[unitNumber]= start==i-1 && unitIndex+1==getElementStringLength(start);
         start=i;
@@ -207,7 +207,7 @@
 StringTrieBuilder::Node *
 StringTrieBuilder::makeNode(int32_t start, int32_t limit, int32_t unitIndex, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     UBool hasValue=false;
     int32_t value=0;
@@ -244,7 +244,7 @@
         Node *subNode=makeBranchSubNode(start, limit, unitIndex, length, errorCode);
         node=new BranchHeadNode(length, subNode);
     }
-    if(hasValue && node!=NULL) {
+    if(hasValue && node!=nullptr) {
         if(matchNodesCanHaveValues()) {
             ((ValueNode *)node)->setValue(value);
         } else {
@@ -260,9 +260,9 @@
 StringTrieBuilder::makeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex,
                                    int32_t length, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
-    UChar middleUnits[kMaxSplitBranchLevels];
+    char16_t middleUnits[kMaxSplitBranchLevels];
     Node *lessThan[kMaxSplitBranchLevels];
     int32_t ltLength=0;
     while(length>getMaxBranchLinearSubNodeLength()) {
@@ -278,18 +278,18 @@
         length=length-length/2;
     }
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     ListBranchNode *listNode=new ListBranchNode();
-    if(listNode==NULL) {
+    if(listNode==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     // For each unit, find its elements array start and whether it has a final value.
     int32_t unitNumber=0;
     do {
         int32_t i=start;
-        UChar unit=getElementUnit(i++, unitIndex);
+        char16_t unit=getElementUnit(i++, unitIndex);
         i=indexOfElementWithNextUnit(i, unitIndex, unit);
         if(start==i-1 && unitIndex+1==getElementStringLength(start)) {
             listNode->add(unit, getElementValue(start));
@@ -299,7 +299,7 @@
         start=i;
     } while(++unitNumber<length-1);
     // unitNumber==length-1, and the maxUnit elements range is [start..limit[
-    UChar unit=getElementUnit(start, unitIndex);
+    char16_t unit=getElementUnit(start, unitIndex);
     if(start==limit-1 && unitIndex+1==getElementStringLength(start)) {
         listNode->add(unit, getElementValue(start));
     } else {
@@ -319,14 +319,14 @@
 StringTrieBuilder::registerNode(Node *newNode, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
         delete newNode;
-        return NULL;
+        return nullptr;
     }
-    if(newNode==NULL) {
+    if(newNode==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     const UHashElement *old=uhash_find(nodes, newNode);
-    if(old!=NULL) {
+    if(old!=nullptr) {
         delete newNode;
         return (Node *)old->key.pointer;
     }
@@ -339,7 +339,7 @@
     U_ASSERT(oldValue==0);
     if(U_FAILURE(errorCode)) {
         delete newNode;
-        return NULL;
+        return nullptr;
     }
     return newNode;
 }
@@ -347,17 +347,17 @@
 StringTrieBuilder::Node *
 StringTrieBuilder::registerFinalValue(int32_t value, UErrorCode &errorCode) {
     if(U_FAILURE(errorCode)) {
-        return NULL;
+        return nullptr;
     }
     FinalValueNode key(value);
     const UHashElement *old=uhash_find(nodes, &key);
-    if(old!=NULL) {
+    if(old!=nullptr) {
         return (Node *)old->key.pointer;
     }
     Node *newNode=new FinalValueNode(value);
-    if(newNode==NULL) {
+    if(newNode==nullptr) {
         errorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
     // If uhash_puti() returns a non-zero value from an equivalent, previously
     // registered node, then uhash_find() failed to find that and we will leak newNode.
@@ -368,7 +368,7 @@
     U_ASSERT(oldValue==0);
     if(U_FAILURE(errorCode)) {
         delete newNode;
-        return NULL;
+        return nullptr;
     }
     return newNode;
 }
@@ -404,7 +404,7 @@
     if(!Node::operator==(other)) {
         return false;
     }
-    const FinalValueNode &o=(const FinalValueNode &)other;
+    const FinalValueNode &o=static_cast<const FinalValueNode &>(other);
     return value==o.value;
 }
 
@@ -421,7 +421,7 @@
     if(!Node::operator==(other)) {
         return false;
     }
-    const ValueNode &o=(const ValueNode &)other;
+    const ValueNode &o=static_cast<const ValueNode &>(other);
     return hasValue==o.hasValue && (!hasValue || value==o.value);
 }
 
@@ -433,7 +433,7 @@
     if(!ValueNode::operator==(other)) {
         return false;
     }
-    const IntermediateValueNode &o=(const IntermediateValueNode &)other;
+    const IntermediateValueNode &o=static_cast<const IntermediateValueNode &>(other);
     return next==o.next;
 }
 
@@ -459,7 +459,7 @@
     if(!ValueNode::operator==(other)) {
         return false;
     }
-    const LinearMatchNode &o=(const LinearMatchNode &)other;
+    const LinearMatchNode &o=static_cast<const LinearMatchNode &>(other);
     return length==o.length && next==o.next;
 }
 
@@ -479,7 +479,7 @@
     if(!Node::operator==(other)) {
         return false;
     }
-    const ListBranchNode &o=(const ListBranchNode &)other;
+    const ListBranchNode &o=static_cast<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;
@@ -496,7 +496,7 @@
         int32_t i=length;
         do {
             Node *edge=equal[--i];
-            if(edge!=NULL) {
+            if(edge!=nullptr) {
                 edgeNumber=edge->markRightEdgesFirst(edgeNumber-step);
             }
             // For all but the rightmost edge, decrement the edge number.
@@ -515,10 +515,10 @@
     // Instead we write the minUnit sub-node last, for a shorter delta.
     int32_t unitNumber=length-1;
     Node *rightEdge=equal[unitNumber];
-    int32_t rightEdgeNumber= rightEdge==NULL ? firstEdgeNumber : rightEdge->getOffset();
+    int32_t rightEdgeNumber= rightEdge==nullptr ? firstEdgeNumber : rightEdge->getOffset();
     do {
         --unitNumber;
-        if(equal[unitNumber]!=NULL) {
+        if(equal[unitNumber]!=nullptr) {
             equal[unitNumber]->writeUnlessInsideRightEdge(firstEdgeNumber, rightEdgeNumber, builder);
         }
     } while(unitNumber>0);
@@ -525,7 +525,7 @@
     // The maxUnit sub-node is written as the very last one because we do
     // not jump for it at all.
     unitNumber=length-1;
-    if(rightEdge==NULL) {
+    if(rightEdge==nullptr) {
         builder.writeValueAndFinal(values[unitNumber], true);
     } else {
         rightEdge->write(builder);
@@ -535,7 +535,7 @@
     while(--unitNumber>=0) {
         int32_t value;
         UBool isFinal;
-        if(equal[unitNumber]==NULL) {
+        if(equal[unitNumber]==nullptr) {
             // Write the final value for the one string ending with this unit.
             value=values[unitNumber];
             isFinal=true;
@@ -558,7 +558,7 @@
     if(!Node::operator==(other)) {
         return false;
     }
-    const SplitBranchNode &o=(const SplitBranchNode &)other;
+    const SplitBranchNode &o=static_cast<const SplitBranchNode &>(other);
     return unit==o.unit && lessThan==o.lessThan && greaterOrEqual==o.greaterOrEqual;
 }
 
@@ -592,7 +592,7 @@
     if(!ValueNode::operator==(other)) {
         return false;
     }
-    const BranchHeadNode &o=(const BranchHeadNode &)other;
+    const BranchHeadNode &o=static_cast<const BranchHeadNode &>(other);
     return length==o.length && next==o.next;
 }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -256,10 +256,10 @@
 uprv_sortArray(void *array, int32_t length, int32_t itemSize,
                UComparator *cmp, const void *context,
                UBool sortStable, UErrorCode *pErrorCode) {
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return;
     }
-    if((length>0 && array==NULL) || length<0 || itemSize<=0 || cmp==NULL) {
+    if((length>0 && array==nullptr) || length<0 || itemSize<=0 || cmp==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -34,14 +34,14 @@
  * rules of the BiDi algorithm, in this example to the second rule of the
  * resolution of weak types.
  *
- * For handling surrogate pairs, where two UChar's form one "abstract" (or UTF-32)
- * character according to UTF-16, the second UChar gets the directional property of
+ * For handling surrogate pairs, where two char16_t's form one "abstract" (or UTF-32)
+ * character according to UTF-16, the second char16_t gets the directional property of
  * the entire character assigned, while the first one gets a BN, a boundary
  * neutral, type, which is ignored by most of the algorithm according to
  * rule (X9) and the implementation suggestions of the BiDi algorithm.
  *
  * Later, adjustWSLevels() will set the level for each BN to that of the
- * following character (UChar), which results in surrogate pairs getting the
+ * following character (char16_t), which results in surrogate pairs getting the
  * same level on each of their surrogates.
  *
  * In a UTF-8 implementation, the same thing could be done: the last byte of
@@ -124,7 +124,7 @@
 /* UBiDi object management -------------------------------------------------- */
 
 U_CAPI UBiDi * U_EXPORT2
-ubidi_open(void)
+ubidi_open()
 {
     UErrorCode errorCode=U_ZERO_ERROR;
     return ubidi_openSized(0, 0, &errorCode);
@@ -135,21 +135,21 @@
     UBiDi *pBiDi;
 
     /* check the argument values */
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
-        return NULL;
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
+        return nullptr;
     } else if(maxLength<0 || maxRunCount<0) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;    /* invalid arguments */
+        return nullptr;    /* invalid arguments */
     }
 
     /* allocate memory for the object */
     pBiDi=(UBiDi *)uprv_malloc(sizeof(UBiDi));
-    if(pBiDi==NULL) {
+    if(pBiDi==nullptr) {
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
 
-    /* reset the object, all pointers NULL, all flags false, all sizes 0 */
+    /* reset the object, all pointers nullptr, all flags false, all sizes 0 */
     uprv_memset(pBiDi, 0, sizeof(UBiDi));
 
     /* allocate memory for arrays as requested */
@@ -178,18 +178,18 @@
         return pBiDi;
     } else {
         ubidi_close(pBiDi);
-        return NULL;
+        return nullptr;
     }
 }
 
 /*
- * We are allowed to allocate memory if memory==NULL or
+ * We are allowed to allocate memory if memory==nullptr or
  * mayAllocate==true for each array that we need.
  * We also try to grow memory as needed if we
  * allocate it.
  *
  * Assume sizeNeeded>0.
- * If *pMemory!=NULL, then assume *pSize>0.
+ * If *pMemory!=nullptr, then assume *pSize>0.
  *
  * ### this realloc() may unnecessarily copy the old data,
  * which we know we don't need any more;
@@ -199,9 +199,9 @@
 ubidi_getMemory(BidiMemoryForAllocation *bidiMem, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded) {
     void **pMemory = (void **)bidiMem;
     /* check for existing memory */
-    if(*pMemory==NULL) {
+    if(*pMemory==nullptr) {
         /* we need to allocate memory */
-        if(mayAllocate && (*pMemory=uprv_malloc(sizeNeeded))!=NULL) {
+        if(mayAllocate && (*pMemory=uprv_malloc(sizeNeeded))!=nullptr) {
             *pSize=sizeNeeded;
             return true;
         } else {
@@ -222,7 +222,7 @@
              * realloc, but it is needed when adding runs using getRunsMemory()
              * in setParaRunsOnly()
              */
-            if((memory=uprv_realloc(*pMemory, sizeNeeded))!=NULL) {
+            if((memory=uprv_realloc(*pMemory, sizeNeeded))!=nullptr) {
                 *pMemory=memory;
                 *pSize=sizeNeeded;
                 return true;
@@ -236,27 +236,27 @@
 
 U_CAPI void U_EXPORT2
 ubidi_close(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
-        pBiDi->pParaBiDi=NULL;          /* in case one tries to reuse this block */
-        if(pBiDi->dirPropsMemory!=NULL) {
+    if(pBiDi!=nullptr) {
+        pBiDi->pParaBiDi=nullptr;          /* in case one tries to reuse this block */
+        if(pBiDi->dirPropsMemory!=nullptr) {
             uprv_free(pBiDi->dirPropsMemory);
         }
-        if(pBiDi->levelsMemory!=NULL) {
+        if(pBiDi->levelsMemory!=nullptr) {
             uprv_free(pBiDi->levelsMemory);
         }
-        if(pBiDi->openingsMemory!=NULL) {
+        if(pBiDi->openingsMemory!=nullptr) {
             uprv_free(pBiDi->openingsMemory);
         }
-        if(pBiDi->parasMemory!=NULL) {
+        if(pBiDi->parasMemory!=nullptr) {
             uprv_free(pBiDi->parasMemory);
         }
-        if(pBiDi->runsMemory!=NULL) {
+        if(pBiDi->runsMemory!=nullptr) {
             uprv_free(pBiDi->runsMemory);
         }
-        if(pBiDi->isolatesMemory!=NULL) {
+        if(pBiDi->isolatesMemory!=nullptr) {
             uprv_free(pBiDi->isolatesMemory);
         }
-        if(pBiDi->insertPoints.points!=NULL) {
+        if(pBiDi->insertPoints.points!=nullptr) {
             uprv_free(pBiDi->insertPoints.points);
         }
 
@@ -268,7 +268,7 @@
 
 U_CAPI void U_EXPORT2
 ubidi_setInverse(UBiDi *pBiDi, UBool isInverse) {
-    if(pBiDi!=NULL) {
+    if(pBiDi!=nullptr) {
         pBiDi->isInverse=isInverse;
         pBiDi->reorderingMode = isInverse ? UBIDI_REORDER_INVERSE_NUMBERS_AS_L
                                           : UBIDI_REORDER_DEFAULT;
@@ -277,7 +277,7 @@
 
 U_CAPI UBool U_EXPORT2
 ubidi_isInverse(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
+    if(pBiDi!=nullptr) {
         return pBiDi->isInverse;
     } else {
         return false;
@@ -300,8 +300,8 @@
  * fallbacks for unsupported combinations.
  */
 U_CAPI void U_EXPORT2
-ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) {
-    if ((pBiDi!=NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
+ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) UPRV_NO_SANITIZE_UNDEFINED {
+    if ((pBiDi!=nullptr) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
                         && (reorderingMode < UBIDI_REORDER_COUNT)) {
         pBiDi->reorderingMode = reorderingMode;
         pBiDi->isInverse = (UBool)(reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L);
@@ -310,7 +310,7 @@
 
 U_CAPI UBiDiReorderingMode U_EXPORT2
 ubidi_getReorderingMode(UBiDi *pBiDi) {
-    if (pBiDi!=NULL) {
+    if (pBiDi!=nullptr) {
         return pBiDi->reorderingMode;
     } else {
         return UBIDI_REORDER_DEFAULT;
@@ -322,7 +322,7 @@
     if (reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
         reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
     }
-    if (pBiDi!=NULL) {
+    if (pBiDi!=nullptr) {
         pBiDi->reorderingOptions=reorderingOptions;
     }
 }
@@ -329,7 +329,7 @@
 
 U_CAPI uint32_t U_EXPORT2
 ubidi_getReorderingOptions(UBiDi *pBiDi) {
-    if (pBiDi!=NULL) {
+    if (pBiDi!=nullptr) {
         return pBiDi->reorderingOptions;
     } else {
         return 0;
@@ -337,7 +337,7 @@
 }
 
 U_CAPI UBiDiDirection U_EXPORT2
-ubidi_getBaseDirection(const UChar *text,
+ubidi_getBaseDirection(const char16_t *text,
 int32_t length){
 
     int32_t i;
@@ -344,7 +344,7 @@
     UChar32 uchar;
     UCharDirection dir;
 
-    if( text==NULL || length<-1 ){
+    if( text==nullptr || length<-1 ){
         return UBIDI_NEUTRAL;
     }
 
@@ -373,7 +373,7 @@
  */
 static DirProp
 firstL_R_AL(UBiDi *pBiDi) {
-    const UChar *text=pBiDi->prologue;
+    const char16_t *text=pBiDi->prologue;
     int32_t length=pBiDi->proLength;
     int32_t i;
     UChar32 uchar;
@@ -426,7 +426,7 @@
  */
 static UBool
 getDirProps(UBiDi *pBiDi) {
-    const UChar *text=pBiDi->text;
+    const char16_t *text=pBiDi->text;
     DirProp *dirProps=pBiDi->dirPropsMemory;    /* pBiDi->dirProps is const */
 
     int32_t i=0, originalLength=pBiDi->originalLength;
@@ -744,7 +744,7 @@
 
 /* newly found opening bracket: create an openings entry */
 static UBool                            /* return true if success */
-bracketAddOpening(BracketData *bd, UChar match, int32_t position) {
+bracketAddOpening(BracketData *bd, char16_t match, int32_t position) {
     IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast];
     Opening *pOpening;
     if(pLastIsoRun->limit>=bd->openingsCount) {  /* no available new entry */
@@ -881,7 +881,7 @@
     dirProps=bd->pBiDi->dirProps;
     dirProp=dirProps[position];
     if(dirProp==ON) {
-        UChar c, match;
+        char16_t c, match;
         int32_t idx;
         /* First see if it is a matching closing bracket. Hopefully, this is
            more efficient than checking if it is a closing bracket at all */
@@ -918,7 +918,7 @@
            bracket or it is a case of N0d */
         /* Now see if it is an opening bracket */
         if(c)
-            match= static_cast<UChar>(u_getBidiPairedBracket(c));    /* get the matching char */
+            match= static_cast<char16_t>(u_getBidiPairedBracket(c));    /* get the matching char */
         else
             match=0;
         if(match!=c &&                  /* has a matching char */
@@ -1072,7 +1072,7 @@
 resolveExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
     DirProp *dirProps=pBiDi->dirProps;
     UBiDiLevel *levels=pBiDi->levels;
-    const UChar *text=pBiDi->text;
+    const char16_t *text=pBiDi->text;
 
     int32_t i=0, length=pBiDi->length;
     Flags flags=pBiDi->flags;       /* collect all directionalities in the text */
@@ -1797,7 +1797,7 @@
     if (pInsertPoints->capacity == 0)
     {
         pInsertPoints->points=static_cast<Point *>(uprv_malloc(sizeof(Point)*FIRSTALLOC));
-        if (pInsertPoints->points == NULL)
+        if (pInsertPoints->points == nullptr)
         {
             pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR;
             return;
@@ -1809,7 +1809,7 @@
         Point * savePoints=pInsertPoints->points;
         pInsertPoints->points=static_cast<Point *>(uprv_realloc(pInsertPoints->points,
                                            pInsertPoints->capacity*2*sizeof(Point)));
-        if (pInsertPoints->points == NULL)
+        if (pInsertPoints->points == nullptr)
         {
             pInsertPoints->points=savePoints;
             pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR;
@@ -2068,7 +2068,7 @@
  */
 static DirProp
 lastL_R_AL(UBiDi *pBiDi) {
-    const UChar *text=pBiDi->prologue;
+    const char16_t *text=pBiDi->prologue;
     int32_t length=pBiDi->proLength;
     int32_t i;
     UChar32 uchar;
@@ -2096,7 +2096,7 @@
  */
 static DirProp
 firstL_R_AL_EN_AN(UBiDi *pBiDi) {
-    const UChar *text=pBiDi->epilogue;
+    const char16_t *text=pBiDi->epilogue;
     int32_t length=pBiDi->epiLength;
     int32_t i;
     UChar32 uchar;
@@ -2326,13 +2326,13 @@
 
 U_CAPI void U_EXPORT2
 ubidi_setContext(UBiDi *pBiDi,
-                 const UChar *prologue, int32_t proLength,
-                 const UChar *epilogue, int32_t epiLength,
+                 const char16_t *prologue, int32_t proLength,
+                 const char16_t *epilogue, int32_t epiLength,
                  UErrorCode *pErrorCode) {
     /* check the argument values */
     RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL || proLength<-1 || epiLength<-1 ||
-       (prologue==NULL && proLength!=0) || (epilogue==NULL && epiLength!=0)) {
+    if(pBiDi==nullptr || proLength<-1 || epiLength<-1 ||
+       (prologue==nullptr && proLength!=0) || (epilogue==nullptr && epiLength!=0)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -2362,11 +2362,11 @@
 #define BIDI_ABS(x)      ((x)>=0  ? (x) : (-(x)))
 
 static void
-setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
+setParaRunsOnly(UBiDi *pBiDi, const char16_t *text, int32_t length,
                 UBiDiLevel paraLevel, UErrorCode *pErrorCode) {
-    int32_t *runsOnlyMemory = NULL;
+    int32_t *runsOnlyMemory = nullptr;
     int32_t *visualMap;
-    UChar *visualText;
+    char16_t *visualText;
     int32_t saveLength, saveTrailingWSStart;
     const UBiDiLevel *levels;
     UBiDiLevel *saveLevels;
@@ -2381,17 +2381,17 @@
 
     pBiDi->reorderingMode=UBIDI_REORDER_DEFAULT;
     if(length==0) {
-        ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
+        ubidi_setPara(pBiDi, text, length, paraLevel, nullptr, pErrorCode);
         goto cleanup3;
     }
     /* obtain memory for mapping table and visual text */
-    runsOnlyMemory=static_cast<int32_t *>(uprv_malloc(length*(sizeof(int32_t)+sizeof(UChar)+sizeof(UBiDiLevel))));
-    if(runsOnlyMemory==NULL) {
+    runsOnlyMemory=static_cast<int32_t *>(uprv_malloc(length*(sizeof(int32_t)+sizeof(char16_t)+sizeof(UBiDiLevel))));
+    if(runsOnlyMemory==nullptr) {
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
         goto cleanup3;
     }
     visualMap=runsOnlyMemory;
-    visualText=(UChar *)&visualMap[length];
+    visualText=(char16_t *)&visualMap[length];
     saveLevels=(UBiDiLevel *)&visualText[length];
     saveOptions=pBiDi->reorderingOptions;
     if(saveOptions & UBIDI_OPTION_INSERT_MARKS) {
@@ -2399,7 +2399,7 @@
         pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS;
     }
     paraLevel&=1;                       /* accept only 0 or 1 */
-    ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
+    ubidi_setPara(pBiDi, text, length, paraLevel, nullptr, pErrorCode);
     if(U_FAILURE(*pErrorCode)) {
         goto cleanup3;
     }
@@ -2437,7 +2437,7 @@
      */
     saveMayAllocateText=pBiDi->mayAllocateText;
     pBiDi->mayAllocateText=false;
-    ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode);
+    ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, nullptr, pErrorCode);
     pBiDi->mayAllocateText=saveMayAllocateText;
     ubidi_getRuns(pBiDi, pErrorCode);
     if(U_FAILURE(*pErrorCode)) {
@@ -2551,7 +2551,7 @@
 /* ubidi_setPara ------------------------------------------------------------ */
 
 U_CAPI void U_EXPORT2
-ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
+ubidi_setPara(UBiDi *pBiDi, const char16_t *text, int32_t length,
               UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
               UErrorCode *pErrorCode) {
     UBiDiDirection direction;
@@ -2559,7 +2559,7 @@
 
     /* check the argument values */
     RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL || text==NULL || length<-1 ||
+    if(pBiDi==nullptr || text==nullptr || length<-1 ||
        (paraLevel>UBIDI_MAX_EXPLICIT_LEVEL && paraLevel<UBIDI_DEFAULT_LTR)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
@@ -2576,7 +2576,7 @@
     }
 
     /* initialize the UBiDi structure */
-    pBiDi->pParaBiDi=NULL;          /* mark unfinished setPara */
+    pBiDi->pParaBiDi=nullptr;          /* mark unfinished setPara */
     pBiDi->text=text;
     pBiDi->length=pBiDi->originalLength=pBiDi->resultLength=length;
     pBiDi->paraLevel=paraLevel;
@@ -2583,9 +2583,9 @@
     pBiDi->direction=(UBiDiDirection)(paraLevel&1);
     pBiDi->paraCount=1;
 
-    pBiDi->dirProps=NULL;
-    pBiDi->levels=NULL;
-    pBiDi->runs=NULL;
+    pBiDi->dirProps=nullptr;
+    pBiDi->levels=nullptr;
+    pBiDi->runs=nullptr;
     pBiDi->insertPoints.size=0;         /* clean up from last call */
     pBiDi->insertPoints.confirmed=0;    /* clean up from last call */
 
@@ -2640,7 +2640,7 @@
     pBiDi->trailingWSStart=length;  /* the levels[] will reflect the WS run */
 
     /* are explicit levels specified? */
-    if(embeddingLevels==NULL) {
+    if(embeddingLevels==nullptr) {
         /* no: determine explicit levels according to the (Xn) rules */\
         if(getLevelsMemory(pBiDi, length)) {
             pBiDi->levels=pBiDi->levelsMemory;
@@ -2737,7 +2737,7 @@
          * Examples for "insignificant" ones are empty embeddings
          * LRE-PDF, LRE-RLE-PDF-PDF, etc.
          */
-        if(embeddingLevels==NULL && pBiDi->paraCount<=1 &&
+        if(embeddingLevels==nullptr && pBiDi->paraCount<=1 &&
                                    !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) {
             resolveImplicitLevels(pBiDi, 0, length,
                                     GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)),
@@ -2856,7 +2856,7 @@
 
 U_CAPI void U_EXPORT2
 ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR) {
-    if(pBiDi!=NULL) {
+    if(pBiDi!=nullptr) {
         pBiDi->orderParagraphsLTR=orderParagraphsLTR;
     }
 }
@@ -2863,7 +2863,7 @@
 
 U_CAPI UBool U_EXPORT2
 ubidi_isOrderParagraphsLTR(UBiDi *pBiDi) {
-    if(pBiDi!=NULL) {
+    if(pBiDi!=nullptr) {
         return pBiDi->orderParagraphsLTR;
     } else {
         return false;
@@ -2879,12 +2879,12 @@
     }
 }
 
-U_CAPI const UChar * U_EXPORT2
+U_CAPI const char16_t * U_EXPORT2
 ubidi_getText(const UBiDi *pBiDi) {
     if(IS_VALID_PARA_OR_LINE(pBiDi)) {
         return pBiDi->text;
     } else {
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -2952,13 +2952,13 @@
     } else {
         paraStart=0;
     }
-    if(pParaStart!=NULL) {
+    if(pParaStart!=nullptr) {
         *pParaStart=paraStart;
     }
-    if(pParaLimit!=NULL) {
+    if(pParaLimit!=nullptr) {
         *pParaLimit=pBiDi->paras[paraIndex].limit;
     }
-    if(pParaLevel!=NULL) {
+    if(pParaLevel!=nullptr) {
         *pParaLevel=GET_PARALEVEL(pBiDi, paraStart);
     }
 }
@@ -2987,7 +2987,7 @@
                        const void **oldContext, UErrorCode *pErrorCode)
 {
     RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(pBiDi==NULL) {
+    if(pBiDi==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -3006,7 +3006,7 @@
 U_CAPI void U_EXPORT2
 ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
 {
-    if(pBiDi==NULL) {
+    if(pBiDi==nullptr) {
         return;
     }
     if( fn )
@@ -3024,7 +3024,7 @@
 {
     UCharDirection dir;
 
-    if( pBiDi->fnClassCallback == NULL ||
+    if( pBiDi->fnClassCallback == nullptr ||
         (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT )
     {
         dir = ubidi_getClass(c);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -69,7 +69,7 @@
     }
 
     /* add the start code point of each same-value range of the trie */
-    utrie2_enum(&ubidi_props_singleton.trie, NULL, _enumPropertyStartsRange, sa);
+    utrie2_enum(&ubidi_props_singleton.trie, nullptr, _enumPropertyStartsRange, sa);
 
     /* add the code points from the bidi mirroring table */
     length=ubidi_props_singleton.indexes[UBIDI_IX_MIRROR_LENGTH];

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -9,11 +9,11 @@
 
 #ifdef INCLUDED_FROM_UBIDI_PROPS_C
 
-static const UVersionInfo ubidi_props_dataVersion={0xf,0,0,0};
+static const UVersionInfo ubidi_props_dataVersion={0xf,1,0,0};
 
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6bc0,0x65d0,0x28,0x620,0x8cc,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6702b6};
+static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6ba0,0x65b0,0x28,0x620,0x8cc,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6702b6};
 
-static const uint16_t ubidi_props_trieIndex[13024]={
+static const uint16_t ubidi_props_trieIndex[13008]={
 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,
@@ -38,8 +38,8 @@
 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,
+0x86e,0x866,0x3a7,0x3a7,0x876,0x61f,0x3a7,0x3ce,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x67c,0x87e,
+0x3dc,0x3a7,0x85e,0x882,0x3a7,0x88a,0x892,0x3a7,0x3a7,0x3a7,0x3a7,0x896,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,
@@ -96,10 +96,10 @@
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,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,0x85e,0x67c,0x595,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x89d,0x3a7,0x3a7,0x8a2,0x8aa,0x3a7,0x3a7,0x5cb,0x67c,0x673,0x3a7,0x3a7,0x8b2,0x3a7,0x3a7,0x3a7,
+0x8ba,0x8c1,0x645,0x8c9,0x3a7,0x3a7,0x5a1,0x8d1,0x3a7,0x8d9,0x8e0,0x3a7,0x501,0x8e5,0x3a7,0x51a,
+0x3a7,0x8ed,0x8f5,0x51c,0x3a7,0x8f9,0x51b,0x901,0x3a7,0x3a7,0x3a7,0x907,0x3a7,0x3a7,0x3a7,0x90e,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
@@ -139,9 +139,9 @@
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 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,0x922,0x916,0x91a,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,
+0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x92a,0x932,0x4a6,0x4a6,0x4a6,0x937,0x93b,
+0x943,0x94b,0x94f,0x957,0x4a6,0x4a6,0x4a6,0x95b,0x963,0x397,0x96b,0x973,0x3a7,0x3a7,0x3a7,0x97b,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,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,
@@ -178,68 +178,68 @@
 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,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,0x983,0x3a7,0x67c,0x67c,0x98b,0x61f,0x3a7,0x514,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x993,0x3a7,0x3a7,0x3a7,0x99a,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,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,0x4a6,0xa00,0x43c,0xa08,0xa0f,0xa15,0xa1d,0xa21,0xa29,0x43c,
-0x51b,0xa31,0xa38,0xa3f,0x41e,0xa47,0x569,0x3a7,0x501,0xa4e,0x3a7,0xa54,0x41e,0xa59,0xa61,0x3a7,
-0x3a7,0xa66,0x51b,0x3a7,0x3a7,0x3a7,0x836,0xa6e,0x41e,0x5a3,0x57e,0xa75,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0xa31,0xa7d,0x3a7,0x3a7,0xa85,0xa8d,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa91,0xa99,0x3a7,
-0x3a7,0xaa1,0x57e,0xaa9,0x3a7,0xaaf,0x3a7,0x3a7,0x60f,0xab7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0xabc,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xac3,0xacb,0x3a7,0x3a7,0x3a7,0xace,0x57e,0xad6,
-0xada,0xae2,0x3a7,0xae9,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0xaf0,0x3a7,0x3a7,0xafe,0xaf8,0x3a7,0x3a7,0x3a7,0xb06,0xb0e,0x3a7,0xb12,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x5a5,0x41e,0x99e,0xb1a,0x3a7,0x3a7,0x3a7,0xb27,0xb22,0x3a7,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x9a2,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x9aa,0x9ae,0x43c,0x43c,0x43c,0x43c,0x9be,0x9b6,0x43c,0x9c6,0x43c,0x43c,0x9ce,0x9d4,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x9e4,0x9dc,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x9ec,0x43c,0x9f4,0x4a6,0x9fc,0x43c,0xa04,0xa0b,0xa11,0xa19,0xa1d,0xa25,0x43c,
+0x51b,0xa2d,0xa34,0xa3b,0x41e,0xa43,0x569,0x3a7,0x501,0xa4a,0x3a7,0xa50,0x41e,0xa55,0xa5d,0x3a7,
+0x3a7,0xa62,0x51b,0x3a7,0x3a7,0x3a7,0x836,0xa6a,0x41e,0x5a3,0x57e,0xa71,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0xa2d,0xa79,0x3a7,0x3a7,0xa81,0xa89,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa8d,0xa95,0x3a7,
+0x3a7,0xa9d,0x57e,0xaa5,0x3a7,0xaab,0x3a7,0x3a7,0x60f,0xab3,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xab8,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xabf,0xac7,0x3a7,0x3a7,0x3a7,0xaca,0x57e,0xad2,
+0xad6,0xade,0x3a7,0xae5,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xaec,0x3a7,0x3a7,0xafa,0xaf4,0x3a7,0x3a7,0x3a7,0xb02,0xb0a,0x3a7,0xb0e,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x5a5,0x41e,0x99a,0xb16,0x3a7,0x3a7,0x3a7,0xb23,0xb1e,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0xb2f,0xb37,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb3d,
-0x3a7,0xb43,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xb2b,0xb33,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb39,
+0x3a7,0xb3f,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0xa55,0x3a7,0xb49,0x3a7,0x3a7,0xb51,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0xa51,0x3a7,0xb45,0x3a7,0x3a7,0xb4d,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,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,0xb59,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x535,0xb55,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,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,0xb61,0x500,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0xb69,0xb71,0xb77,0x3a7,0xb7d,0x67c,0x67c,0xb85,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x67c,0x67c,0xb8d,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb93,
-0x3a7,0xb9a,0x3a7,0xb96,0x3a7,0xb9d,0x3a7,0xba5,0xba9,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0xbb1,0x3f5,0xbb8,0xbbf,0xbc7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0xb5d,0x500,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0xb65,0xb6d,0xb73,0x3a7,0xb79,0x67c,0x67c,0xb81,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x67c,0x67c,0xb89,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb8f,
+0x3a7,0xb96,0x3a7,0xb92,0x3a7,0xb99,0x3a7,0xba1,0xba5,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0xbad,0x3f5,0xbb4,0xbbb,0xbc3,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xbcf,0xbd7,0x3a7,0x3a7,0xa55,0x3a7,0x3a7,
-0x3a7,0x3a7,0xb43,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa81,0x3a7,
-0xbdc,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0xbe4,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,0xbec,
-0x43c,0xbf4,0xbf4,0xbfb,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,0xc03,0x43c,0x43c,0x43c,0x43c,0x43c,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,
-0xc0b,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x67c,0xc13,0x67c,0x67c,0x67f,0xc18,0xc1c,
-0x858,0xc24,0x3c9,0x3a7,0xc2a,0x3a7,0xc2f,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x783,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xbcb,0xbd3,0x3a7,0x3a7,0xa51,0x3a7,0x3a7,
+0x3a7,0x3a7,0xb3f,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa7d,0x3a7,
+0xbd8,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xbe0,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,0xbe8,
+0x43c,0xbf0,0xbf0,0xbf7,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x91a,0x4a6,0x4a6,0x43c,
+0x43c,0x4a6,0x4a6,0xbff,0x43c,0x43c,0x43c,0x43c,0x43c,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,
+0xc07,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x67c,0xc0f,0x67c,0x67c,0x67f,0xc14,0xc18,
+0x858,0xc20,0x3c9,0x3a7,0xc26,0x3a7,0xc2b,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,0xc37,
-0x98f,0x67c,0x67c,0x67c,0xc3e,0x67c,0x67c,0xc45,0xc4d,0xc13,0x67c,0xc55,0x67c,0xc5d,0xc62,0x3a7,
-0x3a7,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67f,0xc6a,0xc73,0xc77,0xc7f,
-0xc6f,0x67c,0x67c,0x67c,0x67c,0xc87,0x67c,0x792,0xc8f,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0xc33,
+0x98b,0x67c,0x67c,0x67c,0xc3a,0x67c,0x67c,0xc41,0xc49,0xc0f,0x67c,0xc51,0x67c,0xc59,0xc5e,0x3a7,
+0x3a7,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67f,0xc66,0xc6f,0xc73,0xc7b,
+0xc6b,0x67c,0x67c,0x67c,0x67c,0xc83,0x67c,0x792,0xc8b,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc96,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc92,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
 0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
-0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc96,0xca6,0xc9e,0xc9e,0xc9e,0xca7,0xca7,0xca7,
-0xca7,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0xcaf,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,
-0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,
-0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,
-0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,
-0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0xca7,0x386,0x386,0x386,0x12,0x12,0x12,0x12,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc92,0xca2,0xc9a,0xc9a,0xc9a,0xca3,0xca3,0xca3,
+0xca3,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0xcab,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,
+0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,0xca3,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,
@@ -551,15 +551,14 @@
 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,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,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,0xb1,0xb1,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,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,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,
@@ -925,7 +924,7 @@
 };
 
 static const UBiDiProps ubidi_props_singleton={
-  NULL,
+  nullptr,
   ubidi_props_indexes,
   ubidi_props_mirrors,
   ubidi_props_jgArray,
@@ -933,16 +932,16 @@
   {
     ubidi_props_trieIndex,
     ubidi_props_trieIndex+3612,
-    NULL,
+    nullptr,
     3612,
-    9412,
+    9396,
     0x1a0,
     0xe9c,
     0x0,
     0x0,
     0x110000,
-    0x32dc,
-    NULL, 0, false, false, 0, NULL
+    0x32cc,
+    nullptr, 0, false, false, 0, nullptr
   },
   { 2,2,0,0 }
 };

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -37,7 +37,7 @@
  * This means that there is a UBiDi object with a levels
  * and a dirProps array.
  * paraLevel and direction are also set.
- * Only if the length of the text is zero, then levels==dirProps==NULL.
+ * Only if the length of the text is zero, then levels==dirProps==nullptr.
  *
  * The overall directionality of the paragraph
  * or line is used to bypass the reordering steps if possible.
@@ -134,12 +134,12 @@
     RETURN_VOID_IF_NOT_VALID_PARA(pParaBiDi, *pErrorCode);
     RETURN_VOID_IF_BAD_RANGE(start, 0, limit, *pErrorCode);
     RETURN_VOID_IF_BAD_RANGE(limit, 0, pParaBiDi->length+1, *pErrorCode);
-    if(pLineBiDi==NULL) {
+    if(pLineBiDi==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
-    if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) !=
-       ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) {
+    if(ubidi_getParagraph(pParaBiDi, start, nullptr, nullptr, nullptr, pErrorCode) !=
+       ubidi_getParagraph(pParaBiDi, limit-1, nullptr, nullptr, nullptr, pErrorCode)) {
         /* the line crosses a paragraph boundary */
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
@@ -146,13 +146,13 @@
     }
 
     /* set the values in pLineBiDi from its pParaBiDi parent */
-    pLineBiDi->pParaBiDi=NULL;          /* mark unfinished setLine */
+    pLineBiDi->pParaBiDi=nullptr;          /* mark unfinished setLine */
     pLineBiDi->text=pParaBiDi->text+start;
     length=pLineBiDi->length=limit-start;
     pLineBiDi->resultLength=pLineBiDi->originalLength=length;
     pLineBiDi->paraLevel=GET_PARALEVEL(pParaBiDi, start);
     pLineBiDi->paraCount=pParaBiDi->paraCount;
-    pLineBiDi->runs=NULL;
+    pLineBiDi->runs=nullptr;
     pLineBiDi->flags=0;
     pLineBiDi->reorderingMode=pParaBiDi->reorderingMode;
     pLineBiDi->reorderingOptions=pParaBiDi->reorderingOptions;
@@ -263,11 +263,11 @@
 ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
     int32_t start, length;
 
-    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, NULL);
-    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, NULL);
+    RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, nullptr);
+    RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, nullptr);
     if((length=pBiDi->length)<=0) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     if((start=pBiDi->trailingWSStart)==length) {
         /* the current levels array reflects the WS run */
@@ -297,7 +297,7 @@
     } else {
         /* out of memory */
         *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     }
 }
 
@@ -373,10 +373,10 @@
     RETURN_IF_BAD_RANGE(runIndex, 0, pBiDi->runCount, errorCode, UBIDI_LTR);
 
     start=pBiDi->runs[runIndex].logicalStart;
-    if(pLogicalStart!=NULL) {
+    if(pLogicalStart!=nullptr) {
         *pLogicalStart=GET_INDEX(start);
     }
-    if(pLength!=NULL) {
+    if(pLength!=nullptr) {
         if(runIndex>0) {
             *pLength=pBiDi->runs[runIndex].visualLimit-
                      pBiDi->runs[runIndex-1].visualLimit;
@@ -694,7 +694,7 @@
     /* handle remove BiDi control characters */
     if(pBiDi->controlCount>0) {
         int32_t runIndex;
-        const UChar *start=pBiDi->text, *limit=start+pBiDi->length, *pu;
+        const char16_t *start=pBiDi->text, *limit=start+pBiDi->length, *pu;
         for(pu=start; pu<limit; pu++) {
             if(IS_BIDI_CONTROL_CHAR(*pu)) {
                 runIndex=getRunFromLogicalIndex(pBiDi, (int32_t)(pu-start));
@@ -713,7 +713,7 @@
     int32_t start;
     UBiDiLevel level, minLevel, maxLevel;
 
-    if(levels==NULL || length<=0) {
+    if(levels==nullptr || length<=0) {
         return false;
     }
 
@@ -751,7 +751,7 @@
     int32_t start, limit, sumOfSosEos;
     UBiDiLevel minLevel = 0, maxLevel = 0;
 
-    if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
+    if(indexMap==nullptr || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
         return;
     }
 
@@ -814,7 +814,7 @@
     int32_t start, end, limit, temp;
     UBiDiLevel minLevel = 0, maxLevel = 0;
 
-    if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
+    if(indexMap==nullptr || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) {
         return;
     }
 
@@ -941,7 +941,7 @@
         Run *runs=pBiDi->runs;
         int32_t i, j, start, limit, length, insertRemove;
         int32_t visualStart=0, controlFound=0;
-        UChar uchar=pBiDi->text[logicalIndex];
+        char16_t uchar=pBiDi->text[logicalIndex];
         /* is the logical index pointing to a control ? */
         if(IS_BIDI_CONTROL_CHAR(uchar)) {
             return UBIDI_MAP_NOWHERE;
@@ -1036,7 +1036,7 @@
         /* handle removed BiDi control characters */
         int32_t controlFound=0, insertRemove, length;
         int32_t logicalStart, logicalEnd, visualStart=0, j, k;
-        UChar uchar;
+        char16_t uchar;
         UBool evenRun;
         /* add number of controls until visual index */
         for(i=0; ; i++, visualStart+=length) {
@@ -1113,7 +1113,7 @@
     ubidi_countRuns(pBiDi, pErrorCode);
     if(U_FAILURE(*pErrorCode)) {
         /* no op */
-    } else if(indexMap==NULL) {
+    } else if(indexMap==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
     } else {
         /* fill a logical-to-visual index map using the runs[] */
@@ -1171,7 +1171,7 @@
             int32_t controlFound=0, runCount=pBiDi->runCount;
             int32_t length, insertRemove;
             UBool evenRun;
-            UChar uchar;
+            char16_t uchar;
             visualStart=0;
             /* subtract number of controls found until each index */
             for(i=0; i<runCount; i++, visualStart+=length) {
@@ -1210,7 +1210,7 @@
 U_CAPI void U_EXPORT2
 ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) {
     RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode);
-    if(indexMap==NULL) {
+    if(indexMap==nullptr) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
@@ -1277,7 +1277,7 @@
         else if(pBiDi->controlCount>0) {
             int32_t runCount=pBiDi->runCount, logicalEnd;
             int32_t insertRemove, length, i, j, k, m;
-            UChar uchar;
+            char16_t uchar;
             UBool evenRun;
             runs=pBiDi->runs;
             visualStart=0;
@@ -1317,7 +1317,7 @@
 
 U_CAPI void U_EXPORT2
 ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) {
-    if(srcMap!=NULL && destMap!=NULL && length>0) {
+    if(srcMap!=nullptr && destMap!=nullptr && length>0) {
         const int32_t *pi;
         int32_t destLength=-1, count=0;
         /* find highest value and count positive indexes in srcMap */

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -78,8 +78,8 @@
 struct UBiDiTransform {
     UBiDi                   *pBidi;             /* pointer to a UBiDi object */
     const ReorderingScheme  *pActiveScheme;     /* effective reordering scheme */
-    UChar                   *src;               /* input text */
-    UChar                   *dest;              /* output text */
+    char16_t                *src;               /* input text */
+    char16_t                *dest;              /* output text */
     uint32_t                srcLength;          /* input text length - not really needed as we are zero-terminated and can u_strlen */
     uint32_t                srcSize;            /* input text capacity excluding the trailing zero */
     uint32_t                destSize;           /* output text capacity */
@@ -92,10 +92,10 @@
 U_CAPI UBiDiTransform* U_EXPORT2
 ubiditransform_open(UErrorCode *pErrorCode)
 {
-    UBiDiTransform *pBiDiTransform = NULL;
+    UBiDiTransform *pBiDiTransform = nullptr;
     if (U_SUCCESS(*pErrorCode)) {
         pBiDiTransform = (UBiDiTransform*) uprv_calloc(1, sizeof(UBiDiTransform));
-        if (pBiDiTransform == NULL) {
+        if (pBiDiTransform == nullptr) {
             *pErrorCode = U_MEMORY_ALLOCATION_ERROR;
         }
     }
@@ -105,11 +105,11 @@
 U_CAPI void U_EXPORT2
 ubiditransform_close(UBiDiTransform *pBiDiTransform)
 {
-    if (pBiDiTransform != NULL) {
-        if (pBiDiTransform->pBidi != NULL) {
+    if (pBiDiTransform != nullptr) {
+        if (pBiDiTransform->pBidi != nullptr) {
             ubidi_close(pBiDiTransform->pBidi);
         }
-        if (pBiDiTransform->src != NULL) {
+        if (pBiDiTransform->src != nullptr) {
             uprv_free(pBiDiTransform->src);
         }
         uprv_free(pBiDiTransform);
@@ -129,7 +129,7 @@
 action_resolve(UBiDiTransform *pTransform, UErrorCode *pErrorCode)
 {
     ubidi_setPara(pTransform->pBidi, pTransform->src, pTransform->srcLength,
-            pTransform->pActiveScheme->baseLevel, NULL, pErrorCode);
+            pTransform->pActiveScheme->baseLevel, nullptr, pErrorCode);
     return false;
 }
 
@@ -215,12 +215,12 @@
  * 
  * @param pTransform A pointer to the <code>UBiDiTransform</code> structure.
  * @param newSrc A pointer whose value is to be used as input text.
- * @param newLength A length of the new text in <code>UChar</code>s.
- * @param newSize A new source capacity in <code>UChar</code>s.
+ * @param newLength A length of the new text in <code>char16_t</code>s.
+ * @param newSize A new source capacity in <code>char16_t</code>s.
  * @param pErrorCode Pointer to the error code value.
  */
 static void
-updateSrc(UBiDiTransform *pTransform, const UChar *newSrc, uint32_t newLength,
+updateSrc(UBiDiTransform *pTransform, const char16_t *newSrc, uint32_t newLength,
         uint32_t newSize, UErrorCode *pErrorCode)
 {
     if (newSize < newLength) {
@@ -229,12 +229,12 @@
     }
     if (newSize > pTransform->srcSize) {
         newSize += 50; // allocate slightly more than needed right now
-        if (pTransform->src != NULL) {
+        if (pTransform->src != nullptr) {
             uprv_free(pTransform->src);
-            pTransform->src = NULL;
+            pTransform->src = nullptr;
         }
-        pTransform->src = (UChar *)uprv_malloc(newSize * sizeof(UChar));
-        if (pTransform->src == NULL) {
+        pTransform->src = (char16_t *)uprv_malloc(newSize * sizeof(char16_t));
+        if (pTransform->src == nullptr) {
             *pErrorCode = U_MEMORY_ALLOCATION_ERROR;
             //pTransform->srcLength = pTransform->srcSize = 0;
             return;
@@ -331,52 +331,52 @@
 {
     /* 0: Logical LTR => Visual LTR */
     {LTR, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_shapeArabic, action_resolve, action_reorder, NULL}},
+            {action_shapeArabic, action_resolve, action_reorder, nullptr}},
     /* 1: Logical RTL => Visual LTR */
     {RTL, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL,
-            {action_resolve, action_reorder, action_shapeArabic, NULL}},
+            {action_resolve, action_reorder, action_shapeArabic, nullptr}},
     /* 2: Logical LTR => Visual RTL */
     {LTR, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_shapeArabic, action_resolve, action_reorder, action_reverse, NULL}},
+            {action_shapeArabic, action_resolve, action_reorder, action_reverse, nullptr}},
     /* 3: Logical RTL => Visual RTL */
     {RTL, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL,
-            {action_resolve, action_reorder, action_shapeArabic, action_reverse, NULL}},
+            {action_resolve, action_reorder, action_shapeArabic, action_reverse, nullptr}},
     /* 4: Visual LTR => Logical RTL */
     {LTR, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL,
-            {action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}},
+            {action_shapeArabic, action_setInverse, action_resolve, action_reorder, nullptr}},
     /* 5: Visual RTL => Logical RTL */
     {RTL, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL,
-            {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}},
+            {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_reorder, nullptr}},
     /* 6: Visual LTR => Logical LTR */
     {LTR, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}},
+            {action_setInverse, action_resolve, action_reorder, action_shapeArabic, nullptr}},
     /* 7: Visual RTL => Logical LTR */
     {RTL, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_reverse, action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}},
+            {action_reverse, action_setInverse, action_resolve, action_reorder, action_shapeArabic, nullptr}},
     /* 8: Logical LTR => Logical RTL */
     {LTR, LOGICAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_shapeArabic, action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, NULL}},
+            {action_shapeArabic, action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, nullptr}},
     /* 9: Logical RTL => Logical LTR */
     {RTL, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, RTL,
-            {action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, action_shapeArabic, NULL}},
+            {action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, action_shapeArabic, nullptr}},
     /* 10: Visual LTR => Visual RTL */
     {LTR, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR,
-            {action_shapeArabic, action_setInverse, action_resolve, action_mirror, action_reverse, NULL}},
+            {action_shapeArabic, action_setInverse, action_resolve, action_mirror, action_reverse, nullptr}},
     /* 11: Visual RTL => Visual LTR */
     {RTL, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR,
-            {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_mirror, NULL}},
+            {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_mirror, nullptr}},
     /* 12: Logical LTR => Logical LTR */
     {LTR, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR,
-            {action_resolve, action_mirror, action_shapeArabic, NULL}},
+            {action_resolve, action_mirror, action_shapeArabic, nullptr}},
     /* 13: Logical RTL => Logical RTL */
     {RTL, LOGICAL, RTL, LOGICAL, SHAPE_VISUAL, SHAPE_LOGICAL, RTL,
-            {action_resolve, action_mirror, action_shapeArabic, NULL}},
+            {action_resolve, action_mirror, action_shapeArabic, nullptr}},
     /* 14: Visual LTR => Visual LTR */
     {LTR, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR,
-            {action_resolve, action_mirror, action_shapeArabic, NULL}},
+            {action_resolve, action_mirror, action_shapeArabic, nullptr}},
     /* 15: Visual RTL => Visual RTL */
     {RTL, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR,
-            {action_reverse, action_resolve, action_mirror, action_shapeArabic, action_reverse, NULL}}
+            {action_reverse, action_resolve, action_mirror, action_shapeArabic, action_reverse, nullptr}}
 };
 
 static const uint32_t nSchemes = sizeof(Schemes) / sizeof(*Schemes);
@@ -387,7 +387,7 @@
  * of the first strong bidi character.
  */
 static void
-resolveBaseDirection(const UChar *text, uint32_t length,
+resolveBaseDirection(const char16_t *text, uint32_t length,
         UBiDiLevel *pInLevel, UBiDiLevel *pOutLevel)
 {
     switch (*pInLevel) {
@@ -417,7 +417,7 @@
  * Finds a valid <code>ReorderingScheme</code> matching the
  * caller-defined scheme.
  * 
- * @return A valid <code>ReorderingScheme</code> object or NULL
+ * @return A valid <code>ReorderingScheme</code> object or nullptr
  */
 static const ReorderingScheme*
 findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel,
@@ -431,13 +431,13 @@
             return pScheme;
         }
     }
-    return NULL;
+    return nullptr;
 }
 
 U_CAPI uint32_t U_EXPORT2
 ubiditransform_transform(UBiDiTransform *pBiDiTransform,
-            const UChar *src, int32_t srcLength,
-            UChar *dest, int32_t destSize,
+            const char16_t *src, int32_t srcLength,
+            char16_t *dest, int32_t destSize,
             UBiDiLevel inParaLevel, UBiDiOrder inOrder,
             UBiDiLevel outParaLevel, UBiDiOrder outOrder,
             UBiDiMirroring doMirroring, uint32_t shapingOptions,
@@ -446,12 +446,12 @@
     uint32_t destLength = 0;
     UBool textChanged = false;
     const UBiDiTransform *pOrigTransform = pBiDiTransform;
-    const UBiDiAction *action = NULL;
+    const UBiDiAction *action = nullptr;
 
     if (U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if (src == NULL || dest == NULL) {
+    if (src == nullptr || dest == nullptr) {
         *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -458,7 +458,7 @@
     CHECK_LEN(src, srcLength, pErrorCode);
     CHECK_LEN(dest, destSize, pErrorCode);
 
-    if (pBiDiTransform == NULL) {
+    if (pBiDiTransform == nullptr) {
         pBiDiTransform = ubiditransform_open(pErrorCode);
         if (U_FAILURE(*pErrorCode)) {
             return 0;
@@ -470,7 +470,7 @@
 
     pBiDiTransform->pActiveScheme = findMatchingScheme(inParaLevel, outParaLevel,
             inOrder, outOrder);
-    if (pBiDiTransform->pActiveScheme == NULL) {
+    if (pBiDiTransform->pActiveScheme == nullptr) {
         goto cleanup;
     }
     pBiDiTransform->reorderingOptions = doMirroring ? UBIDI_DO_MIRRORING
@@ -486,7 +486,7 @@
     if (U_FAILURE(*pErrorCode)) {
         goto cleanup;
     }
-    if (pBiDiTransform->pBidi == NULL) {
+    if (pBiDiTransform->pBidi == nullptr) {
         pBiDiTransform->pBidi = ubidi_openSized(0, 0, pErrorCode);
         if (U_FAILURE(*pErrorCode)) {
             goto cleanup;
@@ -521,8 +521,8 @@
     if (pOrigTransform != pBiDiTransform) {
         ubiditransform_close(pBiDiTransform);
     } else {
-        pBiDiTransform->dest = NULL;
-        pBiDiTransform->pDestLength = NULL;
+        pBiDiTransform->dest = nullptr;
+        pBiDiTransform->pDestLength = nullptr;
         pBiDiTransform->srcLength = 0;
         pBiDiTransform->destSize = 0;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -56,8 +56,8 @@
  * we are writing RTL output in reverse.
  */
 static int32_t
-doWriteForward(const UChar *src, int32_t srcLength,
-               UChar *dest, int32_t destSize,
+doWriteForward(const char16_t *src, int32_t srcLength,
+               char16_t *dest, int32_t destSize,
                uint16_t options,
                UErrorCode *pErrorCode) {
     /* optimize for several combinations of options */
@@ -93,7 +93,7 @@
     case UBIDI_REMOVE_BIDI_CONTROLS: {
         /* copy the LTR run and remove any BiDi control characters */
         int32_t remaining=destSize;
-        UChar c;
+        char16_t c;
         do {
             c=*src++;
             if(!IS_BIDI_CONTROL_CHAR(c)) {
@@ -149,8 +149,8 @@
 }
 
 static int32_t
-doWriteReverse(const UChar *src, int32_t srcLength,
-               UChar *dest, int32_t destSize,
+doWriteReverse(const char16_t *src, int32_t srcLength,
+               char16_t *dest, int32_t destSize,
                uint16_t options,
                UErrorCode *pErrorCode) {
     /*
@@ -248,7 +248,7 @@
             /* we need to find out the destination length of the run,
                which will not include the BiDi control characters */
             int32_t length=srcLength;
-            UChar ch;
+            char16_t ch;
 
             i=0;
             do {
@@ -306,19 +306,19 @@
 }
 
 U_CAPI int32_t U_EXPORT2
-ubidi_writeReverse(const UChar *src, int32_t srcLength,
-                   UChar *dest, int32_t destSize,
+ubidi_writeReverse(const char16_t *src, int32_t srcLength,
+                   char16_t *dest, int32_t destSize,
                    uint16_t options,
                    UErrorCode *pErrorCode) {
     int32_t destLength;
 
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
     /* more error checking */
-    if( src==NULL || srcLength<-1 ||
-        destSize<0 || (destSize>0 && dest==NULL))
+    if( src==nullptr || srcLength<-1 ||
+        destSize<0 || (destSize>0 && dest==nullptr))
     {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
@@ -325,7 +325,7 @@
     }
 
     /* do input and output overlap? */
-    if( dest!=NULL &&
+    if( dest!=nullptr &&
         ((src>=dest && src<dest+destSize) ||
          (dest>=src && dest<src+srcLength)))
     {
@@ -355,22 +355,22 @@
 #endif
 U_CAPI int32_t U_EXPORT2
 ubidi_writeReordered(UBiDi *pBiDi,
-                     UChar *dest, int32_t destSize,
+                     char16_t *dest, int32_t destSize,
                      uint16_t options,
                      UErrorCode *pErrorCode) {
-    const UChar *text;
-    UChar *saveDest;
+    const char16_t *text;
+    char16_t *saveDest;
     int32_t length, destCapacity;
     int32_t run, runCount, logicalStart, runLength;
 
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
 
     /* more error checking */
-    if( pBiDi==NULL ||
-        (text=pBiDi->text)==NULL || (length=pBiDi->length)<0 ||
-        destSize<0 || (destSize>0 && dest==NULL))
+    if( pBiDi==nullptr ||
+        (text=pBiDi->text)==nullptr || (length=pBiDi->length)<0 ||
+        destSize<0 || (destSize>0 && dest==nullptr))
     {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
@@ -377,7 +377,7 @@
     }
 
     /* do input and output overlap? */
-    if( dest!=NULL &&
+    if( dest!=nullptr &&
         ((text>=dest && text<dest+destSize) ||
          (dest>=text && dest<text+pBiDi->originalLength)))
     {
@@ -451,7 +451,7 @@
                                              dest, destSize,
                                              options, pErrorCode);
                 }
-                if(dest!=NULL) {
+                if(dest!=nullptr) {
                   dest+=runLength;
                 }
                 destSize-=runLength;
@@ -459,8 +459,8 @@
         } else {
             /* insert BiDi controls for "inverse BiDi" */
             const DirProp *dirProps=pBiDi->dirProps;
-            const UChar *src;
-            UChar uc;
+            const char16_t *src;
+            char16_t uc;
             UBiDiDirection dir;
             int32_t markFlag;
 
@@ -495,7 +495,7 @@
                     runLength=doWriteForward(src, runLength,
                                              dest, destSize,
                                              (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                    if(dest!=NULL) {
+                    if(dest!=nullptr) {
                       dest+=runLength;
                     }
                     destSize-=runLength;
@@ -539,7 +539,7 @@
                     runLength=doWriteReverse(src, runLength,
                                              dest, destSize,
                                              options, pErrorCode);
-                    if(dest!=NULL) {
+                    if(dest!=nullptr) {
                       dest+=runLength;
                     }
                     destSize-=runLength;
@@ -578,7 +578,7 @@
                                              dest, destSize,
                                              options, pErrorCode);
                 }
-                if(dest!=NULL) {
+                if(dest!=nullptr) {
                   dest+=runLength;
                 }
                 destSize-=runLength;
@@ -586,7 +586,7 @@
         } else {
             /* insert BiDi controls for "inverse BiDi" */
             const DirProp *dirProps=pBiDi->dirProps;
-            const UChar *src;
+            const char16_t *src;
             UBiDiDirection dir;
 
             for(run=runCount; --run>=0;) {
@@ -605,7 +605,7 @@
                     runLength=doWriteReverse(src, runLength,
                                              dest, destSize,
                                              (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode);
-                    if(dest!=NULL) {
+                    if(dest!=nullptr) {
                       dest+=runLength;
                     }
                     destSize-=runLength;
@@ -627,7 +627,7 @@
                     runLength=doWriteForward(src, runLength,
                                              dest, destSize,
                                              options, pErrorCode);
-                    if(dest!=NULL) {
+                    if(dest!=nullptr) {
                       dest+=runLength;
                     }
                     destSize-=runLength;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -33,7 +33,7 @@
 U_CAPI UBreakIterator* U_EXPORT2
 ubrk_open(UBreakIteratorType type,
       const char *locale,
-      const UChar *text,
+      const char16_t *text,
       int32_t textLength,
       UErrorCode *status)
 {
@@ -79,7 +79,7 @@
 
 
   UBreakIterator *uBI = (UBreakIterator *)result;
-  if (text != NULL) {
+  if (text != nullptr) {
       ubrk_setText(uBI, text, textLength, status);
   }
   return uBI;
@@ -94,14 +94,14 @@
 //
 //------------------------------------------------------------------------------
 U_CAPI UBreakIterator* U_EXPORT2
-ubrk_openRules(  const UChar        *rules,
+ubrk_openRules(  const char16_t     *rules,
                        int32_t       rulesLength,
-                 const UChar        *text,
+                 const char16_t     *text,
                        int32_t       textLength,
                        UParseError  *parseErr,
                        UErrorCode   *status)  {
 
-    if (status == NULL || U_FAILURE(*status)){
+    if (status == nullptr || U_FAILURE(*status)){
         return 0;
     }
 
@@ -113,7 +113,7 @@
     }
 
     UBreakIterator *uBI = (UBreakIterator *)result;
-    if (text != NULL) {
+    if (text != nullptr) {
         ubrk_setText(uBI, text, textLength, status);
     }
     return uBI;
@@ -122,22 +122,22 @@
 
 U_CAPI UBreakIterator* U_EXPORT2
 ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength,
-                     const UChar *  text, int32_t textLength,
+                     const char16_t *  text, int32_t textLength,
                      UErrorCode *   status)
 {
     if (U_FAILURE(*status)) {
-        return NULL;
+        return nullptr;
     }
     if (rulesLength < 0) {
         *status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
     LocalPointer<RuleBasedBreakIterator> lpRBBI(new RuleBasedBreakIterator(binaryRules, rulesLength, *status), *status);
     if (U_FAILURE(*status)) {
-        return NULL;
+        return nullptr;
     }
     UBreakIterator *uBI = reinterpret_cast<UBreakIterator *>(lpRBBI.orphan());
-    if (text != NULL) {
+    if (text != nullptr) {
         ubrk_setText(uBI, text, textLength, status);
     }
     return uBI;
@@ -151,24 +151,24 @@
           int32_t *pBufferSize,
           UErrorCode *status)
 {
-    if (status == NULL || U_FAILURE(*status)){
-        return NULL;
+    if (status == nullptr || U_FAILURE(*status)){
+        return nullptr;
     }
-    if (bi == NULL) {
+    if (bi == nullptr) {
        *status = U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        return nullptr;
     }
-    if (pBufferSize != NULL) {
+    if (pBufferSize != nullptr) {
         int32_t inputSize = *pBufferSize;
         *pBufferSize = 1;
         if (inputSize == 0) {
-            return NULL;  // preflighting for deprecated functionality
+            return nullptr;  // preflighting for deprecated functionality
         }
     }
     BreakIterator *newBI = ((BreakIterator *)bi)->clone();
-    if (newBI == NULL) {
+    if (newBI == nullptr) {
         *status = U_MEMORY_ALLOCATION_ERROR;
-    } else if (pBufferSize != NULL) {
+    } else if (pBufferSize != nullptr) {
         *status = U_SAFECLONE_ALLOCATED_WARNING;
     }
     return (UBreakIterator *)newBI;
@@ -188,7 +188,7 @@
 
 U_CAPI void U_EXPORT2
 ubrk_setText(UBreakIterator* bi,
-             const UChar*    text,
+             const char16_t*    text,
              int32_t         textLength,
              UErrorCode*     status)
 {
@@ -195,7 +195,7 @@
     UText  ut = UTEXT_INITIALIZER;
     utext_openUChars(&ut, text, textLength, status);
     ((BreakIterator*)bi)->setText(&ut, *status);
-    // A stack allocated UText wrapping a UChar * string
+    // A stack allocated UText wrapping a char16_t * string
     //   can be dumped without explicitly closing it.
 }
 
@@ -304,11 +304,11 @@
                      ULocDataLocaleType type,
                      UErrorCode* status)
 {
-    if (bi == NULL) {
+    if (bi == nullptr) {
         if (U_SUCCESS(*status)) {
             *status = U_ILLEGAL_ARGUMENT_ERROR;
         }
-        return NULL;
+        return nullptr;
     }
     return ((BreakIterator*)bi)->getLocaleID(type, *status);
 }
@@ -331,12 +331,12 @@
     if (U_FAILURE(*status)) {
         return 0;
     }
-    if ((binaryRules == NULL && rulesCapacity > 0) || rulesCapacity < 0) {
+    if ((binaryRules == nullptr && rulesCapacity > 0) || rulesCapacity < 0) {
         *status = U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
     RuleBasedBreakIterator* rbbi;
-    if ((rbbi = dynamic_cast<RuleBasedBreakIterator*>(reinterpret_cast<BreakIterator*>(bi))) == NULL) {
+    if ((rbbi = dynamic_cast<RuleBasedBreakIterator*>(reinterpret_cast<BreakIterator*>(bi))) == nullptr) {
         *status = U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -346,7 +346,7 @@
         *status = U_INDEX_OUTOFBOUNDS_ERROR;
         return 0;
     }
-    if (binaryRules != NULL) { // if not preflighting
+    if (binaryRules != nullptr) { // if not preflighting
         // Here we know rulesLength <= INT32_MAX and rulesCapacity >= 0, can cast safely
         if ((int32_t)rulesLength > rulesCapacity) {
             *status = U_BUFFER_OVERFLOW_ERROR;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -50,7 +50,7 @@
     }
 
     /* add the start code point of each same-value range of the trie */
-    utrie2_enum(&ucase_props_singleton.trie, NULL, _enumPropertyStartsRange, sa);
+    utrie2_enum(&ucase_props_singleton.trie, nullptr, _enumPropertyStartsRange, sa);
 
     /* add code points with hardcoded properties, plus the ones following them */
 
@@ -195,47 +195,17 @@
     return c;
 }
 
-static const UChar iDot[2] = { 0x69, 0x307 };
-static const UChar jDot[2] = { 0x6a, 0x307 };
-static const UChar iOgonekDot[3] = { 0x12f, 0x307 };
-static const UChar iDotGrave[3] = { 0x69, 0x307, 0x300 };
-static const UChar iDotAcute[3] = { 0x69, 0x307, 0x301 };
-static const UChar iDotTilde[3] = { 0x69, 0x307, 0x303 };
+static const char16_t iDot[2] = { 0x69, 0x307 };
+static const char16_t jDot[2] = { 0x6a, 0x307 };
+static const char16_t iOgonekDot[3] = { 0x12f, 0x307 };
+static const char16_t iDotGrave[3] = { 0x69, 0x307, 0x300 };
+static const char16_t iDotAcute[3] = { 0x69, 0x307, 0x301 };
+static const char16_t iDotTilde[3] = { 0x69, 0x307, 0x303 };
 
 
 U_CFUNC void U_EXPORT2
 ucase_addCaseClosure(UChar32 c, const USetAdder *sa) {
-    uint16_t props;
-
-    /*
-     * Hardcode the case closure of i and its relatives and ignore the
-     * data file data for these characters.
-     * The Turkic dotless i and dotted I with their case mapping conditions
-     * and case folding option make the related characters behave specially.
-     * This code matches their closure behavior to their case folding behavior.
-     */
-
-    switch(c) {
-    case 0x49:
-        /* regular i and I are in one equivalence class */
-        sa->add(sa->set, 0x69);
-        return;
-    case 0x69:
-        sa->add(sa->set, 0x49);
-        return;
-    case 0x130:
-        /* dotted I is in a class with <0069 0307> (for canonical equivalence with <0049 0307>) */
-        sa->addString(sa->set, iDot, 2);
-        return;
-    case 0x131:
-        /* dotless i is in a class by itself */
-        return;
-    default:
-        /* otherwise use the data file data */
-        break;
-    }
-
-    props=UTRIE2_GET16(&ucase_props_singleton.trie, c);
+    uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c);
     if(!UCASE_HAS_EXCEPTION(props)) {
         if(UCASE_GET_TYPE(props)!=UCASE_NONE) {
             /* add the one simple case mapping, no matter what type it is */
@@ -249,19 +219,42 @@
          * c has exceptions, so there may be multiple simple and/or
          * full case mappings. Add them all.
          */
-        const uint16_t *pe0, *pe=GET_EXCEPTIONS(&ucase_props_singleton, props);
-        const UChar *closure;
+        const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props);
         uint16_t excWord=*pe++;
-        int32_t idx, closureLength, fullLength, length;
+        const uint16_t *pe0=pe;
 
-        pe0=pe;
+        // Hardcode the case closure of i and its relatives and ignore the
+        // data file data for these characters.
+        // The Turkic dotless i and dotted I with their case mapping conditions
+        // and case folding option make the related characters behave specially.
+        // This code matches their closure behavior to their case folding behavior.
+        if (excWord&UCASE_EXC_CONDITIONAL_FOLD) {
+            // These characters have Turkic case foldings. Hardcode their closure.
+            if (c == 0x49) {
+                // Regular i and I are in one equivalence class.
+                sa->add(sa->set, 0x69);
+                return;
+            } else if (c == 0x130) {
+                // Dotted I is in a class with <0069 0307>
+                // (for canonical equivalence with <0049 0307>).
+                sa->addString(sa->set, iDot, 2);
+                return;
+            }
+        } else if (c == 0x69) {
+            sa->add(sa->set, 0x49);
+            return;
+        } else if (c == 0x131) {
+            // Dotless i is in a class by itself.
+            return;
+        }
 
         /* add all simple case mappings */
-        for(idx=UCASE_EXC_LOWER; idx<=UCASE_EXC_TITLE; ++idx) {
+        for(int32_t idx=UCASE_EXC_LOWER; idx<=UCASE_EXC_TITLE; ++idx) {
             if(HAS_SLOT(excWord, idx)) {
                 pe=pe0;
-                GET_SLOT_VALUE(excWord, idx, pe, c);
-                sa->add(sa->set, c);
+                UChar32 mapping;
+                GET_SLOT_VALUE(excWord, idx, pe, mapping);
+                sa->add(sa->set, mapping);
             }
         }
         if(HAS_SLOT(excWord, UCASE_EXC_DELTA)) {
@@ -272,19 +265,22 @@
         }
 
         /* get the closure string pointer & length */
+        const char16_t *closure;
+        int32_t closureLength;
         if(HAS_SLOT(excWord, UCASE_EXC_CLOSURE)) {
             pe=pe0;
             GET_SLOT_VALUE(excWord, UCASE_EXC_CLOSURE, pe, closureLength);
             closureLength&=UCASE_CLOSURE_MAX_LENGTH; /* higher bits are reserved */
-            closure=(const UChar *)pe+1; /* behind this slot, unless there are full case mappings */
+            closure=(const char16_t *)pe+1; /* behind this slot, unless there are full case mappings */
         } else {
             closureLength=0;
-            closure=NULL;
+            closure=nullptr;
         }
 
         /* add the full case folding */
         if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
             pe=pe0;
+            int32_t fullLength;
             GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, fullLength);
 
             /* start of full case mapping strings */
@@ -297,9 +293,9 @@
             fullLength>>=4;
 
             /* add the full case folding string */
-            length=fullLength&0xf;
+            int32_t length=fullLength&0xf;
             if(length!=0) {
-                sa->addString(sa->set, (const UChar *)pe, length);
+                sa->addString(sa->set, (const char16_t *)pe, length);
                 pe+=length;
             }
 
@@ -309,23 +305,123 @@
             fullLength>>=4;
             pe+=fullLength;
 
-            closure=(const UChar *)pe; /* behind full case mappings */
+            closure=(const char16_t *)pe; /* behind full case mappings */
         }
 
         /* add each code point in the closure string */
-        for(idx=0; idx<closureLength;) {
-            U16_NEXT_UNSAFE(closure, idx, c);
-            sa->add(sa->set, c);
+        for(int32_t idx=0; idx<closureLength;) {
+            UChar32 mapping;
+            U16_NEXT_UNSAFE(closure, idx, mapping);
+            sa->add(sa->set, mapping);
         }
     }
 }
 
+U_CFUNC void U_EXPORT2
+ucase_addSimpleCaseClosure(UChar32 c, const USetAdder *sa) {
+    uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c);
+    if(!UCASE_HAS_EXCEPTION(props)) {
+        if(UCASE_GET_TYPE(props)!=UCASE_NONE) {
+            /* add the one simple case mapping, no matter what type it is */
+            int32_t delta=UCASE_GET_DELTA(props);
+            if(delta!=0) {
+                sa->add(sa->set, c+delta);
+            }
+        }
+    } else {
+        // c has exceptions. Add the mappings relevant for scf=Simple_Case_Folding.
+        const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props);
+        uint16_t excWord=*pe++;
+        const uint16_t *pe0=pe;
+
+        // Hardcode the case closure of i and its relatives and ignore the
+        // data file data for these characters, like in ucase_addCaseClosure().
+        if (excWord&UCASE_EXC_CONDITIONAL_FOLD) {
+            // These characters have Turkic case foldings. Hardcode their closure.
+            if (c == 0x49) {
+                // Regular i and I are in one equivalence class.
+                sa->add(sa->set, 0x69);
+                return;
+            } else if (c == 0x130) {
+                // For scf=Simple_Case_Folding, dotted I is in a class by itself.
+                return;
+            }
+        } else if (c == 0x69) {
+            sa->add(sa->set, 0x49);
+            return;
+        } else if (c == 0x131) {
+            // Dotless i is in a class by itself.
+            return;
+        }
+
+        // Add all simple case mappings.
+        for(int32_t idx=UCASE_EXC_LOWER; idx<=UCASE_EXC_TITLE; ++idx) {
+            if(HAS_SLOT(excWord, idx)) {
+                pe=pe0;
+                UChar32 mapping;
+                GET_SLOT_VALUE(excWord, idx, pe, mapping);
+                sa->add(sa->set, mapping);
+            }
+        }
+        if(HAS_SLOT(excWord, UCASE_EXC_DELTA)) {
+            pe=pe0;
+            int32_t delta;
+            GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta);
+            UChar32 mapping = (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta;
+            sa->add(sa->set, mapping);
+        }
+
+        /* get the closure string pointer & length */
+        const char16_t *closure;
+        int32_t closureLength;
+        if(HAS_SLOT(excWord, UCASE_EXC_CLOSURE)) {
+            pe=pe0;
+            GET_SLOT_VALUE(excWord, UCASE_EXC_CLOSURE, pe, closureLength);
+            closureLength&=UCASE_CLOSURE_MAX_LENGTH; /* higher bits are reserved */
+            closure=(const char16_t *)pe+1; /* behind this slot, unless there are full case mappings */
+        } else {
+            closureLength=0;
+            closure=nullptr;
+        }
+
+        // Skip the full case mappings.
+        if(closureLength > 0 && HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
+            pe=pe0;
+            int32_t fullLength;
+            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, fullLength);
+
+            /* start of full case mapping strings */
+            ++pe;
+
+            fullLength&=0xffff; /* bits 16 and higher are reserved */
+
+            // Skip all 4 full case mappings.
+            pe+=fullLength&UCASE_FULL_LOWER;
+            fullLength>>=4;
+            pe+=fullLength&0xf;
+            fullLength>>=4;
+            pe+=fullLength&0xf;
+            fullLength>>=4;
+            pe+=fullLength;
+
+            closure=(const char16_t *)pe; /* behind full case mappings */
+        }
+
+        // Add each code point in the closure string whose scf maps back to c.
+        for(int32_t idx=0; idx<closureLength;) {
+            UChar32 mapping;
+            U16_NEXT_UNSAFE(closure, idx, mapping);
+            sa->add(sa->set, mapping);
+        }
+    }
+}
+
 /*
  * compare s, which has a length, with t, which has a maximum length or is NUL-terminated
  * must be length>0 and max>0 and length<=max
  */
 static inline int32_t
-strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) {
+strcmpMax(const char16_t *s, int32_t length, const char16_t *t, int32_t max) {
     int32_t c1, c2;
 
     max-=length; /* we require length<=max, so no need to decrement max in the loop */
@@ -350,10 +446,10 @@
 }
 
 U_CFUNC UBool U_EXPORT2
-ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa) {
+ucase_addStringCaseClosure(const char16_t *s, int32_t length, const USetAdder *sa) {
     int32_t i, start, limit, result, unfoldRows, unfoldRowWidth, unfoldStringWidth;
 
-    if(ucase_props_singleton.unfold==NULL || s==NULL) {
+    if(ucase_props_singleton.unfold==nullptr || s==nullptr) {
         return false; /* no reverse case folding data, or no string */
     }
     if(length<=1) {
@@ -383,7 +479,7 @@
     limit=unfoldRows;
     while(start<limit) {
         i=(start+limit)/2;
-        const UChar *p=reinterpret_cast<const UChar *>(unfold+(i*unfoldRowWidth));
+        const char16_t *p=reinterpret_cast<const char16_t *>(unfold+(i*unfoldRowWidth));
         result=strcmpMax(s, length, p, unfoldStringWidth);
 
         if(result==0) {
@@ -409,7 +505,7 @@
 U_NAMESPACE_BEGIN
 
 FullCaseFoldingIterator::FullCaseFoldingIterator()
-        : unfold(reinterpret_cast<const UChar *>(ucase_props_singleton.unfold)),
+        : unfold(reinterpret_cast<const char16_t *>(ucase_props_singleton.unfold)),
           unfoldRows(unfold[UCASE_UNFOLD_ROWS]),
           unfoldRowWidth(unfold[UCASE_UNFOLD_ROW_WIDTH]),
           unfoldStringWidth(unfold[UCASE_UNFOLD_STRING_WIDTH]),
@@ -421,7 +517,7 @@
 UChar32
 FullCaseFoldingIterator::next(UnicodeString &full) {
     // Advance past the last-delivered code point.
-    const UChar *p=unfold+(currentRow*unfoldRowWidth);
+    const char16_t *p=unfold+(currentRow*unfoldRowWidth);
     if(rowCpIndex>=unfoldRowWidth || p[rowCpIndex]==0) {
         ++currentRow;
         p+=unfoldRowWidth;
@@ -708,7 +804,7 @@
 #define is_sep(c) ((c)=='_' || (c)=='-' || (c)==0)
 
 /**
- * Requires non-NULL locale ID but otherwise does the equivalent of
+ * Requires non-nullptr locale ID but otherwise does the equivalent of
  * checking for language codes as if uloc_getLanguage() were called:
  * Accepts both 2- and 3-letter codes and accepts case variants.
  */
@@ -721,7 +817,7 @@
      * examined and copied/transformed.
      *
      * Because this code does not want to depend on uloc, the caller must
-     * pass in a non-NULL locale, i.e., may need to call uloc_getDefault().
+     * pass in a non-nullptr locale, i.e., may need to call uloc_getDefault().
      */
     char c=*locale++;
     // Fastpath for English "en" which is often used for default (=root locale) case mappings,
@@ -904,7 +1000,7 @@
 isFollowedByCasedLetter(UCaseContextIterator *iter, void *context, int8_t dir) {
     UChar32 c;
 
-    if(iter==NULL) {
+    if(iter==nullptr) {
         return false;
     }
 
@@ -929,7 +1025,7 @@
     int32_t dotType;
     int8_t dir;
 
-    if(iter==NULL) {
+    if(iter==nullptr) {
         return false;
     }
 
@@ -986,7 +1082,7 @@
     int32_t dotType;
     int8_t dir;
 
-    if(iter==NULL) {
+    if(iter==nullptr) {
         return false;
     }
 
@@ -1010,7 +1106,7 @@
     int32_t dotType;
     int8_t dir;
 
-    if(iter==NULL) {
+    if(iter==nullptr) {
         return false;
     }
 
@@ -1033,7 +1129,7 @@
     int32_t dotType;
     int8_t dir;
 
-    if(iter==NULL) {
+    if(iter==nullptr) {
         return false;
     }
 
@@ -1053,7 +1149,7 @@
 U_CAPI int32_t U_EXPORT2
 ucase_toFullLower(UChar32 c,
                   UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
+                  const char16_t **pString,
                   int32_t loc) {
     // The sign of the result has meaning, input must be non-negative so that it can be returned as is.
     U_ASSERT(c >= 0);
@@ -1180,7 +1276,7 @@
             full&=UCASE_FULL_LOWER;
             if(full!=0) {
                 /* set the output pointer to the lowercase mapping */
-                *pString=reinterpret_cast<const UChar *>(pe+1);
+                *pString=reinterpret_cast<const char16_t *>(pe+1);
 
                 /* return the string length */
                 return full;
@@ -1204,7 +1300,7 @@
 static int32_t
 toUpperOrTitle(UChar32 c,
                UCaseContextIterator *iter, void *context,
-               const UChar **pString,
+               const char16_t **pString,
                int32_t loc,
                UBool upperNotTitle) {
     // The sign of the result has meaning, input must be non-negative so that it can be returned as is.
@@ -1286,7 +1382,7 @@
 
             if(full!=0) {
                 /* set the output pointer to the result string */
-                *pString=reinterpret_cast<const UChar *>(pe);
+                *pString=reinterpret_cast<const char16_t *>(pe);
 
                 /* return the string length */
                 return full;
@@ -1315,7 +1411,7 @@
 U_CAPI int32_t U_EXPORT2
 ucase_toFullUpper(UChar32 c,
                   UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
+                  const char16_t **pString,
                   int32_t caseLocale) {
     return toUpperOrTitle(c, iter, context, pString, caseLocale, true);
 }
@@ -1323,7 +1419,7 @@
 U_CAPI int32_t U_EXPORT2
 ucase_toFullTitle(UChar32 c,
                   UCaseContextIterator *iter, void *context,
-                  const UChar **pString,
+                  const char16_t **pString,
                   int32_t caseLocale) {
     return toUpperOrTitle(c, iter, context, pString, caseLocale, false);
 }
@@ -1440,7 +1536,7 @@
 
 U_CAPI int32_t U_EXPORT2
 ucase_toFullFolding(UChar32 c,
-                    const UChar **pString,
+                    const char16_t **pString,
                     uint32_t options) {
     // The sign of the result has meaning, input must be non-negative so that it can be returned as is.
     U_ASSERT(c >= 0);
@@ -1493,7 +1589,7 @@
 
             if(full!=0) {
                 /* set the output pointer to the result string */
-                *pString=reinterpret_cast<const UChar *>(pe);
+                *pString=reinterpret_cast<const char16_t *>(pe);
 
                 /* return the string length */
                 return full;
@@ -1562,7 +1658,7 @@
 U_CFUNC int32_t U_EXPORT2
 ucase_hasBinaryProperty(UChar32 c, UProperty which) {
     /* case mapping properties */
-    const UChar *resultString;
+    const char16_t *resultString;
     switch(which) {
     case UCHAR_LOWERCASE:
         return (UBool)(UCASE_LOWER==ucase_getType(c));
@@ -1589,17 +1685,17 @@
      * start sets for normalization and case mappings.
      */
     case UCHAR_CHANGES_WHEN_LOWERCASED:
-        return (UBool)(ucase_toFullLower(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0);
+        return (UBool)(ucase_toFullLower(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0);
     case UCHAR_CHANGES_WHEN_UPPERCASED:
-        return (UBool)(ucase_toFullUpper(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0);
+        return (UBool)(ucase_toFullUpper(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0);
     case UCHAR_CHANGES_WHEN_TITLECASED:
-        return (UBool)(ucase_toFullTitle(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0);
+        return (UBool)(ucase_toFullTitle(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0);
     /* case UCHAR_CHANGES_WHEN_CASEFOLDED: -- in uprops.c */
     case UCHAR_CHANGES_WHEN_CASEMAPPED:
         return (UBool)(
-            ucase_toFullLower(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0 ||
-            ucase_toFullUpper(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0 ||
-            ucase_toFullTitle(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0);
+            ucase_toFullLower(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0 ||
+            ucase_toFullUpper(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0 ||
+            ucase_toFullTitle(c, nullptr, nullptr, &resultString, UCASE_LOC_ROOT)>=0);
     default:
         return false;
     }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucase.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucase.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucase.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -108,6 +108,10 @@
 U_CFUNC void U_EXPORT2
 ucase_addCaseClosure(UChar32 c, const USetAdder *sa);
 
+/** Case closure with only scf=Simple_Case_Folding. */
+U_CFUNC void U_EXPORT2
+ucase_addSimpleCaseClosure(UChar32 c, const USetAdder *sa);
+
 /**
  * Maps the string to single code points and adds the associated case closure
  * mappings.
@@ -142,7 +146,7 @@
     FullCaseFoldingIterator(const FullCaseFoldingIterator &) = delete;  // no copy
     FullCaseFoldingIterator &operator=(const FullCaseFoldingIterator &) = delete;  // no assignment
 
-    const UChar *unfold;
+    const char16_t *unfold;
     int32_t unfoldRows;
     int32_t unfoldRowWidth;
     int32_t unfoldStringWidth;
@@ -159,9 +163,9 @@
 namespace LatinCase {
 
 /** Case mapping/folding data for code points up to U+017F. */
-constexpr UChar LIMIT = 0x180;
+constexpr char16_t LIMIT = 0x180;
 /** U+017F case-folds and uppercases crossing the ASCII boundary. */
-constexpr UChar LONG_S = 0x17f;
+constexpr char16_t LONG_S = 0x17f;
 /** Exception: Complex mapping, or too-large delta. */
 constexpr int8_t EXC = -0x80;
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -9,9 +9,9 @@
 
 #ifdef INCLUDED_FROM_UCASE_CPP
 
-static const UVersionInfo ucase_props_dataVersion={0xf,0,0,0};
+static const UVersionInfo ucase_props_dataVersion={0xf,1,0,0};
 
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x76f2,0x66c8,0x683,0x172,0,0,0,0,0,0,0,0,0,0,3};
+static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x76ec,0x66c8,0x680,0x172,0,0,0,0,0,0,0,0,0,0,3};
 
 static const uint16_t ucase_props_trieIndex[13148]={
 0x355,0x35d,0x365,0x36d,0x37b,0x383,0x38b,0x393,0x39b,0x3a3,0x3aa,0x3b2,0x3ba,0x3c2,0x3ca,0x3d2,
@@ -509,9 +509,9 @@
 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,0x46d9,0x4759,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4809,0x48b9,
+0x4979,0x391,0x49f9,0x4a79,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b29,0x4ba9,
+0x4c19,0,0x4c99,0x4d19,0xc012,0xc012,0xc112,0xc112,0x4dcb,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,
@@ -525,8 +525,8 @@
 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,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e3a,0,
+2,0,0x4e7a,0x4eba,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,
@@ -541,13 +541,13 @@
 0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
 0x1812,0x1812,0x1812,0x1812,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,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,
+0xe811,0xe811,0xe811,0xe811,0x92,0xff91,0x4efa,0x4f1a,0x4f3a,0x4f59,0x4f79,0x92,0xff91,0x92,0xff91,0x92,
+0xff91,0x4f9a,0x4fba,0x4fda,0x4ffa,1,0x92,0xff91,1,0x92,0xff91,1,1,1,1,1,
+0x25,5,0x501a,0x501a,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,0x5059,0x5059,
-0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0,0x5059,0,0,0,0,0,0x5059,0,0,
+0,0,0,0,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,
+0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,
+0x5039,0x5039,0x5039,0x5039,0x5039,0x5039,0,0x5039,0,0,0,0,0,0x5039,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,
@@ -562,7 +562,7 @@
 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,0x505a,0x5099,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,
@@ -573,11 +573,11 @@
 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,
+5,1,1,1,1,1,1,1,1,0x92,0xff91,0x92,0xff91,0x50da,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92,0xff91,0x50fa,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,
+0x92,0xff91,0x511a,0x513a,0x515a,0x517a,0x511a,1,0x519a,0x51ba,0x51da,0x51fa,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0xe812,0x521a,0x523a,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,5,5,5,0x92,0xff91,0,5,5,1,0,0,0,0,0,
@@ -607,17 +607,17 @@
 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,1,1,1,1,1,1,1,1,0x5259,1,1,1,1,
 1,1,1,4,5,5,5,5,1,1,1,1,1,1,1,1,
-1,5,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,
+1,5,4,4,0,0,0,0,0x5279,0x52a9,0x52d9,0x5309,0x5339,0x5369,0x5399,0x53c9,
+0x53f9,0x5429,0x5459,0x5489,0x54b9,0x54e9,0x5519,0x5549,0x5b79,0x5ba9,0x5bd9,0x5c09,0x5c39,0x5c69,0x5c99,0x5cc9,
+0x5cf9,0x5d29,0x5d59,0x5d89,0x5db9,0x5de9,0x5e19,0x5e49,0x5e79,0x5ea9,0x5ed9,0x5f09,0x5f39,0x5f69,0x5f99,0x5fc9,
+0x5ff9,0x6029,0x6059,0x6089,0x60b9,0x60e9,0x6119,0x6149,0x5579,0x55a9,0x55d9,0x5609,0x5639,0x5669,0x5699,0x56c9,
+0x56f9,0x5729,0x5759,0x5789,0x57b9,0x57e9,0x5819,0x5849,0x5879,0x58a9,0x58d9,0x5909,0x5939,0x5969,0x5999,0x59c9,
+0x59f9,0x5a29,0x5a59,0x5a89,0x5ab9,0x5ae9,0x5b19,0x5b49,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,0,0,0x6179,0x61f9,0x6279,0x62f9,0x63a9,0x6459,0x64e9,0,
+0,0,0,0,0,0,0,0,0,0,0,0x6589,0x6609,0x6689,0x6709,0x6789,
 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,
@@ -838,7 +838,7 @@
 0,0,0,0,0,0,0,0,0,0,0,0
 };
 
-static const uint16_t ucase_props_exceptions[1667]={
+static const uint16_t ucase_props_exceptions[1664]={
 0xc850,0x20,2,0x130,0x131,0x4810,0x20,0x841,0x6b,1,0x212a,0x841,0x73,1,0x17f,0x5c50,
 0x20,2,0x130,0x131,0x844,0x4b,1,0x212a,0x844,0x53,1,0x17f,0x806,0x3bc,0x39c,0x841,
 0xe5,1,0x212b,0x8c0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,0x1e9e,0x844,0xc5,1,
@@ -909,41 +909,40 @@
 0x3b7,0x3b9,0x397,0x399,0x880,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x880,0x2220,0x3b7,0x342,
 0x397,0x342,0x397,0x342,0x880,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0xc90,
 9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308,
-0x300,0x8c0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x880,0x2220,
-0x3b9,0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,
-0x342,0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0x8c0,1,0x3330,0x3c5,
-0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x880,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,
-0x313,0x880,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,
-0x342,0x3a5,0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x890,9,0x220,0x3c9,
-0x3b9,0x3a9,0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880,0x2220,0x3c9,0x342,0x3a9,
-0x342,0x3a9,0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0xc90,9,
-0x220,0x3c9,0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1,0x4b,0xc50,0x2046,1,
-0xc5,0xc10,0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10,0x2a1c,0xc10,0x29fd,0xc10,
-0x2a1f,0xc10,0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844,0xa64a,1,0x1c88,0xc10,
-0x8a04,0xc10,0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10,0xa512,0xc10,0xa52a,0xc10,
-0xa515,0x810,0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0,0x806,0x13a1,0x13a1,0x806,
-0x13a2,0x13a2,0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806,0x13a6,0x13a6,0x806,0x13a7,
-0x13a7,0x806,0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab,0x13ab,0x806,0x13ac,0x13ac,
-0x806,0x13ad,0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0,0x806,0x13b1,0x13b1,0x806,
-0x13b2,0x13b2,0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806,0x13b6,0x13b6,0x806,0x13b7,
-0x13b7,0x806,0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb,0x13bb,0x806,0x13bc,0x13bc,
-0x806,0x13bd,0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0,0x806,0x13c1,0x13c1,0x806,
-0x13c2,0x13c2,0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806,0x13c6,0x13c6,0x806,0x13c7,
-0x13c7,0x806,0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb,0x13cb,0x806,0x13cc,0x13cc,
-0x806,0x13cd,0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0,0x806,0x13d1,0x13d1,0x806,
-0x13d2,0x13d2,0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806,0x13d6,0x13d6,0x806,0x13d7,
-0x13d7,0x806,0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db,0x13db,0x806,0x13dc,0x13dc,
-0x806,0x13dd,0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0,0x806,0x13e1,0x13e1,0x806,
-0x13e2,0x13e2,0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806,0x13e6,0x13e6,0x806,0x13e7,
-0x13e7,0x806,0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb,0x13eb,0x806,0x13ec,0x13ec,
-0x806,0x13ed,0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66,0x66,0x46,0x46,0x46,
-0x66,0x880,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66,0x6c,0x46,0x4c,0x46,
-0x6c,0x880,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x880,0x3330,0x66,0x66,
-0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,
-0xfb06,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880,0x2220,0x574,0x576,0x544,
-0x546,0x544,0x576,0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880,0x2220,0x574,0x56b,0x544,
-0x53b,0x544,0x56b,0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880,0x2220,0x574,0x56d,0x544,
-0x53d,0x544,0x56d
+0x300,0x882,0x390,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x880,0x2220,0x3b9,
+0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,0x342,
+0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0x882,0x3b0,0x3330,0x3c5,0x308,
+0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x880,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,0x313,0x880,
+0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,0x342,0x3a5,
+0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x890,9,0x220,0x3c9,0x3b9,0x3a9,
+0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880,0x2220,0x3c9,0x342,0x3a9,0x342,0x3a9,
+0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0xc90,9,0x220,0x3c9,
+0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1,0x4b,0xc50,0x2046,1,0xc5,0xc10,
+0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10,0x2a1c,0xc10,0x29fd,0xc10,0x2a1f,0xc10,
+0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844,0xa64a,1,0x1c88,0xc10,0x8a04,0xc10,
+0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10,0xa512,0xc10,0xa52a,0xc10,0xa515,0x810,
+0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0,0x806,0x13a1,0x13a1,0x806,0x13a2,0x13a2,
+0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806,0x13a6,0x13a6,0x806,0x13a7,0x13a7,0x806,
+0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab,0x13ab,0x806,0x13ac,0x13ac,0x806,0x13ad,
+0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0,0x806,0x13b1,0x13b1,0x806,0x13b2,0x13b2,
+0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806,0x13b6,0x13b6,0x806,0x13b7,0x13b7,0x806,
+0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb,0x13bb,0x806,0x13bc,0x13bc,0x806,0x13bd,
+0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0,0x806,0x13c1,0x13c1,0x806,0x13c2,0x13c2,
+0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806,0x13c6,0x13c6,0x806,0x13c7,0x13c7,0x806,
+0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb,0x13cb,0x806,0x13cc,0x13cc,0x806,0x13cd,
+0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0,0x806,0x13d1,0x13d1,0x806,0x13d2,0x13d2,
+0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806,0x13d6,0x13d6,0x806,0x13d7,0x13d7,0x806,
+0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db,0x13db,0x806,0x13dc,0x13dc,0x806,0x13dd,
+0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0,0x806,0x13e1,0x13e1,0x806,0x13e2,0x13e2,
+0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806,0x13e6,0x13e6,0x806,0x13e7,0x13e7,0x806,
+0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb,0x13eb,0x806,0x13ec,0x13ec,0x806,0x13ed,
+0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66,0x66,0x46,0x46,0x46,0x66,0x880,
+0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66,0x6c,0x46,0x4c,0x46,0x6c,0x880,
+0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x880,0x3330,0x66,0x66,0x6c,0x46,
+0x46,0x4c,0x46,0x66,0x6c,0x882,0xfb06,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0x8c0,1,
+0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880,0x2220,0x574,0x576,0x544,0x546,0x544,0x576,
+0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880,0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,
+0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880,0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d
 };
 
 static const uint16_t ucase_props_unfold[370]={
@@ -974,7 +973,7 @@
 };
 
 static const UCaseProps ucase_props_singleton={
-  NULL,
+  nullptr,
   ucase_props_indexes,
   ucase_props_exceptions,
   ucase_props_unfold,
@@ -981,7 +980,7 @@
   {
     ucase_props_trieIndex,
     ucase_props_trieIndex+3412,
-    NULL,
+    nullptr,
     3412,
     9736,
     0x188,
@@ -990,7 +989,7 @@
     0x0,
     0xe0800,
     0x3358,
-    NULL, 0, false, false, 0, NULL
+    nullptr, 0, false, false, 0, nullptr
   },
   { 4,0,0,0 }
 };

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -49,7 +49,7 @@
 
 UCaseMap::UCaseMap(const char *localeID, uint32_t opts, UErrorCode *pErrorCode) :
 #if !UCONFIG_NO_BREAK_ITERATION
-        iter(NULL),
+        iter(nullptr),
 #endif
         caseLocale(UCASE_LOC_UNKNOWN), options(opts) {
     ucasemap_setLocale(this, localeID, pErrorCode);
@@ -64,15 +64,15 @@
 U_CAPI UCaseMap * U_EXPORT2
 ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) {
     if(U_FAILURE(*pErrorCode)) {
-        return NULL;
+        return nullptr;
     }
     UCaseMap *csm = new UCaseMap(locale, options, pErrorCode);
-    if(csm==NULL) {
+    if(csm==nullptr) {
         *pErrorCode = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
+        return nullptr;
     } else if (U_FAILURE(*pErrorCode)) {
         delete csm;
-        return NULL;
+        return nullptr;
     }
     return csm;
 }
@@ -97,7 +97,7 @@
     if(U_FAILURE(*pErrorCode)) {
         return;
     }
-    if (locale != NULL && *locale == 0) {
+    if (locale != nullptr && *locale == 0) {
         csm->locale[0] = 0;
         csm->caseLocale = UCASE_LOC_ROOT;
         return;
@@ -136,7 +136,7 @@
 
 /* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */
 inline UBool
-appendResult(int32_t cpLength, int32_t result, const UChar *s,
+appendResult(int32_t cpLength, int32_t result, const char16_t *s,
              ByteSink &sink, uint32_t options, icu::Edits *edits, UErrorCode &errorCode) {
     U_ASSERT(U_SUCCESS(errorCode));
 
@@ -143,7 +143,7 @@
     /* decode the result */
     if(result<0) {
         /* (not) original code point */
-        if(edits!=NULL) {
+        if(edits!=nullptr) {
             edits->addUnchanged(cpLength);
         }
         if((options & U_OMIT_UNCHANGED_TEXT) == 0) {
@@ -292,7 +292,7 @@
             break;
         }
         // slow path
-        const UChar *s;
+        const char16_t *s;
         if (caseLocale >= 0) {
             csc->cpStart = cpStart;
             csc->cpLimit = srcIndex;
@@ -402,7 +402,7 @@
         // slow path
         csc->cpStart = cpStart;
         csc->cpLimit = srcIndex;
-        const UChar *s;
+        const char16_t *s;
         c = ucase_toFullUpper(c, utf8_caseContextIterator, csc, &s, caseLocale);
         if (c >= 0) {
             ByteSinkUtil::appendUnchanged(src + prev, cpStart - prev,
@@ -580,7 +580,7 @@
                 if(c>=0) {
                     csc.cpStart=titleStart;
                     csc.cpLimit=titleLimit;
-                    const UChar *s;
+                    const char16_t *s;
                     c=ucase_toFullTitle(c, utf8_caseContextIterator, &csc, &s, caseLocale);
                     if (!appendResult(titleLimit-titleStart, c, s, sink, options, edits, errorCode)) {
                         return;
@@ -679,14 +679,18 @@
             // Adding one only to the final vowel in a longer sequence
             // (which does not occur in normal writing) would require lookahead.
             // Set the same flag as for preserving an existing dialytika.
-            if ((data & HAS_VOWEL) != 0 && (state & AFTER_VOWEL_WITH_ACCENT) != 0 &&
-                    (upper == 0x399 || upper == 0x3A5)) {
-                data |= HAS_DIALYTIKA;
+            if ((data & HAS_VOWEL) != 0 &&
+                (state & (AFTER_VOWEL_WITH_PRECOMPOSED_ACCENT | AFTER_VOWEL_WITH_COMBINING_ACCENT)) !=
+                    0 &&
+                (upper == 0x399 || upper == 0x3A5)) {
+                data |= (state & AFTER_VOWEL_WITH_PRECOMPOSED_ACCENT) != 0 ? HAS_DIALYTIKA
+                                                                           : HAS_COMBINING_DIALYTIKA;
             }
             int32_t numYpogegrammeni = 0;  // Map each one to a trailing, spacing, capital iota.
             if ((data & HAS_YPOGEGRAMMENI) != 0) {
                 numYpogegrammeni = 1;
             }
+            const UBool hasPrecomposedAccent = (data & HAS_ACCENT) != 0;
             // Skip combining diacritics after this Greek letter.
             int32_t nextNextIndex = nextIndex;
             while (nextIndex < srcLength) {
@@ -704,7 +708,8 @@
                 }
             }
             if ((data & HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA) == HAS_VOWEL_AND_ACCENT) {
-                nextState |= AFTER_VOWEL_WITH_ACCENT;
+                nextState |= hasPrecomposedAccent ? AFTER_VOWEL_WITH_PRECOMPOSED_ACCENT
+                                                  : AFTER_VOWEL_WITH_COMBINING_ACCENT;
             }
             // Map according to Greek rules.
             UBool addTonos = false;
@@ -715,7 +720,7 @@
                     !isFollowedByCasedLetter(src, nextIndex, srcLength)) {
                 // Keep disjunctive "or" with (only) a tonos.
                 // We use the same "word boundary" conditions as for the Final_Sigma test.
-                if (i == nextIndex) {
+                if (hasPrecomposedAccent) {
                     upper = 0x389;  // Preserve the precomposed form.
                 } else {
                     addTonos = true;
@@ -757,11 +762,11 @@
                 int32_t newLength = (i2 - i) + numYpogegrammeni * 2;  // 2 bytes per U+0399
                 change |= oldLength != newLength;
                 if (change) {
-                    if (edits != NULL) {
+                    if (edits != nullptr) {
                         edits->addReplace(oldLength, newLength);
                     }
                 } else {
-                    if (edits != NULL) {
+                    if (edits != nullptr) {
                         edits->addUnchanged(oldLength);
                     }
                     // Write unchanged text?
@@ -783,8 +788,8 @@
                 }
             }
         } else if(c>=0) {
-            const UChar *s;
-            c=ucase_toFullUpper(c, NULL, NULL, &s, UCASE_LOC_GREEK);
+            const char16_t *s;
+            c=ucase_toFullUpper(c, nullptr, nullptr, &s, UCASE_LOC_GREEK);
             if (!appendResult(nextIndex - i, c, s, sink, options, edits, errorCode)) {
                 return;
             }
@@ -891,8 +896,8 @@
         return 0;
     }
     if( destCapacity<0 ||
-        (dest==NULL && destCapacity>0) ||
-        (src==NULL && srcLength!=0) || srcLength<-1
+        (dest==nullptr && destCapacity>0) ||
+        (src==nullptr && srcLength!=0) || srcLength<-1
     ) {
         errorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
@@ -904,7 +909,7 @@
     }
 
     /* check for overlapping source and destination */
-    if( dest!=NULL &&
+    if( dest!=nullptr &&
         ((src>=dest && src<(dest+destCapacity)) ||
          (dest>=src && dest<(src+srcLength)))
     ) {
@@ -940,7 +945,7 @@
         csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL
         dest, destCapacity,
         src, srcLength,
-        ucasemap_internalUTF8ToLower, NULL, *pErrorCode);
+        ucasemap_internalUTF8ToLower, nullptr, *pErrorCode);
 }
 
 U_CAPI int32_t U_EXPORT2
@@ -952,7 +957,7 @@
         csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL
         dest, destCapacity,
         src, srcLength,
-        ucasemap_internalUTF8ToUpper, NULL, *pErrorCode);
+        ucasemap_internalUTF8ToUpper, nullptr, *pErrorCode);
 }
 
 U_CAPI int32_t U_EXPORT2
@@ -964,7 +969,7 @@
         UCASE_LOC_ROOT, csm->options, UCASEMAP_BREAK_ITERATOR_NULL
         dest, destCapacity,
         src, srcLength,
-        ucasemap_internalUTF8Fold, NULL, *pErrorCode);
+        ucasemap_internalUTF8Fold, nullptr, *pErrorCode);
 }
 
 U_NAMESPACE_BEGIN

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -139,8 +139,8 @@
 /** Implements UStringCaseMapper. */
 U_CFUNC int32_t U_CALLCONV
 ustrcase_internalToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
-                         UChar *dest, int32_t destCapacity,
-                         const UChar *src, int32_t srcLength,
+                         char16_t *dest, int32_t destCapacity,
+                         const char16_t *src, int32_t srcLength,
                          icu::Edits *edits,
                          UErrorCode &errorCode);
 
@@ -147,8 +147,8 @@
 /** Implements UStringCaseMapper. */
 U_CFUNC int32_t U_CALLCONV
 ustrcase_internalToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
-                         UChar *dest, int32_t destCapacity,
-                         const UChar *src, int32_t srcLength,
+                         char16_t *dest, int32_t destCapacity,
+                         const char16_t *src, int32_t srcLength,
                          icu::Edits *edits,
                          UErrorCode &errorCode);
 
@@ -158,8 +158,8 @@
 U_CFUNC int32_t U_CALLCONV
 ustrcase_internalToTitle(int32_t caseLocale, uint32_t options,
                          icu::BreakIterator *iter,
-                         UChar *dest, int32_t destCapacity,
-                         const UChar *src, int32_t srcLength,
+                         char16_t *dest, int32_t destCapacity,
+                         const char16_t *src, int32_t srcLength,
                          icu::Edits *edits,
                          UErrorCode &errorCode);
 
@@ -168,8 +168,8 @@
 /** Implements UStringCaseMapper. */
 U_CFUNC int32_t U_CALLCONV
 ustrcase_internalFold(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
-                      UChar *dest, int32_t destCapacity,
-                      const UChar *src, int32_t srcLength,
+                      char16_t *dest, int32_t destCapacity,
+                      const char16_t *src, int32_t srcLength,
                       icu::Edits *edits,
                       UErrorCode &errorCode);
 
@@ -179,8 +179,8 @@
  */
 U_CFUNC int32_t
 ustrcase_map(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
-             UChar *dest, int32_t destCapacity,
-             const UChar *src, int32_t srcLength,
+             char16_t *dest, int32_t destCapacity,
+             const char16_t *src, int32_t srcLength,
              UStringCaseMapper *stringCaseMapper,
              icu::Edits *edits,
              UErrorCode &errorCode);
@@ -192,8 +192,8 @@
  */
 U_CFUNC int32_t
 ustrcase_mapWithOverlap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM
-                        UChar *dest, int32_t destCapacity,
-                        const UChar *src, int32_t srcLength,
+                        char16_t *dest, int32_t destCapacity,
+                        const char16_t *src, int32_t srcLength,
                         UStringCaseMapper *stringCaseMapper,
                         UErrorCode &errorCode);
 
@@ -263,7 +263,8 @@
 
 // State bits.
 static const uint32_t AFTER_CASED = 1;
-static const uint32_t AFTER_VOWEL_WITH_ACCENT = 2;
+static const uint32_t AFTER_VOWEL_WITH_COMBINING_ACCENT = 2;
+static const uint32_t AFTER_VOWEL_WITH_PRECOMPOSED_ACCENT = 4;
 
 uint32_t getLetterData(UChar32 c);
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -66,7 +66,7 @@
     utext_openUTF8(&utext, src, srcLength, &errorCode);
     LocalPointer<BreakIterator> ownedIter;
     iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode);
-    if(iter==NULL) {
+    if(iter==nullptr) {
         utext_close(&utext);
         return 0;
     }
@@ -111,7 +111,7 @@
     if (U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if(csm->iter==NULL) {
+    if(csm->iter==nullptr) {
         LocalPointer<BreakIterator> ownedIter;
         BreakIterator *iter = ustrcase_getTitleBreakIterator(
             nullptr, csm->locale, csm->options, nullptr, ownedIter, *pErrorCode);
@@ -126,7 +126,7 @@
             csm->caseLocale, csm->options, csm->iter,
             dest, destCapacity,
             src, srcLength,
-            ucasemap_internalUTF8ToTitle, NULL, *pErrorCode);
+            ucasemap_internalUTF8ToTitle, nullptr, *pErrorCode);
     utext_close(&utext);
     return length;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -43,18 +43,18 @@
 
 U_CAPI void U_EXPORT2
 u_catclose(u_nl_catd catd) {
-    ures_close((UResourceBundle*) catd); /* may be NULL */
+    ures_close((UResourceBundle*) catd); /* may be nullptr */
 }
 
-U_CAPI const UChar* U_EXPORT2
+U_CAPI const char16_t* U_EXPORT2
 u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num,
-          const UChar* s,
+          const char16_t* s,
           int32_t* len, UErrorCode* ec) {
 
     char key[MAX_KEY_LEN];
-    const UChar* result;
+    const char16_t* result;
 
-    if (ec == NULL || U_FAILURE(*ec)) {
+    if (ec == nullptr || U_FAILURE(*ec)) {
         goto ERROR;
     }
 
@@ -69,7 +69,7 @@
 
  ERROR:
     /* In case of any failure, return s */
-    if (len != NULL) {
+    if (len != nullptr) {
         *len = u_strlen(s);
     }
     return s;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp	2023-12-22 17:28:50 UTC (rev 69195)
@@ -76,7 +76,7 @@
 u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context) {
     struct _EnumTypeCallback callback;
 
-    if(enumRange==NULL) {
+    if(enumRange==nullptr) {
         return;
     }
 
@@ -304,30 +304,6 @@
     return (UBool)((CAT_MASK(props)&U_GC_P_MASK)!=0);
 }
 
-/* Checks if the Unicode character can start a Unicode identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isIDStart(UChar32 c) {
-    /* same as u_isalpha() */
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_NL_MASK))!=0);
-}
-
-/* Checks if the Unicode character can be a Unicode identifier part other than starting the
- identifier.*/
-U_CAPI UBool U_EXPORT2
-u_isIDPart(UChar32 c) {
-    uint32_t props;
-    GET_PROPS(c, props);
-    return (UBool)(
-           (CAT_MASK(props)&
-            (U_GC_ND_MASK|U_GC_NL_MASK|
-             U_GC_L_MASK|
-             U_GC_PC_MASK|U_GC_MC_MASK|U_GC_MN_MASK)
-           )!=0 ||
-           u_isIDIgnorable(c));
-}
-
 /*Checks if the Unicode character can be ignorable in a Java or Unicode identifier.*/
 U_CAPI UBool U_EXPORT2
 u_isIDIgnorable(UChar32 c) {
@@ -509,7 +485,7 @@
 
 U_CAPI void U_EXPORT2
 u_getUnicodeVersion(UVersionInfo versionArray) {
-    if(versionArray!=NULL) {
+    if(versionArray!=nullptr) {
         uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH);
     }
 }
@@ -546,7 +522,7 @@
 
 U_CAPI void U_EXPORT2
 u_charAge(UChar32 c, UVersionInfo versionArray) {
-    if(versionArray!=NULL) {
+    if(versionArray!=nullptr) {
         uint32_t version=u_getUnicodeProperties(c, 0)>>UPROPS_AGE_SHIFT;
         versionArray[0]=(uint8_t)(version>>4);
         versionArray[1]=(uint8_t)(version&0xf);
@@ -556,7 +532,7 @@
 
 U_CAPI UScriptCode U_EXPORT2
 uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return USCRIPT_INVALID_CODE;
     }
     if((uint32_t)c>0x10ffff) {
@@ -577,7 +553,7 @@
 }
 
 U_CAPI UBool U_EXPORT2
-uscript_hasScript(UChar32 c, UScriptCode sc) {
+uscript_hasScript(UChar32 c, UScriptCode sc) UPRV_NO_SANITIZE_UNDEFINED {
     uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
     uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
     if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
@@ -603,10 +579,10 @@
 uscript_getScriptExtensions(UChar32 c,
                             UScriptCode *scripts, int32_t capacity,
                             UErrorCode *pErrorCode) {
-    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
         return 0;
     }
-    if(capacity<0 || (capacity>0 && scripts==NULL)) {
+    if(capacity<0 || (capacity>0 && scripts==nullptr)) {
         *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
         return 0;
     }
@@ -666,7 +642,7 @@
     }
 
     /* add the start code point of each same-value range of the main trie */
-    utrie2_enum(&propsTrie, NULL, _enumPropertyStartsRange, sa);
+    utrie2_enum(&propsTrie, nullptr, _enumPropertyStartsRange, sa);
 
     /* add code points with hardcoded properties, plus the ones following them */
 
@@ -728,5 +704,5 @@
     }
 
     /* add the start code point of each same-value range of the properties vectors trie */
-    utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa);
+    utrie2_enum(&propsVectorsTrie, nullptr, _enumPropertyStartsRange, sa);
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h	2023-12-22 02:16:38 UTC (rev 69194)
+++ trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h	2023-12-22 17:28:50 UTC (rev 69195)
@@ -9,9 +9,9 @@
 
 #ifdef INCLUDED_FROM_UCHAR_C
 
-static const UVersionInfo dataVersion={0xf,0,0,0};
+static const UVersionInfo dataVersion={0xf,1,0,0};
 
-static const uint16_t propsTrie_index[23016]={
+static const uint16_t propsTrie_index[23156]={
 0x495,0x49d,0x4a5,0x4ad,0x4c5,0x4cd,0x4d5,0x4dd,0x4e5,0x4ed,0x4f3,0x4fb,0x503,0x50b,0x513,0x51b,
 0x521,0x529,0x531,0x539,0x53c,0x544,0x54c,0x554,0x55c,0x564,0x560,0x568,0x570,0x578,0x57d,0x585,
 0x58d,0x595,0x599,0x5a1,0x5a9,0x5b1,0x5b9,0x5c1,0x5bd,0x5c5,0x5ca,0x5d2,0x5d8,0x5e0,0x5e8,0x5f0,
@@ -51,53 +51,57 @@
 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,0x600,0x600,0x600,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x934,0x934,
-0xc2e,0x600,0xc31,0x600,0xc39,0xc3f,0xc47,0xc4f,0xc54,0x600,0x600,0xc58,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc5f,0x600,0xc66,0xc6c,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc74,0x600,0x600,0x600,0xc7c,0x600,
+0xc2e,0xc35,0xc37,0x600,0xc3f,0xc45,0xc4d,0xc55,0xc5a,0x600,0x600,0xc5e,0x600,0x600,0x600,0xc64,
+0xc6b,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc72,0x600,0xc79,0xc7f,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc87,0x600,0x600,0x600,0xc8f,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0xc7e,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc85,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0xc91,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xc98,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0xc8c,0x600,0x600,0x600,0xc93,0xc9b,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0xc9f,0x600,0x600,0x600,0xca6,0xcae,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,0x600,0x600,0xca0,0x600,0x600,0xca8,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0xcb3,0xcb8,0x600,0x600,0xcc0,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xcac,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xcc4,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,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xcc9,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xcc7,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,0x600,0x600,0x600,0xcaf,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xcd1,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,0x600,0x600,0x600,0xcb2,0x600,0x600,0x600,
+0x600,0x600,0x600,0xcd7,0xcdf,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,0xce5,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0xcb8,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,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0xcec,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,0xcf1,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,0x600,0x600,
-0x600,0x600,0x600,0x600,0xcc0,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,0xcc5,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,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0xcf6,0x600,0x600,0x600,0xc32,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0xcca,0x600,0x600,0x600,0xccf,0x600,0x600,0x600,0x600,0x600,0x600,
+0xcd3,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0xcfc,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0xd04,0xd0b,0xd0f,0x600,0x600,0x600,0xccb,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,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,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0xcd7,0xcde,0xce2,0x600,0x600,0x600,0xce9,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0xd1e,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,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0xd16,0x934,0xd26,0x9ad,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0xd2b,0xd33,0x4e5,0xd43,0xd3b,0x600,0x600,0xd4b,0xd53,0xd63,0x4e5,0xd68,0xd70,0xd76,0xd7d,0xd5b,
+0xd85,0xd8d,0x600,0xd95,0xda5,0xda8,0xd9d,0xdb0,0x655,0xdb8,0xdbf,0x8f6,0x6a3,0xdcf,0xdc7,0xdd7,
+0x600,0xddf,0xde7,0xdef,0x600,0xdf7,0xdff,0xe07,0xe0f,0xe17,0xe1b,0xe23,0x535,0x535,0x600,0xe2b,
 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,0x600,0x600,0x600,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0xcf7,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,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0xcef,0x934,0xcff,0x9ad,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0xd04,0xd0c,0x4e5,0xd1c,0xd14,0x600,0x600,0xd24,0xd2c,0xd3c,0x4e5,0xd41,0xd49,0xd4f,0xd56,0xd34,
-0xd5e,0xd66,0x600,0xd6e,0xd7e,0xd81,0xd76,0xd89,0x655,0xd91,0xd98,0x8f6,0x6a3,0xda8,0xda0,0xdb0,
-0x600,0xdb8,0xdc0,0xdc8,0x600,0xdd0,0xdd8,0xde0,0xde8,0xdf0,0xdf4,0xdfc,0x535,0x535,0x600,0xe04,
 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,0x600,0x600,0x600,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
@@ -115,33 +119,29 @@
 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,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,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,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,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe0c,0xe18,0xe10,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe33,0xe3f,0xe37,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,
-0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0x600,0x600,0x600,0xe30,0x600,0xcea,0xe37,0xe3c,
-0x600,0x600,0x600,0xe44,0x600,0x600,0x901,0x4b5,0xe5a,0xe4a,0xe52,0x600,0x600,0xe62,0xe6a,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe6f,0x938,0x600,0xe77,0x600,0xe7d,0xe81,
-0xe89,0xe91,0xe98,0xea0,0x600,0x600,0x600,0xea6,0xebe,0x4a5,0xec6,0xece,0xed3,0x916,0xeae,0xeb6,
-0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,
-0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,0xe20,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0x600,0x600,0x600,0xe57,0x600,0xccc,0xe5e,0xe63,
+0x600,0x600,0x600,0xe6b,0x600,0x600,0x901,0x4b5,0xe81,0xe71,0xe79,0x600,0x600,0xe89,0xe91,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe96,0x938,0x600,0xe9e,0x600,0xea4,0xea8,
+0xeb0,0xeb8,0xebf,0xec7,0x600,0x600,0x600,0xecd,0xee5,0x4a5,0xeed,0xef5,0xefa,0x916,0xed5,0xedd,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
+0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,0xe47,
 0x12d4,0x12d4,0x1314,0x1354,0x1394,0x13cc,0x140c,0x144c,0x1484,0x14c4,0x14f0,0x1530,0x1570,0x1580,0x15c0,0x15f4,
 0x1634,0x1664,0x16a4,0x16e4,0x16f4,0x1728,0x1760,0x17a0,0x17e0,0x1820,0x1854,0x1880,0x18c0,0x18f8,0x1914,0x1954,
 0xa80,0xac0,0xb00,0xb40,0xb80,0xbab,0xbeb,0xa40,0xc0e,0xa40,0xa40,0xa40,0xa40,0xc4e,0x1db,0x1db,
@@ -180,98 +180,98 @@
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0xedb,0xee2,0xeea,0x4b5,0x600,0x600,0x600,0xef2,0xf02,0xefa,0xf19,0xf0a,0xf11,0xf21,0xf25,0xf29,
-0x4b5,0x4b5,0x4b5,0x4b5,0x8f6,0x600,0xf31,0xf39,0x600,0xf41,0xf49,0xf4d,0xf55,0x600,0xf5d,0x4b5,
-0x58d,0x597,0xf65,0x600,0xf69,0xf71,0xf81,0xf79,0x600,0xf89,0x600,0xf90,0xfa0,0xf98,0x4b5,0x4b5,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xb88,0x902,0xfa8,0xfb8,0xfb0,0x4b5,0x4b5,
-0xfc8,0xfc0,0xfcb,0xfd3,0x916,0xfdb,0x4b5,0xfe3,0xfeb,0xff3,0x4b5,0x4b5,0x600,0x1003,0x100b,0xffb,
-0x101b,0x1022,0x1013,0x102a,0x1032,0x4b5,0x1042,0x103a,0x600,0x1045,0x104d,0x1055,0x105d,0x1065,0x4b5,0x4b5,
-0x600,0x600,0x106d,0x4b5,0x58d,0x1075,0x535,0x107d,0x600,0x1085,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x108d,0x600,0x1095,0x4b5,0x109a,0x10a2,0x10aa,0x10b1,0xfdf,0x10b9,0xfdf,0x10c1,0xb88,
-0x10d1,0x636,0x10d9,0x10c9,0x98f,0x10e1,0x10e9,0x10ef,0x1107,0x10f7,0x10ff,0x110b,0x98f,0x111b,0x1113,0x1123,
-0x113b,0x112b,0x1133,0x4b5,0x1142,0x114a,0x658,0x1152,0x1162,0x1168,0x1170,0x115a,0x4b5,0x4b5,0x4b5,0x4b5,
-0x600,0x1178,0x1180,0x1099,0x600,0x1188,0x1190,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x1198,0x11a0,0x4b5,
-0x600,0x11a8,0x11b0,0x11b8,0x600,0x11c8,0x11c0,0x4b5,0x870,0x11d0,0x11d8,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x600,0x11e0,0x4b5,0x4b5,0x4b5,0x58d,0x535,0x11e8,0x11f8,0x11fe,0x11f0,0x4b5,0x4b5,0x120e,0x1212,0x1206,
-0x122a,0x121a,0x1222,0x600,0x1238,0x1232,0x600,0x8f7,0x1248,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x1256,0x125b,0x1240,0x1250,0x126b,0x1263,0x4b5,0x4b5,0x127a,0x127e,0x1272,0x128e,0x1286,0x11c0,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1292,0x12a2,0x12a7,0x129a,0x4b5,0x4b5,0x12af,0x12bf,0x12b7,
+0xf02,0xf09,0xf11,0x4b5,0x600,0x600,0x600,0xf19,0xf29,0xf21,0xf40,0xf31,0xf38,0xf48,0xbbd,0xf50,
+0x4b5,0x4b5,0x4b5,0x4b5,0x8f6,0x600,0xf58,0xf60,0x600,0xf68,0xf70,0xf74,0xf7c,0x600,0xf84,0x4b5,
+0x58d,0x597,0xf8c,0x600,0xf90,0xf98,0xfa8,0xfa0,0x600,0xfb0,0x600,0xfb7,0xfc7,0xfbf,0x4b5,0x4b5,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xb88,0x902,0xfcf,0xfdf,0xfd7,0x4b5,0x4b5,
+0xfef,0xfe7,0xff2,0xffa,0x916,0x1002,0x4b5,0x100a,0x1012,0x101a,0x4b5,0x4b5,0x600,0x102a,0x1032,0x1022,
+0x1042,0x1049,0x103a,0x1051,0x1059,0x4b5,0x1069,0x1061,0x600,0x106c,0x1074,0x107c,0x1084,0x108c,0x4b5,0x4b5,
+0x600,0x600,0x1094,0x4b5,0x58d,0x109c,0x535,0x10a4,0x600,0x10ac,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x10b4,0x600,0x10bc,0x4b5,0x10c1,0x10c9,0x10d1,0x10d8,0x1006,0x10e0,0x1006,0x10e8,0xb88,
+0x10f8,0x636,0x1100,0x10f0,0x98f,0x1108,0x1110,0x1116,0x112e,0x111e,0x1126,0x1132,0x98f,0x1142,0x113a,0x114a,
+0x1162,0x1152,0x115a,0x4b5,0x1169,0x1171,0x658,0x1179,0x1189,0x118f,0x1197,0x1181,0x4b5,0x4b5,0x4b5,0x4b5,
+0x600,0x119f,0x11a7,0x10c0,0x600,0x11af,0x11b7,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x11bf,0x11c7,0x4b5,
+0x600,0x11cf,0x11d7,0x11df,0x600,0x11ef,0x11e7,0x4b5,0x870,0x11f7,0x11ff,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x600,0x1207,0x4b5,0x4b5,0x4b5,0x58d,0x535,0x120f,0x121f,0x1225,0x1217,0x4b5,0x4b5,0x1235,0x1239,0x122d,
+0x1251,0x1241,0x1249,0x600,0x125f,0x1259,0x600,0x8f7,0x126f,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x127d,0x1282,0x1267,0x1277,0x1292,0x128a,0x4b5,0x4b5,0x12a1,0x12a5,0x1299,0x12b5,0x12ad,0x11e7,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x12b9,0x12c9,0x12ce,0x12c1,0x4b5,0x4b5,0x12d6,0x12e6,0x12de,
 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,0x901,0x4b5,0x4b5,0x4b5,
-0x12cf,0x12d7,0x12df,0x12c7,0x600,0x600,0x600,0x600,0x600,0x600,0x12e7,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x12f6,0x12fe,0x1306,0x12ee,0x600,0x600,0x600,0x600,0x600,0x600,0x130e,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0xfdf,0x600,0x600,0x12ef,0x600,0x600,0x600,0x600,0x600,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1006,0x600,0x600,0x1316,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,0x600,0x600,0x600,0x600,0x600,0x12f7,0x12ff,0x4b5,0x4b5,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x131e,0x1326,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x11d8,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,
+0x11ff,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,
 0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x8f7,
-0x916,0xda4,0x600,0x916,0x1307,0x130c,0x600,0x131c,0x1324,0x132c,0x1314,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x916,0xdcb,0x600,0x916,0x132e,0x1333,0x600,0x1343,0x134b,0x1353,0x133b,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x58d,0x535,0x1334,0x4b5,0x4b5,0x4b5,0x600,0x600,0x133c,0x1341,0x1347,0x4b5,0x4b5,0x134f,0x600,0x600,
+0x58d,0x535,0x135b,0x4b5,0x4b5,0x4b5,0x600,0x600,0x1363,0x1368,0x136e,0x4b5,0x4b5,0x1376,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,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1357,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x137e,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,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x902,0x4b5,0x106d,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x600,0x600,0x600,0x600,0x902,0x4b5,0x1094,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x135d,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x1365,0x136a,0x1371,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe10,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1384,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x138c,0x1391,0x1398,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xe37,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,0x600,0x1377,0x137c,0x1384,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,0x600,0x139e,0x13a3,0x13ab,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x55c,0x1394,0x139b,0x934,0x934,0x934,0x138c,0x4b5,0x934,0x934,0x934,
-0x934,0x934,0x934,0x934,0xbb7,0x934,0x13a2,0x934,0x13a9,0x13b1,0x13b7,0x934,0xade,0x934,0x934,0x13bf,
-0x4b5,0x4b5,0x4b5,0x13c7,0x13c7,0x934,0x934,0xadb,0x13cf,0x4b5,0x4b5,0x4b5,0x4b5,0x13df,0x13e6,0x13eb,
-0x13f1,0x13f9,0x1401,0x1409,0x13e3,0x1411,0x1419,0x1421,0x1426,0x13f8,0x13df,0x13e6,0x13e2,0x13f1,0x142e,0x13e0,
-0x1431,0x13e3,0x1439,0x1441,0x1449,0x1450,0x143c,0x1444,0x144c,0x1453,0x143f,0x145b,0x13d7,0x934,0x934,0x934,
-0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x55c,0x146b,0x55c,
-0x1472,0x1479,0x1463,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x55c,0x13bb,0x13c2,0x934,0x934,0x934,0x13b3,0x4b5,0x934,0x934,0x934,
+0x934,0x934,0x934,0x934,0xbb7,0x934,0x13c9,0x934,0x13d0,0x13d8,0x13de,0x934,0xade,0x934,0x934,0x13e6,
+0x4b5,0x4b5,0x4b5,0x13ee,0x13ee,0x934,0x934,0xadb,0x13f6,0x4b5,0x4b5,0x4b5,0x4b5,0x1406,0x140d,0x1412,
+0x1418,0x1420,0x1428,0x1430,0x140a,0x1438,0x1440,0x1448,0x144d,0x141f,0x1406,0x140d,0x1409,0x1418,0x1455,0x1407,
+0x1458,0x140a,0x1460,0x1468,0x1470,0x1477,0x1463,0x146b,0x1473,0x147a,0x1466,0x1482,0x13fe,0x934,0x934,0x934,
+0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x55c,0x1492,0x55c,
+0x1499,0x14a0,0x148a,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1488,0x1490,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1480,0x1498,0x9d4,
-0x14a8,0x14a0,0x4b5,0x4b5,0x4b5,0x600,0x14b8,0x14b0,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0xfdf,0x14c0,0x600,0x14c8,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0xfdf,0x14d0,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x14d8,0x600,0x600,0x600,
-0x600,0x600,0x600,0x14e0,0x4b5,0x58d,0x14f0,0x14e8,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x14af,0x14b7,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x14a7,0x14bf,0x9d4,
+0x14cf,0x14c7,0x4b5,0x4b5,0x4b5,0x600,0x14df,0x14d7,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x1006,0x14e7,0x600,0x14ef,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x1006,0x14f7,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x14ff,0x600,0x600,0x600,
+0x600,0x600,0x600,0x1507,0x4b5,0x58d,0x1517,0x150f,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x14f8,0x1508,0x1500,0x4b5,0x4b5,0x1518,0x1510,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x1528,0x1530,0x1538,
-0x1540,0x1548,0x1550,0x4b5,0x1520,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x934,0x1558,0x934,
-0x934,0xbaf,0x13a0,0x1560,0xbb7,0x1568,0x934,0x934,0x934,0x934,0xbb9,0x4b5,0x1570,0x1578,0x157c,0x1584,
-0x158c,0x4b5,0x4b5,0x4b5,0x4b5,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x1594,0x934,0x934,0x934,
+0x151f,0x152f,0x1527,0x4b5,0x4b5,0x153f,0x1537,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x154f,0x1557,0x155f,
+0x1567,0x156f,0x1577,0x4b5,0x1547,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x934,0x157f,0x934,
+0x934,0xbaf,0x13c7,0x1587,0xbb7,0x158f,0x934,0x934,0x934,0x934,0xbb9,0x4b5,0x1597,0x159f,0x15a3,0x15ab,
+0x15b3,0x4b5,0x4b5,0x4b5,0x4b5,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x15bb,0x934,0x934,0x934,
 0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,
-0x934,0x934,0x934,0x157d,0x159c,0x934,0x934,0x934,0x15a4,0x934,0x934,0x15ab,0x15b3,0x1558,0x934,0x15bb,
-0x934,0x15c3,0x15c8,0x4b5,0x4b5,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0xbaf,
-0x15d0,0x15d9,0x15dd,0x15e5,0x15d5,0x934,0x934,0x934,0x934,0x15ed,0x934,0xade,0x11bc,0x4b5,0x4b5,0x4b5,
+0x934,0x934,0x934,0x15a4,0x15c3,0x934,0x934,0x934,0x15cb,0x934,0x934,0x15d2,0x15da,0x157f,0x934,0x15e2,
+0x934,0x15ea,0x15ef,0x4b5,0x4b5,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0x934,0xbaf,
+0x15f7,0x1600,0x1604,0x160c,0x15fc,0x934,0x934,0x934,0x934,0x1614,0x934,0xade,0x11e3,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x15f5,0x600,0x600,
-0x15fc,0x600,0x600,0x600,0x1604,0x600,0x160c,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x161c,0x600,0x600,
+0x1623,0x600,0x600,0x600,0x162b,0x600,0x1633,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,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,0xc90,0x600,0x600,
-0x1614,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x161c,0x1624,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xca3,0x600,0x600,
+0x163b,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1643,0x164b,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0xccf,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0xc32,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x162b,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1652,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1632,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1659,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
-0x600,0x600,0x600,0x600,0x1639,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x1660,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,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,0x4b5,0x600,0x600,0x600,
@@ -278,34 +278,34 @@
 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,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,0x901,0x600,0x600,0x600,0x600,0x600,0x600,0xf69,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x901,0x600,0x600,0x600,0x600,0x600,0x600,0xf90,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,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1641,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1668,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,0x600,0x600,0x600,0x1649,0x4b5,0x4b5,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1670,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0xf90,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,
+0x600,0x600,0x1674,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xf90,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x600,0x600,
-0x600,0x600,0x1651,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xf69,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,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,0x67d,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,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x1314,0x4b5,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x133b,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0x1661,0x1659,0x1659,0x1659,0x4b5,0x4b5,0x4b5,0x4b5,0x55c,0x55c,0x55c,0x55c,0x55c,0x55c,0x55c,
-0x1669,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
+0x4b5,0x1684,0x167c,0x167c,0x167c,0x4b5,0x4b5,0x4b5,0x4b5,0x55c,0x55c,0x55c,0x55c,0x55c,0x55c,0x55c,
+0x168c,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
 0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,0x4b5,
-0x4b5,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0x1671,0x494,0x494,0x494,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0x4b5,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
+0x1694,0x494,0x494,0x494,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,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,
@@ -765,7 +765,7 @@
 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,
+0x1b,0x1b,0x1b,0x1b,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,
@@ -778,7 +778,7 @@
 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,
+0,0,0,0x1b,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,
 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,
@@ -793,820 +793,829 @@
 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,
+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,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,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,
+0x7b85,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,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,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,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,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,5,0x5c5,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,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,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,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,0x5c5,5,0x745,5,0x6c5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x7905,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,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,0x605,0x605,0x605,0x605,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,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,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,0x585,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,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,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,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,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,0x1e45,5,
+5,5,0x545,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,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,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x8005,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x79c5,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,
 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,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,5,0x6c5,5,
-5,5,5,5,0x1e45,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,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,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,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,
+5,5,5,5,0x6c5,5,5,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,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,
+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,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,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,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,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,
-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,
+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,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,
+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,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,
+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,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,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,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,
+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,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,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,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,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,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,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,
-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,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,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,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,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,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,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,
+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,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,
+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,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,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,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,
+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,
-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,
-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,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,
-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,
+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,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,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,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,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,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,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,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,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,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,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,0x58b,0x11cb,0x17,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,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,
+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,
-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,
+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,0,6,6,6,5,5,5,5,5,5,5,5,
+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,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,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,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,
+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,
-0,0,0,0,5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,
+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,
-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,
+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,
-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,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,
+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,
-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,5,5,6,0,0,
+8,8,8,6,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,5,5,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,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,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,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,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,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,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,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,
+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,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,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,
-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,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,0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,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,0,0,0,0x70b,0x74b,0x78b,0x7cb,
+0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,0x17,0x17,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,
-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,5,5,5,5,5,8,6,6,6,6,6,6,6,0,
+6,6,6,6,6,6,8,6,6,6,6,6,6,6,6,6,
+0,8,6,6,6,6,6,6,6,8,6,6,8,6,6,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,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,5,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,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,5,
+5,5,5,5,5,6,6,6,6,6,6,0,0,0,6,0,
+6,6,0,6,5,5,5,5,5,5,5,5,5,5,8,8,
+8,8,8,0,6,6,0,8,8,6,8,6,5,0,0,0,
+0,0,0,0,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,5,5,
+5,5,5,5,5,5,5,6,6,8,8,0x17,0x17,0,0,0,
+0,0,0,0,6,8,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,6,6,5,8,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,5,5,5,8,8,6,6,
+6,6,6,0,0,0,8,8,0,0,0,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,0x19,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,0x17,0xcd0b,0xcc0b,0xcb0b,0xd00b,0xca0b,0xcf0b,0xcb4b,0xd04b,
+0xc90b,0x37cb,0x37cb,0x364b,0x35cb,0xc94b,0x3fcb,0x350b,0x34cb,0x344b,0x344b,0x3ccb,0xcd0b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x19,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,
+0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,
+0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,
+0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,
+0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,
+0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,
+0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,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,
-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,
+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,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,0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,
-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,0,0,0,
-0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,
-0x17,0x17,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,5,5,5,5,5,5,8,6,6,6,6,
-6,6,6,0,6,6,6,6,6,6,8,6,6,6,6,6,
-6,6,6,6,0,8,6,6,6,6,6,6,6,8,6,6,
-8,6,6,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,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,
+5,5,5,5,5,5,5,5,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,5,5,5,5,5,5,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,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,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,5,5,5,5,5,5,6,6,6,6,6,6,0,
-0,0,6,0,6,6,0,6,5,5,5,5,5,5,5,5,
-5,5,8,8,8,8,8,0,6,6,0,8,8,6,8,6,
-5,0,0,0,0,0,0,0,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,5,5,5,5,5,5,5,5,5,6,6,8,8,0x17,
-0x17,0,0,0,0,0,0,0,6,8,6,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,6,6,5,8,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,5,5,5,
-8,8,6,6,6,6,6,0,0,0,8,8,0,0,0,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,0x19,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,0x17,0xcd0b,0xcc0b,0xcb0b,0xd00b,
-0xca0b,0xcf0b,0xcb4b,0xd04b,0xc90b,0x37cb,0x37cb,0x364b,0x35cb,0xc94b,0x3fcb,0x350b,0x34cb,0x344b,0x344b,0x3ccb,
-0xcd0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x19,0x34ca,0x354a,0x34ca,0x34ca,
-0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,
-0x17,0,0,0,0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,
-0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,
-0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,
-0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,
-0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,
-0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,
-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,
+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,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,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,5,5,5,
-5,5,5,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,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,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,
-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,
+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,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,
+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,
 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,5,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,0,0,5,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,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,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,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,0,0,5,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,
-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,
+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,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,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,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,
+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,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,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,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,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
+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,
-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,
+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,
-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,1,1,1,1,1,1,1,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,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,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,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,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,
-0,0,0,0,0,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,
-6,6,0,6,6,0,6,6,6,6,6,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,6,
-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,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,5,5,5,5,4,6,6,6,6,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-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,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,0,0,0,0,
+0,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,6,6,0,6,
+6,0,6,6,6,6,6,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,6,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,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,5,5,5,5,4,6,6,6,6,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,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,
-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,
+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,
 0x1b,0x1b,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,0x1b,0x1b,0x1b,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,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,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,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,0,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,
+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,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,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,0,0,0x1b,0x1b,0x1b,0x1b,
 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,
-0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-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,0,
+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,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,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,0,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,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,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,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-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,0,0,
-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,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,0x1b,0,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,
-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,
+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,0x645,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,5,5,5,0x645,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,0x685,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,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,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,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,5,5,0x605,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,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,5,5,5,0x605,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,
 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,5,5,5,5,
-5,5,5,5,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,0,0,0,0,0,0,0,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,
+5,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,
-0x10,0x10,0x10,0x10,0,0x10,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,
+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,
-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,
+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,0,0,0,0,0,0
+0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,
+0,0,0,0
 };
 
 static const UTrie2 propsTrie={
     propsTrie_index,
     propsTrie_index+4692,
-    NULL,
+    nullptr,
     4692,
-    18324,
+    18464,
     0xa40,
     0x12d4,
     0x0,
     0x0,
     0x110000,
-    0x59e4,
-    NULL, 0, false, false, 0, NULL
+    0x5a70,
+    nullptr, 0, false, false, 0, nullptr
 };
 
-static const uint16_t propsVectorsTrie_index[32692]={
-0x539,0x541,0x549,0x551,0x569,0x571,0x579,0x581,0x589,0x591,0x599,0x5a1,0x5a9,0x5b1,0x5b9,0x5c1,
-0x5c8,0x5d0,0x5d8,0x5e0,0x5e3,0x5eb,0x5f3,0x5fb,0x603,0x60b,0x613,0x61b,0x623,0x62b,0x633,0x63b,
-0x643,0x64b,0x652,0x65a,0x662,0x66a,0x672,0x67a,0x682,0x68a,0x68f,0x697,0x69e,0x6a6,0x6ae,0x6b6,
-0x6be,0x6c6,0x6ce,0x6d6,0x6dd,0x6e5,0x6ed,0x6f5,0x6fd,0x705,0x70d,0x715,0x71d,0x725,0x72d,0x735,
-0x1b39,0xd8a,0xe56,0x118d,0x12cc,0x1d01,0x1ea0,0x1cf9,0x13e6,0x13f6,0x13de,0x13ee,0x80a,0x810,0x818,0x820,
-0x828,0x82e,0x836,0x83e,0x846,0x84c,0x854,0x85c,0x864,0x86a,0x872,0x87a,0x882,0x88a,0x892,0x899,
-0x8a1,0x8a7,0x8af,0x8b7,0x8bf,0x8c5,0x8cd,0x8d5,0x8dd,0x13fe,0x8e5,0x8ed,0x8f5,0x8fc,0x904,0x90c,
-0x914,0x918,0x920,0x927,0x92f,0x937,0x93f,0x947,0x1719,0x1721,0x94f,0x957,0x95f,0x967,0x96f,0x976,
-0x177f,0x176f,0x1777,0x1a74,0x1a7c,0x140e,0x97e,0x1406,0x1662,0x1662,0x1664,0x1422,0x1423,0x1416,0x1418,0x141a,
-0x1787,0x1789,0x986,0x1789,0x98e,0x993,0x99b,0x178e,0x9a1,0x1789,0x9a7,0x9af,0xc6a,0x1796,0x1796,0x9b7,
-0x17a6,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,0x17a7,
-0x17a7,0x17a7,0x17a7,0x179e,0x9bf,0x17af,0x17af,0x9c7,0xb92,0xb9a,0xba2,0xbaa,0x17bf,0x17b7,0x9cf,0x9d7,
-0x9df,0x17c9,0x17d1,0x9e7,0x17c7,0x9ef,0x1b41,0xd92,0xbb2,0xbba,0xbc2,0xbc7,0x19da,0xc91,0xc98,0x1936,
-0xc42,0x1b49,0xd9a,0xda2,0xdaa,0xdb2,0xf60,0xf64,0x1a3a,0x1a3f,0xcd0,0xcd8,0x1ab0,0x1ab8,0x1c19,0xe5e,
-0x1ac0,0xd1e,0xd26,0x1ac8,0x1105,0x11b5,0xf38,0xdba,0x1956,0x193e,0x194e,0x1946,0x19f2,0x19ea,0x19a6,0x1a32,
-0x142b,0x142b,0x142b,0x142b,0x142e,0x142b,0x142b,0x1436,0x9f7,0x143e,0x9fb,0xa03,0x143e,0xa0b,0xa13,0xa1b,
-0x144e,0x1446,0x1456,0xa23,0xa2b,0x145e,0xa33,0xa3b,0x1466,0x146e,0x1476,0x147e,0xa43,0x1486,0x148d,0x1495,
-0x149d,0x14a5,0x14ad,0x14b5,0x14bd,0x14c4,0x14cc,0x14d4,0x14dc,0x14e4,0x14e7,0x14e9,0x17d9,0x18cc,0x18d2,0x1a22,
-0x14f1,0xa4b,0xa53,0x1617,0x161c,0x161f,0x1625,0x14f9,0x162d,0x162d,0x1509,0x1501,0x1511,0x1519,0x1521,0x1529,
-0x1531,0x1539,0x1541,0x1549,0x18da,0x192e,0x1a84,0x1be1,0x1559,0x155f,0x1567,0x156f,0x1551,0x1577,0x18e2,0x18e9,
-0x17e1,0x17e1,0x17e1,0x17e1,0x17e1,0x17e1,0x17e1,0x17e1,0x18f1,0x18f1,0x18f1,0x18f1,0x18f9,0x1900,0x1902,0x1909,
-0x1911,0x1915,0x1915,0x1918,0x1915,0x1915,0x191e,0x1915,0x195e,0x1a2a,0x1a8c,0xbcf,0xbd5,0x1d45,0x1d4d,0x1e2b,
-0x19ca,0x19be,0x19c2,0x1a47,0x19ae,0x19ae,0x19ae,0xc52,0x19b6,0xc72,0x1a0a,0xcc0,0xc5a,0xc62,0xc62,0x1ad0,
-0x19fa,0x1a94,0xca8,0xcb0,0xa5b,0x17e9,0x17e9,0xa63,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0xa6b,0x73d,
-0x164a,0x166c,0xa73,0x1674,0xa7b,0x167c,0x1684,0x168c,0xa83,0xa88,0x1694,0x169b,0xa8d,0x17f9,0x1a1a,0xc4a,
-0xa95,0x16f6,0x16fd,0x16a3,0x1705,0x1709,0x16ab,0x16af,0x16c8,0x16c8,0x16ca,0x16b7,0x16bf,0x16bf,0x16c0,0x1711,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
-0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1804,0x1966,0x1966,
-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,
-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,
-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,
-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,
-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,
-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,
-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,
-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,
-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,
-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,
-0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d9,0x1b31,0x1f0c,
-0x180c,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,0xa9d,0x181a,0xaa5,0x1b51,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,
-0x1ad8,0xd2e,0x1aec,0x1ae4,0x1aee,0x1b59,0x1b59,0xdc2,0x19d2,0x1a4f,0x1aa4,0x1aa8,0x1a9c,0x1c11,0xce0,0xce7,
-0x1a02,0xcb8,0x1a57,0xcef,0x1af6,0x1af9,0xd36,0x1b61,0x1b09,0x1b01,0xd3e,0xdca,0x1b69,0x1b6d,0xdd2,0x100f,
-0x1b11,0xd46,0xd4e,0x1b75,0x1b85,0x1b7d,0xdda,0xf08,0xe66,0xe6e,0x1d9b,0xfbf,0x1e48,0x1e48,0x1b8d,0xde2,
-0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,
-0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,
-0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,
-0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,
-0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,
-0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,
-0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,
-0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,
-0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,
-0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,
-0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,
-0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,
-0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,
-0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,
-0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,
-0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,
-0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,
-0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,
-0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,
-0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,
-0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,
-0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0x1767,0x1761,0x1762,0x1763,0x1764,0x1765,0x1766,0xaad,0xdea,0xded,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,
-0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,0x1739,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x16e1,0x16e1,0x16e1,0x16e1,0x16e1,0x16e1,0x16e1,0x16e1,
-0x16e6,0x16ee,0x1926,0x13a3,0x1a12,0x1a12,0x13a7,0x13ae,0xab5,0xabd,0xac5,0x1597,0x159e,0x15a6,0xacd,0x15ae,
-0x15ec,0x15ec,0x157f,0x1587,0x15b6,0x15e3,0x15e4,0x15f4,0x15be,0x15c3,0x15cb,0x15d3,0xad5,0x15db,0xadd,0x158f,
-0xcc8,0x15fc,0xae5,0xaed,0x1604,0x160a,0x160f,0xaf5,0xb05,0x1652,0x165a,0x163d,0x1642,0xb0d,0xb15,0xafd,
-0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,
-0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1729,0x1731,0x1731,0x1731,0x1731,
-0x1564,0x1564,0x15a4,0x15e4,0x1624,0x1664,0x16a4,0x16e4,0x1720,0x1760,0x178c,0x17cc,0x180c,0x184c,0x188c,0x18cc,
-0x190c,0x1948,0x1988,0x19c8,0x1a08,0x1a3c,0x1a78,0x1ab8,0x1af8,0x1b38,0x1b74,0x1bb4,0x1bf4,0x1c34,0x1c74,0x1cb4,
-0xe59,0xa80,0xac0,0xb00,0xb40,0xb6b,0xf99,0xa40,0xed9,0xa40,0xa40,0xa40,0xa40,0xbab,0x13e2,0x13e2,
+static const uint16_t propsVectorsTrie_index[32764]={
+0x53e,0x546,0x54e,0x556,0x56e,0x576,0x57e,0x586,0x58e,0x596,0x59e,0x5a6,0x5ae,0x5b6,0x5be,0x5c6,
+0x5cd,0x5d5,0x5dd,0x5e5,0x5e8,0x5f0,0x5f8,0x600,0x608,0x610,0x618,0x620,0x628,0x630,0x638,0x640,
+0x648,0x650,0x657,0x65f,0x667,0x66f,0x677,0x67f,0x687,0x68f,0x694,0x69c,0x6a3,0x6ab,0x6b3,0x6bb,
+0x6c3,0x6cb,0x6d3,0x6db,0x6e2,0x6ea,0x6f2,0x6fa,0x702,0x70a,0x712,0x71a,0x722,0x72a,0x732,0x73a,
+0x1b43,0xd8f,0xe5b,0x1192,0x12d1,0x1d0b,0x1eaa,0x1d03,0x13f0,0x1400,0x13e8,0x13f8,0x80f,0x815,0x81d,0x825,
+0x82d,0x833,0x83b,0x843,0x84b,0x851,0x859,0x861,0x869,0x86f,0x877,0x87f,0x887,0x88f,0x897,0x89e,
+0x8a6,0x8ac,0x8b4,0x8bc,0x8c4,0x8ca,0x8d2,0x8da,0x8e2,0x1408,0x8ea,0x8f2,0x8fa,0x901,0x909,0x911,
+0x919,0x91d,0x925,0x92c,0x934,0x93c,0x944,0x94c,0x1723,0x172b,0x954,0x95c,0x964,0x96c,0x974,0x97b,
+0x1789,0x1779,0x1781,0x1a7e,0x1a86,0x1418,0x983,0x1410,0x166c,0x166c,0x166e,0x142c,0x142d,0x1420,0x1422,0x1424,
+0x1791,0x1793,0x98b,0x1793,0x993,0x998,0x9a0,0x1798,0x9a6,0x1793,0x9ac,0x9b4,0xc6f,0x17a0,0x17a0,0x9bc,
+0x17b0,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,0x17b1,
+0x17b1,0x17b1,0x17b1,0x17a8,0x9c4,0x17b9,0x17b9,0x9cc,0xb97,0xb9f,0xba7,0xbaf,0x17c9,0x17c1,0x9d4,0x9dc,
+0x9e4,0x17d3,0x17db,0x9ec,0x17d1,0x9f4,0x1b4b,0xd97,0xbb7,0xbbf,0xbc7,0xbcc,0x19e4,0xc96,0xc9d,0x1940,
+0xc47,0x1b53,0xd9f,0xda7,0xdaf,0xdb7,0xf65,0xf69,0x1a44,0x1a49,0xcd5,0xcdd,0x1aba,0x1ac2,0x1c23,0xe63,
+0x1aca,0xd23,0xd2b,0x1ad2,0x110a,0x11ba,0xf3d,0xdbf,0x1960,0x1948,0x1958,0x1950,0x19fc,0x19f4,0x19b0,0x1a3c,
+0x1435,0x1435,0x1435,0x1435,0x1438,0x1435,0x1435,0x1440,0x9fc,0x1448,0xa00,0xa08,0x1448,0xa10,0xa18,0xa20,
+0x1458,0x1450,0x1460,0xa28,0xa30,0x1468,0xa38,0xa40,0x1470,0x1478,0x1480,0x1488,0xa48,0x1490,0x1497,0x149f,
+0x14a7,0x14af,0x14b7,0x14bf,0x14c7,0x14ce,0x14d6,0x14de,0x14e6,0x14ee,0x14f1,0x14f3,0x17e3,0x18d6,0x18dc,0x1a2c,
+0x14fb,0xa50,0xa58,0x1621,0x1626,0x1629,0x162f,0x1503,0x1637,0x1637,0x1513,0x150b,0x151b,0x1523,0x152b,0x1533,
+0x153b,0x1543,0x154b,0x1553,0x18e4,0x1938,0x1a8e,0x1beb,0x1563,0x1569,0x1571,0x1579,0x155b,0x1581,0x18ec,0x18f3,
+0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x18fb,0x18fb,0x18fb,0x18fb,0x1903,0x190a,0x190c,0x1913,
+0x191b,0x191f,0x191f,0x1922,0x191f,0x191f,0x1928,0x191f,0x1968,0x1a34,0x1a96,0xbd4,0xbda,0x1d4f,0x1d57,0x1e35,
+0x19d4,0x19c8,0x19cc,0x1a51,0x19b8,0x19b8,0x19b8,0xc57,0x19c0,0xc77,0x1a14,0xcc5,0xc5f,0xc67,0xc67,0x1ada,
+0x1a04,0x1a9e,0xcad,0xcb5,0xa60,0x17f3,0x17f3,0xa68,0x17fb,0x17fb,0x17fb,0x17fb,0x17fb,0x17fb,0xa70,0x742,
+0x1654,0x1676,0xa78,0x167e,0xa80,0x1686,0x168e,0x1696,0xa88,0xa8d,0x169e,0x16a5,0xa92,0x1803,0x1a24,0xc4f,
+0xa9a,0x1700,0x1707,0x16ad,0x170f,0x1713,0x16b5,0x16b9,0x16d2,0x16d2,0x16d4,0x16c1,0x16c9,0x16c9,0x16ca,0x171b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,
+0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180b,0x180e,0x1970,0x1970,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,
+0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16dc,0x16e3,0x1b3b,0x1f16,
+0x1816,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,
+0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,0x181c,
+0x181c,0x181c,0x181c,0x181c,0xaa2,0x1824,0xaaa,0x1b5b,0x1ae6,0x1ae6,0x1ae6,0x1ae6,0x1ae6,0x1ae6,0x1ae6,0x1ae6,
+0x1ae2,0xd33,0x1af6,0x1aee,0x1af8,0x1b63,0x1b63,0xdc7,0x19dc,0x1a59,0x1aae,0x1ab2,0x1aa6,0x1c1b,0xce5,0xcec,
+0x1a0c,0xcbd,0x1a61,0xcf4,0x1b00,0x1b03,0xd3b,0x1b6b,0x1b13,0x1b0b,0xd43,0xdcf,0x1b73,0x1b77,0xdd7,0x1014,
+0x1b1b,0xd4b,0xd53,0x1b7f,0x1b8f,0x1b87,0xddf,0xf0d,0xe6b,0xe73,0x1da5,0xfc4,0x1e52,0x1e52,0x1b97,0xde7,
+0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,
+0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,
+0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,
+0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,
+0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,
+0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,
+0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,
+0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,
+0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,
+0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,
+0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,
+0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,
+0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,
+0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,
+0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,
+0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,
+0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,
+0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,
+0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,
+0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,
+0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,
+0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0x1771,0x176b,0x176c,0x176d,0x176e,0x176f,0x1770,0xab2,0xdef,0xdf2,
+0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,
+0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,0x55e,
+0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,
+0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,
+0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x163f,0x16eb,0x16eb,0x16eb,0x16eb,0x16eb,0x16eb,0x16eb,0x16eb,
+0x16f0,0x16f8,0x1930,0x139d,0x1a1c,0x1a1c,0x13a1,0x13a8,0xaba,0xac2,0xaca,0x15a1,0x15a8,0x15b0,0xad2,0x15b8,
+0x15f6,0x15f6,0x1589,0x1591,0x15c0,0x15ed,0x15ee,0x15fe,0x15c8,0x15cd,0x15d5,0x15dd,0xada,0x15e5,0xae2,0x1599,
+0xccd,0x1606,0xaea,0xaf2,0x160e,0x1614,0x1619,0xafa,0xb0a,0x165c,0x1664,0x1647,0x164c,0xb12,0xb1a,0xb02,
+0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,
+0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x1733,0x173b,0x173b,0x173b,0x173b,
+0x1578,0x1578,0x15b8,0x15f8,0x1638,0x1678,0x16b8,0x16f8,0x1734,0x1774,0x17a0,0x17e0,0x1820,0x1860,0x18a0,0x18e0,
+0x1920,0x195c,0x199c,0x19dc,0x1a1c,0x1a50,0x1a8c,0x1acc,0x1b0c,0x1b4c,0x1b88,0x1bc8,0x1c08,0x1c48,0x1c88,0x1cc8,
+0xe59,0xa80,0xac0,0xb00,0xb40,0xb6b,0xf99,0xa40,0xed9,0xa40,0xa40,0xa40,0xa40,0xbab,0x13f5,0x13f5,
 0xf19,0xfd9,0xa40,0xa40,0xa40,0xbeb,0xf59,0xc2b,0xa40,0xc51,0xc91,0xcd1,0xd11,0xd51,0xe99,0xdc9,
-0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,0x1322,
-0x1322,0x1322,0x1322,0x1322,0x1019,0x1362,0x1157,0x1197,0x13a2,0x11a2,0x1422,0x1422,0x1422,0x1059,0x1079,0x10b9,
-0x1462,0x1462,0x11e2,0x14a2,0x10f9,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,
-0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1079,0x1117,
+0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,
+0x1335,0x1335,0x1335,0x1335,0x1019,0x1375,0x116a,0x11aa,0x13b5,0x11b5,0x1435,0x1435,0x1435,0x1059,0x108c,0x10cc,
+0x1475,0x1475,0x11f5,0x14b5,0x110c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,
+0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x112a,
 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,0xd89,
 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
@@ -1629,1908 +1638,1912 @@
 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,
-0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x1222,
-0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,
-0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x12e2,0x1262,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0xc27,0xc2a,0xdf5,0x1deb,0x1017,0x745,0x559,0x10b1,0xcf7,0xd76,0x559,0x559,0x1d11,0xf10,0xf18,0x1e33,
-0xc7a,0xc81,0xc89,0x1b95,0x1dcb,0x559,0x1dab,0xfe7,0x1b9d,0xdfd,0xe05,0xe0d,0x103f,0x74d,0x559,0x559,
-0x1ba5,0x1ba5,0x755,0x559,0x1e60,0x10c9,0x1e58,0x10d1,0x1f4c,0x11cb,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0xe15,0x1fa4,0x12c4,0x1346,0x1347,0x1f6c,0x11f3,0x11fa,0x1201,0x1303,0x1307,0x127b,0x1211,
-0x1c21,0x1c23,0xe76,0xe7d,0x1bad,0x1bb5,0xe1d,0xf30,0x1d09,0xef8,0xf00,0xfdf,0x1d29,0x1d2d,0x1d35,0x105f,
-0xfaf,0x1d8b,0x75d,0x559,0x10b9,0x10c1,0x1d93,0xfb7,0xf91,0xf97,0xf9f,0xfa7,0x559,0x559,0x559,0x559,
-0x1ed0,0x1ec8,0x113b,0x1143,0x1e13,0x1e0b,0x1087,0x559,0x559,0x559,0x559,0x559,0x1dfb,0x1047,0x104f,0x1057,
-0x1dc3,0x1dbb,0xff7,0x1133,0x1d3d,0xf40,0x765,0x559,0x1097,0x109f,0x76d,0x559,0x559,0x559,0x559,0x559,
-0x1f44,0x11ad,0x775,0x559,0x559,0x1e23,0x1e1b,0x108f,0x1283,0x1289,0x1291,0x559,0x559,0x1219,0x121d,0x1225,
-0x1f04,0x1efc,0x1195,0x1ef4,0x1eec,0x1185,0x1df3,0x1037,0x1357,0x135a,0x135a,0x559,0x559,0x559,0x559,0x559,
-0x10e9,0x10ee,0x10f6,0x10fd,0x1125,0x112b,0x559,0x559,0x1169,0x116d,0x1175,0x11bd,0x11c3,0x77d,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x11db,0x136a,0x136f,0x1377,0x559,0x559,0x781,0x1f8c,0x126b,
-0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,
-0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a5f,0x1a64,0xcff,0xd06,0xd06,0xd06,
-0x1a6c,0x1a6c,0x1a6c,0xd0e,0x1e50,0x1e50,0x1e50,0x1e50,0x1e50,0x1e50,0x789,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x78d,0x1fbc,0x1fbc,0x12d4,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,
-0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0x1c2b,0xe85,0xfff,0x1007,0x1fc4,
-0x130f,0x1317,0xf48,0x1de3,0x1ddb,0x1027,0x102f,0x795,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1f64,0x1f5c,0x11eb,
-0x559,0x559,0x559,0x1d21,0x1d21,0xf20,0x1d19,0xf28,0x559,0x559,0x111d,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x799,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1d73,0x1d73,0x1d73,0xf6c,0xf71,
-0x7a1,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1fd4,0x1337,0x133e,0x1fcc,0x1fcc,0x1fcc,0x7a9,
-0x559,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0xb2b,0x184f,0xb33,0x1850,0x1847,0x1858,0x185e,0x1866,
-0xb3b,0x198e,0x198e,0x7b1,0x559,0x559,0x559,0x1362,0x11e3,0x197e,0x197e,0xc32,0xd16,0x559,0x559,0x559,
-0x559,0x1897,0x189e,0xb43,0x18a1,0xb4b,0xb53,0xb5b,0x189b,0xb63,0xb6b,0xb73,0x18a0,0x18a8,0x1897,0x189e,
-0x189a,0x18a1,0x18a9,0x1898,0x189f,0x189b,0xb7a,0x186e,0x1876,0x187d,0x1884,0x1871,0x1879,0x1880,0x1887,0xb82,
-0x188f,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,0x1e78,
-0x1e78,0x1e68,0x1e6b,0x1e68,0x1e72,0x10d9,0x7b9,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x12f0,0x12f8,0x12fb,0x12fb,0x12fb,0x12fb,0x12fb,
-0x12fb,0x110d,0x1115,0x1fdc,0x134f,0x7c1,0x559,0x559,0x559,0x1f84,0x122d,0x7c9,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x7cd,0x131f,0x1f94,0x1273,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x7d5,0x137f,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x12dc,0x1db3,0x1db3,0x1db3,0x1db3,0x1db3,0x1db3,0xfef,0x559,0x1ec0,0x1eb8,0x10e1,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x7dd,0x1f54,0x11d3,0x559,0x559,0x1235,0x1236,0x7e5,0x559,0x559,0x559,0x559,
-0x559,0xebd,0xec5,0xecd,0xed5,0xedd,0xee5,0xeec,0xef0,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x7e9,0x1067,0x1e03,0x106d,0x1e03,0x1075,0x107a,0x107f,
-0x107f,0x1e88,0x1ea8,0x1eb0,0x1f1c,0x1e90,0x1f74,0x1e98,0x1f24,0x1f7c,0x1f7c,0x119d,0x11a5,0x124d,0x1253,0x125b,
-0x1263,0x1f9c,0x1f9c,0x1f9c,0x1f9c,0x12a7,0x1f9c,0x12ad,0x12b1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,
-0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,
-0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f1,0x7f2,0xb8a,0x18b1,0x18b1,0x18b1,0x7fa,0x7fa,0x7fa,
-0x7fa,0x1986,0x1986,0x1986,0x1986,0x1986,0x1986,0x1986,0x802,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
-0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
-0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
-0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,
-0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0x7fa,0xbdd,0xbe4,0xbec,0xbf4,0x196e,0x196e,0x196e,
-0xbfc,0xc04,0xc07,0x199e,0x1996,0xc3a,0xd56,0xd5a,0xd5e,0x559,0x559,0x559,0x559,0xd66,0x1b19,0xd6e,
-0xf58,0x1822,0xb1d,0xb23,0x101f,0xc0f,0x19e2,0xca0,0x559,0x1837,0x182a,0x182f,0x1976,0xc17,0xc1f,0x114b,
-0x1151,0x1d7b,0xf79,0x1d6b,0xf50,0x1327,0x132f,0x559,0x559,0x1da3,0x1da3,0x1da3,0x1da3,0x1da3,0x1da3,0x1da3,
-0x1da3,0x1da3,0xfc7,0xfcf,0xfd7,0x12e4,0x12e8,0x559,0x559,0x1b21,0xd7e,0x1b29,0x1b29,0xd82,0xe8d,0xe95,
-0xe9d,0x1bf1,0x1bd9,0x1bf9,0x1c01,0x1be9,0xe25,0xe29,0xe30,0xe38,0xe3c,0xe44,0xe4c,0xe4e,0xe4e,0xe4e,
-0xe4e,0x1c62,0x1c6a,0x1c62,0x1c70,0x1c78,0x1c43,0x1c80,0x1c88,0x1c62,0x1c90,0x1c98,0x1c9f,0x1ca7,0x1c4b,0x1c62,
-0x1cac,0x1c53,0x1c5a,0x1cb4,0x1cba,0x1d5c,0x1d63,0x1d55,0x1cc1,0x1cc9,0x1cd1,0x1cd9,0x1dd3,0x1ce1,0x1ce9,0xea5,
-0xead,0x1c33,0x1c33,0x1c33,0xeb5,0x1d83,0x1d83,0xf81,0xf89,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,
-0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e3b,0x1e40,0x1e3b,0x1e3b,0x1e3b,0x10a7,0x10a9,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,
-0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,
-0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,
-0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,
-0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1ed8,0x1159,0x1c3b,0x1f14,0x1f14,0x1f14,0x1f14,0x1f14,0x1f14,
-0x1f14,0x1f34,0x1161,0x123e,0x1245,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,0x1f3c,
-0x117d,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,
-0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbf,0x1bbd,0x1bc7,0x1bbd,0x1bbd,
-0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bca,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bbd,0x1bd1,0x1209,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,
-0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,0x1ee0,
-0x1ee4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1fb4,0x1299,
-0x129f,0x12b9,0x12bc,0x12bc,0x12bc,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,
-0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x559,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,
-0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,
-0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,
-0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18b9,0x18bc,
-0x1387,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,
-0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,
-0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x138f,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,
-0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x18c4,0x13b6,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1393,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,
-0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,
-0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x139b,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,
-0x1387,0x1387,0x1387,0x1387,0x1387,0x1387,0x1393,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,
-0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,
-0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,
-0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,0x1c09,
-0x13be,0x1cf1,0x1cf1,0x1cf1,0x1cf1,0x1cf1,0x1cf1,0x13c6,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,
-0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,
-0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,
-0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,
-0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x1e80,0x13ce,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,0x1f2c,
-0x1f2c,0x1f2c,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,
-0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x1fac,0x13d6,0x1fe4,0x1fe4,0x1fe4,
-0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,
-0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,0x1fe4,
-0x1fe4,0x1fe4,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,
-0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,
-0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,
-0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,0x1751,
-0x1751,0x1741,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,
-0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,0x1759,

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.