Snap for 8512216 from 125b1f9e4d0443709bd3f2ec808bd6b5d3dbde01 to tm-frc-cellbroadcast-release

Change-Id: I5d40c17e8b4bfae9ca235aac98d0b766d1c41525
diff --git a/android_icu4j/Android.bp b/android_icu4j/Android.bp
index f8a0291..dabd918 100644
--- a/android_icu4j/Android.bp
+++ b/android_icu4j/Android.bp
@@ -431,4 +431,8 @@
     patch_module: "java.base",
     sdk_version: "none",
     system_modules: "art-module-intra-core-api-stubs-system-modules",
+
+    errorprone: {
+        javacflags: ["-Xep:EqualsNull:WARN"],
+    },
 }
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/internal/Memory.java b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/internal/Memory.java
index 846044a..d61b99d 100644
--- a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/internal/Memory.java
+++ b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/internal/Memory.java
@@ -153,12 +153,19 @@
     }
     @FastNative
     private static native short peekShortNative(long address);
+    @FastNative
     public static native void peekByteArray(long address, byte[] dst, int dstOffset, int byteCount);
+    @FastNative
     public static native void peekCharArray(long address, char[] dst, int dstOffset, int charCount, boolean swap);
+    @FastNative
     public static native void peekDoubleArray(long address, double[] dst, int dstOffset, int doubleCount, boolean swap);
+    @FastNative
     public static native void peekFloatArray(long address, float[] dst, int dstOffset, int floatCount, boolean swap);
+    @FastNative
     public static native void peekIntArray(long address, int[] dst, int dstOffset, int intCount, boolean swap);
+    @FastNative
     public static native void peekLongArray(long address, long[] dst, int dstOffset, int longCount, boolean swap);
+    @FastNative
     public static native void peekShortArray(long address, short[] dst, int dstOffset, int shortCount, boolean swap);
     @FastNative
     public static native void pokeByte(long address, byte value);
diff --git a/android_icu4j/libcore_bridge/src/native/com_android_i18n_timezone_internal_Memory.cpp b/android_icu4j/libcore_bridge/src/native/com_android_i18n_timezone_internal_Memory.cpp
index f97b332..0027a43 100644
--- a/android_icu4j/libcore_bridge/src/native/com_android_i18n_timezone_internal_Memory.cpp
+++ b/android_icu4j/libcore_bridge/src/native/com_android_i18n_timezone_internal_Memory.cpp
@@ -1,3 +1,4 @@
+
 /*
  * Copyright (C) 2007 The Android Open Source Project
  *
@@ -222,16 +223,16 @@
 
 static JNINativeMethod gMethods[] = {
     FAST_NATIVE_METHOD(Memory, peekByte, "(J)B"),
-    NATIVE_METHOD(Memory, peekByteArray, "(J[BII)V"),
-    NATIVE_METHOD(Memory, peekCharArray, "(J[CIIZ)V"),
-    NATIVE_METHOD(Memory, peekDoubleArray, "(J[DIIZ)V"),
-    NATIVE_METHOD(Memory, peekFloatArray, "(J[FIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekByteArray, "(J[BII)V"),
+    FAST_NATIVE_METHOD(Memory, peekCharArray, "(J[CIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekDoubleArray, "(J[DIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekFloatArray, "(J[FIIZ)V"),
     FAST_NATIVE_METHOD(Memory, peekIntNative, "(J)I"),
-    NATIVE_METHOD(Memory, peekIntArray, "(J[IIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekIntArray, "(J[IIIZ)V"),
     FAST_NATIVE_METHOD(Memory, peekLongNative, "(J)J"),
-    NATIVE_METHOD(Memory, peekLongArray, "(J[JIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekLongArray, "(J[JIIZ)V"),
     FAST_NATIVE_METHOD(Memory, peekShortNative, "(J)S"),
-    NATIVE_METHOD(Memory, peekShortArray, "(J[SIIZ)V"),
+    FAST_NATIVE_METHOD(Memory, peekShortArray, "(J[SIIZ)V"),
     FAST_NATIVE_METHOD(Memory, pokeByte, "(JB)V"),
     NATIVE_METHOD(Memory, pokeByteArray, "(J[BII)V"),
     NATIVE_METHOD(Memory, pokeCharArray, "(J[CIIZ)V"),
diff --git a/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java b/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
index 766cb29..38751ef 100644
--- a/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
+++ b/android_icu4j/src/main/tests/android/icu/dev/test/timezone/TimeZoneTest.java
@@ -21,6 +21,7 @@
 import java.util.Locale;
 import java.util.Set;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -1481,10 +1482,20 @@
     }
 
     @Test
+    @Ignore
     public void TestCanonicalID() {
-        // Some canonical IDs in CLDR are defined as "Link"
-        // in Olson tzdata.
+        // Olson (IANA) tzdata used to have very few "Link"s long time ago.
+        // This test case was written when most of CLDR canonical time zones are
+        // defined as independent "Zone" in the TZ database.
+        // Since then, the TZ maintainer found some historic rules in mid 20th century
+        // were not really reliable, and many zones are now sharing rules.
+        // As of TZ database release 2022a, there are quite a lot of zones defined
+        // by "Link" to another zone, so the exception table below becomes really
+        // big. It might be still useful to make sure CLDR zone aliases are consistent
+        // with zone rules.
         final String[][] excluded1 = {
+            //  {"<link-from>", "<link-to> (A zone ID with "Zone" rule)"},
+                {"Africa/Accra", "Africa/Abidjan"},
                 {"Africa/Addis_Ababa", "Africa/Nairobi"},
                 {"Africa/Asmera", "Africa/Nairobi"},
                 {"Africa/Bamako", "Africa/Abidjan"},
@@ -1519,39 +1530,43 @@
                 {"Africa/Ouagadougou", "Africa/Abidjan"},
                 {"Africa/Porto-Novo", "Africa/Lagos"},
                 {"Africa/Sao_Tome", "Africa/Abidjan"},
-                {"America/Antigua", "America/Port_of_Spain"},
-                {"America/Anguilla", "America/Port_of_Spain"},
+                {"America/Antigua", "America/Puerto_Rico"},
+                {"America/Anguilla", "America/Puerto_Rico"},
+                {"America/Aruba", "America/Puerto_Rico"},
+                {"America/Atikokan", "America/Panama"},
+                {"America/Blanc-Sablon", "America/Puerto_Rico"},
                 {"America/Cayman", "America/Panama"},
-                // TODO(b/204533494): Enable this check.
-                // Android-changed: due to issues with time zones canonicity, decision was made
-                // to keep America/Coral_Harbour as alias to America/Atikokan.
-                // See more details in system/timezone/RELEASE_NOTES.md
-                // {"America/Coral_Harbour", "America/Panama"},
-                {"America/Curacao", "America/Aruba"},
-                {"America/Dominica", "America/Port_of_Spain"},
-                {"America/Grenada", "America/Port_of_Spain"},
-                {"America/Guadeloupe", "America/Port_of_Spain"},
-                {"America/Kralendijk", "America/Aruba"},
-                {"America/Lower_Princes", "America/Aruba"},
-                {"America/Marigot", "America/Port_of_Spain"},
-                {"America/Montserrat", "America/Port_of_Spain"},
+                {"America/Coral_Harbour", "America/Panama"},
+                {"America/Creston", "America/Phoenix"},
+                {"America/Curacao", "America/Puerto_Rico"},
+                {"America/Dominica", "America/Puerto_Rico"},
+                {"America/Grenada", "America/Puerto_Rico"},
+                {"America/Guadeloupe", "America/Puerto_Rico"},
+                {"America/Kralendijk", "America/Puerto_Rico"},
+                {"America/Lower_Princes", "America/Puerto_Rico"},
+                {"America/Marigot", "America/Puerto_Rico"},
+                {"America/Montreal", "America/Toronto"},
+                {"America/Montserrat", "America/Puerto_Rico"},
+                {"America/Nassau", "America/Toronto"},
+                {"America/Port_of_Spain", "America/Puerto_Rico"},
                 {"America/Santa_Isabel", "America/Tijuana"},
                 {"America/Shiprock", "America/Denver"},
-                {"America/St_Barthelemy", "America/Port_of_Spain"},
-                {"America/St_Kitts", "America/Port_of_Spain"},
-                {"America/St_Lucia", "America/Port_of_Spain"},
-                {"America/St_Thomas", "America/Port_of_Spain"},
-                {"America/St_Vincent", "America/Port_of_Spain"},
-                {"America/Toronto", "America/Montreal"},
-                {"America/Tortola", "America/Port_of_Spain"},
+                {"America/St_Barthelemy", "America/Puerto_Rico"},
+                {"America/St_Kitts", "America/Puerto_Rico"},
+                {"America/St_Lucia", "America/Puerto_Rico"},
+                {"America/St_Thomas", "America/Puerto_Rico"},
+                {"America/St_Vincent", "America/Puerto_Rico"},
+                {"America/Tortola", "America/Puerto_Rico"},
                 {"America/Virgin", "America/Puerto_Rico"},
+                {"Antarctica/DumontDUrville", "Pacific/Port_Moresby"},
                 {"Antarctica/South_Pole", "Antarctica/McMurdo"},
+                {"Antarctica/Syowa", "Asia/Riyadh"},
                 {"Arctic/Longyearbyen", "Europe/Oslo"},
-                {"Asia/Kuwait", "Asia/Aden"},
+                {"Asia/Aden", "Asia/Riyadh"},
+                {"Asia/Kuwait", "Asia/Riyadh"},
                 {"Asia/Muscat", "Asia/Dubai"},
                 {"Asia/Phnom_Penh", "Asia/Bangkok"},
                 {"Asia/Qatar", "Asia/Bahrain"},
-                {"Asia/Riyadh", "Asia/Aden"},
                 {"Asia/Vientiane", "Asia/Bangkok"},
                 {"Atlantic/Jan_Mayen", "Europe/Oslo"},
                 {"Atlantic/St_Helena", "Africa/Abidjan"},
diff --git a/icu4c/source/data/brkitr/ja.txt b/icu4c/source/data/brkitr/ja.txt
index 1fc7bdf..1ea0823 100644
--- a/icu4c/source/data/brkitr/ja.txt
+++ b/icu4c/source/data/brkitr/ja.txt
@@ -5,12 +5,12 @@
     boundaries{
         line:process(dependency){"line_normal.brk"}
         line_loose:process(dependency){"line_loose_cj.brk"}
-        line_normal:process(dependency){"line_normal_cj.brk"}
-        line_strict:process(dependency){"line_cj.brk"}
         line_loose_phrase:process(dependency){"line_loose_phrase_cj.brk"}
+        line_normal:process(dependency){"line_normal_cj.brk"}
         line_normal_phrase:process(dependency){"line_normal_phrase_cj.brk"}
-        line_strict_phrase:process(dependency){"line_phrase_cj.brk"}
         line_phrase:process(dependency){"line_phrase_cj.brk"}
+        line_strict:process(dependency){"line_cj.brk"}
+        line_strict_phrase:process(dependency){"line_phrase_cj.brk"}
     }
     extensions{
         // Extensions.
@@ -35,7 +35,7 @@
         られる, れる, ろう, わっ, わな,
         わら, わり, わる, われ, わん,
 
-        // Entries added for technical reasons (particle + others).        
+        // Entries added for technical reasons (particle + others).
         // Entries in cjdict.txt, which are compound words starting from the above categories
         // (i.e. particles, auxiliary verbs and conjunctions).
         // These entries are connected to the previous words for phrase based line breaking.
diff --git a/icu4c/source/data/curr/LOCALE_DEPS.json b/icu4c/source/data/curr/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/curr/LOCALE_DEPS.json
+++ b/icu4c/source/data/curr/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/curr/en_MV.txt b/icu4c/source/data/curr/en_MV.txt
new file mode 100644
index 0000000..1538f32
--- /dev/null
+++ b/icu4c/source/data/curr/en_MV.txt
@@ -0,0 +1,12 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+    Currencies{
+        MVR{
+            "Rf",
+            "Maldivian Rufiyaa",
+        }
+    }
+}
diff --git a/icu4c/source/data/lang/LOCALE_DEPS.json b/icu4c/source/data/lang/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/lang/LOCALE_DEPS.json
+++ b/icu4c/source/data/lang/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/lang/en_MV.txt b/icu4c/source/data/lang/en_MV.txt
new file mode 100644
index 0000000..fe1e43d
--- /dev/null
+++ b/icu4c/source/data/lang/en_MV.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+}
diff --git a/icu4c/source/data/locales/LOCALE_DEPS.json b/icu4c/source/data/locales/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/locales/LOCALE_DEPS.json
+++ b/icu4c/source/data/locales/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/locales/en_MV.txt b/icu4c/source/data/locales/en_MV.txt
new file mode 100644
index 0000000..aa71943
--- /dev/null
+++ b/icu4c/source/data/locales/en_MV.txt
@@ -0,0 +1,43 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+    NumberElements{
+        latn{
+            patterns{
+                accountingFormat{"¤ #,##0.00"}
+                currencyFormat{"¤ #,##0.00"}
+            }
+        }
+    }
+    calendar{
+        gregorian{
+            DateTimePatterns{
+                "HH:mm:ss zzzz",
+                "HH:mm:ss z",
+                "HH:mm:ss",
+                "HH:mm",
+                "EEEE d MMMM y",
+                "d MMMM y",
+                "dd-MM-y",
+                "d-M-yy",
+                "{1} {0}",
+                "{1} {0}",
+                "{1} {0}",
+                "{1} {0}",
+                "{1} {0}",
+            }
+            DateTimeSkeletons{
+                "HHmmsszzzz",
+                "HHmmssz",
+                "HHmmss",
+                "HHmm",
+                "yMMMMEEEEd",
+                "yMMMMd",
+                "yMMdd",
+                "yyMd",
+            }
+        }
+    }
+}
diff --git a/icu4c/source/data/misc/supplementalData.txt b/icu4c/source/data/misc/supplementalData.txt
index 2d05642..589c423 100644
--- a/icu4c/source/data/misc/supplementalData.txt
+++ b/icu4c/source/data/misc/supplementalData.txt
@@ -19995,6 +19995,7 @@
             "en_MS",
             "en_MT",
             "en_MU",
+            "en_MV",
             "en_MW",
             "en_MY",
             "en_NA",
@@ -30688,12 +30689,15 @@
         MV{
             dv{
                 officialStatus{"official"}
-                populationShareF:int{49940000}
+                populationShareF:int{49980000}
+            }
+            en{
+                populationShareF:int{49750000}
             }
             territoryF:intvector{
                 59690100,
                 49984000,
-                55391904,
+                55540542,
             }
         }
         MW{
diff --git a/icu4c/source/data/misc/zoneinfo64.txt b/icu4c/source/data/misc/zoneinfo64.txt
index 006352d..a68a203 100644
--- a/icu4c/source/data/misc/zoneinfo64.txt
+++ b/icu4c/source/data/misc/zoneinfo64.txt
@@ -3,9 +3,9 @@
 // License & terms of use: http://www.unicode.org/copyright.html
 //---------------------------------------------------------
 // Build tool:  tz2icu
-// Build date:  Fri Nov 19 16:51:38 2021
+// Build date:  Thu Mar 24 09:57:22 2022
 // tz database: ftp://ftp.iana.org/tz/
-// tz version:  2021a
+// tz version:  2022a
 // ICU version: 70.1
 //---------------------------------------------------------
 // >> !!! >>   THIS IS A MACHINE-GENERATED FILE   << !!! <<
@@ -13,7 +13,7 @@
 //---------------------------------------------------------
 
 zoneinfo64:table(nofallback) {
- TZVersion { "2021a" }
+ TZVersion { "2022a" }
  Zones:array { 
   /* ACT */ :int { 356 } //Z#0
   /* AET */ :int { 368 } //Z#1
@@ -24,13 +24,9 @@
     trans:intvector { -1830383032 }
     typeOffsets:intvector { -968, 0, 0, 0 }
     typeMap:bin { "01" }
-    links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 55, 348 }
+    links:intvector { 5, 6, 11, 13, 21, 22, 27, 38, 51, 52, 55, 348 }
   } //Z#5
-  /* Africa/Accra */ :table {
-    trans:intvector { -1709337548, -1581206400, -1577917200, -1556834400, -1546294800, -1525298400, -1514758800, -1493762400, -1483222800, -1462226400, -1451686800, -1430604000, -1420064400, -1399068000, -1388528400, -1367532000, -1356992400, -1335996000, -1325456400, -1304373600, -1293834000, -1272837600, -1262298000, -1241301600, -1230762000, -1209765600, -1199226000, -1178143200, -1167603600, -1146607200, -1136067600, -1115071200, -1104531600, -1083535200, -1072995600, -1051912800, -1041373200, -1020376800, -1009837200, -988840800, -978301200, -957304800, -946765200, -936309600, -915142800, -904773600, -883606800, -880329600, -756952200, -610149600, -599610600, -578613600, -568074600, -546991200, -536452200, -515455200, -504916200, -483919200, -473380200, -452383200, -441844200 }
-    typeOffsets:intvector { -52, 0, 0, 0, 0, 1200, 0, 1800, 1800, 0 }
-    typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010401030103010301030103010301" }
-  } //Z#6
+  /* Africa/Accra */ :int { 5 } //Z#6
   /* Africa/Addis_Ababa */ :int { 48 } //Z#7
   /* Africa/Algiers */ :table {
     transPre32:intvector { -1, 1808374564 }
@@ -193,8 +189,8 @@
     finalYear:int { 2008 }
     links:intvector { 4, 60, 617 }
   } //Z#60
-  /* America/Anguilla */ :int { 187 } //Z#61
-  /* America/Antigua */ :int { 187 } //Z#62
+  /* America/Anguilla */ :int { 190 } //Z#61
+  /* America/Antigua */ :int { 190 } //Z#62
   /* America/Araguaina */ :table {
     trans:intvector { -1767214032, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1350788400, 1361066400 }
     typeOffsets:intvector { -11568, 0, -10800, 0, -10800, 3600 }
@@ -277,7 +273,7 @@
     typeOffsets:intvector { -16392, 0, -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
     typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030204050405040504050405040504030402040504" }
   } //Z#76
-  /* America/Aruba */ :int { 105 } //Z#77
+  /* America/Aruba */ :int { 190 } //Z#77
   /* America/Asuncion */ :table {
     trans:intvector { -1206389360, 86760000, 134017200, 181368000, 194497200, 212990400, 226033200, 244526400, 257569200, 276062400, 291783600, 307598400, 323406000, 339220800, 354942000, 370756800, 386478000, 402292800, 418014000, 433828800, 449636400, 465451200, 481172400, 496987200, 512708400, 528523200, 544244400, 560059200, 575866800, 591681600, 607402800, 625032000, 638938800, 654753600, 670474800, 686721600, 699418800, 718257600, 733546800, 749448000, 762318000, 780984000, 793767600, 812520000, 825649200, 844574400, 856666800, 876024000, 888721200, 907473600, 920775600, 938923200, 952225200, 970372800, 983674800, 1002427200, 1018148400, 1030852800, 1049598000, 1062907200, 1081047600, 1097985600, 1110682800, 1129435200, 1142132400, 1160884800, 1173582000, 1192939200, 1205031600, 1224388800, 1236481200, 1255838400, 1270954800, 1286078400, 1302404400, 1317528000, 1333854000, 1349582400, 1364094000, 1381032000 }
     typeOffsets:intvector { -13840, 0, -14400, 0, -14400, 3600, -10800, 0 }
@@ -286,13 +282,7 @@
     finalRaw:int { -14400 }
     finalYear:int { 2014 }
   } //Z#78
-  /* America/Atikokan */ :table {
-    transPre32:intvector { -1, 1928234084 }
-    trans:intvector { -1632067200, -1615136400, -923248800, -765392400 }
-    typeOffsets:intvector { -21988, 0, -21600, 0, -21600, 3600, -18000, 0 }
-    typeMap:bin { "0102010203" }
-    links:intvector { 79, 100 }
-  } //Z#79
+  /* America/Atikokan */ :int { 182 } //Z#79
   /* America/Atka */ :int { 59 } //Z#80
   /* America/Bahia */ :table {
     trans:intvector { -1767216356, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1318734000, 1330221600 }
@@ -322,12 +312,7 @@
     typeOffsets:intvector { -21168, 0, -21600, 0, -21600, 1800, -21600, 3600 }
     typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020103010301" }
   } //Z#85
-  /* America/Blanc-Sablon */ :table {
-    transPre32:intvector { -1, 1581070604 }
-    trans:intvector { -1632074400, -1615143600, -880221600, -765399600 }
-    typeOffsets:intvector { -13708, 0, -14400, 0, -14400, 3600 }
-    typeMap:bin { "0102010201" }
-  } //Z#86
+  /* America/Blanc-Sablon */ :int { 190 } //Z#86
   /* America/Boa_Vista */ :table {
     trans:intvector { -1767211040, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 938923200, 951620400, 970977600, 971578800 }
     typeOffsets:intvector { -14560, 0, -14400, 0, -14400, 3600 }
@@ -397,30 +382,20 @@
     finalRaw:int { -25200 }
     finalYear:int { 2003 }
   } //Z#99
-  /* America/Coral_Harbour */ :int { 79 } //Z#100
+  /* America/Coral_Harbour */ :int { 182 } //Z#100
   /* America/Cordoba */ :int { 67 } //Z#101
   /* America/Costa_Rica */ :table {
     trans:intvector { -1545071027, 288770400, 297234000, 320220000, 328683600, 664264800, 678344400, 695714400, 700635600 }
     typeOffsets:intvector { -20173, 0, -21600, 0, -21600, 3600 }
     typeMap:bin { "010201020102010201" }
   } //Z#102
-  /* America/Creston */ :table {
-    transPre32:intvector { -1, 1581084860 }
-    trans:intvector { -1680454800, -1627833600 }
-    typeOffsets:intvector { -27964, 0, -28800, 0, -25200, 0 }
-    typeMap:bin { "020102" }
-  } //Z#103
+  /* America/Creston */ :int { 185 } //Z#103
   /* America/Cuiaba */ :table {
     trans:intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1541304000, 1550372400 }
     typeOffsets:intvector { -13460, 0, -14400, 0, -14400, 3600 }
     typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
   } //Z#104
-  /* America/Curacao */ :table {
-    trans:intvector { -1826738653, -157750200 }
-    typeOffsets:intvector { -16547, 0, -16200, 0, -14400, 0 }
-    typeMap:bin { "0102" }
-    links:intvector { 77, 105, 148, 153 }
-  } //Z#105
+  /* America/Curacao */ :int { 190 } //Z#105
   /* America/Danmarkshavn */ :table {
     trans:intvector { -1686091520, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 820465200 }
     typeOffsets:intvector { -4480, 0, -10800, 0, -10800, 3600, 0, 0 }
@@ -457,7 +432,7 @@
     finalYear:int { 2008 }
     links:intvector { 110, 625 }
   } //Z#110
-  /* America/Dominica */ :int { 187 } //Z#111
+  /* America/Dominica */ :int { 190 } //Z#111
   /* America/Edmonton */ :table {
     trans:intvector { -1998663968, -1632063600, -1615132800, -1600614000, -1596816000, -1567954800, -1551628800, -1536505200, -1523203200, -1504450800, -1491753600, -1473001200, -1459699200, -880210800, -765388800, -715791600, -702489600, 73472400, 89193600, 104922000, 120643200, 136371600, 152092800, 167821200, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     typeOffsets:intvector { -27232, 0, -25200, 0, -25200, 3600 }
@@ -517,8 +492,8 @@
     finalRaw:int { -18000 }
     finalYear:int { 2019 }
   } //Z#122
-  /* America/Grenada */ :int { 187 } //Z#123
-  /* America/Guadeloupe */ :int { 187 } //Z#124
+  /* America/Grenada */ :int { 190 } //Z#123
+  /* America/Guadeloupe */ :int { 190 } //Z#124
   /* America/Guatemala */ :table {
     trans:intvector { -1617040676, 123055200, 130914000, 422344800, 433054800, 669708000, 684219600, 1146376800, 1159678800 }
     typeOffsets:intvector { -21724, 0, -21600, 0, -21600, 3600 }
@@ -686,7 +661,7 @@
     finalYear:int { 2008 }
   } //Z#146
   /* America/Knox_IN */ :int { 132 } //Z#147
-  /* America/Kralendijk */ :int { 105 } //Z#148
+  /* America/Kralendijk */ :int { 190 } //Z#148
   /* America/La_Paz */ :table {
     trans:intvector { -1205954844, -1192307244 }
     typeOffsets:intvector { -16356, 0, -16356, 3600, -14400, 0 }
@@ -709,7 +684,7 @@
     links:intvector { 151, 550, 627, 628 }
   } //Z#151
   /* America/Louisville */ :int { 145 } //Z#152
-  /* America/Lower_Princes */ :int { 105 } //Z#153
+  /* America/Lower_Princes */ :int { 190 } //Z#153
   /* America/Maceio */ :table {
     trans:intvector { -1767217028, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 }
     typeOffsets:intvector { -8572, 0, -10800, 0, -10800, 3600 }
@@ -727,7 +702,7 @@
     typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" }
     links:intvector { 156, 378 }
   } //Z#156
-  /* America/Marigot */ :int { 187 } //Z#157
+  /* America/Marigot */ :int { 190 } //Z#157
   /* America/Martinique */ :table {
     trans:intvector { -1851537340, 323841600, 338958000 }
     typeOffsets:intvector { -14660, 0, -14400, 0, -14400, 3600 }
@@ -817,15 +792,8 @@
     typeMap:bin { "01030203020302030203020302030203020302030203020305040504060406040504060406040705040604060406040604060406040604060406040604060406040604060406040604060406040604060406040604" }
   } //Z#169
   /* America/Montreal */ :int { 218 } //Z#170
-  /* America/Montserrat */ :int { 187 } //Z#171
-  /* America/Nassau */ :table {
-    trans:intvector { -1825095030, -873140400, -788904000, -786222000, -763848000, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
-    typeOffsets:intvector { -18570, 0, -18000, 0, -18000, 3600 }
-    typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
-    finalRule { "US" }
-    finalRaw:int { -18000 }
-    finalYear:int { 2008 }
-  } //Z#172
+  /* America/Montserrat */ :int { 190 } //Z#171
+  /* America/Nassau */ :int { 218 } //Z#172
   /* America/New_York */ :table {
     transPre32:intvector { -1, 1577316496 }
     trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -1570381200, -1551636000, -1536512400, -1523210400, -1504458000, -1491760800, -1473008400, -1459706400, -1441558800, -1428256800, -1410109200, -1396807200, -1378659600, -1365357600, -1347210000, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1189357200, -1176055200, -1157302800, -1144605600, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -923248800, -905101200, -891799200, -880218000, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -639597600, -620845200, -608148000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -909,7 +877,7 @@
     trans:intvector { -1946918424 }
     typeOffsets:intvector { -19088, 0, -19176, 0, -18000, 0 }
     typeMap:bin { "0102" }
-    links:intvector { 97, 182 }
+    links:intvector { 79, 97, 100, 182 }
   } //Z#182
   /* America/Pangnirtung */ :table {
     trans:intvector { -1546300800, -880221600, -765399600, -147902400, -131572800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -929,7 +897,7 @@
     trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
     typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 }
     typeMap:bin { "0102010201020102010201" }
-    links:intvector { 185, 547, 619 }
+    links:intvector { 103, 185, 547, 619 }
   } //Z#185
   /* America/Port-au-Prince */ :table {
     transPre32:intvector { -1, 1770463056 }
@@ -940,12 +908,7 @@
     finalRaw:int { -18000 }
     finalYear:int { 2018 }
   } //Z#186
-  /* America/Port_of_Spain */ :table {
-    trans:intvector { -1825098836 }
-    typeOffsets:intvector { -14764, 0, -14400, 0 }
-    typeMap:bin { "01" }
-    links:intvector { 61, 62, 111, 123, 124, 157, 171, 187, 207, 209, 210, 211, 212, 219, 221 }
-  } //Z#187
+  /* America/Port_of_Spain */ :int { 190 } //Z#187
   /* America/Porto_Acre */ :int { 197 } //Z#188
   /* America/Porto_Velho */ :table {
     trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 }
@@ -957,12 +920,12 @@
     trans:intvector { -873057600, -765399600 }
     typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 }
     typeMap:bin { "010201" }
-    links:intvector { 190, 549 }
+    links:intvector { 61, 62, 77, 86, 105, 111, 123, 124, 148, 153, 157, 171, 187, 190, 207, 209, 210, 211, 212, 219, 221, 549 }
   } //Z#190
   /* America/Punta_Arenas */ :table {
     transPre32:intvector { -1, 1770462716 }
-    trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
-    typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 }
+    trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
+    typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16965, 0, -14400, 0, -14400, 3600, -10800, 0 }
     typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" }
   } //Z#191
   /* America/Rainy_River */ :table {
@@ -1015,8 +978,8 @@
     typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" }
   } //Z#200
   /* America/Santiago */ :table {
-    trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
-    typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
+    trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
+    typeOffsets:intvector { -16965, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
     typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
     finalRule { "Chile" }
     finalRaw:int { -14400 }
@@ -1053,7 +1016,7 @@
     finalRaw:int { -32400 }
     finalYear:int { 2008 }
   } //Z#206
-  /* America/St_Barthelemy */ :int { 187 } //Z#207
+  /* America/St_Barthelemy */ :int { 190 } //Z#207
   /* America/St_Johns */ :table {
     trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 }
     typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 }
@@ -1063,10 +1026,10 @@
     finalYear:int { 2013 }
     links:intvector { 208, 381, 390 }
   } //Z#208
-  /* America/St_Kitts */ :int { 187 } //Z#209
-  /* America/St_Lucia */ :int { 187 } //Z#210
-  /* America/St_Thomas */ :int { 187 } //Z#211
-  /* America/St_Vincent */ :int { 187 } //Z#212
+  /* America/St_Kitts */ :int { 190 } //Z#209
+  /* America/St_Lucia */ :int { 190 } //Z#210
+  /* America/St_Thomas */ :int { 190 } //Z#211
+  /* America/St_Vincent */ :int { 190 } //Z#212
   /* America/Swift_Current */ :table {
     trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 }
     typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 }
@@ -1111,9 +1074,9 @@
     finalRule { "Canada" }
     finalRaw:int { -18000 }
     finalYear:int { 2008 }
-    links:intvector { 170, 218, 388 }
+    links:intvector { 170, 172, 218, 388 }
   } //Z#218
-  /* America/Tortola */ :int { 187 } //Z#219
+  /* America/Tortola */ :int { 190 } //Z#219
   /* America/Vancouver */ :table {
     transPre32:intvector { -1, 1581086444 }
     trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -733935600, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1124,7 +1087,7 @@
     finalYear:int { 2008 }
     links:intvector { 220, 391 }
   } //Z#220
-  /* America/Virgin */ :int { 187 } //Z#221
+  /* America/Virgin */ :int { 190 } //Z#221
   /* America/Whitehorse */ :table {
     transPre32:intvector { -1, 2105969308 }
     trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800, 1446368400, 1457863200, 1478422800, 1489312800, 1509872400, 1520762400, 1541322000, 1552212000, 1572771600, 1583661600, 1604214000 }
@@ -1169,11 +1132,7 @@
     typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 }
     typeMap:bin { "02000201020102" }
   } //Z#227
-  /* Antarctica/DumontDUrville */ :table {
-    trans:intvector { -725846400, -566992800, -415497600 }
-    typeOffsets:intvector { 0, 0, 36000, 0 }
-    typeMap:bin { "010001" }
-  } //Z#228
+  /* Antarctica/DumontDUrville */ :int { 585 } //Z#228
   /* Antarctica/Macquarie */ :table {
     transPre32:intvector { -1, 2080708096 }
     trans:intvector { -1680508800, -1665388800, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1301760000, 1317484800 }
@@ -1200,11 +1159,7 @@
     typeMap:bin { "01" }
   } //Z#233
   /* Antarctica/South_Pole */ :int { 553 } //Z#234
-  /* Antarctica/Syowa */ :table {
-    trans:intvector { -407808000 }
-    typeOffsets:intvector { 0, 0, 10800, 0 }
-    typeMap:bin { "01" }
-  } //Z#235
+  /* Antarctica/Syowa */ :int { 310 } //Z#235
   /* Antarctica/Troll */ :table {
     trans:intvector { 1111885200, 1130634000 }
     typeOffsets:intvector { 0, 0, 0, 7200 }
@@ -1363,22 +1318,22 @@
   } //Z#268
   /* Asia/Gaza */ :table {
     transPre32:intvector { -1, 2109557424 }
-    trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400 }
+    trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666908000 }
     typeOffsets:intvector { 8272, 0, 7200, 0, 7200, 3600 }
-    typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+    typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     finalRule { "Palestine" }
     finalRaw:int { 7200 }
-    finalYear:int { 2022 }
+    finalYear:int { 2023 }
   } //Z#269
   /* Asia/Harbin */ :int { 315 } //Z#270
   /* Asia/Hebron */ :table {
     transPre32:intvector { -1, 2109557273 }
-    trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400 }
+    trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666908000 }
     typeOffsets:intvector { 8423, 0, 7200, 0, 7200, 3600 }
-    typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+    typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     finalRule { "Palestine" }
     finalRaw:int { 7200 }
-    finalYear:int { 2022 }
+    finalYear:int { 2023 }
   } //Z#271
   /* Asia/Ho_Chi_Minh */ :table {
     trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
@@ -1563,7 +1518,7 @@
     trans:intvector { -719636812 }
     typeOffsets:intvector { 11212, 0, 10800, 0 }
     typeMap:bin { "01" }
-    links:intvector { 239, 291, 310 }
+    links:intvector { 235, 239, 291, 310 }
   } //Z#310
   /* Asia/Saigon */ :int { 272 } //Z#311
   /* Asia/Sakhalin */ :table {
@@ -2164,12 +2119,12 @@
     typeMap:bin { "0102010201020102010201020102030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
   } //Z#461
   /* Europe/Kiev */ :table {
-    trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
+    trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
     typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
-    typeMap:bin { "0305020102010506050605060506050605060506050605060506040304030403040304030403" }
+    typeMap:bin { "03050201020105060506050605060506050605060506050605060403040304030403040304030403" }
     finalRule { "EU" }
     finalRaw:int { 7200 }
-    finalYear:int { 1997 }
+    finalYear:int { 1998 }
   } //Z#462
   /* Europe/Kirov */ :table {
     trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
@@ -2307,7 +2262,7 @@
   } //Z#484
   /* Europe/Simferopol */ :table {
     transPre32:intvector { -1, 1454818312 }
-    trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
+    trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701827200, 717552000, 733276800, 749001600, 764726400, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
     typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 }
     typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" }
   } //Z#485
@@ -2354,12 +2309,12 @@
   } //Z#492
   /* Europe/Uzhgorod */ :table {
     transPre32:intvector { -1, 1794027544 }
-    trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
+    trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
     typeOffsets:intvector { 5352, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
-    typeMap:bin { "0102010201020105060506050605060506050605060506050605010304030403040304030403" }
+    typeMap:bin { "01020102010201050605060506050605060506050605060506050103040304030403040304030403" }
     finalRule { "EU" }
     finalRaw:int { 7200 }
-    finalYear:int { 1997 }
+    finalYear:int { 1998 }
   } //Z#493
   /* Europe/Vaduz */ :int { 502 } //Z#494
   /* Europe/Vatican */ :int { 480 } //Z#495
@@ -2398,12 +2353,12 @@
   /* Europe/Zagreb */ :int { 445 } //Z#500
   /* Europe/Zaporozhye */ :table {
     transPre32:intvector { -1, 1454818056 }
-    trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
+    trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
     typeOffsets:intvector { 8440, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8400, 0, 10800, 0, 10800, 3600 }
-    typeMap:bin { "05030602010201060706070607060706070607060706070607060706040304030403040304030403" }
+    typeMap:bin { "050306020102010607060706070607060706070607060706070607060403040304030403040304030403" }
     finalRule { "EU" }
     finalRaw:int { 7200 }
-    finalYear:int { 1997 }
+    finalYear:int { 1998 }
   } //Z#501
   /* Europe/Zurich */ :table {
     transPre32:intvector { -1, 619768448, -1, 1909720710 }
@@ -2719,6 +2674,7 @@
     transPre32:intvector { -1, 1454791176, -1, 1928176784 }
     typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 }
     typeMap:bin { "0102" }
+    links:intvector { 228, 585 }
   } //Z#585
   /* Pacific/Rarotonga */ :table {
     transPre32:intvector { -1, 2085412040 }
@@ -3115,7 +3071,7 @@
     8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
   } //_#19
   Palestine:intvector {
-    2, 24, -7, 0, 0, 9, -31, -6, 3600, 0, 3600
+    2, 25, -1, 0, 0, 9, 23, -6, 3600, 0, 3600
   } //_#20
   Para:intvector {
     9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600
@@ -3361,7 +3317,7 @@
   "CA", //Z#218 America/Toronto
   "VG", //Z#219 America/Tortola
   "CA", //Z#220 America/Vancouver
-  "TT", //Z#221 America/Virgin
+  "VI", //Z#221 America/Virgin
   "CA", //Z#222 America/Whitehorse
   "CA", //Z#223 America/Winnipeg
   "US", //Z#224 America/Yakutat
diff --git a/icu4c/source/data/region/LOCALE_DEPS.json b/icu4c/source/data/region/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/region/LOCALE_DEPS.json
+++ b/icu4c/source/data/region/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/region/en_MV.txt b/icu4c/source/data/region/en_MV.txt
new file mode 100644
index 0000000..fe1e43d
--- /dev/null
+++ b/icu4c/source/data/region/en_MV.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+}
diff --git a/icu4c/source/data/unit/LOCALE_DEPS.json b/icu4c/source/data/unit/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/unit/LOCALE_DEPS.json
+++ b/icu4c/source/data/unit/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/unit/en_MV.txt b/icu4c/source/data/unit/en_MV.txt
new file mode 100644
index 0000000..fe1e43d
--- /dev/null
+++ b/icu4c/source/data/unit/en_MV.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+}
diff --git a/icu4c/source/data/xml/brkitr/ja.xml b/icu4c/source/data/xml/brkitr/ja.xml
index 782c57d..a5a9b3d 100644
--- a/icu4c/source/data/xml/brkitr/ja.xml
+++ b/icu4c/source/data/xml/brkitr/ja.xml
@@ -22,6 +22,9 @@
                 <icu:line alt="loose"  icu:dependency="line_loose_cj.brk"/>
                 <icu:line alt="normal" icu:dependency="line_normal_cj.brk"/>
                 <icu:line alt="strict" icu:dependency="line_cj.brk"/>
+                <icu:line alt="loose_phrase"  icu:dependency="line_loose_phrase_cj.brk"/>
+                <icu:line alt="normal_phrase" icu:dependency="line_normal_phrase_cj.brk"/>
+                <icu:line alt="strict_phrase" icu:dependency="line_phrase_cj.brk"/>
                 <icu:line alt="phrase" icu:dependency="line_phrase_cj.brk"/>
             </icu:boundaries>
         </icu:breakIteratorData>
diff --git a/icu4c/source/data/zone/LOCALE_DEPS.json b/icu4c/source/data/zone/LOCALE_DEPS.json
index 65d67fd..e979991 100644
--- a/icu4c/source/data/zone/LOCALE_DEPS.json
+++ b/icu4c/source/data/zone/LOCALE_DEPS.json
@@ -112,6 +112,7 @@
         "en_MS": "en_001",
         "en_MT": "en_001",
         "en_MU": "en_001",
+        "en_MV": "en_001",
         "en_MW": "en_001",
         "en_MY": "en_001",
         "en_NA": "en_001",
diff --git a/icu4c/source/data/zone/en_MV.txt b/icu4c/source/data/zone/en_MV.txt
new file mode 100644
index 0000000..fe1e43d
--- /dev/null
+++ b/icu4c/source/data/zone/en_MV.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
+en_MV{
+    %%Parent{"en_001"}
+}
diff --git a/icu4c/source/stubdata/icudt70l.dat b/icu4c/source/stubdata/icudt70l.dat
index e0c3c6a..1ebf7e0 100644
--- a/icu4c/source/stubdata/icudt70l.dat
+++ b/icu4c/source/stubdata/icudt70l.dat
Binary files differ
diff --git a/icu4c/source/test/cintltst/cbiditst.c b/icu4c/source/test/cintltst/cbiditst.c
index 6d23313..38be9c5 100644
--- a/icu4c/source/test/cintltst/cbiditst.c
+++ b/icu4c/source/test/cintltst/cbiditst.c
@@ -4591,6 +4591,15 @@
         ubidi_close(pBiDi);
         return;
     }
+    // Quick callback test (API coverage).
+    if (ubidi_getCustomizedClass(pBiDi, u'A')!=AL ||
+            ubidi_getCustomizedClass(pBiDi, u'H')!=R ||
+            ubidi_getCustomizedClass(pBiDi, u'^')!=PDF ||
+            ubidi_getCustomizedClass(pBiDi, u'~')!=BN) {
+        log_err("ubidi_getCustomizedClass() returns different values than "
+                "expected from overrideBidiClass() customClasses[]\n");
+    }
+
     verifyCallbackParams(oldFn, oldContext, NULL, NULL, 0);
 
     ubidi_getClassCallback(pBiDi, &oldFn, &oldContext);
diff --git a/icu4c/source/test/cintltst/cloctst.c b/icu4c/source/test/cintltst/cloctst.c
index c5f351c..c8bfce6 100644
--- a/icu4c/source/test/cintltst/cloctst.c
+++ b/icu4c/source/test/cintltst/cloctst.c
@@ -3207,6 +3207,18 @@
             }
         }
     }
+
+    // API coverage
+    status = U_ZERO_ERROR;
+    static const char *const supported[] = { "en-US", "en-GB", "de-DE", "ja-JP" };
+    const char * desired[] = { "de-LI", "en-IN", "zu", "fr" };
+    available = uenum_openCharStringsEnumeration(supported, UPRV_LENGTHOF(supported), &status);
+    tmp[0]=0;
+    rc = uloc_acceptLanguage(tmp, 199, &outResult, desired, UPRV_LENGTHOF(desired), available, &status);
+    if (U_FAILURE(status) || rc != 5 || uprv_strcmp(tmp, "de_DE") != 0 || outResult == ULOC_ACCEPT_FAILED) {
+        log_err("uloc_acceptLanguage() failed to do a simple match\n");
+    }
+    uenum_close(available);
 }
 
 static const char* LOCALE_ALIAS[][2] = {
@@ -7053,6 +7065,14 @@
                     u_errorName(status) );
             continue;
         }
+        // API coverage: Expect to get back the dialect handling which is
+        // the first item in the displayOptions test data.
+        UDialectHandling dh = uldn_getDialectHandling(uldn);
+        UDisplayContext dhContext = (UDisplayContext)dh;  // same numeric values
+        if (dhContext != uloPtr->displayOptions[0]) {
+            log_err("uldn_getDialectHandling()=%03X != expected UDisplayContext %03X\n",
+                    dhContext, uloPtr->displayOptions[0]);
+        }
         const UldnItem * itemPtr = uloPtr->testItems;
         int32_t itemCount = uloPtr->countItems;
         for (; itemCount-- > 0; itemPtr++) {
diff --git a/icu4c/source/test/cintltst/cnormtst.c b/icu4c/source/test/cintltst/cnormtst.c
index c16f8a6..c783007 100644
--- a/icu4c/source/test/cintltst/cnormtst.c
+++ b/icu4c/source/test/cintltst/cnormtst.c
@@ -65,6 +65,7 @@
 
 static void TestAppendRestoreMiddle(void);
 static void TestGetEasyToUseInstance(void);
+static void TestAPICoverage(void);
 
 static const char* const canonTests[][3] = {
     /* Input*/                    /*Decomposed*/                /*Composed*/
@@ -156,6 +157,7 @@
     addTest(root, &TestGetRawDecomposition, "tsnorm/cnormtst/TestGetRawDecomposition");
     addTest(root, &TestAppendRestoreMiddle, "tsnorm/cnormtst/TestAppendRestoreMiddle");
     addTest(root, &TestGetEasyToUseInstance, "tsnorm/cnormtst/TestGetEasyToUseInstance");
+    addTest(root, &TestAPICoverage, "tsnorm/cnormtst/TestAPICoverage");
 }
 
 static const char* const modeStrings[]={
@@ -1698,4 +1700,55 @@
     }
 }
 
+static void
+TestAPICoverage() {
+    UErrorCode errorCode = U_ZERO_ERROR;
+    const UNormalizer2 *n2 = unorm2_getNFDInstance(&errorCode);
+    if (U_FAILURE(errorCode)) {
+        log_err_status(errorCode, "unorm2_getNFDInstance() failed: %s\n", u_errorName(errorCode));
+        return;
+    }
+
+    if (!unorm2_hasBoundaryBefore(n2, u'C') || unorm2_hasBoundaryBefore(n2, 0x300)) {
+        log_err("unorm2_hasBoundaryBefore() returns unexpected results\n");
+    }
+
+    if (!unorm2_hasBoundaryAfter(n2, u'C') || unorm2_hasBoundaryAfter(n2, 0x300)) {
+        log_err("unorm2_hasBoundaryAfter() returns unexpected results\n");
+    }
+
+    if (!unorm2_isInert(n2, 0x50005) || unorm2_isInert(n2, 0x300)) {
+        log_err("unorm2_isInert() returns unexpected results\n");
+    }
+
+    errorCode = U_ZERO_ERROR;
+    if (!unorm2_isNormalized(n2, u"c\u0327\u0300", 3, &errorCode) ||
+            unorm2_isNormalized(n2, u"c\u0300\u0327", 3, &errorCode) ||
+            U_FAILURE(errorCode)) {
+        log_err("unorm2_isNormalized() returns unexpected results\n");
+    }
+
+    errorCode = U_ZERO_ERROR;
+    if (unorm2_quickCheck(n2, u"c\u0327\u0300", 3, &errorCode) == UNORM_NO ||
+            unorm2_quickCheck(n2, u"c\u0300\u0327", 3, &errorCode) == UNORM_YES ||
+            U_FAILURE(errorCode)) {
+        log_err("unorm2_quickCheck() returns unexpected results\n");
+    }
+
+    errorCode = U_ZERO_ERROR;
+    if (unorm2_spanQuickCheckYes(n2, u"c\u0327\u0300", 3, &errorCode) != 3 ||
+            unorm2_spanQuickCheckYes(n2, u"c\u0300\u0327", 3, &errorCode) != 1 ||
+            U_FAILURE(errorCode)) {
+        log_err("unorm2_spanQuickCheckYes() returns unexpected results\n");
+    }
+
+    errorCode = U_ZERO_ERROR;
+    UChar first[10] = { u'c', 0x300, 0, 0, 0, 0, 0, 0, 0, 0 };
+    int32_t length = unorm2_normalizeSecondAndAppend(
+        n2, first, 2, UPRV_LENGTHOF(first), u"\u0327d", 2, &errorCode);
+    if (U_FAILURE(errorCode) || length != 4 || u_strcmp(first, u"c\u0327\u0300d") != 0) {
+        log_err("unorm2_normalizeSecondAndAppend() returns unexpected results\n");
+    }
+}
+
 #endif /* #if !UCONFIG_NO_NORMALIZATION */
diff --git a/icu4c/source/test/cintltst/utexttst.c b/icu4c/source/test/cintltst/utexttst.c
index 8f3974c..6ee85c7 100644
--- a/icu4c/source/test/cintltst/utexttst.c
+++ b/icu4c/source/test/cintltst/utexttst.c
@@ -292,6 +292,22 @@
         utext_close(uta);
     }
 
-
+    {
+        // utext_equals() checks for the same type of text provider,
+        // same string pointer(!), and same index.
+        status = U_ZERO_ERROR;
+        const UChar *s = u"aßカ🚲";
+        UText *ut1 = utext_openUChars(NULL, s, -1, &status);
+        UText *ut2 = utext_openUChars(NULL, s, 5, &status);
+        TEST_SUCCESS(status);
+        TEST_ASSERT(utext_equals(ut1, ut2));
+        UChar32 c = utext_next32(ut1);
+        TEST_ASSERT(c == u'a');
+        TEST_ASSERT(!utext_equals(ut1, ut2));  // indexes out of sync
+        c = utext_next32(ut2);
+        TEST_ASSERT(c == u'a');
+        TEST_ASSERT(utext_equals(ut1, ut2));  // back in sync
+        utext_close(ut1);
+        utext_close(ut2);
+    }
 }
-
diff --git a/icu4c/source/test/intltest/tztest.cpp b/icu4c/source/test/intltest/tztest.cpp
index 05e97d4..e765007 100644
--- a/icu4c/source/test/intltest/tztest.cpp
+++ b/icu4c/source/test/intltest/tztest.cpp
@@ -2036,12 +2036,20 @@
 
 void TimeZoneTest::TestCanonicalID() {
 
-    // Some canonical IDs in CLDR are defined as "Link"
-    // in Olson tzdata.
+    // Olson (IANA) tzdata used to have very few "Link"s long time ago.
+    // This test case was written when most of CLDR canonical time zones are
+    // defined as independent "Zone" in the TZ database.
+    // Since then, the TZ maintainer found some historic rules in mid 20th century
+    // were not really reliable, and many zones are now sharing rules.
+    // As of TZ database release 2022a, there are quite a lot of zones defined
+    // by "Link" to another zone, so the exception table below becomes really
+    // big. It might be still useful to make sure CLDR zone aliases are consistent
+    // with zone rules.
     static const struct {
-        const char *alias;
-        const char *zone;
+        const char *alias;  // link-from
+        const char *zone;   // link-to (A zone ID with "Zone" rule)
     } excluded1[] = {
+        {"Africa/Accra", "Africa/Abidjan"},
         {"Africa/Addis_Ababa", "Africa/Nairobi"},
         {"Africa/Asmera", "Africa/Nairobi"},
         {"Africa/Bamako", "Africa/Abidjan"},
@@ -2076,39 +2084,43 @@
         {"Africa/Ouagadougou", "Africa/Abidjan"},
         {"Africa/Porto-Novo", "Africa/Lagos"},
         {"Africa/Sao_Tome", "Africa/Abidjan"},
-        {"America/Antigua", "America/Port_of_Spain"},
-        {"America/Anguilla", "America/Port_of_Spain"},
+        {"America/Antigua", "America/Puerto_Rico"},
+        {"America/Anguilla", "America/Puerto_Rico"},
+        {"America/Aruba", "America/Puerto_Rico"},
+        {"America/Atikokan", "America/Panama"},
+        {"America/Blanc-Sablon", "America/Puerto_Rico"},
         {"America/Cayman", "America/Panama"},
-        // TODO(b/204533494): Enable this check.
-        // Android-changed: due to issues with time zones canonicity, decision was made to keep
-        // America/Coral_Harbour as alias to America/Atikokan.
-        // See more details in system/timezone/RELEASE_NOTES.md
-        // {"America/Coral_Harbour", "America/Panama"},
-        {"America/Curacao", "America/Aruba"},
-        {"America/Dominica", "America/Port_of_Spain"},
-        {"America/Grenada", "America/Port_of_Spain"},
-        {"America/Guadeloupe", "America/Port_of_Spain"},
-        {"America/Kralendijk", "America/Aruba"},
-        {"America/Lower_Princes", "America/Aruba"},
-        {"America/Marigot", "America/Port_of_Spain"},
-        {"America/Montserrat", "America/Port_of_Spain"},
+        {"America/Coral_Harbour", "America/Panama"},
+        {"America/Creston", "America/Phoenix"},
+        {"America/Curacao", "America/Puerto_Rico"},
+        {"America/Dominica", "America/Puerto_Rico"},
+        {"America/Grenada", "America/Puerto_Rico"},
+        {"America/Guadeloupe", "America/Puerto_Rico"},
+        {"America/Kralendijk", "America/Puerto_Rico"},
+        {"America/Lower_Princes", "America/Puerto_Rico"},
+        {"America/Marigot", "America/Puerto_Rico"},
+        {"America/Montreal", "America/Toronto"},
+        {"America/Montserrat", "America/Puerto_Rico"},
+        {"America/Nassau", "America/Toronto"},
+        {"America/Port_of_Spain", "America/Puerto_Rico"},
         {"America/Santa_Isabel", "America/Tijuana"},
         {"America/Shiprock", "America/Denver"},
-        {"America/St_Barthelemy", "America/Port_of_Spain"},
-        {"America/St_Kitts", "America/Port_of_Spain"},
-        {"America/St_Lucia", "America/Port_of_Spain"},
-        {"America/St_Thomas", "America/Port_of_Spain"},
-        {"America/St_Vincent", "America/Port_of_Spain"},
-        {"America/Toronto", "America/Montreal"},
-        {"America/Tortola", "America/Port_of_Spain"},
+        {"America/St_Barthelemy", "America/Puerto_Rico"},
+        {"America/St_Kitts", "America/Puerto_Rico"},
+        {"America/St_Lucia", "America/Puerto_Rico"},
+        {"America/St_Thomas", "America/Puerto_Rico"},
+        {"America/St_Vincent", "America/Puerto_Rico"},
+        {"America/Tortola", "America/Puerto_Rico"},
         {"America/Virgin", "America/Puerto_Rico"},
+        {"Antarctica/DumontDUrville", "Pacific/Port_Moresby"},
         {"Antarctica/South_Pole", "Antarctica/McMurdo"},
+        {"Antarctica/Syowa", "Asia/Riyadh"},
         {"Arctic/Longyearbyen", "Europe/Oslo"},
-        {"Asia/Kuwait", "Asia/Aden"},
+        {"Asia/Aden", "Asia/Riyadh"},
+        {"Asia/Kuwait", "Asia/Riyadh"},
         {"Asia/Muscat", "Asia/Dubai"},
         {"Asia/Phnom_Penh", "Asia/Bangkok"},
         {"Asia/Qatar", "Asia/Bahrain"},
-        {"Asia/Riyadh", "Asia/Aden"},
         {"Asia/Vientiane", "Asia/Bangkok"},
         {"Atlantic/Jan_Mayen", "Europe/Oslo"},
         {"Atlantic/St_Helena", "Africa/Abidjan"},
diff --git a/icu4c/source/tools/toolutil/toolutil.cpp b/icu4c/source/tools/toolutil/toolutil.cpp
index 1fc68aa..a9dc373 100644
--- a/icu4c/source/tools/toolutil/toolutil.cpp
+++ b/icu4c/source/tools/toolutil/toolutil.cpp
@@ -228,18 +228,19 @@
     std::ifstream ifs(goldenFilePath, std::ifstream::in);
     int32_t pos = 0;
     char c;
-    while ((c = ifs.get()) != std::char_traits<char>::eof() && pos < bufferLen) {
+    while (ifs.get(c) && pos < bufferLen) {
         if (c != buffer[pos]) {
             // Files differ at this position
-            return pos;
+            break;
         }
         pos++;
     }
-    if (pos < bufferLen || c != std::char_traits<char>::eof()) {
-        // Files are different lengths
-        return pos;
+    if (pos == bufferLen && ifs.eof()) {
+        // Files are same lengths
+        pos = -1;
     }
-    return -1;
+    ifs.close();
+    return pos;
 }
 
 /*U_CAPI UDate U_EXPORT2
diff --git a/icu4c/source/tools/tzcode/icuregions b/icu4c/source/tools/tzcode/icuregions
index 851f324..c3c138a 100644
--- a/icu4c/source/tools/tzcode/icuregions
+++ b/icu4c/source/tools/tzcode/icuregions
@@ -12,6 +12,7 @@
 Africa/Asmera ER
 America/Coral_Harbour CA
 America/Montreal CA
+America/Virgin VI
 Europe/Simferopol UA
 Pacific/Johnston UM
 
diff --git a/icu4j/Android.bp b/icu4j/Android.bp
index 3f3c989..5ec0112 100644
--- a/icu4j/Android.bp
+++ b/icu4j/Android.bp
@@ -97,6 +97,10 @@
         "icu4j-testdata",
         "junit-params",
     ],
+
+    errorprone: {
+        javacflags: ["-Xep:EqualsNull:WARN"],
+    },
 }
 
 java_import {
diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar
index 59045a7..e63a08f 100644
--- a/icu4j/main/shared/data/icudata.jar
+++ b/icu4j/main/shared/data/icudata.jar
Binary files differ
diff --git a/icu4j/main/shared/data/icutzdata.jar b/icu4j/main/shared/data/icutzdata.jar
index 626cc73..8898176 100644
--- a/icu4j/main/shared/data/icutzdata.jar
+++ b/icu4j/main/shared/data/icutzdata.jar
Binary files differ
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
index 8846257..27ce438 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
@@ -20,6 +20,7 @@
 import java.util.Locale;
 import java.util.Set;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -1478,10 +1479,20 @@
     }
 
     @Test
+    @Ignore
     public void TestCanonicalID() {
-        // Some canonical IDs in CLDR are defined as "Link"
-        // in Olson tzdata.
+        // Olson (IANA) tzdata used to have very few "Link"s long time ago.
+        // This test case was written when most of CLDR canonical time zones are
+        // defined as independent "Zone" in the TZ database.
+        // Since then, the TZ maintainer found some historic rules in mid 20th century
+        // were not really reliable, and many zones are now sharing rules.
+        // As of TZ database release 2022a, there are quite a lot of zones defined
+        // by "Link" to another zone, so the exception table below becomes really
+        // big. It might be still useful to make sure CLDR zone aliases are consistent
+        // with zone rules.
         final String[][] excluded1 = {
+            //  {"<link-from>", "<link-to> (A zone ID with "Zone" rule)"},
+                {"Africa/Accra", "Africa/Abidjan"},
                 {"Africa/Addis_Ababa", "Africa/Nairobi"},
                 {"Africa/Asmera", "Africa/Nairobi"},
                 {"Africa/Bamako", "Africa/Abidjan"},
@@ -1516,39 +1527,43 @@
                 {"Africa/Ouagadougou", "Africa/Abidjan"},
                 {"Africa/Porto-Novo", "Africa/Lagos"},
                 {"Africa/Sao_Tome", "Africa/Abidjan"},
-                {"America/Antigua", "America/Port_of_Spain"},
-                {"America/Anguilla", "America/Port_of_Spain"},
+                {"America/Antigua", "America/Puerto_Rico"},
+                {"America/Anguilla", "America/Puerto_Rico"},
+                {"America/Aruba", "America/Puerto_Rico"},
+                {"America/Atikokan", "America/Panama"},
+                {"America/Blanc-Sablon", "America/Puerto_Rico"},
                 {"America/Cayman", "America/Panama"},
-                // TODO(b/204533494): Enable this check.
-                // Android-changed: due to issues with time zones canonicity, decision was made
-                // to keep America/Coral_Harbour as alias to America/Atikokan.
-                // See more details in system/timezone/RELEASE_NOTES.md
-                // {"America/Coral_Harbour", "America/Panama"},
-                {"America/Curacao", "America/Aruba"},
-                {"America/Dominica", "America/Port_of_Spain"},
-                {"America/Grenada", "America/Port_of_Spain"},
-                {"America/Guadeloupe", "America/Port_of_Spain"},
-                {"America/Kralendijk", "America/Aruba"},
-                {"America/Lower_Princes", "America/Aruba"},
-                {"America/Marigot", "America/Port_of_Spain"},
-                {"America/Montserrat", "America/Port_of_Spain"},
+                {"America/Coral_Harbour", "America/Panama"},
+                {"America/Creston", "America/Phoenix"},
+                {"America/Curacao", "America/Puerto_Rico"},
+                {"America/Dominica", "America/Puerto_Rico"},
+                {"America/Grenada", "America/Puerto_Rico"},
+                {"America/Guadeloupe", "America/Puerto_Rico"},
+                {"America/Kralendijk", "America/Puerto_Rico"},
+                {"America/Lower_Princes", "America/Puerto_Rico"},
+                {"America/Marigot", "America/Puerto_Rico"},
+                {"America/Montreal", "America/Toronto"},
+                {"America/Montserrat", "America/Puerto_Rico"},
+                {"America/Nassau", "America/Toronto"},
+                {"America/Port_of_Spain", "America/Puerto_Rico"},
                 {"America/Santa_Isabel", "America/Tijuana"},
                 {"America/Shiprock", "America/Denver"},
-                {"America/St_Barthelemy", "America/Port_of_Spain"},
-                {"America/St_Kitts", "America/Port_of_Spain"},
-                {"America/St_Lucia", "America/Port_of_Spain"},
-                {"America/St_Thomas", "America/Port_of_Spain"},
-                {"America/St_Vincent", "America/Port_of_Spain"},
-                {"America/Toronto", "America/Montreal"},
-                {"America/Tortola", "America/Port_of_Spain"},
+                {"America/St_Barthelemy", "America/Puerto_Rico"},
+                {"America/St_Kitts", "America/Puerto_Rico"},
+                {"America/St_Lucia", "America/Puerto_Rico"},
+                {"America/St_Thomas", "America/Puerto_Rico"},
+                {"America/St_Vincent", "America/Puerto_Rico"},
+                {"America/Tortola", "America/Puerto_Rico"},
                 {"America/Virgin", "America/Puerto_Rico"},
+                {"Antarctica/DumontDUrville", "Pacific/Port_Moresby"},
                 {"Antarctica/South_Pole", "Antarctica/McMurdo"},
+                {"Antarctica/Syowa", "Asia/Riyadh"},
                 {"Arctic/Longyearbyen", "Europe/Oslo"},
-                {"Asia/Kuwait", "Asia/Aden"},
+                {"Asia/Aden", "Asia/Riyadh"},
+                {"Asia/Kuwait", "Asia/Riyadh"},
                 {"Asia/Muscat", "Asia/Dubai"},
                 {"Asia/Phnom_Penh", "Asia/Bangkok"},
                 {"Asia/Qatar", "Asia/Bahrain"},
-                {"Asia/Riyadh", "Asia/Aden"},
                 {"Asia/Vientiane", "Asia/Bangkok"},
                 {"Atlantic/Jan_Mayen", "Europe/Oslo"},
                 {"Atlantic/St_Helena", "Africa/Abidjan"},
diff --git a/libicu/cts_headers/dictbe.h b/libicu/cts_headers/dictbe.h
index 36c9a86..ca1a3c2 100644
--- a/libicu/cts_headers/dictbe.h
+++ b/libicu/cts_headers/dictbe.h
@@ -369,18 +369,18 @@
      * @internal
      */
   UnicodeSet                fHangulWordSet;
-  UnicodeSet                fNumberOrOpenPunctuationSet;
+  UnicodeSet                fDigitOrOpenPunctuationOrAlphabetSet;
   UnicodeSet                fClosePunctuationSet;
 
   DictionaryMatcher        *fDictionary;
   const Normalizer2        *nfkcNorm2;
 
  private:
-  // Load Japanese particles and auxiliary verbs.
-  void loadJapaneseParticleAndAuxVerbs(UErrorCode& error);
+  // Load Japanese extensions.
+  void loadJapaneseExtensions(UErrorCode& error);
   // Load Japanese Hiragana.
   void loadHiragana(UErrorCode& error);
-  // Initialize fSkipSet by loading Japanese Hiragana, particles and auxiliary verbs.
+  // Initialize fSkipSet by loading Japanese Hiragana and extensions.
   void initJapanesePhraseParameter(UErrorCode& error);
 
   Hashtable fSkipSet;
diff --git a/libicu/cts_headers/unicode/urename.h b/libicu/cts_headers/unicode/urename.h
index b8fd662..eea95a5 100644
--- a/libicu/cts_headers/unicode/urename.h
+++ b/libicu/cts_headers/unicode/urename.h
@@ -1840,26 +1840,26 @@
 #define utrace_setFunctions U_ICU_ENTRY_POINT_RENAME(utrace_setFunctions)
 #define utrace_setLevel U_ICU_ENTRY_POINT_RENAME(utrace_setLevel)
 #define utrace_vformat U_ICU_ENTRY_POINT_RENAME(utrace_vformat)
-#define utrans_clone U_ICU_ENTRY_POINT_RENAME(utrans_clone)
-#define utrans_close U_ICU_ENTRY_POINT_RENAME(utrans_close)
+// #define utrans_clone U_ICU_ENTRY_POINT_RENAME(utrans_clone)
+// #define utrans_close U_ICU_ENTRY_POINT_RENAME(utrans_close)
 #define utrans_countAvailableIDs U_ICU_ENTRY_POINT_RENAME(utrans_countAvailableIDs)
 #define utrans_getAvailableID U_ICU_ENTRY_POINT_RENAME(utrans_getAvailableID)
 #define utrans_getID U_ICU_ENTRY_POINT_RENAME(utrans_getID)
 #define utrans_getSourceSet U_ICU_ENTRY_POINT_RENAME(utrans_getSourceSet)
 #define utrans_getUnicodeID U_ICU_ENTRY_POINT_RENAME(utrans_getUnicodeID)
 #define utrans_open U_ICU_ENTRY_POINT_RENAME(utrans_open)
-#define utrans_openIDs U_ICU_ENTRY_POINT_RENAME(utrans_openIDs)
-#define utrans_openInverse U_ICU_ENTRY_POINT_RENAME(utrans_openInverse)
-#define utrans_openU U_ICU_ENTRY_POINT_RENAME(utrans_openU)
+// #define utrans_openIDs U_ICU_ENTRY_POINT_RENAME(utrans_openIDs)
+// #define utrans_openInverse U_ICU_ENTRY_POINT_RENAME(utrans_openInverse)
+// #define utrans_openU U_ICU_ENTRY_POINT_RENAME(utrans_openU)
 #define utrans_register U_ICU_ENTRY_POINT_RENAME(utrans_register)
 #define utrans_rep_caseContextIterator U_ICU_ENTRY_POINT_RENAME(utrans_rep_caseContextIterator)
-#define utrans_setFilter U_ICU_ENTRY_POINT_RENAME(utrans_setFilter)
+// #define utrans_setFilter U_ICU_ENTRY_POINT_RENAME(utrans_setFilter)
 #define utrans_stripRules U_ICU_ENTRY_POINT_RENAME(utrans_stripRules)
-#define utrans_toRules U_ICU_ENTRY_POINT_RENAME(utrans_toRules)
-#define utrans_trans U_ICU_ENTRY_POINT_RENAME(utrans_trans)
-#define utrans_transIncremental U_ICU_ENTRY_POINT_RENAME(utrans_transIncremental)
-#define utrans_transIncrementalUChars U_ICU_ENTRY_POINT_RENAME(utrans_transIncrementalUChars)
-#define utrans_transUChars U_ICU_ENTRY_POINT_RENAME(utrans_transUChars)
+// #define utrans_toRules U_ICU_ENTRY_POINT_RENAME(utrans_toRules)
+// #define utrans_trans U_ICU_ENTRY_POINT_RENAME(utrans_trans)
+// #define utrans_transIncremental U_ICU_ENTRY_POINT_RENAME(utrans_transIncremental)
+// #define utrans_transIncrementalUChars U_ICU_ENTRY_POINT_RENAME(utrans_transIncrementalUChars)
+// #define utrans_transUChars U_ICU_ENTRY_POINT_RENAME(utrans_transUChars)
 #define utrans_transliterator_cleanup U_ICU_ENTRY_POINT_RENAME(utrans_transliterator_cleanup)
 #define utrans_unregister U_ICU_ENTRY_POINT_RENAME(utrans_unregister)
 #define utrans_unregisterID U_ICU_ENTRY_POINT_RENAME(utrans_unregisterID)
diff --git a/libicu/libicu.map.txt b/libicu/libicu.map.txt
index 04f7564..9c68d31 100644
--- a/libicu/libicu.map.txt
+++ b/libicu/libicu.map.txt
@@ -316,4 +316,15 @@
     ucol_setMaxVariable;
     ucol_strcoll;
     ucol_strcollUTF8;
+    utrans_clone;
+    utrans_close;
+    utrans_openIDs;
+    utrans_openInverse;
+    utrans_openU;
+    utrans_setFilter;
+    utrans_toRules;
+    utrans_trans;
+    utrans_transIncremental;
+    utrans_transIncrementalUChars;
+    utrans_transUChars;
 } LIBICU_31;
\ No newline at end of file
diff --git a/libicu/ndk_headers/unicode/urep.h b/libicu/ndk_headers/unicode/urep.h
new file mode 100644
index 0000000..01abf51
--- /dev/null
+++ b/libicu/ndk_headers/unicode/urep.h
@@ -0,0 +1,161 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*   Copyright (C) 1997-2010, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+******************************************************************************
+*   Date        Name        Description
+*   06/23/00    aliu        Creation.
+******************************************************************************
+*/
+
+#ifndef __UREP_H
+#define __UREP_H
+
+#include "unicode/utypes.h"
+
+U_CDECL_BEGIN
+
+/********************************************************************
+ * General Notes
+ ********************************************************************
+ * TODO
+ * Add usage scenario
+ * Add test code
+ * Talk about pinning
+ * Talk about "can truncate result if out of memory"
+ */
+
+/********************************************************************
+ * Data Structures
+ ********************************************************************/
+/**
+ * @addtogroup ICU4C
+ * @{
+ * \file
+ * \brief C API: Callbacks for UReplaceable
+ */
+/**
+ * An opaque replaceable text object.  This will be manipulated only
+ * through the caller-supplied UReplaceableFunctor struct.  Related
+ * to the C++ class Replaceable.
+ * This is currently only used in the Transliterator C API, see utrans.h .
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+typedef void* UReplaceable;
+
+/**
+ * A set of function pointers that transliterators use to manipulate a
+ * UReplaceable.  The caller should supply the required functions to
+ * manipulate their text appropriately.  Related to the C++ class
+ * Replaceable.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+typedef struct UReplaceableCallbacks {
+
+    /**
+     * Function pointer that returns the number of UChar code units in
+     * this text.
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @return The length of the text.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.0
+     */
+    int32_t (*length)(const UReplaceable* rep);
+
+    /**
+     * Function pointer that returns a UChar code units at the given
+     * offset into this text; 0 <= offset < n, where n is the value
+     * returned by (*length)(rep).  See unistr.h for a description of
+     * charAt() vs. char32At().
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @param offset The index at which to fetch the UChar (code unit).
+     * @return The UChar (code unit) at offset, or U+FFFF if the offset is out of bounds.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.0
+     */
+    UChar   (*charAt)(const UReplaceable* rep,
+                      int32_t offset);
+
+    /**
+     * Function pointer that returns a UChar32 code point at the given
+     * offset into this text.  See unistr.h for a description of
+     * charAt() vs. char32At().
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @param offset The index at which to fetch the UChar32 (code point).
+     * @return The UChar32 (code point) at offset, or U+FFFF if the offset is out of bounds.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.0
+     */
+    UChar32 (*char32At)(const UReplaceable* rep,
+                        int32_t offset);
+    
+    /**
+     * Function pointer that replaces text between start and limit in
+     * this text with the given text.  Attributes (out of band info)
+     * should be retained.
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @param start the starting index of the text to be replaced,
+     * inclusive.
+     * @param limit the ending index of the text to be replaced,
+     * exclusive.
+     * @param text the new text to replace the UChars from
+     * start..limit-1.
+     * @param textLength the number of UChars at text, or -1 if text
+     * is null-terminated.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.0
+     */
+    void    (*replace)(UReplaceable* rep,
+                       int32_t start,
+                       int32_t limit,
+                       const UChar* text,
+                       int32_t textLength);
+    
+    /**
+     * Function pointer that copies the characters in the range
+     * [<tt>start</tt>, <tt>limit</tt>) into the array <tt>dst</tt>.
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @param start offset of first character which will be copied
+     * into the array
+     * @param limit offset immediately following the last character to
+     * be copied
+     * @param dst array in which to copy characters.  The length of
+     * <tt>dst</tt> must be at least <tt>(limit - start)</tt>.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.1
+     */
+    void    (*extract)(UReplaceable* rep,
+                       int32_t start,
+                       int32_t limit,
+                       UChar* dst);
+
+    /**
+     * Function pointer that copies text between start and limit in
+     * this text to another index in the text.  Attributes (out of
+     * band info) should be retained.  After this call, there will be
+     * (at least) two copies of the characters originally located at
+     * start..limit-1.
+     *
+     * @param rep A pointer to "this" UReplaceable object.
+     * @param start the starting index of the text to be copied,
+     * inclusive.
+     * @param limit the ending index of the text to be copied,
+     * exclusive.
+     * @param dest the index at which the copy of the UChars should be
+     * inserted.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.0
+     */
+    void    (*copy)(UReplaceable* rep,
+                    int32_t start,
+                    int32_t limit,
+                    int32_t dest);    
+
+} UReplaceableCallbacks;
+
+U_CDECL_END
+
+#endif
+
+/** @} */ // addtogroup
diff --git a/libicu/ndk_headers/unicode/utrans.h b/libicu/ndk_headers/unicode/utrans.h
new file mode 100644
index 0000000..a4bd4ec
--- /dev/null
+++ b/libicu/ndk_headers/unicode/utrans.h
@@ -0,0 +1,534 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 1997-2011,2014-2015 International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*   Date        Name        Description
+*   06/21/00    aliu        Creation.
+*******************************************************************************
+*/
+
+#ifndef UTRANS_H
+#define UTRANS_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_TRANSLITERATION
+
+#include "unicode/urep.h"
+#include "unicode/parseerr.h"
+#include "unicode/uenum.h"
+
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif   // U_SHOW_CPLUSPLUS_API
+
+/********************************************************************
+ * General Notes
+ ********************************************************************
+ */
+/**
+ * @addtogroup ICU4C
+ * @{
+ * \file
+ * \brief C API: Transliterator
+ *
+ * <h2> Transliteration </h2>
+ * The data structures and functions described in this header provide
+ * transliteration services.  Transliteration services are implemented
+ * as C++ classes.  The comments and documentation in this header
+ * assume the reader is familiar with the C++ headers translit.h and
+ * associated documentation.
+ *
+ * A significant but incomplete subset of the C++ transliteration
+ * services are available to C code through this header.  In order to
+ * access more complex transliteration services, refer to the C++
+ * headers and documentation.
+ *
+ * There are two sets of functions for working with transliterator IDs:
+ *
+ * An old, deprecated set uses char * IDs, which works for true and pure
+ * identifiers that these APIs were designed for,
+ * for example "Cyrillic-Latin".
+ * It does not work when the ID contains filters ("[:Script=Cyrl:]")
+ * or even a complete set of rules because then the ID string contains more
+ * than just "invariant" characters (see utypes.h).
+ *
+ * A new set of functions replaces the old ones and uses UChar * IDs,
+ * paralleling the UnicodeString IDs in the C++ API. (New in ICU 2.8.)
+ */
+
+/********************************************************************
+ * Data Structures
+ ********************************************************************/
+
+/**
+ * An opaque transliterator for use in C.  Open with utrans_openxxx()
+ * and close with utrans_close() when done.  Equivalent to the C++ class
+ * Transliterator and its subclasses.
+ * @see Transliterator
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+typedef void* UTransliterator;
+
+/**
+ * Direction constant indicating the direction in a transliterator,
+ * e.g., the forward or reverse rules of a RuleBasedTransliterator.
+ * Specified when a transliterator is opened.  An "A-B" transliterator
+ * transliterates A to B when operating in the forward direction, and
+ * B to A when operating in the reverse direction.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+typedef enum UTransDirection {
+    
+    /**
+     * UTRANS_FORWARD means from &lt;source&gt; to &lt;target&gt; for a
+     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
+     * opened using a rule, it means forward direction rules, e.g.,
+     * "A > B".
+     */
+    UTRANS_FORWARD,
+
+    /**
+     * UTRANS_REVERSE means from &lt;target&gt; to &lt;source&gt; for a
+     * transliterator with ID &lt;source&gt;-&lt;target&gt;.  For a transliterator
+     * opened using a rule, it means reverse direction rules, e.g.,
+     * "A < B".
+     */
+    UTRANS_REVERSE
+
+} UTransDirection;
+
+/**
+ * Position structure for utrans_transIncremental() incremental
+ * transliteration.  This structure defines two substrings of the text
+ * being transliterated.  The first region, [contextStart,
+ * contextLimit), defines what characters the transliterator will read
+ * as context.  The second region, [start, limit), defines what
+ * characters will actually be transliterated.  The second region
+ * should be a subset of the first.
+ *
+ * <p>After a transliteration operation, some of the indices in this
+ * structure will be modified.  See the field descriptions for
+ * details.
+ *
+ * <p>contextStart <= start <= limit <= contextLimit
+ *
+ * <p>Note: All index values in this structure must be at code point
+ * boundaries.  That is, none of them may occur between two code units
+ * of a surrogate pair.  If any index does split a surrogate pair,
+ * results are unspecified.
+ *
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+typedef struct UTransPosition {
+
+    /**
+     * Beginning index, inclusive, of the context to be considered for
+     * a transliteration operation.  The transliterator will ignore
+     * anything before this index.  INPUT/OUTPUT parameter: This parameter
+     * is updated by a transliteration operation to reflect the maximum
+     * amount of antecontext needed by a transliterator.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.4
+     */
+    int32_t contextStart;
+    
+    /**
+     * Ending index, exclusive, of the context to be considered for a
+     * transliteration operation.  The transliterator will ignore
+     * anything at or after this index.  INPUT/OUTPUT parameter: This
+     * parameter is updated to reflect changes in the length of the
+     * text, but points to the same logical position in the text.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.4
+     */
+    int32_t contextLimit;
+    
+    /**
+     * Beginning index, inclusive, of the text to be transliterated.
+     * INPUT/OUTPUT parameter: This parameter is advanced past
+     * characters that have already been transliterated by a
+     * transliteration operation.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.4
+     */
+    int32_t start;
+    
+    /**
+     * Ending index, exclusive, of the text to be transliterated.
+     * INPUT/OUTPUT parameter: This parameter is updated to reflect
+     * changes in the length of the text, but points to the same
+     * logical position in the text.
+     * \xrefitem stable "Stable" "Stable List" ICU 2.4
+     */
+    int32_t limit;
+
+} UTransPosition;
+
+/********************************************************************
+ * General API
+ ********************************************************************/
+
+/**
+ * Open a custom transliterator, given a custom rules string 
+ * OR 
+ * a system transliterator, given its ID.  
+ * Any non-NULL result from this function should later be closed with
+ * utrans_close().
+ *
+ * @param id a valid transliterator ID
+ * @param idLength the length of the ID string, or -1 if NUL-terminated
+ * @param dir the desired direction
+ * @param rules the transliterator rules.  See the C++ header rbt.h for
+ *              rules syntax. If NULL then a system transliterator matching
+ *              the ID is returned.
+ * @param rulesLength the length of the rules, or -1 if the rules
+ *                    are NUL-terminated.
+ * @param parseError a pointer to a UParseError struct to receive the details
+ *                   of any parsing errors. This parameter may be NULL if no
+ *                   parsing error details are desired.
+ * @param pErrorCode a pointer to the UErrorCode
+ * @return a transliterator pointer that may be passed to other
+ *         utrans_xxx() functions, or NULL if the open call fails.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.8
+ */
+U_CAPI UTransliterator* U_EXPORT2
+utrans_openU(const UChar *id,
+             int32_t idLength,
+             UTransDirection dir,
+             const UChar *rules,
+             int32_t rulesLength,
+             UParseError *parseError,
+             UErrorCode *pErrorCode) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Open an inverse of an existing transliterator.  For this to work,
+ * the inverse must be registered with the system.  For example, if
+ * the Transliterator "A-B" is opened, and then its inverse is opened,
+ * the result is the Transliterator "B-A", if such a transliterator is
+ * registered with the system.  Otherwise the result is NULL and a
+ * failing UErrorCode is set.  Any non-NULL result from this function
+ * should later be closed with utrans_close().
+ *
+ * @param trans the transliterator to open the inverse of.
+ * @param status a pointer to the UErrorCode
+ * @return a pointer to a newly-opened transliterator that is the
+ * inverse of trans, or NULL if the open call fails.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI UTransliterator* U_EXPORT2 
+utrans_openInverse(const UTransliterator* trans,
+                   UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Create a copy of a transliterator.  Any non-NULL result from this
+ * function should later be closed with utrans_close().
+ *
+ * @param trans the transliterator to be copied.
+ * @param status a pointer to the UErrorCode
+ * @return a transliterator pointer that may be passed to other
+ * utrans_xxx() functions, or NULL if the clone call fails.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI UTransliterator* U_EXPORT2 
+utrans_clone(const UTransliterator* trans,
+             UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Close a transliterator.  Any non-NULL pointer returned by
+ * utrans_openXxx() or utrans_clone() should eventually be closed.
+ * @param trans the transliterator to be closed.
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_close(UTransliterator* trans) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+#if U_SHOW_CPLUSPLUS_API
+
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUTransliteratorPointer
+ * "Smart pointer" class, closes a UTransliterator via utrans_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * \xrefitem stable "Stable" "Stable List" ICU 4.4
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUTransliteratorPointer, UTransliterator, utrans_close);
+
+U_NAMESPACE_END
+
+#endif
+
+
+
+
+
+
+
+/**
+ * Set the filter used by a transliterator.  A filter can be used to
+ * make the transliterator pass certain characters through untouched.
+ * The filter is expressed using a UnicodeSet pattern.  If the
+ * filterPattern is NULL or the empty string, then the transliterator
+ * will be reset to use no filter.
+ *
+ * @param trans the transliterator
+ * @param filterPattern a pattern string, in the form accepted by
+ * UnicodeSet, specifying which characters to apply the
+ * transliteration to.  May be NULL or the empty string to indicate no
+ * filter.
+ * @param filterPatternLen the length of filterPattern, or -1 if
+ * filterPattern is zero-terminated
+ * @param status a pointer to the UErrorCode
+ * @see UnicodeSet
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_setFilter(UTransliterator* trans,
+                 const UChar* filterPattern,
+                 int32_t filterPatternLen,
+                 UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+
+
+/**
+ * Return a UEnumeration for the available transliterators.
+ *
+ * @param pErrorCode Pointer to the UErrorCode in/out parameter.
+ * @return UEnumeration for the available transliterators.
+ *         Close with uenum_close().
+ *
+ * \xrefitem stable "Stable" "Stable List" ICU 2.8
+ */
+U_CAPI UEnumeration * U_EXPORT2
+utrans_openIDs(UErrorCode *pErrorCode) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/********************************************************************
+ * Transliteration API
+ ********************************************************************/
+
+/**
+ * Transliterate a segment of a UReplaceable string.  The string is
+ * passed in as a UReplaceable pointer rep and a UReplaceableCallbacks
+ * function pointer struct repFunc.  Functions in the repFunc struct
+ * will be called in order to modify the rep string.
+ *
+ * @param trans the transliterator
+ * @param rep a pointer to the string.  This will be passed to the
+ * repFunc functions.
+ * @param repFunc a set of function pointers that will be used to
+ * modify the string pointed to by rep.
+ * @param start the beginning index, inclusive; <code>0 <= start <=
+ * limit</code>.
+ * @param limit pointer to the ending index, exclusive; <code>start <=
+ * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
+ * contain the new limit index.  The text previously occupying
+ * <code>[start, limit)</code> has been transliterated, possibly to a
+ * string of a different length, at <code>[start,
+ * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
+ * is the return value.
+ * @param status a pointer to the UErrorCode
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_trans(const UTransliterator* trans,
+             UReplaceable* rep,
+             const UReplaceableCallbacks* repFunc,
+             int32_t start,
+             int32_t* limit,
+             UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Transliterate the portion of the UReplaceable text buffer that can
+ * be transliterated unambiguously.  This method is typically called
+ * after new text has been inserted, e.g. as a result of a keyboard
+ * event.  The transliterator will try to transliterate characters of
+ * <code>rep</code> between <code>index.cursor</code> and
+ * <code>index.limit</code>.  Characters before
+ * <code>index.cursor</code> will not be changed.
+ *
+ * <p>Upon return, values in <code>index</code> will be updated.
+ * <code>index.start</code> will be advanced to the first
+ * character that future calls to this method will read.
+ * <code>index.cursor</code> and <code>index.limit</code> will
+ * be adjusted to delimit the range of text that future calls to
+ * this method may change.
+ *
+ * <p>Typical usage of this method begins with an initial call
+ * with <code>index.start</code> and <code>index.limit</code>
+ * set to indicate the portion of <code>text</code> to be
+ * transliterated, and <code>index.cursor == index.start</code>.
+ * Thereafter, <code>index</code> can be used without
+ * modification in future calls, provided that all changes to
+ * <code>text</code> are made via this method.
+ *
+ * <p>This method assumes that future calls may be made that will
+ * insert new text into the buffer.  As a result, it only performs
+ * unambiguous transliterations.  After the last call to this method,
+ * there may be untransliterated text that is waiting for more input
+ * to resolve an ambiguity.  In order to perform these pending
+ * transliterations, clients should call utrans_trans() with a start
+ * of index.start and a limit of index.end after the last call to this
+ * method has been made.
+ *
+ * @param trans the transliterator
+ * @param rep a pointer to the string.  This will be passed to the
+ * repFunc functions.
+ * @param repFunc a set of function pointers that will be used to
+ * modify the string pointed to by rep.
+ * @param pos a struct containing the start and limit indices of the
+ * text to be read and the text to be transliterated
+ * @param status a pointer to the UErrorCode
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_transIncremental(const UTransliterator* trans,
+                        UReplaceable* rep,
+                        const UReplaceableCallbacks* repFunc,
+                        UTransPosition* pos,
+                        UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Transliterate a segment of a UChar* string.  The string is passed
+ * in in a UChar* buffer.  The string is modified in place.  If the
+ * result is longer than textCapacity, it is truncated.  The actual
+ * length of the result is returned in *textLength, if textLength is
+ * non-NULL. *textLength may be greater than textCapacity, but only
+ * textCapacity UChars will be written to *text, including the zero
+ * terminator.
+ *
+ * @param trans the transliterator
+ * @param text a pointer to a buffer containing the text to be
+ * transliterated on input and the result text on output.
+ * @param textLength a pointer to the length of the string in text.
+ * If the length is -1 then the string is assumed to be
+ * zero-terminated.  Upon return, the new length is stored in
+ * *textLength.  If textLength is NULL then the string is assumed to
+ * be zero-terminated.
+ * @param textCapacity the length of the text buffer
+ * @param start the beginning index, inclusive; <code>0 <= start <=
+ * limit</code>.
+ * @param limit pointer to the ending index, exclusive; <code>start <=
+ * limit <= repFunc->length(rep)</code>.  Upon return, *limit will
+ * contain the new limit index.  The text previously occupying
+ * <code>[start, limit)</code> has been transliterated, possibly to a
+ * string of a different length, at <code>[start,
+ * </code><em>new-limit</em><code>)</code>, where <em>new-limit</em>
+ * is the return value.
+ * @param status a pointer to the UErrorCode
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_transUChars(const UTransliterator* trans,
+                   UChar* text,
+                   int32_t* textLength,
+                   int32_t textCapacity,
+                   int32_t start,
+                   int32_t* limit,
+                   UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Transliterate the portion of the UChar* text buffer that can be
+ * transliterated unambiguously.  See utrans_transIncremental().  The
+ * string is passed in in a UChar* buffer.  The string is modified in
+ * place.  If the result is longer than textCapacity, it is truncated.
+ * The actual length of the result is returned in *textLength, if
+ * textLength is non-NULL. *textLength may be greater than
+ * textCapacity, but only textCapacity UChars will be written to
+ * *text, including the zero terminator.  See utrans_transIncremental()
+ * for usage details.
+ *
+ * @param trans the transliterator
+ * @param text a pointer to a buffer containing the text to be
+ * transliterated on input and the result text on output.
+ * @param textLength a pointer to the length of the string in text.
+ * If the length is -1 then the string is assumed to be
+ * zero-terminated.  Upon return, the new length is stored in
+ * *textLength.  If textLength is NULL then the string is assumed to
+ * be zero-terminated.
+ * @param textCapacity the length of the text buffer
+ * @param pos a struct containing the start and limit indices of the
+ * text to be read and the text to be transliterated
+ * @param status a pointer to the UErrorCode
+ * @see utrans_transIncremental
+ * \xrefitem stable "Stable" "Stable List" ICU 2.0
+ */
+U_CAPI void U_EXPORT2 
+utrans_transIncrementalUChars(const UTransliterator* trans,
+                              UChar* text,
+                              int32_t* textLength,
+                              int32_t textCapacity,
+                              UTransPosition* pos,
+                              UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+/**
+ * Create a rule string that can be passed to utrans_openU to recreate this
+ * transliterator.
+ *
+ * @param trans     The transliterator
+ * @param escapeUnprintable if true then convert unprintable characters to their
+ *                  hex escape representations, \\uxxxx or \\Uxxxxxxxx.
+ *                  Unprintable characters are those other than
+ *                  U+000A, U+0020..U+007E.
+ * @param result    A pointer to a buffer to receive the rules.
+ * @param resultLength The maximum size of result.
+ * @param status    A pointer to the UErrorCode. In case of error status, the
+ *                  contents of result are undefined.
+ * @return int32_t   The length of the rule string (may be greater than resultLength,
+ *                  in which case an error is returned).
+ * \xrefitem stable "Stable" "Stable List" ICU 53
+ */
+U_CAPI int32_t U_EXPORT2
+utrans_toRules(     const UTransliterator* trans,
+                    UBool escapeUnprintable,
+                    UChar* result, int32_t resultLength,
+                    UErrorCode* status) __INTRODUCED_IN(__ANDROID_API_T__);
+
+
+
+
+
+/* deprecated API ----------------------------------------------------------- */
+
+#ifndef U_HIDE_DEPRECATED_API
+
+/* see utrans.h documentation for why these functions are deprecated */
+
+
+
+
+
+
+
+
+
+#endif  /* U_HIDE_DEPRECATED_API */
+
+#endif /* #if !UCONFIG_NO_TRANSLITERATION */
+
+#endif
+
+/** @} */ // addtogroup
diff --git a/libicu/src/shim.cpp b/libicu/src/shim.cpp
index 83b0997..6115b06 100644
--- a/libicu/src/shim.cpp
+++ b/libicu/src/shim.cpp
@@ -15,6 +15,7 @@
 #include <unicode/uscript.h>
 #include <unicode/ustring.h>
 #include <unicode/utext.h>
+#include <unicode/utrans.h>
 #include <unicode/utypes.h>
 #include <unicode/uversion.h>
 
@@ -314,6 +315,17 @@
 #undef utext_previous32
 #undef utext_previous32From
 #undef utext_setNativeIndex
+#undef utrans_clone
+#undef utrans_close
+#undef utrans_openIDs
+#undef utrans_openInverse
+#undef utrans_openU
+#undef utrans_setFilter
+#undef utrans_toRules
+#undef utrans_trans
+#undef utrans_transIncremental
+#undef utrans_transIncrementalUChars
+#undef utrans_transUChars
 
 extern "C" {
 void u_charAge(UChar32 c, UVersionInfo versionArray) {
@@ -898,10 +910,10 @@
 const char * uenum_next(UEnumeration * en, int32_t * resultLength, UErrorCode * status) {
   return U_ICU_ENTRY_POINT_RENAME(uenum_next)(en, resultLength, status);
 }
-UEnumeration * uenum_openCharStringsEnumeration(const char *const  strings[], int32_t count, UErrorCode * ec) {
+UEnumeration * uenum_openCharStringsEnumeration(const char *const strings[], int32_t count, UErrorCode * ec) {
   return U_ICU_ENTRY_POINT_RENAME(uenum_openCharStringsEnumeration)(strings, count, ec);
 }
-UEnumeration * uenum_openUCharStringsEnumeration(const UChar *const  strings[], int32_t count, UErrorCode * ec) {
+UEnumeration * uenum_openUCharStringsEnumeration(const UChar *const strings[], int32_t count, UErrorCode * ec) {
   return U_ICU_ENTRY_POINT_RENAME(uenum_openUCharStringsEnumeration)(strings, count, ec);
 }
 void uenum_reset(UEnumeration * en, UErrorCode * status) {
@@ -1201,4 +1213,37 @@
 void utext_setNativeIndex(UText * ut, int64_t nativeIndex) {
   U_ICU_ENTRY_POINT_RENAME(utext_setNativeIndex)(ut, nativeIndex);
 }
+UTransliterator * utrans_clone(const UTransliterator * trans, UErrorCode * status) {
+  return U_ICU_ENTRY_POINT_RENAME(utrans_clone)(trans, status);
+}
+void utrans_close(UTransliterator * trans) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_close)(trans);
+}
+UEnumeration * utrans_openIDs(UErrorCode * pErrorCode) {
+  return U_ICU_ENTRY_POINT_RENAME(utrans_openIDs)(pErrorCode);
+}
+UTransliterator * utrans_openInverse(const UTransliterator * trans, UErrorCode * status) {
+  return U_ICU_ENTRY_POINT_RENAME(utrans_openInverse)(trans, status);
+}
+UTransliterator * utrans_openU(const UChar * id, int32_t idLength, UTransDirection dir, const UChar * rules, int32_t rulesLength, UParseError * parseError, UErrorCode * pErrorCode) {
+  return U_ICU_ENTRY_POINT_RENAME(utrans_openU)(id, idLength, dir, rules, rulesLength, parseError, pErrorCode);
+}
+void utrans_setFilter(UTransliterator * trans, const UChar * filterPattern, int32_t filterPatternLen, UErrorCode * status) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_setFilter)(trans, filterPattern, filterPatternLen, status);
+}
+int32_t utrans_toRules(const UTransliterator * trans, UBool escapeUnprintable, UChar * result, int32_t resultLength, UErrorCode * status) {
+  return U_ICU_ENTRY_POINT_RENAME(utrans_toRules)(trans, escapeUnprintable, result, resultLength, status);
+}
+void utrans_trans(const UTransliterator * trans, UReplaceable * rep, const UReplaceableCallbacks * repFunc, int32_t start, int32_t * limit, UErrorCode * status) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_trans)(trans, rep, repFunc, start, limit, status);
+}
+void utrans_transIncremental(const UTransliterator * trans, UReplaceable * rep, const UReplaceableCallbacks * repFunc, UTransPosition * pos, UErrorCode * status) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_transIncremental)(trans, rep, repFunc, pos, status);
+}
+void utrans_transIncrementalUChars(const UTransliterator * trans, UChar * text, int32_t * textLength, int32_t textCapacity, UTransPosition * pos, UErrorCode * status) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_transIncrementalUChars)(trans, text, textLength, textCapacity, pos, status);
+}
+void utrans_transUChars(const UTransliterator * trans, UChar * text, int32_t * textLength, int32_t textCapacity, int32_t start, int32_t * limit, UErrorCode * status) {
+  U_ICU_ENTRY_POINT_RENAME(utrans_transUChars)(trans, text, textLength, textCapacity, start, limit, status);
+}
 }
\ No newline at end of file
diff --git a/libicu/test/src/utrans_test.cpp b/libicu/test/src/utrans_test.cpp
new file mode 100644
index 0000000..3944525
--- /dev/null
+++ b/libicu/test/src/utrans_test.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include <unicode/uchar.h>
+#include <unicode/ustring.h>
+#include <unicode/utrans.h>
+
+TEST(Icu4cUTransliteratorTest, test_utrans_transUChars) {
+  UErrorCode status = U_ZERO_ERROR;
+  UChar id[] = u"Any-Upper";
+  UTransliterator* utrans = utrans_openU(id, -1, UTRANS_FORWARD, NULL, 0, NULL, &status);
+  ASSERT_EQ(U_ZERO_ERROR, status);
+
+  UChar str[] = u"HeLlO WoRlD!";
+  int32_t len = sizeof(str) / sizeof(UChar) - 1;
+
+  utrans_transUChars(utrans, str, NULL, len + 1 /*textCapacity*/, 0, &len, &status);
+  utrans_close(utrans);
+  UChar expected[] = u"HELLO WORLD!";
+  ASSERT_EQ(U_ZERO_ERROR, status);
+  ASSERT_EQ(0, u_strcmp(expected, str));
+}
+
diff --git a/tools/data_patches/brkitr/ja.txt.patch b/tools/data_patches/brkitr/ja.txt.patch
new file mode 100644
index 0000000..de1096c
--- /dev/null
+++ b/tools/data_patches/brkitr/ja.txt.patch
@@ -0,0 +1,67 @@
+--- icu4c/source/data/brkitr/ja.txt
++++ icu4c/source/data/brkitr/ja.txt
+@@ -12,4 +12,64 @@ ja{
+         line_strict:process(dependency){"line_cj.brk"}
+         line_strict_phrase:process(dependency){"line_phrase_cj.brk"}
+     }
++    extensions{
++        // Extensions.
++        // Entries in cjdict.txt categorized as particles (助詞), auxiliary verbs (助動詞),
++        // conjugations (活用)  and prefix of them.
++        // These entries are connected to the previous words for phrase based line breaking.
++        // https://ja.wikipedia.org/wiki/助詞
++        // https://ja.wikipedia.org/wiki/助動詞_(国文法)
++        // https://ja.wikipedia.org/wiki/活用
++        かい, かしら, から, きり, くらい,
++        ぐらい, けれど, けれども, こそ, さえ,
++        しか, した, ずつ, せる, せん,
++        たい, たがる, たく, たら, たり,
++        だけ, だに, だの, だり, つつ,
++        てる, です, でも, ところが, ところで,
++        とも, ない, なか, ながら, なく,
++        なし, なぞ, など, なら, なり,
++        なんぞ, ねる, ので, のに, のみ,
++        ばかり, へる, ほど, まい, まう,
++        まし, ます, まっ, まで, まま,
++        もん, やら, よう, より, らしい,
++        られる, れる, ろう, わっ, わな,
++        わら, わり, わる, われ, わん,
++
++        // Entries added for technical reasons (particle + others).
++        // Entries in cjdict.txt, which are compound words starting from the above categories
++        // (i.e. particles, auxiliary verbs and conjunctions).
++        // These entries are connected to the previous words for phrase based line breaking.
++        えたい, えて, える, けた, けたい,
++        ける, させる, そうだ, っきゃ, っきり,
++        っけ, っす, ったらしい, っちゅう, って,
++        っていう, ってか, ってな, っと, っぱなし,
++        っぷり, っぽい, にあう, にあがる, にあたって,
++        にあたり, にあたりまして, にあたります, にあたる, において,
++        におきまして, における, にかけ, にかけて, にかけまして,
++        にたいして, にたいしまして, にたいします, にたいする, について,
++        につき, につきまして, につけ, につれ, につれて,
++        にて, にとって, にとり, にとりまして, にまつわります,
++        にまつわる, にもかかわらず, にゃ, によって, により,
++        によりまして, によります, による, にわたって, にわたり,
++        にわたりまして, にわたります, にわたる, に対し, に対して,
++        に対しまして, に対します, に対する, に当たって, に当たり,
++        に当たりまして, に当たります, に当たる, に従い, に従いまして,
++        に従います, に従う, に従って, に関し, に関して,
++        に関しまして, に関します, に関する, に際し, に際して,
++        ものの, ろうし, ろうと, われと, をの,
++        をめぐって, をめぐりまして, をめぐります, をめぐる, をもちまして,
++        をもって, を以て, を通して, を通しまして, を通じ,
++        を通じて, を通じまして, んじゃ, んで,
++
++        // Entries added for technical reasons (noun suffix).
++        // Entries in cjdict.txt, which are suffixes of nouns.
++        // These entries should be connected to the previous (noun) words.
++        々宮, 々家, え目, が丘, が台,
++        が床, が浜, ヵ国, ヵ年, ヵ所,
++        ヵ月, ヵ村, ヵ条, ヶ丘, ヶ国,
++        ヶ島, ヶ年, ヶ所, ヶ月, ヶ村,
++        ヶ条, ージ, ーズ, ータ, ード,
++        ーニャ, ープランス, ーユ, ーランド, ーリンズ,
++        ーン,
++    }
+ }
diff --git a/tools/icu4c_srcgen/generate_ndk.py b/tools/icu4c_srcgen/generate_ndk.py
index 2585bbc..b784323 100755
--- a/tools/icu4c_srcgen/generate_ndk.py
+++ b/tools/icu4c_srcgen/generate_ndk.py
@@ -216,6 +216,7 @@
     "ulocdata.h": ["ures.h", "uset.h", ],
     "unorm2.h": ["uset.h", ],
     "ustring.h": ["uiter.h", ],
+    "utrans.h": ["uset.h", ],
 }
 
 IGNORED_HEADER_FOR_DOXYGEN_GROUPING = set([
diff --git a/tools/icu4c_srcgen/libicu_export.txt b/tools/icu4c_srcgen/libicu_export.txt
index 3352f3a..c60268c 100644
--- a/tools/icu4c_srcgen/libicu_export.txt
+++ b/tools/icu4c_srcgen/libicu_export.txt
@@ -339,3 +339,16 @@
 #   utext_getPreviousNativeIndex
 #   utext_hasMetaData
 #   utext_isLengthExpensive
+utrans_clone,T
+utrans_close,T
+utrans_openIDs,T
+utrans_openInverse,T
+utrans_openU,T
+utrans_setFilter,T
+utrans_toRules,T
+utrans_trans,T
+utrans_transIncremental,T
+utrans_transIncrementalUChars,T
+utrans_transUChars,T
+# Please expose the following API when USet API is exposed.
+#   utrans_getSourceSet
diff --git a/tools/testing/test_harness/src/com/android/icu/tradefed/testtype/ICU4CTest.java b/tools/testing/test_harness/src/com/android/icu/tradefed/testtype/ICU4CTest.java
index 5b2c302..387c34b 100644
--- a/tools/testing/test_harness/src/com/android/icu/tradefed/testtype/ICU4CTest.java
+++ b/tools/testing/test_harness/src/com/android/icu/tradefed/testtype/ICU4CTest.java
@@ -39,6 +39,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.LinkedList;
@@ -398,7 +399,9 @@
                             testPath, mDevice.getSerialNumber()));
         }
         if (!mExcludeFilters.isEmpty()) {
-            throw new IllegalStateException("ICU4C test suites do not support exclude filters");
+            // Log a message instead of throwing IllegalStateException. http://b/213284403
+            CLog.w("ICU4C test suites do not support exclude filters: %s",
+                Arrays.toString(mExcludeFilters.toArray()));
         }
         runTest(mDevice, testPath, listener);
     }
diff --git a/tools/updatecldrdata.py b/tools/updatecldrdata.py
index c9890da..6d11eab 100755
--- a/tools/updatecldrdata.py
+++ b/tools/updatecldrdata.py
@@ -123,6 +123,14 @@
   shutil.copy(localeCanonicalization_src, os.path.join(
     icu_dir, 'icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode/localeCanonicalization.txt'))
 
+  # Apply a patch on icu4c/source/data/brkitr/ja.txt because we didn't
+  # cherry-pick the data to CLDR, but only to ICU.
+  # See https://r.android.com/1985568
+  # This patch will not needed when ICU is upgraded to version 71.
+  os.chdir(icu_dir)
+  subprocess.check_call(['patch', '-p0', '-s', '-i',
+                         'tools/data_patches/brkitr/ja.txt.patch'])
+
   print('Look in %s for new data source files' % icu4c_data_source_dir)
   sys.exit(0)