diff --git a/DEPS b/DEPS
index 3627356..f076cdc0 100644
--- a/DEPS
+++ b/DEPS
@@ -209,7 +209,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'b2a2e7c9e3fe50a3a77a068ae6dd29661f4dcab4',
+  'skia_revision': 'fa06f102f13bcfa94748ae2d9beb9f66ab4ce150',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -221,7 +221,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '3b2ef1cdbecc0f83cd6191549dd4369bdc9b9d8e',
+  'angle_revision': 'a766ab14edda8c0d0760364e6e3866a550d15986',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -229,7 +229,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '88780c39d858d4a89e928a885299cfd942a095b5',
+  'pdfium_revision': 'f115a5253d0699082058a1586d6b63fa998ba39e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -280,7 +280,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '70ce64f4639423f995fb9172f25b68d546634bd4',
+  'catapult_revision': '1b8cf3bcf95e50cafecc633a6f687ed16e3b2193',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -288,7 +288,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'eacc13c35821daac752d59480018e6573b13a5eb',
+  'devtools_frontend_revision': '85c4713355a396eaae1b502df2bb589b32e1ac08',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -328,7 +328,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '963991a1074ca7ee86485937545165efaf1563c5',
+  'dawn_revision': '4d5e02366a582a4e21d73ce1e58a47fb176e07ed',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -548,12 +548,12 @@
     Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248',
 
   'src/ios/third_party/earl_grey2/src': {
-      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + 'aa4852822741a0cc59902469077376f84664b45d',
+      'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + 'bd4649d035b14a8ef54a686a0717122d529a4478',
       'condition': 'checkout_ios',
   },
 
     'src/ios/third_party/edo/src': {
-      'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git' + '@' + 'b9cfc0cb37060725f3e968c186e14e6172388546',
+      'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git' + '@' + '73009d72eb528b1108d1540e3cd8d03d0b34280e',
       'condition': 'checkout_ios',
   },
 
@@ -966,7 +966,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '6234dd231719d51d565ca0d846cfaac6c72a2499',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '3a56ba9d9c9d22bc78e24f96a9096247d53649f8',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1338,7 +1338,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'ea617741a1bcc0951495c6f8fcee219e1fc563d0',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '424d8898471d8c779a0378ff6fb9117e1de3095e',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1416,7 +1416,7 @@
       'packages': [
           {
               'package': 'fuchsia/third_party/aemu/linux-amd64',
-              'version': 'DwlFUQdUj3INh9MLxAcJZ3wbIZfyV56T7mDDgiUWq3oC'
+              'version': '3VMKWKF7CpMmSlkl7BVH47knjv3eZcJI9P0dGBoSB_YC'
           },
       ],
       'condition': 'host_os == "linux" and checkout_fuchsia',
@@ -1549,10 +1549,10 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'a0b8774ce8cec1dc8f4308810bf05eb8867c62de',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '267e0b71649664a27d79f23773f0bde9e0e1164f',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '34974c270a8740dcd63069fffa59741ab0416f1a',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'b2f8c1675d74b860c63f97a38e63f3578505391d',
+    Var('webrtc_git') + '/src.git' + '@' + '816b638048fb7cc5ba72968a59650b693b704101',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1613,7 +1613,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@efad8beeee3b28d639831c927fd97328cb571a4a',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@1e9aaa658f76d5548db117085a93bd74e62cdef4',
     'condition': 'checkout_src_internal',
   },
 
@@ -1621,7 +1621,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/eche_app/app',
-        'version': 'uQBANVE52z0ySq0IRBuva5HYP2xW-1un1_JVzs1pyGkC',
+        'version': 'yY4G9__wVxlswvn7cNuQGTFi4WP3FitAGp1I_1AgGagC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -4200,6 +4200,14 @@
                 '-s', 'src/third_party/gvr-android-sdk/test-libraries/controller_test_api.aar.sha1',
     ],
   },
+  # Download and unpack MediaPipe Integration tests.
+  {
+    'name': 'mediapipe_integration_testdata',
+    'pattern': '.',
+    'action': [ 'python',
+                'src/content/test/gpu/gpu_tests/mediapipe_update.py',
+    ],
+  },
   # Download VR test APKs only if the environment variable is set
   {
     'name': 'vr_test_apks',
diff --git a/ash/ambient/ambient_photo_controller_unittest.cc b/ash/ambient/ambient_photo_controller_unittest.cc
index 8ea15d87..94f4775b 100644
--- a/ash/ambient/ambient_photo_controller_unittest.cc
+++ b/ash/ambient/ambient_photo_controller_unittest.cc
@@ -19,6 +19,7 @@
 #include "base/base_paths.h"
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -26,7 +27,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
-#include "base/stl_util.h"
 #include "base/system/sys_info.h"
 #include "base/test/bind.h"
 #include "base/timer/timer.h"
diff --git a/ash/app_list/views/search_result_view.cc b/ash/app_list/views/search_result_view.cc
index 556464d..d9a2e65 100644
--- a/ash/app_list/views/search_result_view.cc
+++ b/ash/app_list/views/search_result_view.cc
@@ -151,11 +151,10 @@
   for (const auto& tag : tags) {
     if (tag.styles & SearchResult::Tag::URL) {
       render_text->ApplyColor(kUrlColor, tag.range);
-    } else if (tag.styles & SearchResult::Tag::MATCH) {
-      render_text->ApplyColor(
-          AppListColorProvider::Get()->GetSearchBoxTextColor(
-              kDeprecatedSearchBoxTextDefaultColor),
-          tag.range);
+    }
+    if (tag.styles & SearchResult::Tag::MATCH &&
+        app_list_features::IsLauncherQueryHighlightingEnabled()) {
+      render_text->ApplyWeight(gfx::Font::Weight::BOLD, tag.range);
     }
   }
   title_text_ = std::move(render_text);
@@ -177,8 +176,13 @@
       kDeprecatedSearchBoxTextDefaultColor));
   const SearchResult::Tags& tags = result()->details_tags();
   for (const auto& tag : tags) {
-    if (tag.styles & SearchResult::Tag::URL)
+    if (tag.styles & SearchResult::Tag::URL) {
       render_text->ApplyColor(kUrlColor, tag.range);
+    }
+    if (tag.styles & SearchResult::Tag::MATCH &&
+        app_list_features::IsLauncherQueryHighlightingEnabled()) {
+      render_text->ApplyWeight(gfx::Font::Weight::BOLD, tag.range);
+    }
   }
   details_text_ = std::move(render_text);
 }
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index ee40fe0..d63dab2 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -3474,6 +3474,9 @@
       <message name="IDS_ASH_MULTIPASTE_ZERO_STATE_CONTEXTUAL_NUDGE" desc="The label used for the zero state multipaste nudge, to be seen when there are no items on the clipboard and the user press the keyboard shortcut for multipaste.">
         Access your clipboard history by pressing <ph name="SHORTCUT_KEY_NAME">$1<ex>Launcher</ex></ph> + V to view your clipboard. Copy an item to get started.
       </message>
+      <message name="IDS_ASH_MULTIPASTE_SCREENSHOT_NOTIFICATION_NUDGE" desc="The label used to show the keyboard shortcut for multipaste, to be seen aside the screenshot notification banner which notifies the user that the screenshot has been copied to clipboard.">
+        + V
+      </message>
 
       <message name="IDS_APP_LIST_BLOCKED_APP" desc="The spoken feedback text when a focused app is blocked.">
         Blocked
diff --git a/ash/ash_strings_grd/IDS_ASH_MULTIPASTE_SCREENSHOT_NOTIFICATION_NUDGE.png.sha1 b/ash/ash_strings_grd/IDS_ASH_MULTIPASTE_SCREENSHOT_NOTIFICATION_NUDGE.png.sha1
new file mode 100644
index 0000000..fa13f4cf2
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_MULTIPASTE_SCREENSHOT_NOTIFICATION_NUDGE.png.sha1
@@ -0,0 +1 @@
+629f0ea724a1360a89cf8e1692d66b2601b6ccdd
\ No newline at end of file
diff --git a/ash/capture_mode/capture_mode_notification_view.cc b/ash/capture_mode/capture_mode_notification_view.cc
index 07f5a6a..174237b1 100644
--- a/ash/capture_mode/capture_mode_notification_view.cc
+++ b/ash/capture_mode/capture_mode_notification_view.cc
@@ -4,11 +4,15 @@
 
 #include "ash/capture_mode/capture_mode_notification_view.h"
 
+#include "ash/constants/ash_features.h"
+#include "ash/public/cpp/assistant/assistant_state.h"
+#include "ash/public/cpp/clipboard_history_controller.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
 #include "ash/style/scoped_light_mode_as_default.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/chromeos/events/keyboard_layout_util.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/background.h"
 #include "ui/views/layout/box_layout.h"
@@ -30,6 +34,65 @@
 constexpr int kPlayIconBackgroundCornerRadiusDip = 20;
 constexpr gfx::Size kPlayIconViewSize{40, 40};
 
+// The size of the keyboard shortcut icon.
+constexpr int kKeyboardShortcutIconSize = 14;
+
+bool IsAssistantAvailable() {
+  AssistantStateBase* state = AssistantState::Get();
+  return state->allowed_state() ==
+             chromeos::assistant::AssistantAllowedState::ALLOWED &&
+         state->settings_enabled().value_or(false);
+}
+
+gfx::ImageSkia GetShortcutIcon(SkColor icon_color) {
+  // Set the keyboard shortcut icon depending on whether search button or
+  // launcher button is being used.
+  const bool use_launcher_key = ui::DeviceUsesKeyboardLayout2();
+
+  if (!use_launcher_key) {
+    return gfx::CreateVectorIcon(kClipboardSearchIcon,
+                                 kKeyboardShortcutIconSize, icon_color);
+  }
+
+  if (IsAssistantAvailable()) {
+    return gfx::CreateVectorIcon(gfx::IconDescription(
+        kClipboardLauncherOuterIcon, kKeyboardShortcutIconSize, icon_color,
+        &kClipboardLauncherInnerIcon));
+  }
+
+  return gfx::CreateVectorIcon(kClipboardLauncherNoAssistantIcon,
+                               kKeyboardShortcutIconSize, icon_color);
+}
+
+std::unique_ptr<views::View> CreateClipboardShortcutView() {
+  std::unique_ptr<views::View> clipboard_shortcut_view =
+      std::make_unique<views::View>();
+
+  auto* color_provider = AshColorProvider::Get();
+  const SkColor background_color = color_provider->GetControlsLayerColor(
+      AshColorProvider::ControlsLayerType::kControlBackgroundColorActive);
+  // The text and icon are showing on the background with |background_color|
+  // so its color is same with kButtonLabelColorPrimary although they're
+  // not theoretically showing on a button.
+  const SkColor text_icon_color = color_provider->GetContentLayerColor(
+      AshColorProvider::ContentLayerType::kButtonLabelColorPrimary);
+  clipboard_shortcut_view->SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kHorizontal));
+
+  gfx::ImageSkia shortcut_icon = GetShortcutIcon(text_icon_color);
+  auto* keyboard_shortcut_icon = clipboard_shortcut_view->AddChildView(
+      std::make_unique<views::ImageView>());
+  keyboard_shortcut_icon->SetImage(shortcut_icon);
+
+  views::Label* shortcut_label = clipboard_shortcut_view->AddChildView(
+      std::make_unique<views::Label>(l10n_util::GetStringUTF16(
+          IDS_ASH_MULTIPASTE_SCREENSHOT_NOTIFICATION_NUDGE)));
+  shortcut_label->SetBackgroundColor(background_color);
+  shortcut_label->SetEnabledColor(text_icon_color);
+  ClipboardHistoryController::Get()->MarkScreenshotNotificationNudgeShown();
+  return clipboard_shortcut_view;
+}
+
 // Creates the banner view that will show on top of the notification image.
 std::unique_ptr<views::View> CreateBannerView() {
   std::unique_ptr<views::View> banner_view = std::make_unique<views::View>();
@@ -46,11 +109,11 @@
   // not theoretically showing on a button.
   const SkColor text_icon_color = color_provider->GetContentLayerColor(
       AshColorProvider::ContentLayerType::kButtonLabelColorPrimary);
-  auto layout = std::make_unique<views::BoxLayout>(
-      views::BoxLayout::Orientation::kHorizontal,
-      gfx::Insets(kBannerVerticalInsetDip, kBannerHorizontalInsetDip),
-      kBannerIconTextSpacingDip);
-  banner_view->SetLayoutManager(std::move(layout));
+  auto* layout =
+      banner_view->SetLayoutManager(std::make_unique<views::BoxLayout>(
+          views::BoxLayout::Orientation::kHorizontal,
+          gfx::Insets(kBannerVerticalInsetDip, kBannerHorizontalInsetDip),
+          kBannerIconTextSpacingDip));
   banner_view->SetBackground(views::CreateSolidBackground(background_color));
 
   views::ImageView* icon =
@@ -62,8 +125,14 @@
       std::make_unique<views::Label>(l10n_util::GetStringUTF16(
           IDS_ASH_SCREEN_CAPTURE_SCREENSHOT_COPIED_TO_CLIPBOARD)));
   label->SetBackgroundColor(background_color);
+  label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
   label->SetEnabledColor(text_icon_color);
 
+  if (features::IsClipboardHistoryScreenshotNudgeEnabled()) {
+    banner_view->AddChildView(CreateClipboardShortcutView());
+    layout->SetFlexForView(label, 1);
+  }
+
   return banner_view;
 }
 
diff --git a/ash/clipboard/clipboard_history_controller_impl.cc b/ash/clipboard/clipboard_history_controller_impl.cc
index 0a0ae80..c9dcd18 100644
--- a/ash/clipboard/clipboard_history_controller_impl.cc
+++ b/ash/clipboard/clipboard_history_controller_impl.cc
@@ -287,6 +287,10 @@
   nudge_controller_->MarkNewFeatureBadgeShown();
 }
 
+void ClipboardHistoryControllerImpl::MarkScreenshotNotificationNudgeShown() {
+  nudge_controller_->MarkScreenshotNotificationNudgeShown();
+}
+
 bool ClipboardHistoryControllerImpl::CanShowMenu() const {
   return !IsEmpty() && ClipboardHistoryUtil::IsEnabledInCurrentMode();
 }
diff --git a/ash/clipboard/clipboard_history_controller_impl.h b/ash/clipboard/clipboard_history_controller_impl.h
index b60d96f..69ce862 100644
--- a/ash/clipboard/clipboard_history_controller_impl.h
+++ b/ash/clipboard/clipboard_history_controller_impl.h
@@ -110,6 +110,7 @@
   bool CanShowMenu() const override;
   bool ShouldShowNewFeatureBadge() const override;
   void MarkNewFeatureBadgeShown() override;
+  void MarkScreenshotNotificationNudgeShown() override;
   std::unique_ptr<ScopedClipboardHistoryPause> CreateScopedPause() override;
   base::Value GetHistoryValues(
       const std::set<std::string>& item_id_filter) const override;
diff --git a/ash/clipboard/clipboard_nudge_constants.h b/ash/clipboard/clipboard_nudge_constants.h
index 2e71dce..511aabb 100644
--- a/ash/clipboard/clipboard_nudge_constants.h
+++ b/ash/clipboard/clipboard_nudge_constants.h
@@ -19,6 +19,9 @@
   kZeroStateNudge = 1,
   // Blue new feature badge for clipboard history's context menu option.
   kNewFeatureBadge = 2,
+  // Shows the keyboard shortcut for clipboard history in the screenshot
+  // notification nudge.
+  kScreenshotNotificationNudge = 3,
 };
 
 const char kOnboardingNudge_ShowCount[] =
@@ -39,6 +42,13 @@
     "Ash.ClipboardHistory.Nudges.NewFeatureBadge.ToFeatureOpenTime";
 const char kNewBadge_PasteTime[] =
     "Ash.ClipboardHistory.Nudges.NewFeatureBadge.ToFeaturePasteTime";
+const char kScreenshotNotification_ShowCount[] =
+    "Ash.ClipboardHistory.Nudges.ScreenshotNotificationNudge.ShownCount";
+const char kScreenshotNotification_OpenTime[] =
+    "Ash.ClipboardHistory.Nudges.ScreenshotNotificationNudge.ToFeatureOpenTime";
+const char kScreenshotNotification_PasteTime[] =
+    "Ash.ClipboardHistory.Nudges.ScreenshotNotificationNudge."
+    "ToFeaturePasteTime";
 
 constexpr int kNotificationLimit = 3;
 constexpr int kContextMenuBadgeShowLimit = 3;
diff --git a/ash/clipboard/clipboard_nudge_controller.cc b/ash/clipboard/clipboard_nudge_controller.cc
index d6a2a7f..23a5a1d 100644
--- a/ash/clipboard/clipboard_nudge_controller.cc
+++ b/ash/clipboard/clipboard_nudge_controller.cc
@@ -37,6 +37,40 @@
 
 // Clock that can be overridden for testing.
 base::Clock* g_clock_override = nullptr;
+
+base::Time GetTime() {
+  if (g_clock_override)
+    return g_clock_override->Now();
+  return base::Time::Now();
+}
+
+bool LogFeatureOpenTime(
+    const ClipboardNudgeController::TimeMetricHelper& metric_show_time,
+    const std::string& open_histogram) {
+  if (!metric_show_time.ShouldLogFeatureOpenTime())
+    return false;
+  base::TimeDelta time_since_shown =
+      metric_show_time.GetTimeSinceShown(GetTime());
+  // Tracks the amount of time between showing the user a nudge and
+  // the user opening the ClipboardHistory menu.
+  base::UmaHistogramExactLinear(open_histogram, time_since_shown.InSeconds(),
+                                kMaxSeconds);
+  return true;
+}
+
+bool LogFeatureUsedTime(
+    const ClipboardNudgeController::TimeMetricHelper& metric_show_time,
+    const std::string& paste_histogram) {
+  if (!metric_show_time.ShouldLogFeatureUsedTime())
+    return false;
+  base::TimeDelta time_since_shown =
+      metric_show_time.GetTimeSinceShown(GetTime());
+  // Tracks the amount of time between showing the user a nudge and
+  // the user opening the ClipboardHistory menu.
+  base::UmaHistogramExactLinear(paste_histogram, time_since_shown.InSeconds(),
+                                kMaxSeconds);
+  return true;
+}
 }  // namespace
 
 // A class for observing the clipboard nudge fade out animation. Once the fade
@@ -139,6 +173,19 @@
   new_feature_last_shown_time_.ResetTime();
 }
 
+void ClipboardNudgeController::MarkScreenshotNotificationNudgeShown() {
+  base::UmaHistogramBoolean(kScreenshotNotification_ShowCount, true);
+  if (screenshot_notification_last_shown_time_.ShouldLogFeatureOpenTime()) {
+    base::UmaHistogramExactLinear(kScreenshotNotification_OpenTime, kMaxSeconds,
+                                  kMaxSeconds);
+  }
+  if (screenshot_notification_last_shown_time_.ShouldLogFeatureUsedTime()) {
+    base::UmaHistogramExactLinear(kScreenshotNotification_PasteTime,
+                                  kMaxSeconds, kMaxSeconds);
+  }
+  screenshot_notification_last_shown_time_.ResetTime();
+}
+
 bool ClipboardNudgeController::ShouldShowNewFeatureBadge() {
   PrefService* prefs =
       Shell::Get()->session_controller()->GetLastActiveUserPrefService();
@@ -300,78 +347,41 @@
 
 void ClipboardNudgeController::OnClipboardHistoryMenuShown(
     crosapi::mojom::ClipboardHistoryControllerShowSource show_source) {
-  if (last_shown_time_.ShouldLogFeatureOpenTime()) {
-    base::TimeDelta time_since_shown =
-        last_shown_time_.GetTimeSinceShown(GetTime());
-
-    // Tracks the amount of time between showing the user a nudge and the user
-    // opening the ClipboardHistory menu.
-    base::UmaHistogramExactLinear(kOnboardingNudge_OpenTime,
-                                  time_since_shown.InSeconds(), kMaxSeconds);
+  if (LogFeatureOpenTime(last_shown_time_, kOnboardingNudge_OpenTime))
     last_shown_time_.set_was_logged_as_opened();
-  }
-  if (new_feature_last_shown_time_.ShouldLogFeatureOpenTime()) {
-    switch (show_source) {
-      case crosapi::mojom::ClipboardHistoryControllerShowSource::kAccelerator:
-      case crosapi::mojom::ClipboardHistoryControllerShowSource::
-          kVirtualKeyboard:
-      case crosapi::mojom::ClipboardHistoryControllerShowSource::kUnknown:
-        break;
-      case crosapi::mojom::ClipboardHistoryControllerShowSource::
-          kRenderViewContextMenu:
-      case crosapi::mojom::ClipboardHistoryControllerShowSource::
-          kTextfieldContextMenu:
-        base::TimeDelta time_since_shown =
-            new_feature_last_shown_time_.GetTimeSinceShown(GetTime());
-        // Tracks the amount of time between showing the user the new badge and
-        // the user opening the ClipboardHistory menu.
-        base::UmaHistogramExactLinear(
-            kNewBadge_OpenTime, time_since_shown.InSeconds(), kMaxSeconds);
+  switch (show_source) {
+    case crosapi::mojom::ClipboardHistoryControllerShowSource::kAccelerator:
+    case crosapi::mojom::ClipboardHistoryControllerShowSource::kVirtualKeyboard:
+    case crosapi::mojom::ClipboardHistoryControllerShowSource::kUnknown:
+      break;
+    case crosapi::mojom::ClipboardHistoryControllerShowSource::
+        kRenderViewContextMenu:
+    case crosapi::mojom::ClipboardHistoryControllerShowSource::
+        kTextfieldContextMenu:
+      if (LogFeatureOpenTime(new_feature_last_shown_time_, kNewBadge_OpenTime))
         new_feature_last_shown_time_.set_was_logged_as_opened();
-        break;
-    }
   }
-  if (zero_state_last_shown_time_.ShouldLogFeatureOpenTime()) {
-    base::TimeDelta time_since_shown =
-        zero_state_last_shown_time_.GetTimeSinceShown(GetTime());
-    // Tracks the amount of time between showing the user a zero state nudge and
-    // the user opening the ClipboardHistory menu.
-    base::UmaHistogramExactLinear(kZeroStateNudge_OpenTime,
-                                  time_since_shown.InSeconds(), kMaxSeconds);
+  if (LogFeatureOpenTime(zero_state_last_shown_time_, kZeroStateNudge_OpenTime))
     zero_state_last_shown_time_.set_was_logged_as_opened();
+  if (LogFeatureOpenTime(screenshot_notification_last_shown_time_,
+                         kScreenshotNotification_OpenTime)) {
+    screenshot_notification_last_shown_time_.set_was_logged_as_opened();
   }
 }
 
 void ClipboardNudgeController::OnClipboardHistoryPasted() {
-  if (last_shown_time_.ShouldLogFeatureUsedTime()) {
-    base::TimeDelta time_since_shown =
-        last_shown_time_.GetTimeSinceShown(GetTime());
-
-    // Tracks the amount of time between showing the user a nudge and the user
-    // using the ClipboardHistory feature.
-    base::UmaHistogramExactLinear(kOnboardingNudge_PasteTime,
-                                  time_since_shown.InSeconds(), kMaxSeconds);
+  if (LogFeatureUsedTime(last_shown_time_, kOnboardingNudge_PasteTime))
     last_shown_time_.set_was_logged_as_used();
-  }
-  if (new_feature_last_shown_time_.ShouldLogFeatureUsedTime()) {
-    base::TimeDelta time_since_shown =
-        new_feature_last_shown_time_.GetTimeSinceShown(GetTime());
-    // Tracks the amount of time between showing the user a new badge and the
-    // user using the ClipboardHistory feature.
-    base::UmaHistogramExactLinear(kNewBadge_PasteTime,
-                                  time_since_shown.InSeconds(), kMaxSeconds);
+  if (LogFeatureUsedTime(new_feature_last_shown_time_, kNewBadge_PasteTime))
     new_feature_last_shown_time_.set_was_logged_as_used();
-  }
-  if (zero_state_last_shown_time_.ShouldLogFeatureUsedTime()) {
-    base::TimeDelta time_since_shown =
-        zero_state_last_shown_time_.GetTimeSinceShown(GetTime());
-
-    // Tracks the amount of time between showing the user a nudge and the user
-    // using the ClipboardHistory feature.
-    base::UmaHistogramExactLinear(kZeroStateNudge_PasteTime,
-                                  time_since_shown.InSeconds(), kMaxSeconds);
+  if (LogFeatureUsedTime(zero_state_last_shown_time_,
+                         kZeroStateNudge_PasteTime)) {
     zero_state_last_shown_time_.set_was_logged_as_used();
   }
+  if (LogFeatureUsedTime(screenshot_notification_last_shown_time_,
+                         kScreenshotNotification_PasteTime)) {
+    screenshot_notification_last_shown_time_.set_was_logged_as_used();
+  }
 }
 
 void ClipboardNudgeController::ForceCloseAnimatingNudge() {
diff --git a/ash/clipboard/clipboard_nudge_controller.h b/ash/clipboard/clipboard_nudge_controller.h
index 8d42f176..e1e5b4a6 100644
--- a/ash/clipboard/clipboard_nudge_controller.h
+++ b/ash/clipboard/clipboard_nudge_controller.h
@@ -42,6 +42,25 @@
       public SessionObserver,
       public ClipboardHistoryController::Observer {
  public:
+  class TimeMetricHelper {
+   public:
+    TimeMetricHelper() = default;
+    TimeMetricHelper(const TimeMetricHelper&) = delete;
+    TimeMetricHelper& operator=(const TimeMetricHelper&) = delete;
+    ~TimeMetricHelper() = default;
+
+    bool ShouldLogFeatureUsedTime() const;
+    bool ShouldLogFeatureOpenTime() const;
+    base::TimeDelta GetTimeSinceShown(base::Time current_time) const;
+    void ResetTime();
+    void set_was_logged_as_used() { was_logged_as_used_ = true; }
+    void set_was_logged_as_opened() { was_logged_as_opened_ = true; }
+
+   private:
+    base::Time last_shown_time_;
+    bool was_logged_as_used_ = false;
+    bool was_logged_as_opened_ = false;
+  };
   ClipboardNudgeController(
       ClipboardHistory* clipboard_history,
       ClipboardHistoryControllerImpl* clipboard_history_controller);
@@ -71,6 +90,9 @@
   // Increment the 'new' feature badge shown count.
   void MarkNewFeatureBadgeShown();
 
+  // Increment the screenshot notification nudge shown count.
+  void MarkScreenshotNotificationNudgeShown();
+
   // ClipboardHistoryControllerImpl:
   void OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource show_source)
@@ -94,25 +116,6 @@
   void FireHideNudgeTimerForTesting();
 
  private:
-  class TimeMetricHelper {
-   public:
-    TimeMetricHelper() = default;
-    TimeMetricHelper(const TimeMetricHelper&) = delete;
-    TimeMetricHelper& operator=(const TimeMetricHelper&) = delete;
-    ~TimeMetricHelper() = default;
-
-    bool ShouldLogFeatureUsedTime() const;
-    bool ShouldLogFeatureOpenTime() const;
-    base::TimeDelta GetTimeSinceShown(base::Time current_time) const;
-    void ResetTime();
-    void set_was_logged_as_used() { was_logged_as_used_ = true; }
-    void set_was_logged_as_opened() { was_logged_as_opened_ = true; }
-
-   private:
-    base::Time last_shown_time_;
-    bool was_logged_as_used_ = false;
-    bool was_logged_as_opened_ = false;
-  };
   // Gets the number of times the nudge has been shown.
   int GetShownCount(PrefService* prefs);
   // Gets the last time the nudge was shown.
@@ -139,6 +142,9 @@
   // Time the new feature badge was last shown.
   TimeMetricHelper new_feature_last_shown_time_;
 
+  // Time the screenshot notification nudge was last shown.
+  TimeMetricHelper screenshot_notification_last_shown_time_;
+
   // Owned by ClipboardHistoryController.
   const ClipboardHistory* clipboard_history_;
 
diff --git a/ash/clipboard/clipboard_nudge_controller_unittest.cc b/ash/clipboard/clipboard_nudge_controller_unittest.cc
index 6ce63d0a..1f810f1b 100644
--- a/ash/clipboard/clipboard_nudge_controller_unittest.cc
+++ b/ash/clipboard/clipboard_nudge_controller_unittest.cc
@@ -92,6 +92,9 @@
       case ClipboardNudgeType::kNewFeatureBadge:
         nudge_controller_->MarkNewFeatureBadgeShown();
         return;
+      case ClipboardNudgeType::kScreenshotNotificationNudge:
+        nudge_controller_->MarkScreenshotNotificationNudgeShown();
+        return;
     }
   }
 
@@ -306,6 +309,8 @@
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 0);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 0);
 }
 
 // Test that opening the clipboard history after showing the nudges logs only
@@ -315,6 +320,7 @@
   ShowNudgeForType(ClipboardNudgeType::kOnboardingNudge);
   ShowNudgeForType(ClipboardNudgeType::kZeroStateNudge);
   ShowNudgeForType(ClipboardNudgeType::kNewFeatureBadge);
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
   nudge_controller_->OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource::
           kRenderViewContextMenu);
@@ -322,9 +328,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 1);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 0);
 }
 
 // Test that pasting something from the clipboard history after showing the
@@ -334,6 +342,7 @@
   ShowNudgeForType(ClipboardNudgeType::kOnboardingNudge);
   ShowNudgeForType(ClipboardNudgeType::kZeroStateNudge);
   ShowNudgeForType(ClipboardNudgeType::kNewFeatureBadge);
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
   nudge_controller_->OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource::
           kRenderViewContextMenu);
@@ -342,9 +351,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 1);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 1);
 }
 
 // Test that the onboarding nudge being shown only logs the metrics for the
@@ -359,9 +370,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 0);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 0);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 0);
 }
 
 // Test that the zero state nudge being shown only logs the metrics for the zero
@@ -376,9 +389,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 0);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 0);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 0);
 }
 
 // Test that the new feature badge being shown only logs the metrics for the new
@@ -393,9 +408,31 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 0);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 0);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 0);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 0);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 0);
+}
+
+// Test that the screenshot notification nudge being shown only logs the metrics
+// for the screenshot notification nudge histograms,
+TEST_F(ClipboardNudgeControllerTest,
+       ScreenshotNotification_DoesNotLogOtherMetrics) {
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
+  nudge_controller_->OnClipboardHistoryMenuShown(
+      crosapi::mojom::ClipboardHistoryControllerShowSource::
+          kRenderViewContextMenu);
+  nudge_controller_->OnClipboardHistoryPasted();
+
+  histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 0);
+  histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 0);
+  histograms().ExpectTotalCount(kNewBadge_OpenTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 1);
+  histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 0);
+  histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 0);
+  histograms().ExpectTotalCount(kNewBadge_PasteTime, 0);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 1);
 }
 
 // Test that nudge metrics will not log multiple times if the nudges are not
@@ -404,6 +441,7 @@
   ShowNudgeForType(ClipboardNudgeType::kOnboardingNudge);
   ShowNudgeForType(ClipboardNudgeType::kZeroStateNudge);
   ShowNudgeForType(ClipboardNudgeType::kNewFeatureBadge);
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
   nudge_controller_->OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource::
           kRenderViewContextMenu);
@@ -416,9 +454,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 1);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 1);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 1);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 1);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 1);
 }
 
 // Test that nudge metrics can log more times as the nudges are shown before.
@@ -426,6 +466,7 @@
   ShowNudgeForType(ClipboardNudgeType::kOnboardingNudge);
   ShowNudgeForType(ClipboardNudgeType::kZeroStateNudge);
   ShowNudgeForType(ClipboardNudgeType::kNewFeatureBadge);
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
   nudge_controller_->OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource::
           kRenderViewContextMenu);
@@ -433,6 +474,7 @@
   ShowNudgeForType(ClipboardNudgeType::kOnboardingNudge);
   ShowNudgeForType(ClipboardNudgeType::kZeroStateNudge);
   ShowNudgeForType(ClipboardNudgeType::kNewFeatureBadge);
+  ShowNudgeForType(ClipboardNudgeType::kScreenshotNotificationNudge);
   nudge_controller_->OnClipboardHistoryMenuShown(
       crosapi::mojom::ClipboardHistoryControllerShowSource::
           kRenderViewContextMenu);
@@ -441,9 +483,11 @@
   histograms().ExpectTotalCount(kOnboardingNudge_OpenTime, 2);
   histograms().ExpectTotalCount(kZeroStateNudge_OpenTime, 2);
   histograms().ExpectTotalCount(kNewBadge_OpenTime, 2);
+  histograms().ExpectTotalCount(kScreenshotNotification_OpenTime, 2);
   histograms().ExpectTotalCount(kOnboardingNudge_PasteTime, 2);
   histograms().ExpectTotalCount(kZeroStateNudge_PasteTime, 2);
   histograms().ExpectTotalCount(kNewBadge_PasteTime, 2);
+  histograms().ExpectTotalCount(kScreenshotNotification_PasteTime, 2);
 }
 
 // For the new feature badge, metrics should only log for opening a menu by a
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 532cd0b..f035ab9 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -402,6 +402,11 @@
 const base::Feature kClipboardHistoryContextMenuNudge{
     "ClipboardHistoryContextMenuNudge", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// If enabled, the clipboard history shortcut will appear in screenshot
+// notifications.
+const base::Feature kClipboardHistoryScreenshotNudge{
+    "ClipboardHistoryScreenshotNudge", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables copying an image to the system clipboard to support pasting onto
 // different surfaces
 const base::Feature kEnableFilesAppCopyImage{"EnableFilesAppCopyImage",
@@ -863,6 +868,10 @@
   return base::FeatureList::IsEnabled(kClipboardHistoryContextMenuNudge);
 }
 
+bool IsClipboardHistoryScreenshotNudgeEnabled() {
+  return base::FeatureList::IsEnabled(kClipboardHistoryScreenshotNudge);
+}
+
 bool IsPciguardUiEnabled() {
   return base::FeatureList::IsEnabled(kEnablePciguardUi);
 }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 37205c6c..cf0248a 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -176,6 +176,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kClipboardHistoryContextMenuNudge;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kClipboardHistoryScreenshotNudge;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kEnableFilesAppCopyImage;
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kFsNosymfollow;
 COMPONENT_EXPORT(ASH_CONSTANTS)
@@ -351,6 +353,8 @@
 bool IsClipboardHistoryContextMenuNudgeEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsClipboardHistoryEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS)
+bool IsClipboardHistoryScreenshotNudgeEnabled();
+COMPONENT_EXPORT(ASH_CONSTANTS)
 bool IsClipboardHistoryNudgeSessionResetEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDemoModeSWAEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDeepLinkingEnabled();
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc
index e0816186..665cd2d1 100644
--- a/ash/public/cpp/app_list/app_list_features.cc
+++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -53,6 +53,8 @@
     "EnableLauncherSearchNormalization", base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kCategoricalSearch{"CategoricalSearch",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kLauncherQueryHighlighting{
+    "LauncherQueryHighlighting", base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsAppDataSearchEnabled() {
   return base::FeatureList::IsEnabled(kEnableAppDataSearch);
@@ -138,6 +140,10 @@
   return base::FeatureList::IsEnabled(kCategoricalSearch);
 }
 
+bool IsLauncherQueryHighlightingEnabled() {
+  return base::FeatureList::IsEnabled(kLauncherQueryHighlighting);
+}
+
 std::string CategoricalSearchType() {
   return GetFieldTrialParamValueByFeature(kCategoricalSearch, "ranking");
 }
diff --git a/ash/public/cpp/app_list/app_list_features.h b/ash/public/cpp/app_list/app_list_features.h
index c249eed..84ba2fb 100644
--- a/ash/public/cpp/app_list/app_list_features.h
+++ b/ash/public/cpp/app_list/app_list_features.h
@@ -79,9 +79,12 @@
 // Enables normalization of search results in the launcher.
 ASH_PUBLIC_EXPORT extern const base::Feature kEnableLauncherSearchNormalization;
 
-// Enables normalization of search results in the launcher.
+// Enables categorical search in the launcher.
 ASH_PUBLIC_EXPORT extern const base::Feature kCategoricalSearch;
 
+// Enables search query highlighting in the launcher.
+ASH_PUBLIC_EXPORT extern const base::Feature kLauncherQueryHighlighting;
+
 bool ASH_PUBLIC_EXPORT IsAppDataSearchEnabled();
 bool ASH_PUBLIC_EXPORT IsAppListSearchAutocompleteEnabled();
 bool ASH_PUBLIC_EXPORT IsAppRankerEnabled();
@@ -101,6 +104,7 @@
 bool ASH_PUBLIC_EXPORT IsOmniboxRichEntitiesEnabled();
 bool ASH_PUBLIC_EXPORT IsLauncherSearchNormalizationEnabled();
 bool ASH_PUBLIC_EXPORT IsCategoricalSearchEnabled();
+bool ASH_PUBLIC_EXPORT IsLauncherQueryHighlightingEnabled();
 
 std::string ASH_PUBLIC_EXPORT AnswerServerUrl();
 std::string ASH_PUBLIC_EXPORT AnswerServerQuerySuffix();
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index 59d6dc9d..4590922 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -132,6 +132,9 @@
 const base::Feature kTemporaryHoldingSpace{"TemporaryHoldingSpace",
                                            base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kTemporaryHoldingSpaceArcIntegration{
+    "TemporaryHoldingSpaceArcIntegration", base::FEATURE_ENABLED_BY_DEFAULT};
+
 const base::Feature kDragUnpinnedAppToPin{"DragUnpinnedAppToPin",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
@@ -302,6 +305,11 @@
   return base::FeatureList::IsEnabled(kTemporaryHoldingSpace);
 }
 
+bool IsTemporaryHoldingSpaceArcIntegrationEnabled() {
+  return IsTemporaryHoldingSpaceEnabled() &&
+         base::FeatureList::IsEnabled(kTemporaryHoldingSpaceArcIntegration);
+}
+
 bool IsDragUnpinnedAppToPinEnabled() {
   return base::FeatureList::IsEnabled(kDragUnpinnedAppToPin);
 }
diff --git a/ash/public/cpp/ash_features.h b/ash/public/cpp/ash_features.h
index 4f0c8a1..b62f6f3 100644
--- a/ash/public/cpp/ash_features.h
+++ b/ash/public/cpp/ash_features.h
@@ -177,11 +177,16 @@
 // Enables notifications to be shown within context menus.
 ASH_PUBLIC_EXPORT extern const base::Feature kNotificationsInContextMenu;
 
-// Enables the experimental productivity feature that aims to reduce context
-// switching by enabling users to collect content and transfer or access it
-// later.
+// Enables the productivity feature that aims to reduce context switching by
+// enabling users to collect content and transfer or access it later.
 ASH_PUBLIC_EXPORT extern const base::Feature kTemporaryHoldingSpace;
 
+// Enables ARC integration with the productivity feature that aims to reduce
+// context switching by enabling users to collect content and transfer or access
+// it later. Note that this flag has no effect w/o `kTemporaryHoldingSpace`.
+ASH_PUBLIC_EXPORT extern const base::Feature
+    kTemporaryHoldingSpaceArcIntegration;
+
 // Enables dragging an unpinned open app to pinned app side to pin.
 ASH_PUBLIC_EXPORT extern const base::Feature kDragUnpinnedAppToPin;
 
@@ -263,6 +268,8 @@
 
 ASH_PUBLIC_EXPORT bool IsTemporaryHoldingSpaceEnabled();
 
+ASH_PUBLIC_EXPORT bool IsTemporaryHoldingSpaceArcIntegrationEnabled();
+
 ASH_PUBLIC_EXPORT bool IsDragUnpinnedAppToPinEnabled();
 
 ASH_PUBLIC_EXPORT bool IsScalableStatusAreaEnabled();
diff --git a/ash/public/cpp/clipboard_history_controller.h b/ash/public/cpp/clipboard_history_controller.h
index 742b9f41..09020be 100644
--- a/ash/public/cpp/clipboard_history_controller.h
+++ b/ash/public/cpp/clipboard_history_controller.h
@@ -69,6 +69,9 @@
   // Increment the 'new' feature badge shown count.
   virtual void MarkNewFeatureBadgeShown() = 0;
 
+  // Increment the screenshot notification nudge shown count.
+  virtual void MarkScreenshotNotificationNudgeShown() = 0;
+
   // Creates a ScopedClipboardHistoryPause, which pauses ClipboardHistory for
   // its lifetime.
   virtual std::unique_ptr<ScopedClipboardHistoryPause> CreateScopedPause() = 0;
diff --git a/ash/public/cpp/holding_space/holding_space_item.cc b/ash/public/cpp/holding_space/holding_space_item.cc
index b5212cf..ff0a74347 100644
--- a/ash/public/cpp/holding_space/holding_space_item.cc
+++ b/ash/public/cpp/holding_space/holding_space_item.cc
@@ -56,6 +56,20 @@
 }
 
 // static
+bool HoldingSpaceItem::IsDownload(HoldingSpaceItem::Type type) {
+  switch (type) {
+    case Type::kArcDownload:
+    case Type::kDownload:
+      return true;
+    case Type::kNearbyShare:
+    case Type::kPinnedFile:
+    case Type::kScreenRecording:
+    case Type::kScreenshot:
+      return false;
+  }
+}
+
+// static
 // NOTE: This method must remain in sync with `Serialize()`. If multiple
 // serialization versions are supported, care must be taken to handle each.
 std::unique_ptr<HoldingSpaceItem> HoldingSpaceItem::Deserialize(
diff --git a/ash/public/cpp/holding_space/holding_space_item.h b/ash/public/cpp/holding_space/holding_space_item.h
index ae8c26fb..4d93affe 100644
--- a/ash/public/cpp/holding_space/holding_space_item.h
+++ b/ash/public/cpp/holding_space/holding_space_item.h
@@ -58,6 +58,9 @@
       const GURL& file_system_url,
       ImageResolver image_resolver);
 
+  // Returns `true` if `type` is a download type, `false` otherwise.
+  static bool IsDownload(HoldingSpaceItem::Type type);
+
   // Deserializes from `base::DictionaryValue` to `HoldingSpaceItem`.
   // This creates a partially initialized item with an empty file system URL.
   // The item should be finalized using `Finalize()`.
diff --git a/ash/system/ime_menu/ime_list_view.cc b/ash/system/ime_menu/ime_list_view.cc
index 3b6c69b..35536726 100644
--- a/ash/system/ime_menu/ime_list_view.cc
+++ b/ash/system/ime_menu/ime_list_view.cc
@@ -383,6 +383,8 @@
 ImeListViewTestApi::~ImeListViewTestApi() = default;
 
 views::View* ImeListViewTestApi::GetToggleView() const {
+  if (!ime_list_view_->keyboard_status_row_)
+    return nullptr;
   return ime_list_view_->keyboard_status_row_->toggle();
 }
 
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index 99ded39..cc426f2 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -485,10 +485,10 @@
 void ImeMenuTray::OnIMERefresh() {
   UpdateTrayLabel();
   if (bubble_ && ime_list_view_) {
-    ime_list_view_->Update(ime_controller_->current_ime().id,
-                           ime_controller_->available_imes(),
-                           ime_controller_->current_ime_menu_items(), false,
-                           ImeListView::SHOW_SINGLE_IME);
+    ime_list_view_->Update(
+        ime_controller_->current_ime().id, ime_controller_->available_imes(),
+        ime_controller_->current_ime_menu_items(), ShouldShowKeyboardToggle(),
+        ImeListView::SHOW_SINGLE_IME);
   }
 }
 
diff --git a/ash/system/ime_menu/ime_menu_tray_unittest.cc b/ash/system/ime_menu/ime_menu_tray_unittest.cc
index 04f6cac..b0976dce 100644
--- a/ash/system/ime_menu/ime_menu_tray_unittest.cc
+++ b/ash/system/ime_menu/ime_menu_tray_unittest.cc
@@ -19,6 +19,10 @@
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/ime/chromeos/ime_bridge.h"
 #include "ui/base/ime/text_input_flags.h"
+#include "ui/display/test/display_manager_test_api.h"
+#include "ui/events/devices/device_data_manager_test_api.h"
+#include "ui/events/devices/input_device.h"
+#include "ui/events/devices/touchscreen_device.h"
 #include "ui/events/event.h"
 #include "ui/views/controls/label.h"
 
@@ -111,6 +115,12 @@
     ui::IMEBridge::Get()->SetCurrentInputContext(input_context);
   }
 
+  bool MenuHasOnScreenKeyboardToggle() const {
+    if (!GetTray()->ime_list_view_)
+      return false;
+    return ImeListViewTestApi(GetTray()->ime_list_view_).GetToggleView();
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(ImeMenuTrayTest);
 };
@@ -347,4 +357,65 @@
   EXPECT_FALSE(IsVoiceEnabled());
 }
 
+TEST_F(ImeMenuTrayTest, ShowOnScreenKeyboardToggle) {
+  Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true);
+  ASSERT_TRUE(IsVisible());
+  ASSERT_FALSE(IsTrayBackgroundActive());
+
+  ui::GestureEvent tap(0, 0, 0, base::TimeTicks(),
+                       ui::GestureEventDetails(ui::ET_GESTURE_TAP));
+  GetTray()->PerformAction(tap);
+  EXPECT_TRUE(IsTrayBackgroundActive());
+  EXPECT_TRUE(IsBubbleShown());
+
+  EXPECT_FALSE(MenuHasOnScreenKeyboardToggle());
+
+  // The on-screen keyboard toggle should show if the device has a touch
+  // screen, and does not have an internal keyboard.
+  std::vector<ui::TouchscreenDevice> screens;
+  screens.push_back(
+      ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL,
+                            "Touchscreen", gfx::Size(1024, 768), 0));
+  ui::DeviceDataManagerTestApi().SetTouchscreenDevices(screens);
+
+  std::vector<ui::InputDevice> keyboard_devices;
+  keyboard_devices.push_back(ui::InputDevice(
+      1, ui::InputDeviceType::INPUT_DEVICE_USB, "external keyboard"));
+  ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
+
+  // Bubble gets closed when the keyboard suppression state changes.
+  EXPECT_FALSE(IsBubbleShown());
+
+  GetTray()->PerformAction(ui::GestureEvent(
+      0, 0, 0, base::TimeTicks(), ui::GestureEventDetails(ui::ET_GESTURE_TAP)));
+  EXPECT_TRUE(IsBubbleShown());
+
+  EXPECT_TRUE(MenuHasOnScreenKeyboardToggle());
+
+  // The toggle should not be removed on IME device refresh.
+  ImeInfo info;
+  info.id = "ime";
+  info.name = u"English UK";
+  info.short_name = u"UK";
+  info.third_party = true;
+
+  SetCurrentIme("ime", {info});
+  EXPECT_TRUE(MenuHasOnScreenKeyboardToggle());
+
+  // The toggle should be hidden with internal keyboard.
+  keyboard_devices.push_back(ui::InputDevice(
+      1, ui::InputDeviceType::INPUT_DEVICE_USB, "external keyboard"));
+  keyboard_devices.push_back(ui::InputDevice(
+      1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "internal keyboard"));
+  ui::DeviceDataManagerTestApi().SetKeyboardDevices(keyboard_devices);
+
+  // Bubble gets closed when the keyboard suppression state changes.
+  EXPECT_FALSE(IsBubbleShown());
+
+  GetTray()->PerformAction(ui::GestureEvent(
+      0, 0, 0, base::TimeTicks(), ui::GestureEventDetails(ui::ET_GESTURE_TAP)));
+  EXPECT_TRUE(IsBubbleShown());
+  EXPECT_FALSE(MenuHasOnScreenKeyboardToggle());
+}
+
 }  // namespace ash
diff --git a/ash/wm/desks/desks_bar_view.cc b/ash/wm/desks/desks_bar_view.cc
index ade5ac4..2365764 100644
--- a/ash/wm/desks/desks_bar_view.cc
+++ b/ash/wm/desks/desks_bar_view.cc
@@ -27,7 +27,7 @@
 #include "ash/wm/overview/overview_grid.h"
 #include "ash/wm/overview/overview_highlight_controller.h"
 #include "ash/wm/overview/overview_session.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/aura/window.h"
 #include "ui/events/event_observer.h"
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 5849d4ce..169612c 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3772,6 +3772,7 @@
       "android/java/src/org/chromium/base/NativeLibraryLoadedStatus.java",
       "android/java/src/org/chromium/base/annotations/NativeMethods.java",
     ]
+
     deps = [ "//build/android:build_config_java" ]
   }
 
@@ -3971,20 +3972,18 @@
 
   android_library("base_javatests") {
     testonly = true
+
     deps = [
       ":base_java",
       ":base_java_test_support",
-      ":jni_java",
       "//base/test:test_support_java",
-      "//third_party/android_support_test_runner:rules_java",
       "//third_party/android_support_test_runner:runner_java",
-      "//third_party/androidx:androidx_test_monitor_java",
       "//third_party/androidx:androidx_test_runner_java",
-      "//third_party/androidx:androidx_test_uiautomator_uiautomator_java",
       "//third_party/hamcrest:hamcrest_java",
       "//third_party/junit:junit",
       "//third_party/mockito:mockito_java",
     ]
+
     sources = [
       # AssertsTest doesn't really belong in //base but it's preferable to
       # stick it here than create another target for a single test.
@@ -4031,21 +4030,15 @@
 
   android_library("base_java_test_support") {
     testonly = true
+
     deps = [
       ":base_java",
-      ":jni_java",
       "//third_party/android_sdk:android_support_chromium_java",
       "//third_party/android_sdk:android_test_base_java",
       "//third_party/android_sdk:android_test_mock_java",
-      "//third_party/android_support_test_runner:exposed_instrumentation_api_publish_java",
-      "//third_party/android_support_test_runner:rules_java",
       "//third_party/android_support_test_runner:runner_java",
       "//third_party/androidx:androidx_annotation_annotation_java",
       "//third_party/androidx:androidx_core_core_java",
-      "//third_party/androidx:androidx_test_monitor_java",
-      "//third_party/androidx:androidx_test_runner_java",
-      "//third_party/androidx:androidx_test_uiautomator_uiautomator_java",
-      "//third_party/hamcrest:hamcrest_core_java",
       "//third_party/hamcrest:hamcrest_java",
       "//third_party/junit",
       "//third_party/ub-uiautomator:ub_uiautomator_java",
@@ -4129,10 +4122,9 @@
 
   android_library("base_java_process_launcher_test_support") {
     testonly = true
-    deps = [
-      ":base_java",
-      ":base_java_test_support",
-    ]
+
+    deps = [ ":base_java" ]
+
     sources = [ "test/android/javatests/src/org/chromium/base/process_launcher/TestChildProcessConnection.java" ]
   }
 
@@ -4154,14 +4146,13 @@
     # Make sure robolectric tests have classes filtered out of base_java by
     # jar_excluded_patterns.
     srcjar_deps = [ "//build/android:native_libraries_gen" ]
+
     deps = [
       ":base_java",
       "//testing/android/junit:junit_test_support",
       "//third_party/android_deps:robolectric_all_java",
       "//third_party/android_support_test_runner:runner_java",
       "//third_party/androidx:androidx_test_core_java",
-      "//third_party/androidx:androidx_test_monitor_java",
-      "//third_party/androidx:androidx_test_uiautomator_uiautomator_java",
       "//third_party/hamcrest:hamcrest_java",
       "//third_party/junit:junit",
     ]
@@ -4247,12 +4238,15 @@
         [ "android/javatests/src/org/chromium/base/profiler/TestSupport.java" ]
 
     annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+
     deps = [ "//base:base_java" ]
   }
 
   android_library("base_java_unittest_support") {
     testonly = true
+
     deps = [ ":base_java" ]
+
     sources = [
       "test/android/java/src/org/chromium/base/ContentUriTestUtils.java",
       "test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java",
diff --git a/base/android/features_jni.cc b/base/android/features_jni.cc
index f3f1797..77503c5 100644
--- a/base/android/features_jni.cc
+++ b/base/android/features_jni.cc
@@ -3,7 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/base_jni_headers/Features_jni.h"
+#include "base/android/jni_string.h"
 #include "base/feature_list.h"
+#include "base/metrics/field_trial_params.h"
 
 namespace base {
 namespace android {
@@ -13,5 +15,17 @@
       *reinterpret_cast<base::Feature*>(native_feature_pointer));
 }
 
+jboolean JNI_Features_GetFieldTrialParamByFeatureAsBoolean(
+    JNIEnv* env,
+    jlong native_feature_pointer,
+    const JavaParamRef<jstring>& jparam_name,
+    const jboolean jdefault_value) {
+  const base::Feature& feature =
+      *reinterpret_cast<base::Feature*>(native_feature_pointer);
+  const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name);
+  return base::GetFieldTrialParamByFeatureAsBool(feature, param_name,
+                                                 jdefault_value);
+}
+
 }  // namespace android
 }  // namespace base
diff --git a/base/android/java/src/org/chromium/base/Features.java b/base/android/java/src/org/chromium/base/Features.java
index c3e986c..d3c78766 100644
--- a/base/android/java/src/org/chromium/base/Features.java
+++ b/base/android/java/src/org/chromium/base/Features.java
@@ -33,11 +33,26 @@
         return FeaturesJni.get().isEnabled(getFeaturePointer());
     }
 
+    /**
+     * Returns a field trial param as a boolean for the specified feature.
+     *
+     * @param paramName The name of the param.
+     * @param defaultValue The boolean value to use if the param is not available.
+     * @return The parameter value as a boolean. Default value if the feature does not exist or the
+     *         specified parameter does not exist or its string value is neither "true" nor "false".
+     */
+    public boolean getFieldTrialParamByFeatureAsBoolean(String paramName, boolean defaultValue) {
+        return FeaturesJni.get().getFieldTrialParamByFeatureAsBoolean(
+                getFeaturePointer(), paramName, defaultValue);
+    }
+
     /** Returns a pointer to the native Feature object represented by this object instance. */
     protected abstract long getFeaturePointer();
 
     @NativeMethods
     interface Natives {
         boolean isEnabled(long featurePointer);
+        boolean getFieldTrialParamByFeatureAsBoolean(
+                long featurePointer, String paramName, boolean defaultValue);
     }
 }
diff --git a/base/android/jni_generator/BUILD.gn b/base/android/jni_generator/BUILD.gn
index 092ca8b4d..6b3714e4 100644
--- a/base/android/jni_generator/BUILD.gn
+++ b/base/android/jni_generator/BUILD.gn
@@ -27,7 +27,9 @@
 
 android_library("jni_annotation_sample_java") {
   sources = [ "java/src/org/chromium/example/jni_generator/SampleForAnnotationProcessor.java" ]
+
   deps = [ "//base:base_java" ]
+
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
 }
 
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn
index d71c1af..ebac81a 100644
--- a/base/test/BUILD.gn
+++ b/base/test/BUILD.gn
@@ -481,13 +481,13 @@
 
   android_library("test_support_java") {
     testonly = true
+
     deps = [
       "//base:base_java",
-      "//base:base_java_test_support",
       "//testing/android/native_test:native_main_runner_java",
       "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
-      "//third_party/androidx:androidx_annotation_annotation_java",
     ]
+
     srcjar_deps = [ ":test_support_java_aidl" ]
     sources = [
       "android/java/src/org/chromium/base/GarbageCollectionTestUtils.java",
diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h
index 90989e5..563674ae 100644
--- a/base/trace_event/builtin_categories.h
+++ b/base/trace_event/builtin_categories.h
@@ -37,14 +37,15 @@
   X("base")                                                              \
   X("benchmark")                                                         \
   X("blink")                                                             \
-  X("blink.bindings")                                                    \
   X("blink.animations")                                                  \
+  X("blink.bindings")                                                    \
   X("blink.console")                                                     \
-  X("blink_gc")                                                          \
   X("blink.net")                                                         \
-  X("blink_style")                                                       \
+  X("blink.resource")                                                    \
   X("blink.user_timing")                                                 \
   X("blink.worker")                                                      \
+  X("blink_gc")                                                          \
+  X("blink_style")                                                       \
   X("Blob")                                                              \
   X("browser")                                                           \
   X("browsing_data")                                                     \
@@ -271,13 +272,14 @@
   X("benchmark,rail")                                                         \
   X("benchmark,uma")                                                          \
   X("benchmark,viz")                                                          \
-  X("blink.animations,devtools.timeline,benchmark,rail")                      \
   X("blink,benchmark")                                                        \
   X("blink,benchmark,rail," TRACE_DISABLED_BY_DEFAULT("blink.debug.layout"))  \
+  X("blink,blink.resource")                                                   \
   X("blink,blink_style")                                                      \
   X("blink,devtools.timeline")                                                \
   X("blink,loading")                                                          \
   X("blink,rail")                                                             \
+  X("blink.animations,devtools.timeline,benchmark,rail")                      \
   X("blink.user_timing,rail")                                                 \
   X("blink_gc,devtools.timeline")                                             \
   X("browser,content,navigation")                                             \
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index e9a6c60..c419ee0 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1612,14 +1612,6 @@
           "-Wno-non-c-typedef-for-linkage",
         ]
 
-        if (llvm_force_head_revision) {
-          # TODO(https://crbug.com/1203071): Clean up and enable.
-          cflags += [
-            "-Wno-unused-but-set-parameter",
-            "-Wno-unused-but-set-variable",
-          ]
-        }
-
         cflags_c += [
           # TODO(https://crbug.com/995993): Clean up and enable.
           "-Wno-implicit-fallthrough",
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 5120beb..0febc09 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-4.20210428.2.1
+4.20210428.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 553c134..0febc09 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-4.20210428.1.1
+4.20210428.3.1
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 4b366b5..47f6adf0 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -19,6 +19,7 @@
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/containers/adapters.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/debug/crash_logging.h"
 #include "base/debug/dump_without_crashing.h"
@@ -29,7 +30,6 @@
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/metrics/histogram.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
 #include "base/trace_event/traced_value.h"
diff --git a/chrome/VERSION b/chrome/VERSION
index 0b725993..b92db85 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=92
 MINOR=0
-BUILD=4492
+BUILD=4493
 PATCH=0
diff --git a/chrome/android/expectations/monochrome_public_bundle.AndroidManifest.expected b/chrome/android/expectations/monochrome_public_bundle.AndroidManifest.expected
index a6a5cf73..c1f0d2e 100644
--- a/chrome/android/expectations/monochrome_public_bundle.AndroidManifest.expected
+++ b/chrome/android/expectations/monochrome_public_bundle.AndroidManifest.expected
@@ -1292,6 +1292,9 @@
         android:name="org.chromium.components.payments.PaymentDetailsUpdateService"
         android:exported="true"
         tools:ignore="ExportedService">
+      <intent-filter>  # DIFF-ANCHOR: c68af934
+        <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
+      </intent-filter>  # DIFF-ANCHOR: c68af934
     </service>  # DIFF-ANCHOR: 2a1cd701
     <service  # DIFF-ANCHOR: 0c6c4fd9
         android:name="org.chromium.content.app.PrivilegedProcessService0"
diff --git a/chrome/android/expectations/trichrome_chrome_bundle.AndroidManifest.expected b/chrome/android/expectations/trichrome_chrome_bundle.AndroidManifest.expected
index 2f3d450..3f8d263d 100644
--- a/chrome/android/expectations/trichrome_chrome_bundle.AndroidManifest.expected
+++ b/chrome/android/expectations/trichrome_chrome_bundle.AndroidManifest.expected
@@ -1180,6 +1180,9 @@
         android:name="org.chromium.components.payments.PaymentDetailsUpdateService"
         android:exported="true"
         tools:ignore="ExportedService">
+      <intent-filter>  # DIFF-ANCHOR: c68af934
+        <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
+      </intent-filter>  # DIFF-ANCHOR: c68af934
     </service>  # DIFF-ANCHOR: 2a1cd701
     <service  # DIFF-ANCHOR: 0c6c4fd9
         android:name="org.chromium.content.app.PrivilegedProcessService0"
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 4f5b3ec..fc59631 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -1062,12 +1062,16 @@
         <service android:name="org.chromium.chrome.browser.incognito.IncognitoNotificationService"
             android:exported="false"/>
 
-        <!-- service used by payment apps to notify the browser about changes in user selected
-             payment method, shipping address, or shipping option -->
+        <!-- Service used by payment apps to notify the browser about changes in user selected
+             payment method, shipping address, or shipping option. -->
         <service
             android:name="org.chromium.components.payments.PaymentDetailsUpdateService"
             android:exported="true"
-            tools:ignore="ExportedService"/>
+            tools:ignore="ExportedService">
+            <intent-filter>
+              <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS" />
+            </intent-filter>
+        </service>
 
         <receiver android:name="org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Receiver"
             android:exported="false"/>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
index 7a323ac..be363db 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -78,6 +78,7 @@
 import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
 import org.chromium.components.browser_ui.contacts_picker.ContactsPickerDialog;
 import org.chromium.components.browser_ui.photo_picker.DecoderServiceHost;
+import org.chromium.components.browser_ui.photo_picker.PhotoPickerDelegateBase;
 import org.chromium.components.browser_ui.photo_picker.PhotoPickerDialog;
 import org.chromium.components.browser_ui.share.ShareImageFileUtils;
 import org.chromium.components.browser_ui.util.ConversionUtils;
@@ -98,7 +99,6 @@
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.ui.base.Clipboard;
 import org.chromium.ui.base.PhotoPicker;
-import org.chromium.ui.base.PhotoPickerDelegate;
 import org.chromium.ui.base.PhotoPickerListener;
 import org.chromium.ui.base.SelectFileDialog;
 import org.chromium.ui.base.WindowAndroid;
@@ -123,9 +123,6 @@
     private static final Object SNAPSHOT_DATABASE_LOCK = new Object();
     private static final String SNAPSHOT_DATABASE_NAME = "snapshots.db";
 
-    // The feature param for determining whether the PhotoPicker should animate thumbnails.
-    private static final String FEATURE_PARAM_ANIMATE_THUMBNAILS = "animate_thumbnails";
-
     private static ProcessInitializationHandler sInstance;
 
     private boolean mInitializedPreNative;
@@ -217,26 +214,18 @@
             return new Intent(ContextUtils.getApplicationContext(), DecoderService.class);
         });
 
-        SelectFileDialog.setPhotoPickerDelegate(new PhotoPickerDelegate() {
+        SelectFileDialog.setPhotoPickerDelegate(new PhotoPickerDelegateBase() {
             @Override
             public PhotoPicker showPhotoPicker(WindowAndroid windowAndroid,
                     PhotoPickerListener listener, boolean allowMultiple, List<String> mimeTypes) {
                 PhotoPickerDialog dialog = new PhotoPickerDialog(windowAndroid,
                         windowAndroid.getContext().get().getContentResolver(), listener,
                         allowMultiple,
-                        ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
-                                ChromeFeatureList.PHOTO_PICKER_VIDEO_SUPPORT,
-                                FEATURE_PARAM_ANIMATE_THUMBNAILS, false),
                         mimeTypes);
                 dialog.getWindow().getAttributes().windowAnimations = R.style.PickerDialogAnimation;
                 dialog.show();
                 return dialog;
             }
-
-            @Override
-            public boolean supportsVideos() {
-                return ChromeFeatureList.isEnabled(ChromeFeatureList.PHOTO_PICKER_VIDEO_SUPPORT);
-            }
         });
 
         ContactsPicker.setContactsPickerDelegate(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
index 177ad6b1..4c843e2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
@@ -20,19 +20,15 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.components.autofill.EditableOption;
 import org.chromium.components.payments.AbortReason;
-import org.chromium.components.payments.AndroidPaymentApp;
-import org.chromium.components.payments.AndroidPaymentAppFactory;
 import org.chromium.components.payments.BrowserPaymentRequest;
 import org.chromium.components.payments.ErrorStrings;
 import org.chromium.components.payments.JourneyLogger;
 import org.chromium.components.payments.MethodStrings;
-import org.chromium.components.payments.PackageManagerDelegate;
 import org.chromium.components.payments.PaymentApp;
 import org.chromium.components.payments.PaymentAppFactoryDelegate;
 import org.chromium.components.payments.PaymentAppFactoryInterface;
 import org.chromium.components.payments.PaymentAppService;
 import org.chromium.components.payments.PaymentAppType;
-import org.chromium.components.payments.PaymentDetailsUpdateServiceHelper;
 import org.chromium.components.payments.PaymentFeatureList;
 import org.chromium.components.payments.PaymentHandlerHost;
 import org.chromium.components.payments.PaymentOptionsUtils;
@@ -140,15 +136,6 @@
         }
 
         /**
-         * Creates an instance of Android payment app factory.
-         * @return The instance, can be null for testing.
-         */
-        @Nullable
-        default PaymentAppFactoryInterface createAndroidPaymentAppFactory() {
-            return new AndroidPaymentAppFactory();
-        }
-
-        /**
          * Creates an instance of service-worker payment app factory.
          * @return The instance, can be null for testing.
          */
@@ -328,10 +315,6 @@
     @Override
     public void addPaymentAppFactories(
             PaymentAppService service, PaymentAppFactoryDelegate delegate) {
-        String androidFactoryId = AndroidPaymentAppFactory.class.getName();
-        if (!service.containsFactory(androidFactoryId)) {
-            service.addUniqueFactory(mDelegate.createAndroidPaymentAppFactory(), androidFactoryId);
-        }
         String swFactoryId = PaymentAppServiceBridge.class.getName();
         if (!service.containsFactory(swFactoryId)) {
             service.addUniqueFactory(mDelegate.createServiceWorkerPaymentAppFactory(), swFactoryId);
@@ -561,12 +544,6 @@
             EditableOption selectedShippingOption, PaymentApp selectedPaymentApp) {
         if (mPaymentRequestService == null || mSpec == null || mSpec.isDestroyed()) return false;
         selectedPaymentApp.setPaymentHandlerHost(getPaymentHandlerHost());
-        // Only native apps can use PaymentDetailsUpdateService.
-        if (selectedPaymentApp.getPaymentAppType() == PaymentAppType.NATIVE_MOBILE_APP) {
-            PaymentDetailsUpdateServiceHelper.getInstance().initialize(new PackageManagerDelegate(),
-                    ((AndroidPaymentApp) selectedPaymentApp).packageName(),
-                    mPaymentRequestService /* PaymentApp.PaymentRequestUpdateEventListener */);
-        }
         PaymentResponseHelperInterface paymentResponseHelper =
                 new ChromePaymentResponseHelper(selectedShippingAddress, selectedShippingOption,
                         mPaymentUiService.getSelectedContact(), selectedPaymentApp,
@@ -644,7 +621,6 @@
             mPaymentHandlerHost.destroy();
             mPaymentHandlerHost = null;
         }
-        PaymentDetailsUpdateServiceHelper.getInstance().reset();
     }
 
     // Implements BrowserPaymentRequest:
@@ -756,7 +732,6 @@
             disconnectFromClientWithDebugMessage(errorMessage);
         } else {
             mPaymentUiService.onPayButtonProcessingCancelled();
-            PaymentDetailsUpdateServiceHelper.getInstance().reset();
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
index 88be558..01d0b06a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
@@ -62,7 +62,6 @@
 import org.chromium.components.payments.JourneyLogger;
 import org.chromium.components.payments.PaymentApp;
 import org.chromium.components.payments.PaymentAppType;
-import org.chromium.components.payments.PaymentDetailsUpdateServiceHelper;
 import org.chromium.components.payments.PaymentFeatureList;
 import org.chromium.components.payments.PaymentOptionsUtils;
 import org.chromium.components.payments.PaymentRequestParams;
@@ -692,7 +691,6 @@
 
         // Go back to the payment sheet
         mPaymentRequestUI.onPayButtonProcessingCancelled();
-        PaymentDetailsUpdateServiceHelper.getInstance().reset();
         if (!TextUtils.isEmpty(errors.error)) {
             mPaymentRequestUI.setRetryErrorMessage(errors.error);
         } else {
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index f455bf9..3d608e8c 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1718,8 +1718,8 @@
     "storage/appcache_feature_prefs.h",
     "storage/durable_storage_permission_context.cc",
     "storage/durable_storage_permission_context.h",
-    "subresource_filter/chrome_subresource_filter_client.cc",
-    "subresource_filter/chrome_subresource_filter_client.h",
+    "subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.cc",
+    "subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h",
     "subresource_filter/subresource_filter_history_observer.cc",
     "subresource_filter/subresource_filter_history_observer.h",
     "subresource_filter/subresource_filter_profile_context_factory.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 1b7c8f1..7e8e8607 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4147,9 +4147,6 @@
      flag_descriptions::kForceSpectreVariant2MitigationDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(
          sandbox::policy::features::kForceSpectreVariant2Mitigation)},
-    {"smbfs-file-shares", flag_descriptions::kSmbfsFileSharesName,
-     flag_descriptions::kSmbfsFileSharesName, kOsCrOS,
-     FEATURE_VALUE_TYPE(features::kSmbFs)},
     {"spectre-v2-mitigation", flag_descriptions::kSpectreVariant2MitigationName,
      flag_descriptions::kSpectreVariant2MitigationDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(sandbox::policy::features::kSpectreVariant2Mitigation)},
@@ -7277,6 +7274,13 @@
      FEATURE_VALUE_TYPE(password_manager::features::kBiometricTouchToFill)},
 #endif
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    {"launcher-query-highlighting",
+     flag_descriptions::kLauncherQueryHighlightingName,
+     flag_descriptions::kLauncherQueryHighlightingDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(app_list_features::kLauncherQueryHighlighting)},
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/accessibility/caption_controller_browsertest.cc b/chrome/browser/accessibility/caption_controller_browsertest.cc
index 3b4cc08d..54414c9 100644
--- a/chrome/browser/accessibility/caption_controller_browsertest.cc
+++ b/chrome/browser/accessibility/caption_controller_browsertest.cc
@@ -167,10 +167,15 @@
 IN_PROC_BROWSER_TEST_F(CaptionControllerTest, ProfilePrefsAreRegistered) {
   EXPECT_FALSE(
       browser()->profile()->GetPrefs()->GetBoolean(prefs::kLiveCaptionEnabled));
+
+#if !defined(OS_CHROMEOS)
+  // These prefs are used for the component updater, but SODA does not use the
+  // component updater on Chrome OS.
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaBinaryPath));
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaEnUsConfigPath));
+#endif  // !defined(OS_CHROMEOS)
 }
 
 IN_PROC_BROWSER_TEST_F(CaptionControllerTest,
@@ -179,20 +184,28 @@
   SetLiveCaptionEnabled(true);
   EXPECT_TRUE(
       browser()->profile()->GetPrefs()->GetBoolean(prefs::kLiveCaptionEnabled));
+#if !defined(OS_CHROMEOS)
+  // These prefs are used for the component updater, but SODA does not use the
+  // component updater on Chrome OS.
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaBinaryPath));
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaEnUsConfigPath));
+#endif  // !defined(OS_CHROMEOS)
 
   // Ensure that live caption is also enabled in the incognito profile.
   Profile* incognito_profile =
       browser()->profile()->GetPrimaryOTRProfile(/*create_if_needed=*/true);
   EXPECT_TRUE(
       incognito_profile->GetPrefs()->GetBoolean(prefs::kLiveCaptionEnabled));
+#if !defined(OS_CHROMEOS)
+  // These prefs are used for the component updater, but SODA does not use the
+  // component updater on Chrome OS.
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaBinaryPath));
   EXPECT_EQ(base::FilePath(), g_browser_process->local_state()->GetFilePath(
                                   prefs::kSodaEnUsConfigPath));
+#endif  // !defined(OS_CHROMEOS)
 }
 
 IN_PROC_BROWSER_TEST_F(CaptionControllerTest, LiveCaptionEnabledChanged) {
diff --git a/chrome/browser/accessibility/soda_installer.h b/chrome/browser/accessibility/soda_installer.h
index fd58c741..b86a703 100644
--- a/chrome/browser/accessibility/soda_installer.h
+++ b/chrome/browser/accessibility/soda_installer.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file_path.h"
 #include "base/observer_list.h"
+#include "components/prefs/pref_registry_simple.h"
 
 class PrefService;
 
@@ -39,6 +40,10 @@
   // instance.
   static SodaInstaller* GetInstance();
 
+  // Registers user preferences related to the Speech On-Device API (SODA)
+  // component.
+  static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
+
   // Initialize SODA if any SODA-utilising feature is enabled. Intended to be
   // called during embedder startup. Checks whether SODA is due for
   // uninstallation, and if so, triggers uninstallation.
diff --git a/chrome/browser/accessibility/soda_installer_impl.cc b/chrome/browser/accessibility/soda_installer_impl.cc
index 4a31632..aefbf59 100644
--- a/chrome/browser/accessibility/soda_installer_impl.cc
+++ b/chrome/browser/accessibility/soda_installer_impl.cc
@@ -60,6 +60,19 @@
   return instance.get();
 }
 
+// static
+void speech::SodaInstaller::RegisterLocalStatePrefs(
+    PrefRegistrySimple* registry) {
+  registry->RegisterTimePref(prefs::kSodaScheduledDeletionTime, base::Time());
+  registry->RegisterFilePathPref(prefs::kSodaBinaryPath, base::FilePath());
+
+  // Register language pack config path preferences.
+  for (const speech::SodaLanguagePackComponentConfig& config :
+       speech::kLanguageComponentConfigs) {
+    registry->RegisterFilePathPref(config.config_path_pref, base::FilePath());
+  }
+}
+
 SodaInstallerImpl::SodaInstallerImpl() = default;
 
 SodaInstallerImpl::~SodaInstallerImpl() {
diff --git a/chrome/browser/android/metrics/ukm_utils_for_test.cc b/chrome/browser/android/metrics/ukm_utils_for_test.cc
index b912cf5..375bd1f 100644
--- a/chrome/browser/android/metrics/ukm_utils_for_test.cc
+++ b/chrome/browser/android/metrics/ukm_utils_for_test.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/android/jni_string.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "chrome/browser/android/metrics/jni_headers/UkmUtilsForTest_jni.h"
 #include "chrome/browser/browser_process.h"
 #include "components/metrics_services_manager/metrics_services_manager.h"
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.cc b/chrome/browser/apps/app_service/app_platform_metrics.cc
index 98622bd..a54ffeeb 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.cc
+++ b/chrome/browser/apps/app_service/app_platform_metrics.cc
@@ -6,6 +6,8 @@
 
 #include "base/metrics/histogram_functions.h"
 #include "chrome/browser/apps/app_service/app_service_metrics.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/extensions/launch_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/extensions/application_launch.h"
@@ -20,35 +22,61 @@
 
 namespace {
 
-// This is used for logging, so do not remove or reorder existing entries.
-enum class AppTypeName {
-  kUnknown = 0,
-  kArc = 1,
-  kBuiltIn = 2,
-  kCrostini = 3,
-  kChromeApp = 4,
-  kWeb = 5,
-  kMacOs = 6,
-  kPluginVm = 7,
-  kStandaloneBrowser = 8,
-  kRemote = 9,
-  kBorealis = 10,
-  kSystemWeb = 11,
-  kChromeBrowser = 12,
+// UMA metrics for a snapshot count of installed apps.
+constexpr char kArcAppsCountHistogramName[] = "Apps.AppsCount.Arc";
+constexpr char kBuiltInAppsCountHistogramName[] = "Apps.AppsCount.BuiltIn";
+constexpr char kCrostiniAppsCountHistogramName[] = "Apps.AppsCount.Crostini";
+constexpr char kExtensionAppsCountHistogramName[] = "Apps.AppsCount.ChromeApp";
+constexpr char kWebAppsCountHistogramName[] = "Apps.AppsCount.WebApp";
+constexpr char kMacOsAppsCountHistogramName[] = "Apps.AppsCount.MacOs";
+constexpr char kPluginVmAppsCountHistogramName[] = "Apps.AppsCount.PluginVm";
+constexpr char kStandaloneBrowserAppsCountHistogramName[] =
+    "Apps.AppsCount.StandaloneBrowser";
+constexpr char kRemoteAppsCountHistogramName[] = "Apps.AppsCount.RemoteApp";
+constexpr char kBorealisAppsCountHistogramName[] = "Apps.AppsCount.Borealis";
+constexpr char kSystemWebAppsCountHistogramName[] =
+    "Apps.AppsCount.SystemWebApp";
 
-  // Add any new values above this one, and update kMaxValue to the highest
-  // enumerator value.
-  kMaxValue = kChromeBrowser,
-};
+const char* GetAppsCountHistogramName(apps::AppTypeName app_type_name) {
+  switch (app_type_name) {
+    case apps::AppTypeName::kUnknown:
+      return nullptr;
+    case apps::AppTypeName::kArc:
+      return kArcAppsCountHistogramName;
+    case apps::AppTypeName::kBuiltIn:
+      return kBuiltInAppsCountHistogramName;
+    case apps::AppTypeName::kCrostini:
+      return kCrostiniAppsCountHistogramName;
+    case apps::AppTypeName::kChromeApp:
+      return kExtensionAppsCountHistogramName;
+    case apps::AppTypeName::kWeb:
+      return kWebAppsCountHistogramName;
+    case apps::AppTypeName::kMacOs:
+      return kMacOsAppsCountHistogramName;
+    case apps::AppTypeName::kPluginVm:
+      return kPluginVmAppsCountHistogramName;
+    case apps::AppTypeName::kStandaloneBrowser:
+      return kStandaloneBrowserAppsCountHistogramName;
+    case apps::AppTypeName::kRemote:
+      return kRemoteAppsCountHistogramName;
+    case apps::AppTypeName::kBorealis:
+      return kBorealisAppsCountHistogramName;
+    case apps::AppTypeName::kSystemWeb:
+      return kSystemWebAppsCountHistogramName;
+    case apps::AppTypeName::kChromeBrowser:
+      return nullptr;
+  }
+}
 
 // Determines what app type a Chrome App should be logged as based on its launch
 // container and app id. In particular, Chrome apps in tabs are logged as part
 // of Chrome browser.
-AppTypeName GetAppTypeNameForChromeApp(Profile* profile,
-                                       const std::string& app_id,
-                                       apps::mojom::LaunchContainer container) {
+apps::AppTypeName GetAppTypeNameForChromeApp(
+    Profile* profile,
+    const std::string& app_id,
+    apps::mojom::LaunchContainer container) {
   if (app_id == extension_misc::kChromeAppId) {
-    return AppTypeName::kChromeBrowser;
+    return apps::AppTypeName::kChromeBrowser;
   }
 
   DCHECK(profile);
@@ -59,14 +87,14 @@
       registry->GetInstalledExtension(app_id);
 
   if (CanLaunchViaEvent(extension)) {
-    return AppTypeName::kChromeApp;
+    return apps::AppTypeName::kChromeApp;
   }
 
   switch (container) {
     case apps::mojom::LaunchContainer::kLaunchContainerWindow:
-      return AppTypeName::kChromeApp;
+      return apps::AppTypeName::kChromeApp;
     case apps::mojom::LaunchContainer::kLaunchContainerTab:
-      return AppTypeName::kChromeBrowser;
+      return apps::AppTypeName::kChromeBrowser;
     default:
       break;
   }
@@ -75,40 +103,41 @@
       extensions::GetLaunchContainer(extensions::ExtensionPrefs::Get(profile),
                                      extension);
   if (launch_container == apps::mojom::LaunchContainer::kLaunchContainerTab) {
-    return AppTypeName::kChromeBrowser;
+    return apps::AppTypeName::kChromeBrowser;
   }
 
-  return AppTypeName::kChromeApp;
+  return apps::AppTypeName::kChromeApp;
 }
 
 // Determines what app type a web app should be logged as based on its launch
 // container and app id. In particular, web apps in tabs are logged as part of
 // Chrome browser.
-AppTypeName GetAppTypeNameForWebApp(Profile* profile,
-                                    const std::string& app_id,
-                                    apps::mojom::LaunchContainer container) {
+apps::AppTypeName GetAppTypeNameForWebApp(
+    Profile* profile,
+    const std::string& app_id,
+    apps::mojom::LaunchContainer container) {
   auto* provider = web_app::WebAppProvider::Get(profile);
   DCHECK(provider);
 
   const auto* registrar = provider->registrar().AsWebAppRegistrar();
   if (!registrar) {
-    return AppTypeName::kChromeBrowser;
+    return apps::AppTypeName::kChromeBrowser;
   }
 
   const auto* web_app = registrar->GetAppById(app_id);
   if (!web_app) {
-    return AppTypeName::kChromeBrowser;
+    return apps::AppTypeName::kChromeBrowser;
   }
 
   if (web_app->IsSystemApp()) {
-    return AppTypeName::kSystemWeb;
+    return apps::AppTypeName::kSystemWeb;
   }
 
   switch (container) {
     case apps::mojom::LaunchContainer::kLaunchContainerWindow:
-      return AppTypeName::kWeb;
+      return apps::AppTypeName::kWeb;
     case apps::mojom::LaunchContainer::kLaunchContainerTab:
-      return AppTypeName::kChromeBrowser;
+      return apps::AppTypeName::kChromeBrowser;
     default:
       break;
   }
@@ -116,42 +145,42 @@
   if (web_app::ConvertDisplayModeToAppLaunchContainer(
           registrar->GetAppEffectiveDisplayMode(app_id)) ==
       apps::mojom::LaunchContainer::kLaunchContainerTab) {
-    return AppTypeName::kChromeBrowser;
+    return apps::AppTypeName::kChromeBrowser;
   }
 
-  return AppTypeName::kWeb;
+  return apps::AppTypeName::kWeb;
 }
 
 // Returns AppTypeName used for app launch metrics.
-AppTypeName GetAppTypeName(Profile* profile,
-                           apps::mojom::AppType app_type,
-                           const std::string& app_id,
-                           apps::mojom::LaunchContainer container) {
+apps::AppTypeName GetAppTypeName(Profile* profile,
+                                 apps::mojom::AppType app_type,
+                                 const std::string& app_id,
+                                 apps::mojom::LaunchContainer container) {
   switch (app_type) {
     case apps::mojom::AppType::kUnknown:
-      return AppTypeName::kUnknown;
+      return apps::AppTypeName::kUnknown;
     case apps::mojom::AppType::kArc:
-      return AppTypeName::kArc;
+      return apps::AppTypeName::kArc;
     case apps::mojom::AppType::kBuiltIn:
-      return AppTypeName::kBuiltIn;
+      return apps::AppTypeName::kBuiltIn;
     case apps::mojom::AppType::kCrostini:
-      return AppTypeName::kCrostini;
+      return apps::AppTypeName::kCrostini;
     case apps::mojom::AppType::kExtension:
       return GetAppTypeNameForChromeApp(profile, app_id, container);
     case apps::mojom::AppType::kWeb:
       return GetAppTypeNameForWebApp(profile, app_id, container);
     case apps::mojom::AppType::kMacOs:
-      return AppTypeName::kMacOs;
+      return apps::AppTypeName::kMacOs;
     case apps::mojom::AppType::kPluginVm:
-      return AppTypeName::kPluginVm;
+      return apps::AppTypeName::kPluginVm;
     case apps::mojom::AppType::kStandaloneBrowser:
-      return AppTypeName::kStandaloneBrowser;
+      return apps::AppTypeName::kStandaloneBrowser;
     case apps::mojom::AppType::kRemote:
-      return AppTypeName::kRemote;
+      return apps::AppTypeName::kRemote;
     case apps::mojom::AppType::kBorealis:
-      return AppTypeName::kBorealis;
+      return apps::AppTypeName::kBorealis;
     case apps::mojom::AppType::kSystemWeb:
-      return AppTypeName::kSystemWeb;
+      return apps::AppTypeName::kSystemWeb;
   }
 }
 
@@ -163,8 +192,8 @@
 
 // Records the number of times Chrome OS apps are launched grouped by the app
 // type.
-void RecordAppLaunchPerAppType(AppTypeName app_type_name) {
-  if (app_type_name == AppTypeName::kUnknown) {
+void RecordAppLaunchPerAppType(apps::AppTypeName app_type_name) {
+  if (app_type_name == apps::AppTypeName::kUnknown) {
     return;
   }
 
@@ -191,4 +220,78 @@
       GetAppTypeName(profile, app_type, app_id, container));
 }
 
+AppPlatformMetrics::AppPlatformMetrics(
+    Profile* profile,
+    apps::AppRegistryCache& app_registry_cache)
+    : profile_(profile),
+      app_registry_cache_(app_registry_cache),
+      first_report_on_current_device_(true) {
+  Observe(&app_registry_cache);
+}
+
+AppPlatformMetrics::~AppPlatformMetrics() = default;
+
+// static
+const char* AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+    AppTypeName app_type_name) {
+  return GetAppsCountHistogramName(app_type_name);
+}
+
+void AppPlatformMetrics::OnNewDay() {
+  // Ignores the first report. Apps and extensions may sync slowly after the
+  // OOBE process, biasing the metrics downwards toward zero.
+  if (first_report_on_current_device_) {
+    first_report_on_current_device_ = false;
+    return;
+  }
+
+  should_record_metrics_on_new_day_ = true;
+  RecordAppsCount(apps::mojom::AppType::kUnknown);
+}
+
+void AppPlatformMetrics::OnAppTypeInitialized(apps::mojom::AppType app_type) {
+  if (should_record_metrics_on_new_day_)
+    RecordAppsCount(app_type);
+}
+
+void AppPlatformMetrics::OnAppRegistryCacheWillBeDestroyed(
+    apps::AppRegistryCache* cache) {
+  Observe(nullptr);
+}
+
+void AppPlatformMetrics::OnAppUpdate(const apps::AppUpdate& update) {}
+
+void AppPlatformMetrics::RecordAppsCount(apps::mojom::AppType app_type) {
+  std::map<AppTypeName, int> app_count;
+  app_registry_cache_.ForEachApp(
+      [app_type, this, &app_count](const apps::AppUpdate& update) {
+        if (app_type != apps::mojom::AppType::kUnknown &&
+            (update.AppType() != app_type ||
+             update.AppId() == extension_misc::kChromeAppId)) {
+          return;
+        }
+
+        AppTypeName app_type_name =
+            GetAppTypeName(profile_, update.AppType(), update.AppId(),
+                           apps::mojom::LaunchContainer::kLaunchContainerNone);
+
+        if (app_type_name == AppTypeName::kChromeBrowser ||
+            app_type_name == AppTypeName::kUnknown) {
+          return;
+        }
+
+        ++app_count[app_type_name];
+      });
+
+  for (auto it : app_count) {
+    const char* histogram_name = GetAppsCountHistogramName(it.first);
+    if (histogram_name) {
+      // If there are more than a thousand apps installed, then that count is
+      // going into an overflow bucket. We don't expect this scenario to happen
+      // often.
+      base::UmaHistogramCounts1000(histogram_name, it.second);
+    }
+  }
+}
+
 }  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.h b/chrome/browser/apps/app_service/app_platform_metrics.h
index 6930d57..295965d 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.h
+++ b/chrome/browser/apps/app_service/app_platform_metrics.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_H_
 #define CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_H_
 
+#include "components/services/app_service/public/cpp/app_registry_cache.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
 
 class Profile;
@@ -13,12 +14,67 @@
 
 class AppUpdate;
 
+// This is used for logging, so do not remove or reorder existing entries.
+enum class AppTypeName {
+  kUnknown = 0,
+  kArc = 1,
+  kBuiltIn = 2,
+  kCrostini = 3,
+  kChromeApp = 4,
+  kWeb = 5,
+  kMacOs = 6,
+  kPluginVm = 7,
+  kStandaloneBrowser = 8,
+  kRemote = 9,
+  kBorealis = 10,
+  kSystemWeb = 11,
+  kChromeBrowser = 12,
+
+  // Add any new values above this one, and update kMaxValue to the highest
+  // enumerator value.
+  kMaxValue = kChromeBrowser,
+};
+
 // Records metrics when launching apps.
 void RecordAppLaunchMetrics(Profile* profile,
                             const apps::AppUpdate& update,
                             apps::mojom::LaunchSource launch_source,
                             apps::mojom::LaunchContainer container);
 
+class AppPlatformMetrics : public apps::AppRegistryCache::Observer {
+ public:
+  explicit AppPlatformMetrics(Profile* profile,
+                              apps::AppRegistryCache& app_registry_cache);
+  AppPlatformMetrics(const AppPlatformMetrics&) = delete;
+  AppPlatformMetrics& operator=(const AppPlatformMetrics&) = delete;
+  ~AppPlatformMetrics() override;
+
+  // UMA metrics for a snapshot count of recently used apps for a given family
+  // user.
+  static const char* GetAppsCountHistogramNameForTest(
+      AppTypeName app_type_name);
+
+  void OnNewDay();
+
+ private:
+  // AppRegistryCache::Observer:
+  void OnAppTypeInitialized(apps::mojom::AppType app_type) override;
+  void OnAppRegistryCacheWillBeDestroyed(
+      apps::AppRegistryCache* cache) override;
+  void OnAppUpdate(const apps::AppUpdate& update) override;
+
+  // Records the number of apps of the given `app_type` that the family user has
+  // recently used.
+  void RecordAppsCount(apps::mojom::AppType app_type);
+
+  Profile* const profile_ = nullptr;
+
+  apps::AppRegistryCache& app_registry_cache_;
+
+  bool should_record_metrics_on_new_day_ = false;
+  bool first_report_on_current_device_ = false;
+};
+
 }  // namespace apps
 
 #endif  // CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_H_
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service.cc b/chrome/browser/apps/app_service/app_platform_metrics_service.cc
index e4a3f8f..e670760c 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics_service.cc
+++ b/chrome/browser/apps/app_service/app_platform_metrics_service.cc
@@ -31,7 +31,6 @@
 }
 
 AppPlatformMetricsService::~AppPlatformMetricsService() {
-  observers_.Clear();
   timer_.Stop();
 }
 
@@ -46,7 +45,11 @@
   return GetDayId(time);
 }
 
-void AppPlatformMetricsService::Start() {
+void AppPlatformMetricsService::Start(
+    apps::AppRegistryCache& app_registry_cache) {
+  app_platform_app_metrics_ =
+      std::make_unique<AppPlatformMetrics>(profile_, app_registry_cache);
+
   day_id_ = profile_->GetPrefs()->GetInteger(kAppPlatformMetricsDayId);
   CheckForNewDay();
 
@@ -55,14 +58,6 @@
                &AppPlatformMetricsService::CheckForNewDay);
 }
 
-void AppPlatformMetricsService::AddObserver(Observer* observer) {
-  observers_.AddObserver(observer);
-}
-
-void AppPlatformMetricsService::RemoveObserver(Observer* observer) {
-  observers_.RemoveObserver(observer);
-}
-
 void AppPlatformMetricsService::CheckForNewDay() {
   base::Time now = base::Time::Now();
 
@@ -70,9 +65,7 @@
   // time zone changes.
   if (day_id_ < GetDayId(now)) {
     day_id_ = GetDayId(now);
-    for (Observer& observer : observers_) {
-      observer.OnNewDay();
-    }
+    app_platform_app_metrics_->OnNewDay();
     profile_->GetPrefs()->SetInteger(kAppPlatformMetricsDayId, day_id_);
   }
 }
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service.h b/chrome/browser/apps/app_service/app_platform_metrics_service.h
index aa7396a..af9da29 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics_service.h
+++ b/chrome/browser/apps/app_service/app_platform_metrics_service.h
@@ -5,27 +5,24 @@
 #ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_SERVICE_H_
 #define CHROME_BROWSER_APPS_APP_SERVICE_APP_PLATFORM_METRICS_SERVICE_H_
 
-#include "base/observer_list.h"
+#include <utility>
+
 #include "base/timer/timer.h"
+#include "chrome/browser/apps/app_service/app_platform_metrics.h"
 #include "chrome/browser/profiles/profile.h"
 
 class PrefRegistrySimple;
 
 namespace apps {
 
+class AppRegistryCache;
+
 extern const char kAppPlatformMetricsDayId[];
 
 // Service to initialize and control app platform metric recorders per day in
 // Chrome OS.
 class AppPlatformMetricsService {
  public:
-  // Interface for observing events on the AppPlatformMetricsService.
-  class Observer : public base::CheckedObserver {
-   public:
-    // Called when we detect a new day.
-    virtual void OnNewDay() {}
-  };
-
   explicit AppPlatformMetricsService(Profile* profile);
   AppPlatformMetricsService(const AppPlatformMetricsService&) = delete;
   AppPlatformMetricsService& operator=(const AppPlatformMetricsService&) =
@@ -38,23 +35,20 @@
   static int GetDayIdForTesting(base::Time time);
 
   // Start the timer and check if a new day has arrived.
-  void Start();
-
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* observer);
+  void Start(apps::AppRegistryCache& app_registry_cache);
 
  private:
   // Helper function to check if a new day has arrived.
   void CheckForNewDay();
 
-  Profile* profile_;
+  Profile* const profile_;
 
   int day_id_;
 
   // A periodic timer that checks if a new day has arrived.
   base::RepeatingTimer timer_;
 
-  base::ObserverList<Observer> observers_;
+  std::unique_ptr<AppPlatformMetrics> app_platform_app_metrics_;
 };
 
 }  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc b/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc
index ff3b3f9e4..7237d7c1 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc
+++ b/chrome/browser/apps/app_service/app_platform_metrics_service_unittest.cc
@@ -5,12 +5,19 @@
 #include "chrome/browser/apps/app_service/app_platform_metrics_service.h"
 
 #include <memory>
+#include <utility>
 
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/task_environment.h"
 #include "base/time/time.h"
+#include "chrome/browser/apps/app_service/app_platform_metrics.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/idle.pb.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
+#include "components/services/app_service/public/cpp/app_registry_cache.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -34,13 +41,14 @@
       power_manager::SuspendImminent_Reason_OTHER);
 }
 
-}  // namespace
+apps::mojom::AppPtr MakeApp(const char* app_id, apps::mojom::AppType app_type) {
+  apps::mojom::AppPtr app = apps::mojom::App::New();
+  app->app_id = app_id;
+  app->app_type = app_type;
+  return app;
+}
 
-class AppPlatformMetricsServiceTestObserver
-    : public AppPlatformMetricsService::Observer {
- public:
-  MOCK_METHOD(void, OnNewDay, (), (override));
-};
+}  // namespace
 
 // Tests for family user metrics service.
 class AppPlatformMetricsServiceTest : public testing::Test {
@@ -56,8 +64,11 @@
     app_platform_metrics_service_ =
         std::make_unique<AppPlatformMetricsService>(&testing_profile_);
 
-    app_platform_metrics_service_->AddObserver(&mock_observer_);
-    app_platform_metrics_service_->Start();
+    app_platform_metrics_service_->Start(
+        apps::AppServiceProxyFactory::GetForProfile(&testing_profile_)
+            ->AppRegistryCache());
+
+    InstallApps();
   }
 
   void TearDown() override {
@@ -65,6 +76,85 @@
     chromeos::PowerManagerClient::Shutdown();
   }
 
+  void InstallApps() {
+    auto* proxy =
+        apps::AppServiceProxyFactory::GetForProfile(&testing_profile_);
+    std::vector<apps::mojom::AppPtr> deltas;
+    apps::AppRegistryCache& cache = proxy->AppRegistryCache();
+    deltas.push_back(MakeApp(/*app_id=*/"u", apps::mojom::AppType::kUnknown));
+    deltas.push_back(MakeApp(/*app_id=*/"a", apps::mojom::AppType::kArc));
+    deltas.push_back(MakeApp(/*app_id=*/"bu", apps::mojom::AppType::kBuiltIn));
+    deltas.push_back(MakeApp(/*app_id=*/"c", apps::mojom::AppType::kCrostini));
+    deltas.push_back(MakeApp(/*app_id=*/"w", apps::mojom::AppType::kWeb));
+    deltas.push_back(MakeApp(
+        /*app_id=*/"m", apps::mojom::AppType::kMacOs));
+    deltas.push_back(MakeApp(
+        /*app_id=*/"p", apps::mojom::AppType::kPluginVm));
+    deltas.push_back(MakeApp(
+        /*app_id=*/"l", apps::mojom::AppType::kStandaloneBrowser));
+    deltas.push_back(MakeApp(
+        /*app_id=*/"r", apps::mojom::AppType::kRemote));
+    deltas.push_back(MakeApp(/*app_id=*/"bo", apps::mojom::AppType::kBorealis));
+    deltas.push_back(MakeApp(/*app_id=*/"s", apps::mojom::AppType::kSystemWeb));
+    cache.OnApps(std::move(deltas), apps::mojom::AppType::kUnknown,
+                 false /* should_notify_initialized */);
+  }
+
+  void InstallOneApp() {
+    auto* proxy =
+        apps::AppServiceProxyFactory::GetForProfile(&testing_profile_);
+    std::vector<apps::mojom::AppPtr> deltas;
+    apps::AppRegistryCache& cache = proxy->AppRegistryCache();
+    deltas.push_back(MakeApp(/*app_id=*/"aa", apps::mojom::AppType::kArc));
+    cache.OnApps(std::move(deltas), apps::mojom::AppType::kUnknown,
+                 false /* should_notify_initialized */);
+  }
+
+  void VerifyMetrics() {
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(AppTypeName::kArc),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kBuiltIn),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kCrostini),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kChromeApp),
+        /*expected_count=*/0);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(AppTypeName::kWeb),
+        /*expected_count=*/0);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kMacOs),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kPluginVm),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kStandaloneBrowser),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kRemote),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kBorealis),
+        /*expected_count=*/1);
+    histogram_tester_.ExpectTotalCount(
+        AppPlatformMetrics::GetAppsCountHistogramNameForTest(
+            AppTypeName::kSystemWeb),
+        /*expected_count=*/1);
+  }
+
  protected:
   sync_preferences::TestingPrefServiceSyncable* GetPrefService() {
     return testing_profile_.GetTestingPrefService();
@@ -74,37 +164,40 @@
     return GetPrefService()->GetInteger(kAppPlatformMetricsDayId);
   }
 
+  base::HistogramTester& histogram_tester() { return histogram_tester_; }
+
   content::BrowserTaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
 
-  AppPlatformMetricsServiceTestObserver mock_observer_;
-
  private:
   TestingProfile testing_profile_;
+  base::HistogramTester histogram_tester_;
   std::unique_ptr<AppPlatformMetricsService> app_platform_metrics_service_;
 };
 
 // Tests OnNewDay() is called after more than one day passes.
 TEST_F(AppPlatformMetricsServiceTest, MoreThanOneDay) {
-  EXPECT_CALL(mock_observer_, OnNewDay()).Times(1);
   task_environment_.FastForwardBy(base::TimeDelta::FromDays(1) +
                                   base::TimeDelta::FromHours(1));
+  VerifyMetrics();
   EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()),
             GetDayIdPref());
 }
 
 // Tests OnNewDay() is called at midnight.
 TEST_F(AppPlatformMetricsServiceTest, UntilMidnight) {
-  EXPECT_CALL(mock_observer_, OnNewDay()).Times(1);
   task_environment_.FastForwardBy(base::TimeDelta::FromHours(3));
+  VerifyMetrics();
   EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()),
             GetDayIdPref());
 }
 
 // Tests OnNewDay() is not called before midnight.
 TEST_F(AppPlatformMetricsServiceTest, LessThanOneDay) {
-  EXPECT_CALL(mock_observer_, OnNewDay()).Times(0);
   task_environment_.FastForwardBy(base::TimeDelta::FromHours(1));
+  histogram_tester().ExpectTotalCount(
+      AppPlatformMetrics::GetAppsCountHistogramNameForTest(AppTypeName::kArc),
+      /*expected_count=*/0);
   EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()),
             GetDayIdPref());
 }
@@ -112,12 +205,24 @@
 // Tests OnNewDay() is called after one day passes, even when the device is
 // idle.
 TEST_F(AppPlatformMetricsServiceTest, MoreThanOneDayDeviceIdle) {
-  EXPECT_CALL(mock_observer_, OnNewDay()).Times(1);
   SetScreenOff(true);
   SetSuspendImminent();
   task_environment_.FastForwardBy(base::TimeDelta::FromDays(1));
+  VerifyMetrics();
   EXPECT_EQ(AppPlatformMetricsService::GetDayIdForTesting(base::Time::Now()),
             GetDayIdPref());
 }
 
+// Tests the UMA metrics that count the number of installed apps.
+TEST_F(AppPlatformMetricsServiceTest, InstallApps) {
+  task_environment_.FastForwardBy(base::TimeDelta::FromHours(3));
+  VerifyMetrics();
+
+  InstallOneApp();
+  task_environment_.FastForwardBy(base::TimeDelta::FromDays(1));
+  histogram_tester().ExpectTotalCount(
+      AppPlatformMetrics::GetAppsCountHistogramNameForTest(AppTypeName::kArc),
+      /*expected_count=*/2);
+}
+
 }  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc b/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc
index d97bc0f8..614c31f 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc
@@ -454,7 +454,7 @@
 
 void AppServiceProxyChromeOs::InitAppPlatformMetrics() {
   if (app_platform_metrics_service_) {
-    app_platform_metrics_service_->Start();
+    app_platform_metrics_service_->Start(app_registry_cache_);
   }
 }
 
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/web_apps_chromeos.cc
index c06eaac..0cf42c8 100644
--- a/chrome/browser/apps/app_service/publishers/web_apps_chromeos.cc
+++ b/chrome/browser/apps/app_service/publishers/web_apps_chromeos.cc
@@ -13,10 +13,10 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/apps/app_service/app_service_metrics.h"
diff --git a/chrome/browser/ash/accessibility/soda_installer_impl_chromeos.cc b/chrome/browser/ash/accessibility/soda_installer_impl_chromeos.cc
index 7aeff93..996e174e 100644
--- a/chrome/browser/ash/accessibility/soda_installer_impl_chromeos.cc
+++ b/chrome/browser/ash/accessibility/soda_installer_impl_chromeos.cc
@@ -28,6 +28,11 @@
   return instance.get();
 }
 
+// static
+void SodaInstaller::RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterTimePref(prefs::kSodaScheduledDeletionTime, base::Time());
+}
+
 SodaInstallerImplChromeOS::SodaInstallerImplChromeOS() = default;
 
 SodaInstallerImplChromeOS::~SodaInstallerImplChromeOS() = default;
diff --git a/chrome/browser/ash/borealis/borealis_app_launcher.cc b/chrome/browser/ash/borealis/borealis_app_launcher.cc
index bbf971f95..9efe752d 100644
--- a/chrome/browser/ash/borealis/borealis_app_launcher.cc
+++ b/chrome/browser/ash/borealis/borealis_app_launcher.cc
@@ -14,8 +14,8 @@
 #include "chrome/browser/ash/guest_os/guest_os_registry_service_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
-#include "chromeos/dbus/cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 
 namespace borealis {
diff --git a/chrome/browser/ash/borealis/borealis_app_launcher_unittest.cc b/chrome/browser/ash/borealis/borealis_app_launcher_unittest.cc
index ccc4f047..0b05d93 100644
--- a/chrome/browser/ash/borealis/borealis_app_launcher_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_app_launcher_unittest.cc
@@ -13,8 +13,8 @@
 #include "chrome/browser/ash/guest_os/guest_os_registry_service.h"
 #include "chrome/browser/ash/guest_os/guest_os_registry_service_factory.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/vm_applications/apps.pb.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/ash/borealis/borealis_context_unittest.cc b/chrome/browser/ash/borealis/borealis_context_unittest.cc
index 57de964..ccb46a1 100644
--- a/chrome/browser/ash/borealis/borealis_context_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_context_unittest.cc
@@ -15,9 +15,9 @@
 #include "chrome/browser/ash/borealis/borealis_shutdown_monitor.h"
 #include "chrome/browser/ash/borealis/borealis_window_manager.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_chunneld_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_seneschal_client.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/ash/borealis/borealis_launch_watcher.h b/chrome/browser/ash/borealis/borealis_launch_watcher.h
index acf5f356..3304a6d 100644
--- a/chrome/browser/ash/borealis/borealis_launch_watcher.h
+++ b/chrome/browser/ash/borealis/borealis_launch_watcher.h
@@ -8,7 +8,7 @@
 #include "base/callback.h"
 #include "base/containers/queue.h"
 #include "base/memory/weak_ptr.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 
 class Profile;
 
diff --git a/chrome/browser/ash/borealis/borealis_launch_watcher_unittest.cc b/chrome/browser/ash/borealis/borealis_launch_watcher_unittest.cc
index f45a65d..7a812ce 100644
--- a/chrome/browser/ash/borealis/borealis_launch_watcher_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_launch_watcher_unittest.cc
@@ -8,8 +8,8 @@
 
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
diff --git a/chrome/browser/ash/borealis/borealis_task_unittest.cc b/chrome/browser/ash/borealis/borealis_task_unittest.cc
index 232fe79..3a4d59ab 100644
--- a/chrome/browser/ash/borealis/borealis_task_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_task_unittest.cc
@@ -11,9 +11,9 @@
 #include "chrome/browser/ash/borealis/borealis_metrics.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/dlcservice/fake_dlcservice_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/ash/certificate_provider/certificate_provider_service_unittest.cc b/chrome/browser/ash/certificate_provider/certificate_provider_service_unittest.cc
index 924bc8dc8..4796f6e 100644
--- a/chrome/browser/ash/certificate_provider/certificate_provider_service_unittest.cc
+++ b/chrome/browser/ash/certificate_provider/certificate_provider_service_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/stl_util.h"
+#include "base/strings/string_piece.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/certificate_provider/certificate_provider.h"
@@ -567,7 +568,7 @@
       net::x509_util::CryptoBufferAsStringPiece(
           cert_info1_.certificate->cert_buffer()),
       &client1_spki_piece));
-  std::string client1_spki = client1_spki_piece.as_string();
+  std::string client1_spki(client1_spki_piece);
 
   std::unique_ptr<net::ClientCertIdentity> cert(ProvideDefaultCert());
   ASSERT_TRUE(cert);
diff --git a/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc b/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc
index 1002256..0eba316 100644
--- a/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc
+++ b/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc
@@ -182,7 +182,7 @@
           &spki_bytes)) {
     return {};
   }
-  return spki_bytes.as_string();
+  return std::string(spki_bytes);
 }
 
 TestCertificateProviderExtension::TestCertificateProviderExtension(
diff --git a/chrome/browser/ash/certificate_provider/thread_safe_certificate_map.cc b/chrome/browser/ash/certificate_provider/thread_safe_certificate_map.cc
index c1f63d8..d4eda1ef 100644
--- a/chrome/browser/ash/certificate_provider/thread_safe_certificate_map.cc
+++ b/chrome/browser/ash/certificate_provider/thread_safe_certificate_map.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/containers/flat_map.h"
+#include "base/strings/string_piece.h"
 #include "base/synchronization/lock.h"
 #include "chrome/browser/ash/certificate_provider/certificate_info.h"
 #include "net/base/hash_value.h"
@@ -26,7 +27,7 @@
           &spki_bytes)) {
     return {};
   }
-  return spki_bytes.as_string();
+  return std::string(spki_bytes);
 }
 
 }  // namespace
diff --git a/chrome/browser/ash/child_accounts/family_user_app_metrics.cc b/chrome/browser/ash/child_accounts/family_user_app_metrics.cc
index a7c3c256..1a17ff4 100644
--- a/chrome/browser/ash/child_accounts/family_user_app_metrics.cc
+++ b/chrome/browser/ash/child_accounts/family_user_app_metrics.cc
@@ -7,8 +7,8 @@
 #include <memory>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 #include "base/time/time.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc b/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc
index 60f964e..a1d4b5d 100644
--- a/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc
+++ b/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc
@@ -27,9 +27,9 @@
 #include "chrome/test/base/scoped_testing_local_state.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/dlcservice/dlcservice_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_seneschal_client.h"
 #include "chromeos/dbus/seneschal/seneschal_service.pb.h"
diff --git a/chrome/browser/ash/guest_os/guest_os_stability_monitor.h b/chrome/browser/ash/guest_os/guest_os_stability_monitor.h
index 25d8b2a..7a0954a 100644
--- a/chrome/browser/ash/guest_os/guest_os_stability_monitor.h
+++ b/chrome/browser/ash/guest_os/guest_os_stability_monitor.h
@@ -8,7 +8,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
 #include "chromeos/dbus/chunneld_client.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/concierge_client.h"
 #include "chromeos/dbus/seneschal_client.h"
 
diff --git a/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc b/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
index daf9b67..771b15d0 100644
--- a/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
+++ b/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
@@ -14,9 +14,9 @@
 #include "chrome/browser/chromeos/crostini/crostini_test_helper.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_chunneld_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_seneschal_client.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc
index c9b3f7b1..12068905 100644
--- a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc
+++ b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc
@@ -26,6 +26,7 @@
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
@@ -2638,7 +2639,7 @@
   KioskVirtualKeyboardTestSoundsManagerTestImpl() {}
 
   bool Initialize(SoundKey key, const base::StringPiece& data) override {
-    sound_data_[key] = data.as_string();
+    sound_data_[key] = std::string(data);
     return true;
   }
 
diff --git a/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc b/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc
index c116f41..c8220c2 100644
--- a/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc
+++ b/chrome/browser/ash/login/arc_terms_of_service_browsertest.cc
@@ -249,10 +249,9 @@
   // The string will have the format "http://127.0.0.1:${PORT_NUMBER}" where
   // PORT_NUMBER is a randomly assigned port number.
   std::string TestServerBaseUrl() {
-    return base::TrimString(
-               embedded_test_server()->base_url().GetOrigin().spec(), "/",
-               base::TrimPositions::TRIM_TRAILING)
-        .as_string();
+    return std::string(
+        base::TrimString(embedded_test_server()->base_url().GetOrigin().spec(),
+                         "/", base::TrimPositions::TRIM_TRAILING));
   }
 
   // Handles both Terms of Service and Privacy policy requests.
diff --git a/chrome/browser/ash/login/login_client_cert_usage_observer.cc b/chrome/browser/ash/login/login_client_cert_usage_observer.cc
index f9bab65..930949a 100644
--- a/chrome/browser/ash/login/login_client_cert_usage_observer.cc
+++ b/chrome/browser/ash/login/login_client_cert_usage_observer.cc
@@ -42,7 +42,7 @@
   std::vector<uint16_t> ssl_algorithms;
   std::string extension_id;
   if (!certificate_provider_service->LookUpSpki(
-          spki.as_string(), &ssl_algorithms, &extension_id)) {
+          std::string(spki), &ssl_algorithms, &extension_id)) {
     return false;
   }
   signature_algorithms->clear();
diff --git a/chrome/browser/ash/login/screens/terms_of_service_screen_browsertest.cc b/chrome/browser/ash/login/screens/terms_of_service_screen_browsertest.cc
index f618ff9e..449a9a2 100644
--- a/chrome/browser/ash/login/screens/terms_of_service_screen_browsertest.cc
+++ b/chrome/browser/ash/login/screens/terms_of_service_screen_browsertest.cc
@@ -153,10 +153,9 @@
   }
 
   std::string TestServerBaseUrl() {
-    return base::TrimString(
-               embedded_test_server()->base_url().GetOrigin().spec(), "/",
-               base::TrimPositions::TRIM_TRAILING)
-        .as_string();
+    return std::string(
+        base::TrimString(embedded_test_server()->base_url().GetOrigin().spec(),
+                         "/", base::TrimPositions::TRIM_TRAILING));
   }
 
   std::unique_ptr<HttpResponse> HandleRequest(const HttpRequest& request) {
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_files.cc b/chrome/browser/ash/plugin_vm/plugin_vm_files.cc
index a86b1c4..6b715f6 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_files.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_files.cc
@@ -26,8 +26,8 @@
 #include "chrome/browser/ui/ash/launcher/app_window_base.h"
 #include "chrome/browser/ui/ash/launcher/app_window_shelf_item_controller.h"
 #include "chrome/browser/ui/ash/launcher/chrome_shelf_controller.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
-#include "chromeos/dbus/cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_files_unittest.cc b/chrome/browser/ash/plugin_vm/plugin_vm_files_unittest.cc
index e5abfb6..f8d698dac 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_files_unittest.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_files_unittest.cc
@@ -22,8 +22,8 @@
 #include "chrome/browser/ui/ash/launcher/chrome_shelf_controller.h"
 #include "chrome/browser/ui/ash/launcher/shelf_controller_helper.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/vm_applications/apps.pb.h"
 #include "content/public/test/browser_task_environment.h"
 #include "storage/browser/file_system/external_mount_points.h"
diff --git a/chrome/browser/ash/scanning/zeroconf_scanner_detector.cc b/chrome/browser/ash/scanning/zeroconf_scanner_detector.cc
index 86e88e2..b1235dd6 100644
--- a/chrome/browser/ash/scanning/zeroconf_scanner_detector.cc
+++ b/chrome/browser/ash/scanning/zeroconf_scanner_detector.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/optional.h"
 #include "base/sequence_checker.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_piece_forward.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -54,7 +55,7 @@
       const base::StringPiece key = key_value.substr(0, equal_pos);
       const base::StringPiece value = key_value.substr(equal_pos + 1);
       if (key == "rs")
-        rs_ = value.as_string();
+        rs_ = std::string(value);
     }
   }
   ParsedMetadata(const ParsedMetadata&) = delete;
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_bridge.cc b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_bridge.cc
index 846ca114..d850f24 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_bridge.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_bridge.cc
@@ -337,7 +337,7 @@
   }
 
   DeliverWilcoDtcSupportdUiMessageToExtensions(
-      json_message_string.as_string(),
+      std::string(json_message_string),
       base::BindOnce(
           [](SendWilcoDtcMessageToUiCallback callback,
              const std::string& response) {
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
index 7c059b67..c5aa18fd 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
@@ -189,7 +189,7 @@
       return;
     }
 
-    client_->PostMessageFromNativeHost(response_json_string.as_string());
+    client_->PostMessageFromNativeHost(std::string(response_json_string));
     DisposeSelf(std::string() /* error_message */);
   }
 
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc
index 5a4039a..8ff83da7 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/check.h"
 #include "base/memory/shared_memory_mapping.h"
 #include "base/run_loop.h"
+#include "base/strings/string_piece.h"
 #include "base/test/task_environment.h"
 #include "chrome/browser/ash/wilco_dtc_supportd/mojo_utils.h"
 #include "chrome/browser/ash/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h"
@@ -53,9 +54,8 @@
   if (!handle)
     return std::string();
   base::ReadOnlySharedMemoryMapping shared_memory;
-  std::string contents =
-      MojoUtils::GetStringPieceFromMojoHandle(std::move(handle), &shared_memory)
-          .as_string();
+  std::string contents(MojoUtils::GetStringPieceFromMojoHandle(
+      std::move(handle), &shared_memory));
   CHECK(!contents.empty());
   return contents;
 }
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service_browsertest.cc b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service_browsertest.cc
index fd8b4fe..2cdf7a35 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service_browsertest.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service_browsertest.cc
@@ -90,9 +90,8 @@
   std::string response_body_release() {
     DCHECK(request_performed_);
     base::ReadOnlySharedMemoryMapping response_shared_memory;
-    return MojoUtils::GetStringPieceFromMojoHandle(std::move(response_handle_),
-                                                   &response_shared_memory)
-        .as_string();
+    return std::string(MojoUtils::GetStringPieceFromMojoHandle(
+        std::move(response_handle_), &response_shared_memory));
   }
 
  private:
diff --git a/chrome/browser/autofill/automated_tests/cache_replayer.cc b/chrome/browser/autofill/automated_tests/cache_replayer.cc
index 62340d2..c5eb0bd 100644
--- a/chrome/browser/autofill/automated_tests/cache_replayer.cc
+++ b/chrome/browser/autofill/automated_tests/cache_replayer.cc
@@ -18,6 +18,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
@@ -561,7 +562,7 @@
         "could not cache query node content";
     if (fail_on_error) {
       return ServerCacheReplayer::Status{
-          ServerCacheReplayer::StatusCode::kBadNode, status_msg.as_string()};
+          ServerCacheReplayer::StatusCode::kBadNode, std::string(status_msg)};
     } else {
       // Keep a trace when not set to fail on bad node.
       VLOG(1) << status_msg;
diff --git a/chrome/browser/browser_switcher/alternative_browser_driver_unittest.cc b/chrome/browser/browser_switcher/alternative_browser_driver_unittest.cc
index 29cfaaf..0d050ae 100644
--- a/chrome/browser/browser_switcher/alternative_browser_driver_unittest.cc
+++ b/chrome/browser/browser_switcher/alternative_browser_driver_unittest.cc
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
@@ -32,7 +33,7 @@
 #if defined(OS_WIN)
   return base::UTF8ToWide(src);
 #elif defined(OS_POSIX)
-  return src.as_string();
+  return std::string(src);
 #else
 #error "Invalid platform for browser_switcher"
 #endif
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
index cf930db5..8891a89 100644
--- a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
@@ -186,7 +187,7 @@
                        base::CompareCase::INSENSITIVE_ASCII))
     spec = spec.substr(strlen(placeholder_scheme));
 
-  *pattern = base::StrCat({prefix, spec.as_string()});
+  *pattern = base::StrCat({prefix, spec});
 }
 
 Decision::Decision(Action action_,
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 5e200fe..8735ce0 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -840,14 +840,14 @@
 }
 
 #if !defined(OS_ANDROID)
-// Check if the current url is whitelisted based on a list of whitelisted urls.
-bool IsURLWhitelisted(const GURL& current_url,
-                      base::Value::ConstListView whitelisted_urls) {
+// Check if the current url is allowlisted based on a list of allowlisted urls.
+bool IsURLAllowlisted(const GURL& current_url,
+                      base::Value::ConstListView allowlisted_urls) {
   // Only check on HTTP and HTTPS pages.
   if (!current_url.SchemeIsHTTPOrHTTPS())
     return false;
 
-  for (auto const& value : whitelisted_urls) {
+  for (auto const& value : allowlisted_urls) {
     ContentSettingsPattern pattern =
         ContentSettingsPattern::FromString(value.GetString());
     if (pattern == ContentSettingsPattern::Wildcard() || !pattern.IsValid())
@@ -873,12 +873,12 @@
   if (!contents)
     return false;
 
-  // Check if the current URL matches a URL pattern on the whitelist.
-  const base::ListValue* autoplay_whitelist =
+  // Check if the current URL matches a URL pattern on the allowlist.
+  const base::ListValue* autoplay_allowlist =
       prefs->GetList(prefs::kAutoplayWhitelist);
-  return autoplay_whitelist &&
+  return autoplay_allowlist &&
          prefs->IsManagedPreference(prefs::kAutoplayWhitelist) &&
-         IsURLWhitelisted(contents->GetURL(), autoplay_whitelist->GetList());
+         IsURLAllowlisted(contents->GetURL(), autoplay_allowlist->GetList());
 }
 #endif
 
@@ -1129,21 +1129,21 @@
       protocol_handler_registry->IsHandledProtocol(url.scheme()))
     return;
 
-  bool is_whitelisted = false;
+  bool is_allowlisted = false;
   PolicyBlocklistService* service =
       PolicyBlocklistFactory::GetForBrowserContext(
           web_contents->GetBrowserContext());
   if (ShouldHonorPolicies() && service) {
     const policy::URLBlocklist::URLBlocklistState url_state =
         service->GetURLBlocklistState(url);
-    is_whitelisted =
+    is_allowlisted =
         url_state == policy::URLBlocklist::URLBlocklistState::URL_IN_ALLOWLIST;
   }
 
-  // If the URL is in whitelist, we launch it without asking the user and
-  // without any additional security checks. Since the URL is whitelisted,
+  // If the URL is in allowlist, we launch it without asking the user and
+  // without any additional security checks. Since the URL is allowlisted,
   // we assume it can be executed.
-  if (is_whitelisted) {
+  if (is_allowlisted) {
     ExternalProtocolHandler::LaunchUrlWithoutSecurityCheck(url, web_contents);
   } else {
     ExternalProtocolHandler::LaunchUrl(
@@ -4468,9 +4468,9 @@
       static_cast<ChromeNavigationUIData*>(navigation_ui_data);
 
 #if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
-  bool matches_enterprise_whitelist = safe_browsing::IsURLAllowlistedByPolicy(
+  bool matches_enterprise_allowlist = safe_browsing::IsURLAllowlistedByPolicy(
       request.url, *profile->GetPrefs());
-  if (!matches_enterprise_whitelist) {
+  if (!matches_enterprise_allowlist) {
 #if BUILDFLAG(SAFE_BROWSING_DB_LOCAL)
     auto* connectors_service =
         enterprise_connectors::ConnectorsServiceFactory::GetForBrowserContext(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 8eaefcc..429d728 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -4108,6 +4108,8 @@
     "policy/dlp/dlp_rules_manager_test_utils.h",
     "policy/dlp/mock_dlp_content_manager.cc",
     "policy/dlp/mock_dlp_content_manager.h",
+    "policy/dlp/mock_dlp_rules_manager.cc",
+    "policy/dlp/mock_dlp_rules_manager.h",
     "policy/dm_token_storage_unittest.cc",
     "policy/extension_cache_unittest.cc",
     "policy/extension_install_event_log_collector_unittest.cc",
diff --git a/chrome/browser/chromeos/crostini/ansible/ansible_management_test_helper.h b/chrome/browser/chromeos/crostini/ansible/ansible_management_test_helper.h
index 866b512..029c1f6 100644
--- a/chrome/browser/chromeos/crostini/ansible/ansible_management_test_helper.h
+++ b/chrome/browser/chromeos/crostini/ansible/ansible_management_test_helper.h
@@ -7,7 +7,7 @@
 
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 
 class Profile;
 
diff --git a/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc b/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc
index c05e984..a7711c5 100644
--- a/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc
+++ b/chrome/browser/chromeos/crostini/crostini_export_import_unittest.cc
@@ -15,8 +15,8 @@
 #include "chrome/browser/notifications/notification_display_service_factory.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_seneschal_client.h"
 #include "chromeos/dbus/seneschal/seneschal_service.pb.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/chromeos/crostini/crostini_low_disk_notification.h b/chrome/browser/chromeos/crostini/crostini_low_disk_notification.h
index d6107da..9928de16 100644
--- a/chrome/browser/chromeos/crostini/crostini_low_disk_notification.h
+++ b/chrome/browser/chromeos/crostini/crostini_low_disk_notification.h
@@ -13,7 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 
 namespace message_center {
 class Notification;
diff --git a/chrome/browser/chromeos/crostini/crostini_low_disk_notification_unittest.cc b/chrome/browser/chromeos/crostini/crostini_low_disk_notification_unittest.cc
index 7aeb1ab..0223976 100644
--- a/chrome/browser/chromeos/crostini/crostini_low_disk_notification_unittest.cc
+++ b/chrome/browser/chromeos/crostini/crostini_low_disk_notification_unittest.cc
@@ -18,8 +18,8 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/settings/cros_settings_names.h"
 #include "components/user_manager/fake_user_manager.h"
 #include "components/user_manager/scoped_user_manager.h"
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.h b/chrome/browser/chromeos/crostini/crostini_manager.h
index 304851cf..dc64498 100644
--- a/chrome/browser/chromeos/crostini/crostini_manager.h
+++ b/chrome/browser/chromeos/crostini/crostini_manager.h
@@ -27,8 +27,8 @@
 #include "chrome/browser/ui/browser.h"
 #include "chromeos/dbus/anomaly_detector/anomaly_detector.pb.h"
 #include "chromeos/dbus/anomaly_detector_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
-#include "chromeos/dbus/cicerone_client.h"
 #include "chromeos/dbus/concierge/concierge_service.pb.h"
 #include "chromeos/dbus/concierge_client.h"
 #include "chromeos/dbus/power/power_manager_client.h"
diff --git a/chrome/browser/chromeos/crostini/crostini_manager_unittest.cc b/chrome/browser/chromeos/crostini/crostini_manager_unittest.cc
index 2d1569e2..d839061 100644
--- a/chrome/browser/chromeos/crostini/crostini_manager_unittest.cc
+++ b/chrome/browser/chromeos/crostini/crostini_manager_unittest.cc
@@ -35,11 +35,11 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/concierge/concierge_service.pb.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/dlcservice/dlcservice_client.h"
 #include "chromeos/dbus/fake_anomaly_detector_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/session_manager/fake_session_manager_client.h"
 #include "chromeos/dbus/userdataauth/fake_cryptohome_misc_client.h"
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
index 8e8c9690..2dad4d54 100644
--- a/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
+++ b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
@@ -22,9 +22,9 @@
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/cros_disks_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_seneschal_client.h"
 #include "chromeos/dbus/vm_applications/apps.pb.h"
diff --git a/chrome/browser/chromeos/crostini/crostini_shelf_utils.cc b/chrome/browser/chromeos/crostini/crostini_shelf_utils.cc
index 2f021fb..be4b382 100644
--- a/chrome/browser/chromeos/crostini/crostini_shelf_utils.cc
+++ b/chrome/browser/chromeos/crostini/crostini_shelf_utils.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "base/no_destructor.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "chrome/browser/ash/guest_os/guest_os_pref_names.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
@@ -39,7 +40,7 @@
       kWMClassToNname({{"Octave-gui", "GNU Octave"},
                        {"MuseScore2", "MuseScore 2"},
                        {"XnViewMP", "XnView Multi Platform"}});
-  const auto it = kWMClassToNname->find(wmclass.as_string());
+  const auto it = kWMClassToNname->find(std::string(wmclass));
   if (it == kWMClassToNname->end())
     return nullptr;
   return &it->second;
@@ -90,14 +91,14 @@
     if (!value)
       continue;
     if (value->type() == base::Value::Type::STRING) {
-      if (!MatchingString(search_value.as_string(), value->GetString(),
+      if (!MatchingString(std::string(search_value), value->GetString(),
                           ignore_space)) {
         continue;
       }
     } else if (value->type() == base::Value::Type::DICTIONARY) {
       // Look at the unlocalized name to see if that matches.
       value = value->FindKeyOfType("", base::Value::Type::STRING);
-      if (!value || !MatchingString(search_value.as_string(),
+      if (!value || !MatchingString(std::string(search_value),
                                     value->GetString(), ignore_space)) {
         continue;
       }
diff --git a/chrome/browser/chromeos/crostini/crostini_sshfs_unittest.cc b/chrome/browser/chromeos/crostini/crostini_sshfs_unittest.cc
index ff32181..e044988c 100644
--- a/chrome/browser/chromeos/crostini/crostini_sshfs_unittest.cc
+++ b/chrome/browser/chromeos/crostini/crostini_sshfs_unittest.cc
@@ -23,9 +23,9 @@
 #include "chrome/browser/chromeos/file_manager/volume_manager.h"
 #include "chrome/browser/chromeos/file_manager/volume_manager_factory.h"
 #include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/cros_disks_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/vm_applications/apps.pb.h"
 #include "chromeos/disks/disk_mount_manager.h"
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
index f0a9fc8..0e6272e 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -91,11 +91,6 @@
     return *this;
   }
 
-  TestCase& EnableSmbfs() {
-    options.smbfs = true;
-    return *this;
-  }
-
   TestCase& DontMountVolumes() {
     options.mount_volumes = false;
     return *this;
@@ -553,7 +548,7 @@
         TestCase("openQuickViewMhtml"),
         TestCase("openQuickViewBackgroundColorHtml"),
         TestCase("openQuickViewDrive"),
-        TestCase("openQuickViewSmbfs").EnableSmbfs(),
+        TestCase("openQuickViewSmbfs"),
         TestCase("openQuickViewAndroid"),
         TestCase("openQuickViewDocumentsProvider")
             .EnableGenericDocumentsProvider(),
@@ -963,7 +958,7 @@
         // Disabled until Drive quota can be properly displayed.
         // crbug.com/1177203
         // TestCase("showAvailableStorageDrive"),
-        TestCase("showAvailableStorageSmbfs").EnableSmbfs(),
+        TestCase("showAvailableStorageSmbfs"),
         TestCase("showAvailableStorageDocProvider")
             .EnableGenericDocumentsProvider()));
 
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
index 25a7b03..a494084f 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
@@ -473,7 +473,7 @@
 
     // Maps |value| to base::Time. Returns true on success.
     static bool MapStringToTime(base::StringPiece value, base::Time* time) {
-      return base::Time::FromString(value.as_string().c_str(), time);
+      return base::Time::FromString(std::string(value).c_str(), time);
     }
   };
 };
@@ -742,7 +742,6 @@
   PRINT_IF_NOT_DEFAULT(offline)
   PRINT_IF_NOT_DEFAULT(photos_documents_provider)
   PRINT_IF_NOT_DEFAULT(single_partition_format)
-  PRINT_IF_NOT_DEFAULT(smbfs)
   PRINT_IF_NOT_DEFAULT(tablet_mode)
   PRINT_IF_NOT_DEFAULT(zip)
   PRINT_IF_NOT_DEFAULT(zip_no_nacl)
@@ -1684,10 +1683,6 @@
     arc::SetArcAvailableCommandLineForTesting(command_line);
   }
 
-  if (options.smbfs) {
-    enabled_features.push_back(features::kSmbFs);
-  }
-
   if (options.zip_no_nacl) {
     enabled_features.push_back(chromeos::features::kFilesZipMount);
     enabled_features.push_back(chromeos::features::kFilesZipPack);
@@ -1884,9 +1879,7 @@
     }
   }
 
-  if (options.smbfs) {
-    smbfs_volume_ = std::make_unique<SmbfsTestVolume>();
-  }
+  smbfs_volume_ = std::make_unique<SmbfsTestVolume>();
 
   display_service_ =
       std::make_unique<NotificationDisplayServiceTester>(profile());
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
index b8440d2..b817dff 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
@@ -94,9 +94,6 @@
     // Whether test needs a native SMB file system provider.
     bool native_smb = true;
 
-    // Whether test needs smbfs for native SMB integration.
-    bool smbfs = false;
-
     // Whether FilesApp should start with volumes mounted.
     bool mount_volumes = true;
 
diff --git a/chrome/browser/chromeos/file_manager/file_watcher_unittest.cc b/chrome/browser/chromeos/file_manager/file_watcher_unittest.cc
index fc3533b..0052bae 100644
--- a/chrome/browser/chromeos/file_manager/file_watcher_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/file_watcher_unittest.cc
@@ -16,8 +16,8 @@
 #include "chrome/browser/chromeos/file_manager/path_util.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/cicerone/cicerone_service.pb.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc
index b0995d13..62fc2c2 100644
--- a/chrome/browser/chromeos/input_method/assistive_suggester.cc
+++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc
@@ -323,12 +323,14 @@
   context_id_ = context_id;
   personal_info_suggester_.OnFocus(context_id_);
   emoji_suggester_.OnFocus(context_id_);
+  multi_word_suggester_.OnFocus(context_id_);
 }
 
 void AssistiveSuggester::OnBlur() {
   context_id_ = -1;
   personal_info_suggester_.OnBlur();
   emoji_suggester_.OnBlur();
+  multi_word_suggester_.OnBlur();
 }
 
 bool AssistiveSuggester::OnKeyEvent(const ui::KeyEvent& event) {
diff --git a/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc b/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc
index 39afba3..7cbaac5c 100644
--- a/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc
+++ b/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/stl_util.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
@@ -356,7 +357,7 @@
     ComponentExtensionIME component_ime;
     ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
     component_ime.manifest =
-        rb.GetRawDataResource(extension.manifest_resource_id).as_string();
+        std::string(rb.GetRawDataResource(extension.manifest_resource_id));
 
     if (component_ime.manifest.empty()) {
       LOG(ERROR) << "Couldn't get manifest from resource_id("
diff --git a/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc b/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc
index 0ca2750..783a574 100644
--- a/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc
+++ b/chrome/browser/chromeos/input_method/fake_suggestion_handler.cc
@@ -28,7 +28,11 @@
 
 bool FakeSuggestionHandler::AcceptSuggestion(int context_id,
                                              std::string* error) {
-  return false;
+  showing_suggestion_ = false;
+  accepted_suggestion_ = true;
+  suggestion_text_ = u"";
+  confirmed_length_ = 0;
+  return true;
 }
 
 void FakeSuggestionHandler::OnSuggestionsChanged(
diff --git a/chrome/browser/chromeos/input_method/fake_suggestion_handler.h b/chrome/browser/chromeos/input_method/fake_suggestion_handler.h
index c6735d17..2912dc72 100644
--- a/chrome/browser/chromeos/input_method/fake_suggestion_handler.h
+++ b/chrome/browser/chromeos/input_method/fake_suggestion_handler.h
@@ -47,6 +47,7 @@
   std::u16string GetSuggestionText() { return suggestion_text_; }
   size_t GetConfirmedLength() { return confirmed_length_; }
   bool GetShowingSuggestion() { return showing_suggestion_; }
+  bool GetAcceptedSuggestion() { return accepted_suggestion_; }
   bool GetDismissedSuggestion() { return dismissed_suggestion_; }
 
  private:
@@ -54,6 +55,7 @@
   std::u16string suggestion_text_;
   size_t confirmed_length_ = 0;
   bool showing_suggestion_ = false;
+  bool accepted_suggestion_ = false;
   bool dismissed_suggestion_ = false;
 };
 
diff --git a/chrome/browser/chromeos/input_method/multi_word_suggester.cc b/chrome/browser/chromeos/input_method/multi_word_suggester.cc
index 3d3f3bc8..265c113 100644
--- a/chrome/browser/chromeos/input_method/multi_word_suggester.cc
+++ b/chrome/browser/chromeos/input_method/multi_word_suggester.cc
@@ -8,6 +8,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chromeos/input_method/ui/suggestion_details.h"
 #include "chromeos/services/ime/public/cpp/suggestions.h"
+#include "ui/events/keycodes/dom/dom_code.h"
 
 namespace chromeos {
 namespace {
@@ -52,12 +53,17 @@
 }
 
 SuggestionStatus MultiWordSuggester::HandleKeyEvent(const ui::KeyEvent& event) {
-  if (suggestion_shown_) {
-    DismissSuggestion();
-    return SuggestionStatus::kDismiss;
-  }
+  if (!suggestion_shown_)
+    return SuggestionStatus::kNotHandled;
 
-  return SuggestionStatus::kNotHandled;
+  switch (event.code()) {
+    case ui::DomCode::TAB:
+      AcceptSuggestion();
+      return SuggestionStatus::kAccept;
+    default:
+      DismissSuggestion();
+      return SuggestionStatus::kDismiss;
+  }
 }
 
 bool MultiWordSuggester::Suggest(const std::u16string& text) {
@@ -65,7 +71,15 @@
 }
 
 bool MultiWordSuggester::AcceptSuggestion(size_t index) {
-  return false;
+  std::string error;
+  suggestion_handler_->AcceptSuggestion(focused_context_id_, &error);
+  if (!error.empty()) {
+    LOG(ERROR) << "suggest: failed to accept suggestion - " << error;
+    return false;
+  }
+
+  suggestion_shown_ = false;
+  return true;
 }
 
 void MultiWordSuggester::DismissSuggestion() {
diff --git a/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc b/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc
index 0f1aa80..43e3ef05 100644
--- a/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc
+++ b/chrome/browser/chromeos/input_method/multi_word_suggester_unittest.cc
@@ -76,7 +76,7 @@
   EXPECT_EQ(suggestion_handler.GetSuggestionText(), u"hello there!");
 }
 
-TEST(MultiWordSuggesterTest, ImmediatelyDismissesSuggestionOnKeyEvent) {
+TEST(MultiWordSuggesterTest, AcceptsSuggestionOnTabPress) {
   FakeSuggestionHandler suggestion_handler;
   MultiWordSuggester suggester(&suggestion_handler);
   int focused_context_id = 5;
@@ -92,7 +92,29 @@
   SendKeyEvent(&suggester, ui::DomCode::TAB);
 
   EXPECT_FALSE(suggestion_handler.GetShowingSuggestion());
+  EXPECT_FALSE(suggestion_handler.GetDismissedSuggestion());
+  EXPECT_TRUE(suggestion_handler.GetAcceptedSuggestion());
+  EXPECT_EQ(suggestion_handler.GetSuggestionText(), u"");
+}
+
+TEST(MultiWordSuggesterTest, DismissesSuggestionOnNonTabKeypress) {
+  FakeSuggestionHandler suggestion_handler;
+  MultiWordSuggester suggester(&suggestion_handler);
+  int focused_context_id = 5;
+
+  std::vector<TextSuggestion> suggestions = {
+      TextSuggestion{.mode = TextSuggestionMode::kPrediction,
+                     .type = TextSuggestionType::kMultiWord,
+                     .text = "hi there!"},
+  };
+
+  suggester.OnFocus(focused_context_id);
+  suggester.OnExternalSuggestionsUpdated(suggestions);
+  SendKeyEvent(&suggester, ui::DomCode::ARROW_DOWN);
+
+  EXPECT_FALSE(suggestion_handler.GetShowingSuggestion());
   EXPECT_TRUE(suggestion_handler.GetDismissedSuggestion());
+  EXPECT_FALSE(suggestion_handler.GetAcceptedSuggestion());
   EXPECT_EQ(suggestion_handler.GetSuggestionText(), u"");
 }
 
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
index 6ab54fa9..c762e22 100644
--- a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
+++ b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/optional.h"
 #include "chrome/browser/chromeos/platform_keys/platform_keys_service.h"
 
 #include <cert.h>
@@ -27,7 +26,9 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/optional.h"
 #include "base/single_thread_task_runner.h"
+#include "base/strings/string_piece.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
@@ -1639,7 +1640,7 @@
           net::x509_util::CryptoBufferAsStringPiece(certificate->cert_buffer()),
           &spki_bytes))
     return {};
-  return spki_bytes.as_string();
+  return std::string(spki_bytes);
 }
 
 // Extracts the public exponent out of an EVP_PKEY and verifies if it is equal
diff --git a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
index 930e71d4..fd08a1ac 100644
--- a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
+++ b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
@@ -673,6 +673,15 @@
                           settings_proto.system_proxy_settings(), policies);
     }
   }
+
+  if (policy.has_device_debug_packet_capture_allowed() &&
+      policy.device_debug_packet_capture_allowed().has_allowed()) {
+    policies->Set(
+        key::kDeviceDebugPacketCaptureAllowed, POLICY_LEVEL_MANDATORY,
+        POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
+        base::Value(policy.device_debug_packet_capture_allowed().allowed()),
+        nullptr);
+  }
 }
 
 void DecodeReportingPolicies(const em::ChromeDeviceSettingsProto& policy,
@@ -1943,15 +1952,6 @@
                   POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
                   std::move(allowlist), nullptr);
   }
-
-  if (policy.has_device_debug_packet_capture_allowed() &&
-      policy.device_debug_packet_capture_allowed().has_allowed()) {
-    policies->Set(
-        key::kDeviceDebugPacketCaptureAllowed, POLICY_LEVEL_MANDATORY,
-        POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
-        base::Value(policy.device_debug_packet_capture_allowed().allowed()),
-        nullptr);
-  }
 }
 
 }  // namespace
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc
index b4c9b6f..cb9a437 100644
--- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/test/mock_callback.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_histogram_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.h"
-#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
+#include "chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -32,34 +32,6 @@
 constexpr char kExample1Url[] = "https://www.example1.com";
 constexpr char kExample2Url[] = "https://www.example2.com";
 
-class MockDlpRulesManager : public DlpRulesManager {
- public:
-  MockDlpRulesManager() = default;
-  ~MockDlpRulesManager() override = default;
-
-  MOCK_CONST_METHOD2(IsRestricted,
-                     Level(const GURL& source, Restriction restriction));
-
-  MOCK_CONST_METHOD3(IsRestrictedDestination,
-                     Level(const GURL& source,
-                           const GURL& destination,
-                           Restriction restriction));
-
-  MOCK_CONST_METHOD3(IsRestrictedComponent,
-                     Level(const GURL& source,
-                           const Component& destination,
-                           Restriction restriction));
-
-  MOCK_CONST_METHOD3(IsRestrictedAnyOfComponents,
-                     Level(const GURL& source,
-                           const std::vector<Component>& destinations,
-                           Restriction restriction));
-
-  MOCK_CONST_METHOD0(IsReportingEnabled, bool());
-
-  MOCK_CONST_METHOD0(GetReportingManager, DlpReportingManager*());
-};
-
 class MockDlpController : public DataTransferDlpController {
  public:
   explicit MockDlpController(const DlpRulesManager& dlp_rules_manager)
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
index c6129ea..3eb31e6 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
@@ -93,16 +93,38 @@
                                                                    : level_2;
 }
 
-// Inserts a mapping between URLs conditions IDs range to `rule_id` in `map`.
-void InsertUrlsRulesMapping(
-    DlpRulesManagerImpl::UrlConditionId url_condition_id_start,
-    DlpRulesManagerImpl::UrlConditionId url_condition_id_end,
-    DlpRulesManagerImpl::RuleId rule_id,
-    std::map<DlpRulesManagerImpl::UrlConditionId, DlpRulesManagerImpl::RuleId>&
-        map) {
-  for (auto url_condition_id = url_condition_id_start;
-       url_condition_id <= url_condition_id_end; ++url_condition_id) {
-    map[url_condition_id] = rule_id;
+// Creates `urls` conditions, saves patterns strings mapping in
+// `patterns_mapping`, and saves conditions ids to rules ids mapping in `map`.
+void AddUrlConditions(url_matcher::URLMatcher* matcher,
+                      DlpRulesManagerImpl::UrlConditionId& condition_id,
+                      const base::Value* urls,
+                      url_matcher::URLMatcherConditionSet::Vector& conditions,
+                      std::map<DlpRulesManagerImpl::UrlConditionId,
+                               std::string>& patterns_mapping,
+                      DlpRulesManagerImpl::RuleId rule_id,
+                      std::map<DlpRulesManagerImpl::UrlConditionId,
+                               DlpRulesManagerImpl::RuleId>& map) {
+  DCHECK(urls);
+  std::string scheme;
+  std::string host;
+  uint16_t port = 0;
+  std::string path;
+  std::string query;
+  bool match_subdomains = true;
+  for (const auto& list_entry : urls->GetList()) {
+    std::string url = list_entry.GetString();
+    if (!url_util::FilterToComponents(url, &scheme, &host, &match_subdomains,
+                                      &port, &path, &query)) {
+      LOG(ERROR) << "Invalid pattern " << url;
+      continue;
+    }
+    auto condition_set = url_util::CreateConditionSet(
+        matcher, ++condition_id, scheme, host, match_subdomains, port, path,
+        query, /*allow=*/true);
+
+    conditions.push_back(std::move(condition_set));
+    map[condition_id] = rule_id;
+    patterns_mapping[condition_id] = url;
   }
 }
 
@@ -238,6 +260,10 @@
   dst_url_rules_mapping_.clear();
   src_url_matcher_ = std::make_unique<url_matcher::URLMatcher>();
   dst_url_matcher_ = std::make_unique<url_matcher::URLMatcher>();
+  src_pattterns_mapping_.clear();
+  dst_pattterns_mapping_.clear();
+  src_conditions_.clear();
+  dst_conditions_.clear();
 
   if (!base::FeatureList::IsEnabled(features::kDataLeakPreventionPolicy)) {
     return;
@@ -268,24 +294,18 @@
     DCHECK(sources_urls);  // This DCHECK should be removed when other types are
                            // supported as sources.
 
-    UrlConditionId prev_src_url_condition_id = src_url_condition_id;
-    url_util::AddFilters(src_url_matcher_.get(), /* allowed= */ true,
-                         &src_url_condition_id,
-                         &base::Value::AsListValue(*sources_urls));
-    InsertUrlsRulesMapping(prev_src_url_condition_id + 1, src_url_condition_id,
-                           rules_counter, src_url_rules_mapping_);
+    AddUrlConditions(src_url_matcher_.get(), src_url_condition_id, sources_urls,
+                     src_conditions_, src_pattterns_mapping_, rules_counter,
+                     src_url_rules_mapping_);
 
     const auto* destinations = rule.FindDictKey("destinations");
     const auto* destinations_urls =
         destinations ? destinations->FindListKey("urls") : nullptr;
     if (destinations_urls) {
-      UrlConditionId prev_dst_url_condition_id = dst_url_condition_id;
-      url_util::AddFilters(dst_url_matcher_.get(), /* allowed= */ true,
-                           &dst_url_condition_id,
-                           &base::Value::AsListValue(*destinations_urls));
-      InsertUrlsRulesMapping(prev_dst_url_condition_id + 1,
-                             dst_url_condition_id, rules_counter,
-                             dst_url_rules_mapping_);
+      AddUrlConditions(dst_url_matcher_.get(), dst_url_condition_id,
+                       destinations_urls, dst_conditions_,
+                       dst_pattterns_mapping_, rules_counter,
+                       dst_url_rules_mapping_);
     }
     const auto* destinations_components =
         destinations ? destinations->FindListKey("components") : nullptr;
@@ -335,6 +355,9 @@
     ++rules_counter;
   }
 
+  src_url_matcher_->AddConditionSets(src_conditions_);
+  dst_url_matcher_->AddConditionSets(dst_conditions_);
+
   if (base::Contains(restrictions_map_, Restriction::kClipboard)) {
     DataTransferDlpController::Init(*this);
   } else {
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.h b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.h
index 2141cae..7cc809f7 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.h
@@ -67,18 +67,24 @@
   // Used to track kDlpRulesList local state pref.
   PrefChangeRegistrar pref_change_registrar_;
 
-  // Used to match the URLs of the sources.
-  std::unique_ptr<url_matcher::URLMatcher> src_url_matcher_;
-
-  // Used to match the URLs of the destinations.
-  std::unique_ptr<url_matcher::URLMatcher> dst_url_matcher_;
-
   // Map from the components to their configured rules IDs.
   std::map<Component, std::set<RuleId>> components_rules_;
 
   // Map from the restrictions to their configured rules IDs and levels.
   std::map<Restriction, std::map<RuleId, Level>> restrictions_map_;
 
+  // Vector of source urls conditions.
+  url_matcher::URLMatcherConditionSet::Vector src_conditions_;
+
+  // Vector of destination urls conditions.
+  url_matcher::URLMatcherConditionSet::Vector dst_conditions_;
+
+  // Used to match the URLs of the sources.
+  std::unique_ptr<url_matcher::URLMatcher> src_url_matcher_;
+
+  // Used to match the URLs of the destinations.
+  std::unique_ptr<url_matcher::URLMatcher> dst_url_matcher_;
+
   // Map from the URL matching conditions IDs of the sources to their configured
   // rules IDs.
   std::map<UrlConditionId, RuleId> src_url_rules_mapping_;
@@ -87,6 +93,14 @@
   // configured rules IDs.
   std::map<UrlConditionId, RuleId> dst_url_rules_mapping_;
 
+  // Map from the URL matching conditions IDs of the sources to their string
+  // patterns.
+  std::map<UrlConditionId, std::string> src_pattterns_mapping_;
+
+  // Map from the URL matching conditions IDs of the destinations to their
+  // string patterns.
+  std::map<UrlConditionId, std::string> dst_pattterns_mapping_;
+
   std::unique_ptr<DlpReportingManager> reporting_manager_;
 };
 
diff --git a/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.cc b/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.cc
new file mode 100644
index 0000000..9f19eef
--- /dev/null
+++ b/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.cc
@@ -0,0 +1,13 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h"
+
+namespace policy {
+
+MockDlpRulesManager::MockDlpRulesManager() = default;
+
+MockDlpRulesManager::~MockDlpRulesManager() = default;
+
+}  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h b/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h
new file mode 100644
index 0000000..29f7ca4
--- /dev/null
+++ b/chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h
@@ -0,0 +1,43 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_MOCK_DLP_RULES_MANAGER_H_
+#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_MOCK_DLP_RULES_MANAGER_H_
+
+#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace policy {
+class MockDlpRulesManager : public DlpRulesManager {
+ public:
+  MockDlpRulesManager();
+  ~MockDlpRulesManager() override;
+
+  MOCK_CONST_METHOD2(IsRestricted,
+                     Level(const GURL& source, Restriction restriction));
+
+  MOCK_CONST_METHOD3(IsRestrictedDestination,
+                     Level(const GURL& source,
+                           const GURL& destination,
+                           Restriction restriction));
+
+  MOCK_CONST_METHOD3(IsRestrictedComponent,
+                     Level(const GURL& source,
+                           const Component& destination,
+                           Restriction restriction));
+
+  MOCK_CONST_METHOD3(IsRestrictedAnyOfComponents,
+                     Level(const GURL& source,
+                           const std::vector<Component>& destinations,
+                           Restriction restriction));
+
+  MOCK_CONST_METHOD0(IsReportingEnabled, bool());
+
+  MOCK_CONST_METHOD0(GetReportingManager, DlpReportingManager*());
+};
+
+}  // namespace policy
+
+#endif  // CHROME_BROWSER_CHROMEOS_POLICY_DLP_MOCK_DLP_RULES_MANAGER_H_
diff --git a/chrome/browser/chromeos/printing/specifics_translation.cc b/chrome/browser/chromeos/printing/specifics_translation.cc
index 77d266fb..2403cdc4 100644
--- a/chrome/browser/chromeos/printing/specifics_translation.cc
+++ b/chrome/browser/chromeos/printing/specifics_translation.cc
@@ -131,7 +131,7 @@
 }
 
 std::string MakeAndModel(base::StringPiece make, base::StringPiece model) {
-  return base::StartsWith(model, make) ? model.as_string()
+  return base::StartsWith(model, make) ? std::string(model)
                                        : base::JoinString({make, model}, " ");
 }
 
diff --git a/chrome/browser/chromeos/printing/zeroconf_printer_detector.cc b/chrome/browser/chromeos/printing/zeroconf_printer_detector.cc
index 2750993..3f66200 100644
--- a/chrome/browser/chromeos/printing/zeroconf_printer_detector.cc
+++ b/chrome/browser/chromeos/printing/zeroconf_printer_detector.cc
@@ -10,6 +10,7 @@
 #include "base/containers/contains.h"
 #include "base/hash/md5.h"
 #include "base/stl_util.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -81,24 +82,24 @@
       base::StringPiece value(m.data() + equal_pos + 1,
                               m.length() - (equal_pos + 1));
       if (key == "note") {
-        note = value.as_string();
+        note = std::string(value);
       } else if (key == "pdl") {
-        pdl = value.as_string();
+        pdl = std::string(value);
       } else if (key == "product") {
         // Strip parens; ignore anything not enclosed in parens as malformed.
         if (base::StartsWith(value, "(") && base::EndsWith(value, ")")) {
-          product = value.substr(1, value.size() - 2).as_string();
+          product = std::string(value.substr(1, value.size() - 2));
         }
       } else if (key == "rp") {
-        rp = value.as_string();
+        rp = std::string(value);
       } else if (key == "ty") {
-        ty = value.as_string();
+        ty = std::string(value);
       } else if (key == "usb_MDL") {
-        usb_MDL = value.as_string();
+        usb_MDL = std::string(value);
       } else if (key == "usb_MFG") {
-        usb_MFG = value.as_string();
+        usb_MFG = std::string(value);
       } else if (key == "UUID") {
-        UUID = value.as_string();
+        UUID = std::string(value);
       }
     }
   }
diff --git a/chrome/browser/chromeos/smb_client/smb_service.cc b/chrome/browser/chromeos/smb_client/smb_service.cc
index a0268b2..c8489576 100644
--- a/chrome/browser/chromeos/smb_client/smb_service.cc
+++ b/chrome/browser/chromeos/smb_client/smb_service.cc
@@ -83,8 +83,10 @@
   return std::make_unique<NetBiosClient>(network_context);
 }
 
+// TODO(crbug.com/1203884): Remove this method and any code conditional on it
+// being false.
 bool IsSmbFsEnabled() {
-  return base::FeatureList::IsEnabled(features::kSmbFs);
+  return true;
 }
 
 // Metric recording functions.
diff --git a/chrome/browser/chromeos/smb_client/smb_service.h b/chrome/browser/chromeos/smb_client/smb_service.h
index e4bfaa0..a55b8db 100644
--- a/chrome/browser/chromeos/smb_client/smb_service.h
+++ b/chrome/browser/chromeos/smb_client/smb_service.h
@@ -131,8 +131,6 @@
   void SuspendDone(base::TimeDelta sleep_duration) override;
 
  private:
-  friend class SmbServiceTest;
-
   using MountInternalCallback =
       base::OnceCallback<void(SmbMountResult result,
                               const base::FilePath& mount_path)>;
diff --git a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
index cce8895..9b1b3f1 100644
--- a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
+++ b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
@@ -64,8 +64,6 @@
 
 namespace {
 
-const file_system_provider::ProviderId kProviderId =
-    file_system_provider::ProviderId::CreateFromNativeId("smb");
 constexpr char kTestUser[] = "foobar";
 constexpr char kTestPassword[] = "my_secret_password";
 constexpr char kTestDomain[] = "EXAMPLE.COM";
@@ -84,25 +82,6 @@
   *out = result;
 }
 
-class MockSmbProviderClient : public chromeos::FakeSmbProviderClient {
- public:
-  MockSmbProviderClient()
-      : FakeSmbProviderClient(true /* should_run_synchronously */) {}
-
-  MOCK_METHOD(void,
-              Mount,
-              (const base::FilePath& share_path,
-               const MountOptions& options,
-               base::ScopedFD password_fd,
-               SmbProviderClient::MountCallback callback),
-              (override));
-  MOCK_METHOD(void,
-              SetupKerberos,
-              (const std::string& account_id,
-               SmbProviderClient::SetupKerberosCallback callback),
-              (override));
-};
-
 class MockSmbFsMounter : public smbfs::SmbFsMounter {
  public:
   MOCK_METHOD(void,
@@ -137,23 +116,6 @@
   mojo::Receiver<smbfs::mojom::SmbFs> receiver_;
 };
 
-// Gets a password from |password_fd|. The data has to be in the format of
-// "{password_length}{password}".
-std::string GetPassword(const base::ScopedFD& password_fd) {
-  size_t password_length = 0;
-
-  // Read sizeof(password_length) bytes from the file to get the length.
-  EXPECT_TRUE(base::ReadFromFD(password_fd.get(),
-                               reinterpret_cast<char*>(&password_length),
-                               sizeof(password_length)));
-
-  // Read the password into the buffer.
-  std::string password(password_length, 'a');
-  EXPECT_TRUE(
-      base::ReadFromFD(password_fd.get(), &password[0], password_length));
-  return password;
-}
-
 // Creates a new VolumeManager for tests.
 // By default, VolumeManager KeyedService is null for testing.
 std::unique_ptr<KeyedService> BuildVolumeManager(
@@ -169,434 +131,6 @@
 
 }  // namespace
 
-class SmbServiceTest : public testing::Test {
- protected:
-  SmbServiceTest()
-      : task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD) {
-    scoped_feature_list_.InitWithFeatures({}, {features::kSmbFs});
-
-    profile_manager_ = std::make_unique<TestingProfileManager>(
-        TestingBrowserProcess::GetGlobal());
-    EXPECT_TRUE(profile_manager_->SetUp());
-
-    std::unique_ptr<FakeChromeUserManager> user_manager_temp =
-        std::make_unique<FakeChromeUserManager>();
-
-    profile_ = profile_manager_->CreateTestingProfile("test-user@example.com");
-    user_manager_temp->AddUser(
-        AccountId::FromUserEmail(profile_->GetProfileUserName()));
-
-    ad_user_email_ = base::StrCat({kTestADUser, "@", kTestADDomain});
-    ad_profile_ = profile_manager_->CreateTestingProfile(ad_user_email_);
-    user_manager_temp->AddUserWithAffiliationAndTypeAndProfile(
-        AccountId::AdFromUserEmailObjGuid(ad_profile_->GetProfileUserName(),
-                                          kTestADGuid),
-        false, user_manager::UserType::USER_TYPE_ACTIVE_DIRECTORY, ad_profile_);
-
-    // Run pending async tasks resulting from profile construction to ensure
-    // these are complete before the test begins.
-    base::RunLoop().RunUntilIdle();
-
-    user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
-        std::move(user_manager_temp));
-
-    mock_client_ = new MockSmbProviderClient;
-    // The mock needs to be marked as leaked because ownership is passed to
-    // DBusThreadManager.
-    testing::Mock::AllowLeak(mock_client_);
-    chromeos::DBusThreadManager::GetSetterForTesting()->SetSmbProviderClient(
-        base::WrapUnique(mock_client_));
-
-    mount_options_.display_name = kDisplayName;
-  }
-
-  ~SmbServiceTest() override {}
-
-  void CreateFspRegistry(TestingProfile* profile) {
-    // Create FSP service.
-    registry_ = new file_system_provider::FakeRegistry;
-    file_system_provider::Service::Get(profile)->SetRegistryForTesting(
-        base::WrapUnique(registry_));
-  }
-
-  void CreateService(TestingProfile* profile) {
-    SmbService::DisableShareDiscoveryForTesting();
-
-    // Create smb service.
-    smb_service_ = std::make_unique<SmbService>(
-        profile, std::make_unique<base::SimpleTestTickClock>());
-  }
-
-  void ExpectInvalidUrl(const std::string& url) {
-    SmbMountResult result = SmbMountResult::kSuccess;
-    smb_service_->Mount({} /* options */, base::FilePath(url),
-                        "" /* username */, "" /* password */,
-                        false /* use_chromad_kerberos */,
-                        false /* should_open_file_manager_after_mount */,
-                        false /* save_credentials */,
-                        base::BindOnce(&SaveMountResult, &result));
-    EXPECT_EQ(result, SmbMountResult::kInvalidUrl);
-  }
-
-  void ExpectInvalidSsoUrl(const std::string& url) {
-    SmbMountResult result = SmbMountResult::kSuccess;
-    smb_service_->Mount({} /* options */, base::FilePath(url),
-                        "" /* username */, "" /* password */,
-                        true /* use_chromad_kerberos */,
-                        false /* should_open_file_manager_after_mount */,
-                        false /* save_credentials */,
-                        base::BindOnce(&SaveMountResult, &result));
-    EXPECT_EQ(result, SmbMountResult::kInvalidSsoUrl);
-  }
-
-  void WaitForSetupComplete() {
-    {
-      base::RunLoop run_loop;
-      smb_service_->OnSetupCompleteForTesting(run_loop.QuitClosure());
-      run_loop.Run();
-    }
-    {
-      // Share gathering needs to complete at least once before a share can be
-      // mounted.
-      base::RunLoop run_loop;
-      smb_service_->GatherSharesInNetwork(
-          base::DoNothing(),
-          base::BindLambdaForTesting(
-              [&run_loop](const std::vector<SmbUrl>& shares_gathered,
-                          bool done) {
-                if (done) {
-                  run_loop.Quit();
-                }
-              }));
-      run_loop.Run();
-    }
-  }
-
-  content::BrowserTaskEnvironment
-      task_environment_;  // Included so tests magically don't crash.
-  base::test::ScopedFeatureList scoped_feature_list_;
-  TestingProfile* profile_ = nullptr;     // Not owned.
-  std::string ad_user_email_;
-  TestingProfile* ad_profile_ = nullptr;  // Not owned.
-  std::unique_ptr<TestingProfileManager> profile_manager_;
-  std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
-  MockSmbProviderClient* mock_client_;  // Owned by DBusThreadManager.
-  std::unique_ptr<SmbService> smb_service_;
-
-  // Owned by file_system_provider::Service.
-  file_system_provider::FakeRegistry* registry_;
-
-  chromeos::file_system_provider::MountOptions mount_options_;
-};
-
-TEST_F(SmbServiceTest, InvalidUrls) {
-  CreateService(profile_);
-
-  ExpectInvalidUrl("");
-  ExpectInvalidUrl("foo");
-  ExpectInvalidUrl("\\foo");
-  ExpectInvalidUrl("\\\\foo");
-  ExpectInvalidUrl("\\\\foo\\");
-  ExpectInvalidUrl("file://foo/bar");
-  ExpectInvalidUrl("smb://foo");
-  ExpectInvalidUrl("smb://user@password:foo");
-  ExpectInvalidUrl("smb:\\\\foo\\bar");
-  ExpectInvalidUrl("//foo/bar");
-}
-
-TEST_F(SmbServiceTest, InvalidSsoUrls) {
-  CreateService(profile_);
-
-  ExpectInvalidSsoUrl("\\\\192.168.1.1\\foo");
-  ExpectInvalidSsoUrl("\\\\[0:0:0:0:0:0:0:1]\\foo");
-  ExpectInvalidSsoUrl("\\\\[::1]\\foo");
-  ExpectInvalidSsoUrl("smb://192.168.1.1/foo");
-  ExpectInvalidSsoUrl("smb://[0:0:0:0:0:0:0:1]/foo");
-  ExpectInvalidSsoUrl("smb://[::1]/foo");
-}
-
-TEST_F(SmbServiceTest, Mount) {
-  CreateFspRegistry(profile_);
-  CreateService(profile_);
-  WaitForSetupComplete();
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(
-          base::FilePath(kShareUrl),
-          AllOf(Field(&SmbProviderClient::MountOptions::username, kTestUser),
-                Field(&SmbProviderClient::MountOptions::workgroup, ""),
-                Field(&SmbProviderClient::MountOptions::ntlm_enabled, true),
-                Field(&SmbProviderClient::MountOptions::skip_connect, false),
-                Field(&SmbProviderClient::MountOptions::save_password, false)),
-          _, _))
-      .WillOnce(
-          WithArgs<2, 3>(Invoke([](base::ScopedFD password_fd,
-                                   SmbProviderClient::MountCallback callback) {
-            EXPECT_EQ(kTestPassword, GetPassword(password_fd));
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-          })));
-
-  smb_service_->Mount(
-      mount_options_, base::FilePath(kSharePath), kTestUser, kTestPassword,
-      false /* use_chromad_kerberos */,
-      false /* should_open_file_manager_after_mount */,
-      false /* save_credentials */,
-      base::BindLambdaForTesting([&run_loop](SmbMountResult result) {
-        EXPECT_EQ(SmbMountResult::kSuccess, result);
-        run_loop.Quit();
-      }));
-  run_loop.Run();
-
-  // If |save_credentials| is false, then the username should not be saved in
-  // the file system id.
-  const std::string file_system_id =
-      registry_->file_system_info()->file_system_id();
-  EXPECT_FALSE(IsKerberosChromadFileSystemId(file_system_id));
-  EXPECT_FALSE(GetUserFromFileSystemId(file_system_id));
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, MountSaveCredentials) {
-  CreateFspRegistry(profile_);
-  CreateService(profile_);
-  WaitForSetupComplete();
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(
-          base::FilePath(kShareUrl),
-          AllOf(Field(&SmbProviderClient::MountOptions::username, kTestUser),
-                Field(&SmbProviderClient::MountOptions::workgroup, ""),
-                Field(&SmbProviderClient::MountOptions::ntlm_enabled, true),
-                Field(&SmbProviderClient::MountOptions::skip_connect, false),
-                Field(&SmbProviderClient::MountOptions::save_password, true),
-                Field(&SmbProviderClient::MountOptions::account_hash, Ne(""))),
-          _, _))
-      .WillOnce(
-          WithArgs<2, 3>(Invoke([](base::ScopedFD password_fd,
-                                   SmbProviderClient::MountCallback callback) {
-            EXPECT_EQ(kTestPassword, GetPassword(password_fd));
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-          })));
-
-  smb_service_->Mount(
-      mount_options_, base::FilePath(kSharePath), kTestUser, kTestPassword,
-      false /* use_chromad_kerberos */,
-      false /* should_open_file_manager_after_mount */,
-      true /* save_credentials */,
-      base::BindLambdaForTesting([&run_loop](SmbMountResult result) {
-        EXPECT_EQ(SmbMountResult::kSuccess, result);
-        run_loop.Quit();
-      }));
-  run_loop.Run();
-
-  const std::string file_system_id =
-      registry_->file_system_info()->file_system_id();
-  EXPECT_FALSE(IsKerberosChromadFileSystemId(file_system_id));
-  base::Optional<std::string> saved_user =
-      GetUserFromFileSystemId(file_system_id);
-  ASSERT_TRUE(saved_user);
-  EXPECT_EQ(*saved_user, kTestUser);
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, Remount) {
-  file_system_provider::MountOptions mount_options(
-      CreateFileSystemId(base::FilePath(kSharePath),
-                         false /* is_kerberos_chromad */),
-      "Foo");
-  ProvidedFileSystemInfo file_system_info(
-      kProviderId, mount_options, base::FilePath(kSharePath),
-      false /* configurable */, false /* watchable */,
-      extensions::SOURCE_NETWORK, chromeos::file_system_provider::IconSet());
-  CreateFspRegistry(profile_);
-  registry_->RememberFileSystem(file_system_info, {});
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(base::FilePath(kShareUrl),
-            AllOf(Field(&SmbProviderClient::MountOptions::skip_connect, true),
-                  Field(&SmbProviderClient::MountOptions::restore_password,
-                        false)),
-            _, _))
-      .WillOnce(WithArgs<2, 3>(
-          Invoke([&run_loop](base::ScopedFD password_fd,
-                             SmbProviderClient::MountCallback callback) {
-            // Should have a valid password_fd containing an empty password.
-            EXPECT_EQ("", GetPassword(password_fd));
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-            run_loop.Quit();
-          })));
-
-  CreateService(profile_);
-  run_loop.Run();
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, Remount_ActiveDirectory) {
-  file_system_provider::MountOptions mount_options(
-      CreateFileSystemId(base::FilePath(kSharePath),
-                         true /* is_kerberos_chromad */),
-      "Foo");
-  ProvidedFileSystemInfo file_system_info(
-      kProviderId, mount_options, base::FilePath(kSharePath),
-      false /* configurable */, false /* watchable */,
-      extensions::SOURCE_NETWORK, chromeos::file_system_provider::IconSet());
-  CreateFspRegistry(ad_profile_);
-  registry_->RememberFileSystem(file_system_info, {});
-
-  base::RunLoop run_loop;
-
-  EXPECT_CALL(*mock_client_, SetupKerberos(kTestADGuid, _))
-      .WillOnce(WithArg<1>(
-          Invoke([](SmbProviderClient::SetupKerberosCallback callback) {
-            base::ThreadTaskRunnerHandle::Get()->PostTask(
-                FROM_HERE, base::BindOnce(std::move(callback), true));
-          })));
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(
-          base::FilePath(kShareUrl),
-          AllOf(
-              Field(&SmbProviderClient::MountOptions::username, kTestADUser),
-              Field(&SmbProviderClient::MountOptions::workgroup,
-                    base::ToUpperASCII(kTestADDomain)),
-              Field(&SmbProviderClient::MountOptions::skip_connect, true),
-              Field(&SmbProviderClient::MountOptions::restore_password, false)),
-          _, _))
-      .WillOnce(WithArg<3>(
-          Invoke([&run_loop](SmbProviderClient::MountCallback callback) {
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-            run_loop.Quit();
-          })));
-
-  CreateService(ad_profile_);
-  run_loop.Run();
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, Remount_SavedUser) {
-  file_system_provider::MountOptions mount_options(
-      CreateFileSystemIdForUser(base::FilePath(kSharePath),
-                                base::StrCat({kTestUser, "@", kTestDomain})),
-      "Foo");
-  ProvidedFileSystemInfo file_system_info(
-      kProviderId, mount_options, base::FilePath(kSharePath),
-      false /* configurable */, false /* watchable */,
-      extensions::SOURCE_NETWORK, chromeos::file_system_provider::IconSet());
-  CreateFspRegistry(profile_);
-  registry_->RememberFileSystem(file_system_info, {});
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(
-          base::FilePath(kShareUrl),
-          AllOf(Field(&SmbProviderClient::MountOptions::username, kTestUser),
-                Field(&SmbProviderClient::MountOptions::workgroup, kTestDomain),
-                Field(&SmbProviderClient::MountOptions::skip_connect, true),
-                Field(&SmbProviderClient::MountOptions::restore_password, true),
-                Field(&SmbProviderClient::MountOptions::account_hash, Ne(""))),
-          _, _))
-      .WillOnce(WithArg<3>(
-          Invoke([&run_loop](SmbProviderClient::MountCallback callback) {
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-            run_loop.Quit();
-          })));
-
-  CreateService(profile_);
-  run_loop.Run();
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, Remount_SavedInvalidUser) {
-  file_system_provider::MountOptions mount_options(
-      CreateFileSystemIdForUser(
-          base::FilePath(kSharePath),
-          base::StrCat({kTestUser, "@", kTestDomain, "@", kTestDomain})),
-      "Foo");
-  ProvidedFileSystemInfo file_system_info(
-      kProviderId, mount_options, base::FilePath(kSharePath),
-      false /* configurable */, false /* watchable */,
-      extensions::SOURCE_NETWORK, chromeos::file_system_provider::IconSet());
-  CreateFspRegistry(profile_);
-  registry_->RememberFileSystem(file_system_info, {});
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(base::FilePath(kShareUrl),
-            AllOf(Field(&SmbProviderClient::MountOptions::username, ""),
-                  Field(&SmbProviderClient::MountOptions::workgroup, ""),
-                  Field(&SmbProviderClient::MountOptions::skip_connect, true),
-                  Field(&SmbProviderClient::MountOptions::restore_password,
-                        false)),
-            _, _))
-      .WillOnce(WithArg<3>(
-          Invoke([&run_loop](SmbProviderClient::MountCallback callback) {
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-            run_loop.Quit();
-          })));
-
-  CreateService(profile_);
-  run_loop.Run();
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
-TEST_F(SmbServiceTest, Premount) {
-  const char kPremountPath[] = "smb://server/foobar";
-  const char kPreconfiguredShares[] =
-      "[{\"mode\":\"pre_mount\",\"share_url\":\"\\\\\\\\server\\\\foobar\"}]";
-  auto parsed_shares = base::JSONReader::Read(kPreconfiguredShares);
-  ASSERT_TRUE(parsed_shares);
-  profile_->GetPrefs()->Set(prefs::kNetworkFileSharesPreconfiguredShares,
-                            *parsed_shares);
-
-  base::RunLoop run_loop;
-  EXPECT_CALL(
-      *mock_client_,
-      Mount(base::FilePath(kPremountPath),
-            AllOf(Field(&SmbProviderClient::MountOptions::username, ""),
-                  Field(&SmbProviderClient::MountOptions::workgroup, ""),
-                  Field(&SmbProviderClient::MountOptions::skip_connect, true)),
-            _, _))
-      .WillOnce(WithArg<3>(
-          Invoke([&run_loop](SmbProviderClient::MountCallback callback) {
-            std::move(callback).Run(smbprovider::ErrorType::ERROR_OK, 7);
-            run_loop.Quit();
-          })));
-
-  CreateFspRegistry(profile_);
-  CreateService(profile_);
-  run_loop.Run();
-
-  // Because the mock is potentially leaked, expectations needs to be manually
-  // verified.
-  EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(mock_client_));
-}
-
 class SmbServiceWithSmbfsTest : public testing::Test {
  protected:
   // Mojo endpoints owned by the smbfs instance.
@@ -610,8 +144,6 @@
   };
 
   SmbServiceWithSmbfsTest() {
-    scoped_feature_list_.InitWithFeatures({features::kSmbFs}, {});
-
     profile_manager_ = std::make_unique<TestingProfileManager>(
         TestingBrowserProcess::GetGlobal());
     EXPECT_TRUE(profile_manager_->SetUp());
@@ -660,6 +192,28 @@
         profile, std::make_unique<base::SimpleTestTickClock>());
   }
 
+  void ExpectInvalidUrl(const std::string& url) {
+    SmbMountResult result = SmbMountResult::kSuccess;
+    smb_service_->Mount({} /* options */, base::FilePath(url),
+                        "" /* username */, "" /* password */,
+                        false /* use_chromad_kerberos */,
+                        false /* should_open_file_manager_after_mount */,
+                        false /* save_credentials */,
+                        base::BindOnce(&SaveMountResult, &result));
+    EXPECT_EQ(result, SmbMountResult::kInvalidUrl);
+  }
+
+  void ExpectInvalidSsoUrl(const std::string& url) {
+    SmbMountResult result = SmbMountResult::kSuccess;
+    smb_service_->Mount({} /* options */, base::FilePath(url),
+                        "" /* username */, "" /* password */,
+                        true /* use_chromad_kerberos */,
+                        false /* should_open_file_manager_after_mount */,
+                        false /* save_credentials */,
+                        base::BindOnce(&SaveMountResult, &result));
+    EXPECT_EQ(result, SmbMountResult::kInvalidSsoUrl);
+  }
+
   void WaitForSetupComplete() {
     {
       base::RunLoop run_loop;
@@ -761,6 +315,32 @@
   chromeos::file_system_provider::MountOptions mount_options_;
 };
 
+TEST_F(SmbServiceWithSmbfsTest, InvalidUrls) {
+  CreateService(profile_);
+
+  ExpectInvalidUrl("");
+  ExpectInvalidUrl("foo");
+  ExpectInvalidUrl("\\foo");
+  ExpectInvalidUrl("\\\\foo");
+  ExpectInvalidUrl("\\\\foo\\");
+  ExpectInvalidUrl("file://foo/bar");
+  ExpectInvalidUrl("smb://foo");
+  ExpectInvalidUrl("smb://user@password:foo");
+  ExpectInvalidUrl("smb:\\\\foo\\bar");
+  ExpectInvalidUrl("//foo/bar");
+}
+
+TEST_F(SmbServiceWithSmbfsTest, InvalidSsoUrls) {
+  CreateService(profile_);
+
+  ExpectInvalidSsoUrl("\\\\192.168.1.1\\foo");
+  ExpectInvalidSsoUrl("\\\\[0:0:0:0:0:0:0:1]\\foo");
+  ExpectInvalidSsoUrl("\\\\[::1]\\foo");
+  ExpectInvalidSsoUrl("smb://192.168.1.1/foo");
+  ExpectInvalidSsoUrl("smb://[0:0:0:0:0:0:0:1]/foo");
+  ExpectInvalidSsoUrl("smb://[::1]/foo");
+}
+
 TEST_F(SmbServiceWithSmbfsTest, Mount) {
   CreateService(profile_);
   WaitForSetupComplete();
diff --git a/chrome/browser/chromeos/smb_client/smb_url.cc b/chrome/browser/chromeos/smb_client/smb_url.cc
index 99a08b84..743a59d 100644
--- a/chrome/browser/chromeos/smb_client/smb_url.cc
+++ b/chrome/browser/chromeos/smb_client/smb_url.cc
@@ -167,7 +167,7 @@
         path_str, "/", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
     if (split_path.size() >= 2) {
       DCHECK_EQ(split_path[0], "");
-      share_ = split_path[1].as_string();
+      share_ = std::string(split_path[1]);
     }
   }
 
diff --git a/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc b/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc
index 7aafa1e5..a945481 100644
--- a/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc
+++ b/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc
@@ -27,9 +27,9 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/cros_disks_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_vm_plugin_dispatcher_client.h"
 #include "chromeos/disks/disk.h"
diff --git a/chrome/browser/component_updater/component_updater_prefs.cc b/chrome/browser/component_updater/component_updater_prefs.cc
index e22295b..cd81a4f8 100644
--- a/chrome/browser/component_updater/component_updater_prefs.cc
+++ b/chrome/browser/component_updater/component_updater_prefs.cc
@@ -18,12 +18,6 @@
 void RegisterPrefs(PrefRegistrySimple* registry) {
   RegisterPrefsForChromeComponentUpdaterConfigurator(registry);
   RegisterPrefsForRecoveryComponent(registry);
-
-#if !defined(OS_ANDROID)
-  // TODO(crbug.com/1055150): Move this to SodaInstaller.
-  RegisterPrefsForSodaComponent(registry);
-#endif
-
   AutofillStatesComponentInstallerPolicy::RegisterPrefs(registry);
 }
 
diff --git a/chrome/browser/component_updater/soda_component_installer.cc b/chrome/browser/component_updater/soda_component_installer.cc
index e9c55f5c..8c583457 100644
--- a/chrome/browser/component_updater/soda_component_installer.cc
+++ b/chrome/browser/component_updater/soda_component_installer.cc
@@ -213,17 +213,6 @@
 #endif
 }
 
-void RegisterPrefsForSodaComponent(PrefRegistrySimple* registry) {
-  registry->RegisterTimePref(prefs::kSodaScheduledDeletionTime, base::Time());
-  registry->RegisterFilePathPref(prefs::kSodaBinaryPath, base::FilePath());
-
-  // Register language pack config path preferences.
-  for (const speech::SodaLanguagePackComponentConfig& config :
-       speech::kLanguageComponentConfigs) {
-    registry->RegisterFilePathPref(config.config_path_pref, base::FilePath());
-  }
-}
-
 void RegisterSodaComponent(ComponentUpdateService* cus,
                            PrefService* global_prefs,
                            base::OnceClosure on_ready_callback,
diff --git a/chrome/browser/component_updater/soda_component_installer.h b/chrome/browser/component_updater/soda_component_installer.h
index 5cea7d9..8ca3018 100644
--- a/chrome/browser/component_updater/soda_component_installer.h
+++ b/chrome/browser/component_updater/soda_component_installer.h
@@ -61,10 +61,6 @@
   OnSodaComponentReadyCallback on_ready_callback_;
 };
 
-// Registers user preferences related to the Speech On-Device API (SODA)
-// component.
-void RegisterPrefsForSodaComponent(PrefRegistrySimple* registry);
-
 // Call once during startup to make the component update service aware of
 // the File Type Policies component. Should only be called by SodaInstaller.
 void RegisterSodaComponent(ComponentUpdateService* cus,
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer.cc b/chrome/browser/component_updater/subresource_filter_component_installer.cc
index 8cc36d6..5b5511a46 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer.cc
+++ b/chrome/browser/component_updater/subresource_filter_component_installer.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
+#include "base/strings/string_piece.h"
 #include "base/version.h"
 #include "chrome/browser/browser_process.h"
 #include "components/component_updater/component_updater_paths.h"
@@ -114,10 +115,9 @@
 
 // static
 std::string SubresourceFilterComponentInstallerPolicy::GetInstallerTag() {
-  const std::string ruleset_flavor =
+  const std::string ruleset_flavor(
       subresource_filter::GetEnabledConfigurations()
-          ->lexicographically_greatest_ruleset_flavor()
-          .as_string();
+          ->lexicographically_greatest_ruleset_flavor());
 
   // Allow the empty, and 4 non-empty ruleset flavor identifiers: a, b, c, d.
   if (ruleset_flavor.empty())
diff --git a/chrome/browser/devtools/device/adb/adb_device_provider.cc b/chrome/browser/devtools/device/adb/adb_device_provider.cc
index 5488234..690e577 100644
--- a/chrome/browser/devtools/device/adb/adb_device_provider.cc
+++ b/chrome/browser/devtools/device/adb/adb_device_provider.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/devtools/device/adb/adb_device_provider.h"
 
 #include "base/bind.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/devtools/device/adb/adb_client_socket.h"
@@ -39,7 +40,7 @@
     std::vector<base::StringPiece> tokens =
         base::SplitStringPiece(line, "\t ", base::KEEP_WHITESPACE,
                                base::SPLIT_WANT_NONEMPTY);
-    result.push_back(tokens[0].as_string());
+    result.push_back(std::string(tokens[0]));
   }
   std::move(callback).Run(std::move(result));
 }
diff --git a/chrome/browser/devtools/device/android_device_info_query.cc b/chrome/browser/devtools/device/android_device_info_query.cc
index 9b6f190..75e0a5a9 100644
--- a/chrome/browser/devtools/device/android_device_info_query.cc
+++ b/chrome/browser/devtools/device/android_device_info_query.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -230,9 +231,9 @@
       size_t first_pos = fields.find_first_of(":");
       size_t last_pos = fields.find_last_of(":");
       if (first_pos != std::string::npos && last_pos != std::string::npos) {
-        std::string id = fields.substr(0, first_pos).as_string();
-        std::string name = fields.substr(first_pos + 1,
-                                         last_pos - first_pos - 1).as_string();
+        std::string id(fields.substr(0, first_pos));
+        std::string name(
+            fields.substr(first_pos + 1, last_pos - first_pos - 1));
         id_to_username[id] = name;
       }
     }
diff --git a/chrome/browser/enterprise/signals/device_info_fetcher_linux.cc b/chrome/browser/enterprise/signals/device_info_fetcher_linux.cc
index 743ad2e1..1aa56fc 100644
--- a/chrome/browser/enterprise/signals/device_info_fetcher_linux.cc
+++ b/chrome/browser/enterprise/signals/device_info_fetcher_linux.cc
@@ -17,6 +17,7 @@
 #include "base/files/file.h"
 #include "base/files/file_util.h"
 #include "base/nix/xdg_util.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -44,8 +45,8 @@
       return v.first == "VERSION_ID";
     });
     if (version_id != values.end()) {
-      return base::TrimString(version_id->second, "\"", base::TRIM_ALL)
-          .as_string();
+      return std::string(
+          base::TrimString(version_id->second, "\"", base::TRIM_ALL));
     }
   }
   return base::SysInfo::OperatingSystemVersion();
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index 65e8eb1..74dcb19 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/lazy_instance.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -319,7 +320,7 @@
         shortcut, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
     CHECK(tokens.size() >= 2);
 
-    return Command(command_name, std::u16string(), tokens[1].as_string(),
+    return Command(command_name, std::u16string(), std::string(tokens[1]),
                    global);
   }
 
diff --git a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc
index 4246f31..82fa40c9 100644
--- a/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc
+++ b/chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.cc
@@ -5,8 +5,8 @@
 #include "chrome/browser/extensions/api/declarative_content/chrome_content_rules_registry.h"
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
index c2cd0f9..3a8b4c4 100644
--- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
+++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
@@ -14,6 +14,7 @@
 
 #include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
+#include "base/feature_list.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -66,6 +67,9 @@
 using chromeos::input_method::InputMethodManager;
 using chromeos::input_method::InputMethodUtil;
 
+// Number of IMEs that are needed to automatically enable the IME menu option.
+const size_t NUM_IMES_TO_AUTO_ENABLE_IME_MENU = 2;
+
 // Returns the set of IDs of all enabled IMEs.
 std::unordered_set<std::string> GetEnabledIMEs(
     scoped_refptr<InputMethodManager::State> ime_state) {
@@ -850,6 +854,26 @@
 
   std::string input_methods = base::JoinString(input_method_list, ",");
   prefs->SetString(pref_name, input_methods);
+
+  // In LSV2 Update 2, we want to automatically enable "Show input options in
+  // shelf" when the user has multiple input methods.
+  // We don't want to repeatedly enable it every time the user adds an input
+  // method, as a user may want to intentionally turn it off - so we only enable
+  // it once the user reaches two input methods.
+  if (base::FeatureList::IsEnabled(ash::features::kLanguageSettingsUpdate2)) {
+    // As pref_name and input_method_set only refer to the preference related to
+    // the list of IMEs for which this newly-added IME is in, we need the other
+    // IME list to calculate the total number of IMEs.
+    const char* other_ime_list_pref_name = is_component_extension_ime
+                                               ? prefs::kLanguageEnabledImes
+                                               : prefs::kLanguagePreloadEngines;
+    std::unordered_set<std::string> other_input_method_set(
+        GetIMEsFromPref(prefs, other_ime_list_pref_name));
+    if (input_method_set.size() + other_input_method_set.size() ==
+        NUM_IMES_TO_AUTO_ENABLE_IME_MENU) {
+      prefs->SetBoolean(prefs::kLanguageImeMenuActivated, true);
+    }
+  }
 #endif
   return RespondNow(NoArguments());
 }
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
index 4d88955..c2b008c 100644
--- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
@@ -25,12 +25,14 @@
 #include "chrome/test/base/testing_profile.h"
 #include "components/crx_file/id_util.h"
 #include "components/language/core/browser/pref_names.h"
+#include "components/prefs/pref_member.h"
 #include "components/spellcheck/common/spellcheck_features.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "extensions/browser/event_router_factory.h"
 #include "extensions/browser/extension_prefs.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "ash/constants/ash_features.h"
 #include "ui/base/ime/chromeos/component_extension_ime_manager.h"
 #include "ui/base/ime/chromeos/extension_ime_util.h"
 #include "ui/base/ime/chromeos/fake_input_method_delegate.h"
@@ -113,6 +115,9 @@
     // Force Windows hybrid spellcheck to be enabled.
     feature_list_.InitAndEnableFeature(spellcheck::kWinUseBrowserSpellChecker);
 #endif  // defined(OS_WIN)
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    feature_list_.InitAndEnableFeature(ash::features::kLanguageSettingsUpdate2);
+#endif
   }
 
 #if defined(OS_WIN)
@@ -567,8 +572,12 @@
   enabled_imes.Init(prefs::kLanguageEnabledImes, profile()->GetPrefs());
   StringPrefMember preload_engines;
   preload_engines.Init(prefs::kLanguagePreloadEngines, profile()->GetPrefs());
+  BooleanPrefMember language_menu_enabled;
+  language_menu_enabled.Init(prefs::kLanguageImeMenuActivated,
+                             profile()->GetPrefs());
   enabled_imes.SetValue(std::string());
   preload_engines.SetValue(std::string());
+  language_menu_enabled.SetValue(false);
 
   {
     // Add an extension IME. kLanguageEnabledImes should be updated.
@@ -579,10 +588,12 @@
 
     EXPECT_EQ(GetExtensionImeId(), enabled_imes.GetValue());
     EXPECT_TRUE(preload_engines.GetValue().empty());
+    EXPECT_FALSE(language_menu_enabled.GetValue());
   }
 
   enabled_imes.SetValue(std::string());
   preload_engines.SetValue(std::string());
+  language_menu_enabled.SetValue(false);
   {
     // Add a component extension IME. kLanguagePreloadEngines should be
     // updated.
@@ -594,10 +605,12 @@
 
     EXPECT_TRUE(enabled_imes.GetValue().empty());
     EXPECT_EQ(GetComponentExtensionImeId(), preload_engines.GetValue());
+    EXPECT_FALSE(language_menu_enabled.GetValue());
   }
 
   enabled_imes.SetValue(std::string());
   preload_engines.SetValue(std::string());
+  language_menu_enabled.SetValue(false);
   {
     // Add an ARC IME. kLanguageEnabledImes should be updated.
     auto function =
@@ -607,6 +620,28 @@
 
     EXPECT_EQ(GetArcImeId(), enabled_imes.GetValue());
     EXPECT_TRUE(preload_engines.GetValue().empty());
+    EXPECT_FALSE(language_menu_enabled.GetValue());
+  }
+
+  enabled_imes.SetValue(std::string());
+  preload_engines.SetValue(std::string());
+  language_menu_enabled.SetValue(false);
+  {
+    // Add an extension IME and a component extension IME. Both should be
+    // updated, and the language menu should be enabled.
+    auto function =
+        base::MakeRefCounted<LanguageSettingsPrivateAddInputMethodFunction>();
+    api_test_utils::RunFunctionAndReturnSingleResult(
+        function.get(), "[\"" + GetExtensionImeId() + "\"]", profile());
+    function =
+        base::MakeRefCounted<LanguageSettingsPrivateAddInputMethodFunction>();
+    api_test_utils::RunFunctionAndReturnSingleResult(
+        function.get(), "[\"" + GetComponentExtensionImeId() + "\"]",
+        profile());
+
+    EXPECT_EQ(GetExtensionImeId(), enabled_imes.GetValue());
+    EXPECT_EQ(GetComponentExtensionImeId(), preload_engines.GetValue());
+    EXPECT_TRUE(language_menu_enabled.GetValue());
   }
 
   TestInputMethodManager::Shutdown();
diff --git a/chrome/browser/extensions/api/notifications/extension_notification_handler.cc b/chrome/browser/extensions/api/notifications/extension_notification_handler.cc
index f4f4142..64458ee 100644
--- a/chrome/browser/extensions/api/notifications/extension_notification_handler.cc
+++ b/chrome/browser/extensions/api/notifications/extension_notification_handler.cc
@@ -52,7 +52,7 @@
 std::string ExtensionNotificationHandler::GetExtensionId(const GURL& url) {
   if (!url.is_valid() || !url.SchemeIs(extensions::kExtensionScheme))
     return "";
-  return url.GetOrigin().host_piece().as_string();
+  return std::string(url.GetOrigin().host_piece());
 }
 
 void ExtensionNotificationHandler::OnClose(
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc
index 038f10cc..f99897e0 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc
@@ -14,6 +14,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/path_service.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/unpacked_installer.h"
@@ -243,7 +244,7 @@
     base::StringPiece event_name,
     trace_analyzer::TraceEventVector* events) {
   const trace_analyzer::Query kQuery =
-      trace_analyzer::Query::EventNameIs(event_name.as_string()) &&
+      trace_analyzer::Query::EventNameIs(std::string(event_name)) &&
       (trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_BEGIN) ||
        trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_BEGIN) ||
        trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_FLOW_BEGIN) ||
diff --git a/chrome/browser/extensions/extension_user_script_loader_unittest.cc b/chrome/browser/extensions/extension_user_script_loader_unittest.cc
index 07caeef..b599e82 100644
--- a/chrome/browser/extensions/extension_user_script_loader_unittest.cc
+++ b/chrome/browser/extensions/extension_user_script_loader_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/optional.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/test/bind.h"
 #include "base/test/values_test_util.h"
@@ -287,7 +288,7 @@
   user_scripts = loader.LoadScriptsForTest(std::move(user_scripts));
 
   EXPECT_EQ(content.substr(3),
-            (*user_scripts)[0]->js_scripts()[0]->GetContent().as_string());
+            std::string((*user_scripts)[0]->js_scripts()[0]->GetContent()));
 }
 
 TEST_F(ExtensionUserScriptLoaderTest, LeaveBOMNotAtTheBeginning) {
@@ -311,7 +312,7 @@
   user_scripts = loader.LoadScriptsForTest(std::move(user_scripts));
 
   EXPECT_EQ(content,
-            (*user_scripts)[0]->js_scripts()[0]->GetContent().as_string());
+            std::string((*user_scripts)[0]->js_scripts()[0]->GetContent()));
 }
 
 TEST_F(ExtensionUserScriptLoaderTest, ComponentExtensionContentScriptIsLoaded) {
diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
index 5b932100..ca7e90b 100644
--- a/chrome/browser/extensions/external_provider_impl.cc
+++ b/chrome/browser/extensions/external_provider_impl.cc
@@ -370,8 +370,8 @@
         extension->FindStringPath(kWebAppMigrationFlag);
     bool is_migrating_to_web_app =
         web_app_migration_flag &&
-        web_app::IsPreinstalledAppInstallFeatureEnabled(
-            *web_app_migration_flag);
+        web_app::IsPreinstalledAppInstallFeatureEnabled(*web_app_migration_flag,
+                                                        *profile_);
     bool keep_if_present =
         extension->FindBoolPath(kKeepIfPresent).value_or(false);
     if (keep_if_present || is_migrating_to_web_app) {
diff --git a/chrome/browser/extensions/policy_handlers.cc b/chrome/browser/extensions/policy_handlers.cc
index 969497a..16bbac069 100644
--- a/chrome/browser/extensions/policy_handlers.cc
+++ b/chrome/browser/extensions/policy_handlers.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/notreached.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "build/build_config.h"
@@ -42,7 +43,7 @@
   if (ids.size() == 0)
     return false;
   for (const auto& id : ids) {
-    if (!crx_file::id_util::IdIsValid(id.as_string()))
+    if (!crx_file::id_util::IdIsValid(std::string(id)))
       return false;
   }
   return true;
diff --git a/chrome/browser/extensions/preinstalled_apps.cc b/chrome/browser/extensions/preinstalled_apps.cc
index 4e03dc8f..3294fe5 100644
--- a/chrome/browser/extensions/preinstalled_apps.cc
+++ b/chrome/browser/extensions/preinstalled_apps.cc
@@ -188,7 +188,8 @@
           pref.FindStringPath(kWebAppMigrationFlag);
       if (!web_app_flag)
         return false;  // Isn't migrating.
-      if (web_app::IsPreinstalledAppInstallFeatureEnabled(*web_app_flag)) {
+      if (web_app::IsPreinstalledAppInstallFeatureEnabled(*web_app_flag,
+                                                          *profile)) {
         // The feature is still enabled; it's responsible for the behavior.
         return false;
       }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index e45f162..f9d3bd23 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3387,6 +3387,11 @@
     "expiry_milestone": 130
   },
   {
+    "name": "launcher-query-highlighting",
+    "owners": ["wrong", "tby", "thanhdng"],
+    "expiry_milestone": 95
+  },
+  {
     "name": "launcher-search-normalization",
     "owners": ["adafang", "wrong", "tby"],
     "expiry_milestone": 92
@@ -4869,11 +4874,6 @@
     "expiry_milestone": 93
   },
   {
-    "name": "smbfs-file-shares",
-    "owners": [ "simmonsjosh@google.com", "dats" ],
-    "expiry_milestone": 90
-  },
-  {
     "name": "smooth-scrolling",
     "owners": [ "bokan", "input-dev" ],
     // This needs to continue to be extended until the UI contains a proper
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 40440572..087ef56 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -4637,6 +4637,11 @@
     "first restart can take some time to setup lacros-chrome. Please DO NOT "
     "attempt to turn off the device during the restart.";
 
+const char kLauncherQueryHighlightingName[] = "Launcher query highlighting";
+const char kLauncherQueryHighlightingDescription[] =
+    "Enables highlighting occurrences of the search query in launcher search "
+    "result titles.";
+
 const char kLimitAltTabToActiveDeskName[] =
     "Limit Alt-Tab windows to active desk";
 const char kLimitAltTabToActiveDeskDescription[] =
@@ -4808,10 +4813,6 @@
     "Ctrl-Alt-I shows a heads-up display view in the top-left corner. Helps "
     "debug hardware issues that generate spurious touch events.";
 
-const char kSmbfsFileSharesName[] = "Smbfs file shares";
-const char kSmbfsFileSharesDescription[] =
-    "Use smbfs for accessing network file shares.";
-
 const char kSpectreVariant2MitigationName[] = "Spectre variant 2 mitigation";
 const char kSpectreVariant2MitigationDescription[] =
     "Controls whether Spectre variant 2 mitigation is enabled when "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index c737a3c4..db14b30a 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2696,6 +2696,9 @@
 extern const char kLacrosSupportName[];
 extern const char kLacrosSupportDescription[];
 
+extern const char kLauncherQueryHighlightingName[];
+extern const char kLauncherQueryHighlightingDescription[];
+
 extern const char kLimitAltTabToActiveDeskName[];
 extern const char kLimitAltTabToActiveDeskDescription[];
 
@@ -2806,9 +2809,6 @@
 extern const char kShowTouchHudName[];
 extern const char kShowTouchHudDescription[];
 
-extern const char kSmbfsFileSharesName[];
-extern const char kSmbfsFileSharesDescription[];
-
 extern const char kSpectreVariant2MitigationName[];
 extern const char kSpectreVariant2MitigationDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 84e403b..28b8602 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -297,7 +297,6 @@
     &password_manager::features::kRecoverFromNeverSaveAndroid,
     &performance_hints::features::kContextMenuPerformanceInfo,
     &performance_hints::features::kPageInfoPerformanceHints,
-    &photo_picker::features::kPhotoPickerVideoSupport,
     &query_tiles::features::kQueryTilesGeoFilter,
     &query_tiles::features::kQueryTiles,
     &query_tiles::features::kQueryTilesInNTP,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 121c010..c455ddd 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -408,7 +408,6 @@
     public static final String PAINT_PREVIEW_SHOW_ON_STARTUP = "PaintPreviewShowOnStartup";
     public static final String PASSWORD_SCRIPTS_FETCHING = "PasswordScriptsFetching";
     public static final String PERMISSION_DELEGATION = "PermissionDelegation";
-    public static final String PHOTO_PICKER_VIDEO_SUPPORT = "PhotoPickerVideoSupport";
     public static final String PORTALS = "Portals";
     public static final String PORTALS_CROSS_ORIGIN = "PortalsCrossOrigin";
     public static final String PREEMPTIVE_LINK_TO_TEXT_GENERATION =
diff --git a/chrome/browser/media/cast_mirroring_performance_browsertest.cc b/chrome/browser/media/cast_mirroring_performance_browsertest.cc
index 78b0bb8..661df1d 100644
--- a/chrome/browser/media/cast_mirroring_performance_browsertest.cc
+++ b/chrome/browser/media/cast_mirroring_performance_browsertest.cc
@@ -19,6 +19,7 @@
 #include "base/files/file_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/trace_event_analyzer.h"
@@ -226,7 +227,7 @@
                       base::StringPiece event_name,
                       trace_analyzer::TraceEventVector* events) {
   const trace_analyzer::Query kQuery =
-      trace_analyzer::Query::EventNameIs(event_name.as_string()) &&
+      trace_analyzer::Query::EventNameIs(std::string(event_name)) &&
       (trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_BEGIN) ||
        trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_BEGIN) ||
        trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_FLOW_BEGIN) ||
diff --git a/chrome/browser/media/router/mojo/media_sink_service_status.cc b/chrome/browser/media/router/mojo/media_sink_service_status.cc
index 68f371ff..3b28060 100644
--- a/chrome/browser/media/router/mojo/media_sink_service_status.cc
+++ b/chrome/browser/media/router/mojo/media_sink_service_status.cc
@@ -48,7 +48,7 @@
 
 // Returns the last four characters of UUID. UUID is extracted from |sink_id|.
 std::string TruncateSinkId(const std::string& sink_id) {
-  std::string uuid = ExtractUUID(sink_id).as_string();
+  std::string uuid(ExtractUUID(sink_id));
   return uuid.length() <= 4 ? uuid : uuid.substr(uuid.length() - 4);
 }
 
diff --git a/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc b/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
index 0fdd8c3f..6e56fae 100644
--- a/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
+++ b/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
@@ -113,7 +113,7 @@
 std::string CastInternalMessageTypeToString(CastInternalMessage::Type type) {
   auto found = cast_util::EnumToString(type);
   DCHECK(found);
-  return found.value_or(base::StringPiece()).as_string();
+  return std::string(found.value_or(base::StringPiece()));
 }
 
 // Possible types in a receiver_action message.
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index 06f24ed05..eea42875 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -1100,7 +1100,7 @@
     if (!registry)
       continue;
     const extensions::Extension* extension = registry->GetExtensionById(
-        id.as_string(), extensions::ExtensionRegistry::ENABLED);
+        std::string(id), extensions::ExtensionRegistry::ENABLED);
     if (!extension)
       continue;
     if (!extension->from_webstore())
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc
index 26fe541..494a63e 100644
--- a/chrome/browser/metrics/thread_watcher.cc
+++ b/chrome/browser/metrics/thread_watcher.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/stringprintf.h"
@@ -627,7 +628,7 @@
     // unresponsive before considering it as hung.
     CHECK_LE(values.size(), 2U);
 
-    std::string thread_name = values[0].as_string();
+    std::string thread_name(values[0]);
 
     uint32_t crash_seconds = default_crash_seconds;
     if (values.size() >= 2 &&
diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc
index 3bfaf83..f8ddbb6 100644
--- a/chrome/browser/metrics/thread_watcher_unittest.cc
+++ b/chrome/browser/metrics/thread_watcher_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/synchronization/condition_variable.h"
@@ -500,7 +501,7 @@
   while (tokens.GetNext()) {
     std::vector<base::StringPiece> values = base::SplitStringPiece(
         tokens.token_piece(), ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-    std::string thread_name = values[0].as_string();
+    std::string thread_name(values[0]);
 
     auto it = crash_on_hang_threads.find(thread_name);
     bool crash_on_hang = (it != crash_on_hang_threads.end());
@@ -529,7 +530,7 @@
   while (tokens.GetNext()) {
     std::vector<base::StringPiece> values = base::SplitStringPiece(
         tokens.token_piece(), ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-    std::string thread_name = values[0].as_string();
+    std::string thread_name(values[0]);
 
     auto it = crash_on_hang_threads.find(thread_name);
 
diff --git a/chrome/browser/nearby_sharing/instantmessaging/stream_parser.cc b/chrome/browser/nearby_sharing/instantmessaging/stream_parser.cc
index 9bed517..7348271 100644
--- a/chrome/browser/nearby_sharing/instantmessaging/stream_parser.cc
+++ b/chrome/browser/nearby_sharing/instantmessaging/stream_parser.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/nearby_sharing/instantmessaging/stream_parser.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/strings/string_piece.h"
 #include "chrome/browser/nearby_sharing/instantmessaging/proto/instantmessaging.pb.h"
 #include "chrome/browser/nearby_sharing/logging/logging.h"
 
diff --git a/chrome/browser/net/cookie_policy_browsertest.cc b/chrome/browser/net/cookie_policy_browsertest.cc
index c2e8eba..57f80ae3 100644
--- a/chrome/browser/net/cookie_policy_browsertest.cc
+++ b/chrome/browser/net/cookie_policy_browsertest.cc
@@ -102,7 +102,7 @@
     content::WebContents* web_contents =
         browser()->tab_strip_model()->GetActiveWebContents();
     content::TestNavigationObserver load_observer(web_contents);
-    ASSERT_TRUE(ExecuteScript(
+    ASSERT_TRUE(content::ExecJs(
         GetFrame(),
         base::StringPrintf("document.body.querySelector('iframe').src = '%s';",
                            url.spec().c_str())));
diff --git a/chrome/browser/net/dns_probe_browsertest.cc b/chrome/browser/net/dns_probe_browsertest.cc
index 4d9f894..61c46ca3 100644
--- a/chrome/browser/net/dns_probe_browsertest.cc
+++ b/chrome/browser/net/dns_probe_browsertest.cc
@@ -307,25 +307,17 @@
   WebContents* contents =
       active_browser_->tab_strip_model()->GetActiveWebContents();
 
-  bool rv = content::ExecuteScriptAndExtractString(
-      contents, "domAutomationController.send(document.title);", &title);
-  if (!rv)
-    return "";
-
-  return title;
+  return content::EvalJs(contents, "document.title;").ExtractString();
 }
 
 // Check text by roundtripping to renderer, to make sure any probe results
 // sent before this have been applied.
 bool DnsProbeBrowserTest::PageContains(const std::string& expected) {
-  std::string text_content;
-
-  bool rv = content::ExecuteScriptAndExtractString(
-      active_browser_->tab_strip_model()->GetActiveWebContents(),
-      "domAutomationController.send(document.body.textContent);",
-      &text_content);
-  if (!rv)
-    return false;
+  std::string text_content =
+      content::EvalJs(
+          active_browser_->tab_strip_model()->GetActiveWebContents(),
+          "document.body.textContent;")
+          .ExtractString();
 
   return text_content.find(expected) != std::string::npos;
 }
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index daa04098..199fad4 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -118,13 +118,10 @@
     }
     var node = document.evaluate("//*[contains(text(),'%s')]", document,
       null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
-    domAutomationController.send(isNodeVisible(node));
+    isNodeVisible(node);
   )", text.c_str());
   // clang-format on
-  bool result = false;
-  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(render_frame_host, command,
-                                                   &result));
-  return result;
+  return content::EvalJs(render_frame_host, command).ExtractBool();
 }
 
 bool WARN_UNUSED_RESULT IsDisplayingText(Browser* browser,
@@ -135,20 +132,19 @@
 
 // Expands the more box on the currently displayed error page.
 void ToggleHelpBox(Browser* browser) {
-  EXPECT_TRUE(content::ExecuteScript(
-      browser->tab_strip_model()->GetActiveWebContents(),
-      "document.getElementById('details-button').click();"));
+  EXPECT_TRUE(
+      content::ExecJs(browser->tab_strip_model()->GetActiveWebContents(),
+                      "document.getElementById('details-button').click();"));
 }
 
 // Returns true if the diagnostics link suggestion is displayed.
 bool WARN_UNUSED_RESULT IsDisplayingDiagnosticsLink(Browser* browser) {
   std::string command = base::StringPrintf(
       "var diagnose_link = document.getElementById('diagnose-link');"
-      "domAutomationController.send(diagnose_link != null);");
-  bool result = false;
-  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-      browser->tab_strip_model()->GetActiveWebContents(), command, &result));
-  return result;
+      "diagnose_link != null;");
+  return content::EvalJs(browser->tab_strip_model()->GetActiveWebContents(),
+                         command)
+      .ExtractBool();
 }
 
 // Checks that the error page is being displayed with the specified error
@@ -613,19 +609,14 @@
   // Check for no disabled message container.
   std::string command = base::StringPrintf(
       "var hasDisableContainer = document.querySelectorAll('.snackbar').length;"
-      "domAutomationController.send(hasDisableContainer);");
-  int32_t result;
-  EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-               web_contents, command, &result));
-  EXPECT_EQ(0, result);
+      "hasDisableContainer;");
+  EXPECT_EQ(0, content::EvalJs(web_contents, command));
 
   // Presence of the canvas container.
   command = base::StringPrintf(
-    "var runnerCanvas = document.querySelectorAll('.runner-canvas').length;"
-    "domAutomationController.send(runnerCanvas);");
-  EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-               web_contents, command, &result));
-  EXPECT_EQ(1, result);
+      "var runnerCanvas = document.querySelectorAll('.runner-canvas').length;"
+      "runnerCanvas;");
+  EXPECT_EQ(1, content::EvalJs(web_contents, command));
 }
 
 // Test error page in incognito mode. The only difference is that no network
@@ -885,13 +876,9 @@
 
     std::string command = base::StringPrintf(
         "var hasText = document.querySelector('.snackbar');"
-        "domAutomationController.send(hasText ? hasText.innerText : '');");
+        "hasText ? hasText.innerText : '';");
 
-    std::string result;
-    EXPECT_TRUE(
-        content::ExecuteScriptAndExtractString(web_contents, command, &result));
-
-    return result;
+    return content::EvalJs(web_contents, command).ExtractString();
   }
 
   // Whether to set AllowDinosaurEasterEgg policy
diff --git a/chrome/browser/net/ftp_browsertest.cc b/chrome/browser/net/ftp_browsertest.cc
index 3ad8820..c9a9f7e7 100644
--- a/chrome/browser/net/ftp_browsertest.cc
+++ b/chrome/browser/net/ftp_browsertest.cc
@@ -184,7 +184,7 @@
       ftp_server_.GetURLWithUserAndPassword("", "chrome", "chrome"));
 
   // Navigate to directory dir1/ without needing to re-authenticate
-  EXPECT_TRUE(content::ExecuteScript(
+  EXPECT_TRUE(content::ExecJs(
       browser()->tab_strip_model()->GetActiveWebContents(),
       "(function() {"
       "  function navigate() {"
@@ -209,7 +209,7 @@
       content::BrowserContext::GetDownloadManager(browser()->profile()), 1,
       content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_IGNORE);
 
-  EXPECT_TRUE(content::ExecuteScript(
+  EXPECT_TRUE(content::ExecJs(
       browser()->tab_strip_model()->GetActiveWebContents(),
       "(function() {"
       "  function navigate() {"
diff --git a/chrome/browser/net/load_timing_browsertest.cc b/chrome/browser/net/load_timing_browsertest.cc
index 15c2e409..de35ba3 100644
--- a/chrome/browser/net/load_timing_browsertest.cc
+++ b/chrome/browser/net/load_timing_browsertest.cc
@@ -74,12 +74,10 @@
 
     // Unlike the above times, secureConnectionStart will be zero when not
     // applicable.  In that case, leave ssl_start as null.
-    bool ssl_start_zero = false;
-    ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
-                    browser()->tab_strip_model()->GetActiveWebContents(),
-                    "window.domAutomationController.send("
-                        "performance.timing.secureConnectionStart == 0);",
-                    &ssl_start_zero));
+    bool ssl_start_zero =
+        content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                        "performance.timing.secureConnectionStart == 0;")
+            .ExtractBool();
     if (!ssl_start_zero)
       navigation_deltas->ssl_start = GetResultDelta("secureConnectionStart");
     else
@@ -100,15 +98,13 @@
   // Returns the time between performance.timing.fetchStart and the time with
   // the specified name.  This time must be non-negative.
   int GetResultDelta(const std::string& name) {
-    int time_ms = 0;
     std::string command(base::StringPrintf(
-        "window.domAutomationController.send("
-            "performance.timing.%s - performance.timing.fetchStart);",
+        "performance.timing.%s - performance.timing.fetchStart;",
         name.c_str()));
-    EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-                    browser()->tab_strip_model()->GetActiveWebContents(),
-                    command.c_str(),
-                    &time_ms));
+    int time_ms =
+        content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                        command.c_str())
+            .ExtractInt();
     // Basic sanity check.
     EXPECT_GE(time_ms, 0);
     return time_ms;
diff --git a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc
index 35cf929..8b45c94 100644
--- a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc
+++ b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc
@@ -161,24 +161,21 @@
   }
 
   std::string RunScriptExtractString(const std::string& script) {
-    std::string data;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractString(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractString();
   }
 
   double RunScriptExtractDouble(const std::string& script) {
-    double data = 0.0;
-    EXPECT_TRUE(ExecuteScriptAndExtractDouble(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractDouble();
   }
 
   int RunScriptExtractInt(const std::string& script) {
-    int data = 0;
-    EXPECT_TRUE(ExecuteScriptAndExtractInt(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractInt();
   }
 
   net::EmbeddedTestServer test_server_;
diff --git a/chrome/browser/net/network_quality_netinfo_browsertest.cc b/chrome/browser/net/network_quality_netinfo_browsertest.cc
index e78d136..0ce5514 100644
--- a/chrome/browser/net/network_quality_netinfo_browsertest.cc
+++ b/chrome/browser/net/network_quality_netinfo_browsertest.cc
@@ -96,26 +96,22 @@
     }
   }
 
-  double RunScriptExtractDouble(const std::string& script) {
-    double data = 0.0;
-    EXPECT_TRUE(ExecuteScriptAndExtractDouble(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+  std::string RunScriptExtractString(const std::string& script) {
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractString();
   }
 
- private:
-  std::string RunScriptExtractString(const std::string& script) {
-    std::string data;
-    EXPECT_TRUE(ExecuteScriptAndExtractString(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+  double RunScriptExtractDouble(const std::string& script) {
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractDouble();
   }
 
   int RunScriptExtractInt(const std::string& script) {
-    int data = 0;
-    EXPECT_TRUE(ExecuteScriptAndExtractInt(
-        browser()->tab_strip_model()->GetActiveWebContents(), script, &data));
-    return data;
+    return content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                           script, content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+        .ExtractInt();
   }
 };
 
diff --git a/chrome/browser/net/proxy_browsertest.cc b/chrome/browser/net/proxy_browsertest.cc
index 520868cd..21ec08bc 100644
--- a/chrome/browser/net/proxy_browsertest.cc
+++ b/chrome/browser/net/proxy_browsertest.cc
@@ -54,14 +54,12 @@
   ui_test_utils::NavigateToURL(browser, GURL("http://google.com"));
 
   // Verify we get the ERR_PROXY_CONNECTION_FAILED screen.
-  bool result = false;
-  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-      browser->tab_strip_model()->GetActiveWebContents(),
-      "var textContent = document.body.textContent;"
-      "var hasError = textContent.indexOf('ERR_PROXY_CONNECTION_FAILED') >= 0;"
-      "domAutomationController.send(hasError);",
-      &result));
-  EXPECT_TRUE(result);
+  EXPECT_EQ(true, content::EvalJs(
+                      browser->tab_strip_model()->GetActiveWebContents(),
+                      "var textContent = document.body.textContent;"
+                      "var hasError = "
+                      "textContent.indexOf('ERR_PROXY_CONNECTION_FAILED') >= 0;"
+                      "hasError;"));
 }
 
 // This class observes chrome::NOTIFICATION_AUTH_NEEDED and supplies
diff --git a/chrome/browser/net/secure_dns_policy_handler.cc b/chrome/browser/net/secure_dns_policy_handler.cc
index cb94aec7..627f470a 100644
--- a/chrome/browser/net/secure_dns_policy_handler.cc
+++ b/chrome/browser/net/secure_dns_policy_handler.cc
@@ -93,7 +93,7 @@
   if (mode && mode->is_string()) {
     mode_str = mode->GetString();
     if (SecureDnsConfig::ParseMode(mode_str)) {
-      prefs->SetString(prefs::kDnsOverHttpsMode, mode_str.as_string());
+      prefs->SetString(prefs::kDnsOverHttpsMode, std::string(mode_str));
     } else {
       // Default to "off".
       prefs->SetString(prefs::kDnsOverHttpsMode, SecureDnsConfig::kModeOff);
diff --git a/chrome/browser/net/storage_test_utils.cc b/chrome/browser/net/storage_test_utils.cc
index 7323637..1f9d29a 100644
--- a/chrome/browser/net/storage_test_utils.cc
+++ b/chrome/browser/net/storage_test_utils.cc
@@ -37,11 +37,7 @@
 
 void ExpectFrameContent(content::RenderFrameHost* frame,
                         const std::string& expected) {
-  std::string content;
-  ASSERT_TRUE(ExecuteScriptAndExtractString(
-      frame, "window.domAutomationController.send(document.body.textContent)",
-      &content));
-  EXPECT_EQ(expected, content);
+  EXPECT_EQ(expected, content::EvalJs(frame, "document.body.textContent"));
 }
 
 void ExpectCookiesOnHost(content::BrowserContext* context,
@@ -52,45 +48,45 @@
 
 void SetStorageForFrame(content::RenderFrameHost* frame) {
   for (const auto& data_type : kStorageTypesForFrame) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "set" + data_type + "()", &data));
+    bool data = content::EvalJs(frame, "set" + data_type + "()",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_TRUE(data) << "SetStorageForFrame for " << data_type;
   }
 }
 
 void SetStorageForWorker(content::RenderFrameHost* frame) {
   for (const auto& data_type : kStorageTypesForWorker) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "set" + data_type + "()", &data));
+    bool data = content::EvalJs(frame, "set" + data_type + "()",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_TRUE(data) << "SetStorageForWorker for " << data_type;
   }
 }
 
 void ExpectStorageForFrame(content::RenderFrameHost* frame, bool expected) {
   for (const auto& data_type : kStorageTypesForFrame) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "has" + data_type + "();", &data));
+    bool data = content::EvalJs(frame, "has" + data_type + "();",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_EQ(expected, data) << "ExpectStorageForFrame for " << data_type;
   }
 }
 
 void ExpectStorageForWorker(content::RenderFrameHost* frame, bool expected) {
   for (const auto& data_type : kStorageTypesForWorker) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "has" + data_type + "();", &data));
+    bool data = content::EvalJs(frame, "has" + data_type + "();",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_EQ(expected, data) << "ExpectStorageForWorker for " << data_type;
   }
 }
 
 void SetCrossTabInfoForFrame(content::RenderFrameHost* frame) {
   for (const auto& data_type : kCrossTabCommunicationTypes) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "set" + data_type + "()", &data));
+    bool data = content::EvalJs(frame, "set" + data_type + "()",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_TRUE(data) << data_type;
   }
 }
@@ -98,26 +94,26 @@
 void ExpectCrossTabInfoForFrame(content::RenderFrameHost* frame,
                                 bool expected) {
   for (const auto& data_type : kCrossTabCommunicationTypes) {
-    bool data = false;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        frame, "has" + data_type + "();", &data));
+    bool data = content::EvalJs(frame, "has" + data_type + "();",
+                                content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                    .ExtractBool();
     EXPECT_EQ(expected, data) << data_type;
   }
 }
 
 void RequestStorageAccessForFrame(content::RenderFrameHost* frame,
                                   bool should_resolve) {
-  bool data = false;
-  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(frame, kRequestStorageAccess,
-                                                   &data));
+  bool data = content::EvalJs(frame, kRequestStorageAccess,
+                              content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                  .ExtractBool();
   EXPECT_EQ(should_resolve, data) << "document.requestStorageAccess()";
 }
 
 void CheckStorageAccessForFrame(content::RenderFrameHost* frame,
                                 bool access_expected) {
-  bool data = false;
-  EXPECT_TRUE(
-      content::ExecuteScriptAndExtractBool(frame, kHasStorageAccess, &data));
+  bool data = content::EvalJs(frame, kHasStorageAccess,
+                              content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
+                  .ExtractBool();
   EXPECT_EQ(access_expected, data) << "document.hasStorageAccess()";
 }
 
diff --git a/chrome/browser/notifications/scheduler/internal/notification_scheduler.cc b/chrome/browser/notifications/scheduler/internal/notification_scheduler.cc
index e528fa2a..3dbf3cba2 100644
--- a/chrome/browser/notifications/scheduler/internal/notification_scheduler.cc
+++ b/chrome/browser/notifications/scheduler/internal/notification_scheduler.cc
@@ -10,10 +10,10 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/notifications/scheduler/internal/background_task_coordinator.h"
 #include "chrome/browser/notifications/scheduler/internal/display_decider.h"
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index 99a57853..43341c3 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -20,6 +20,7 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/pattern.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
@@ -3054,7 +3055,7 @@
             << "Our back pointer points to something unexpected.";
         if (!line.empty())
           lines.push_back(line);
-        line = trimmed_name.as_string();
+        line = std::string(trimmed_name);
       }
 
       previous_node_id = node->id();
diff --git a/chrome/browser/pdf/pdf_extension_util.cc b/chrome/browser/pdf/pdf_extension_util.cc
index cbdd07c..67a71404 100644
--- a/chrome/browser/pdf/pdf_extension_util.cc
+++ b/chrome/browser/pdf/pdf_extension_util.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/pdf/pdf_extension_util.h"
 
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
@@ -162,9 +163,9 @@
 }  // namespace
 
 std::string GetManifest() {
-  std::string manifest_contents = ui::ResourceBundle::GetSharedInstance()
-                                      .GetRawDataResource(IDR_PDF_MANIFEST)
-                                      .as_string();
+  std::string manifest_contents(
+      ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
+          IDR_PDF_MANIFEST));
   DCHECK(manifest_contents.find(kNameTag) != std::string::npos);
   base::ReplaceFirstSubstringAfterOffset(
       &manifest_contents, 0, kNameTag,
diff --git a/chrome/browser/policy/browser_dm_token_storage_linux.cc b/chrome/browser/policy/browser_dm_token_storage_linux.cc
index bbc1e958..be88da2 100644
--- a/chrome/browser/policy/browser_dm_token_storage_linux.cc
+++ b/chrome/browser/policy/browser_dm_token_storage_linux.cc
@@ -16,6 +16,7 @@
 #include "base/logging.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/syslog_logging.h"
@@ -120,8 +121,8 @@
   if (!base::ReadFileToString(token_file_path, &enrollment_token))
     return std::string();
 
-  return base::TrimWhitespaceASCII(enrollment_token, base::TRIM_ALL)
-      .as_string();
+  return std::string(
+      base::TrimWhitespaceASCII(enrollment_token, base::TRIM_ALL));
 }
 
 std::string BrowserDMTokenStorageLinux::InitDMToken() {
@@ -133,7 +134,7 @@
   if (!base::ReadFileToString(token_file_path, &token))
     return std::string();
 
-  return base::TrimWhitespaceASCII(token, base::TRIM_ALL).as_string();
+  return std::string(base::TrimWhitespaceASCII(token, base::TRIM_ALL));
 }
 
 bool BrowserDMTokenStorageLinux::InitEnrollmentErrorOption() {
@@ -151,7 +152,7 @@
   if (!base::ReadFileToString(options_file_path, &options))
     return false;
 
-  return base::TrimWhitespaceASCII(options, base::TRIM_ALL).as_string() ==
+  return base::TrimWhitespaceASCII(options, base::TRIM_ALL) ==
          kEnrollmentMandatoryOption;
 }
 
diff --git a/chrome/browser/policy/browser_dm_token_storage_win.cc b/chrome/browser/policy/browser_dm_token_storage_win.cc
index 7d7ecb6..d3c1adad 100644
--- a/chrome/browser/policy/browser_dm_token_storage_win.cc
+++ b/chrome/browser/policy/browser_dm_token_storage_win.cc
@@ -191,9 +191,8 @@
       continue;
 
     DCHECK_LE(size, installer::kMaxDMTokenLength);
-    return base::TrimWhitespaceASCII(base::StringPiece(raw_value.data(), size),
-                                     base::TRIM_ALL)
-        .as_string();
+    return std::string(base::TrimWhitespaceASCII(
+        base::StringPiece(raw_value.data(), size), base::TRIM_ALL));
   }
 
   DVLOG(1) << "Failed to get DMToken from Registry.";
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 2bc65a0..e2d3347 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -769,6 +769,7 @@
   media_router::RegisterLocalStatePrefs(registry);
   metrics::TabStatsTracker::RegisterPrefs(registry);
   RegisterBrowserPrefs(registry);
+  speech::SodaInstaller::RegisterLocalStatePrefs(registry);
   StartupBrowserCreator::RegisterLocalStatePrefs(registry);
   task_manager::TaskManagerInterface::RegisterPrefs(registry);
   UpgradeDetector::RegisterPrefs(registry);
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_button.html b/chrome/browser/resources/chromeos/emoji_picker/emoji_button.html
index 7ec97be9..a2eb61d 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_button.html
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_button.html
@@ -25,6 +25,7 @@
   #emoji-button:focus,
   #emoji-button:active {
     --emoji-background: rgba(var(--cr-hairline-rgb), 0.1);
+    border-radius: 50%;
     outline-color: var(--cr-toggle-color);
     outline-width: 2px;
   }
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html
index 27841cc..432350a 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html
@@ -143,11 +143,13 @@
 </div>
 
 <div id="message" class="sr-only" aria-live="polite"></div>
-<div class="side-padding">
-  <emoji-search id$="search-container" emoji-data="[[emojiData]]"
-    search="{{search}}">
+  <emoji-search
+    class="side-padding"
+    id$="search-container"
+    emoji-data="[[emojiData]]"
+    search="{{search}}"
+    on-scroll="onSearchScroll">
   </emoji-search>
-</div>
 
 <div id="list-container">
   <div class="sr-only" role="heading" aria-level="1">Emoji Group Buttons</div>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_search.html b/chrome/browser/resources/chromeos/emoji_picker/emoji_search.html
index 3458d8fc..8ec382fa 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_search.html
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_search.html
@@ -2,8 +2,7 @@
   :host {
     display: flex;
     flex-direction: column;
-    height: 100%;
-    width: 100%;
+    overflow-y: scroll;
   }
   cr-search-field {
     --cr-search-field-clear-icon-margin-end: 14px;
@@ -31,11 +30,6 @@
     border: 2px solid var(--cr-focus-outline-color);
   }
 
-  #container {
-    flex-grow: 1;
-    overflow-y: scroll;
-  }
-
   .result {
     border: 2px solid transparent;
     display: flex;
@@ -75,11 +69,14 @@
     top: 50%;
     transform: translate(-50%, -50%);
   }
-
   #search-shadow {
+    background-color: var(--cr-card-background-color);
+    margin-inline-end: calc(0px - var(--emoji-picker-side-padding));
     margin-inline-start: calc(0px - var(--emoji-picker-side-padding));
     padding-inline-end: var(--emoji-picker-side-padding);
     padding-inline-start: var(--emoji-picker-side-padding);
+    position: sticky;
+    top:0;
     width: calc(var(--emoji-picker-width) - 2*var(--emoji-picker-side-padding));
   }
 </style>
@@ -88,29 +85,25 @@
 <cr-search-field id="search" label="Search" autofocus="true"></cr-search-field>
 </div>
 
-<div id="container" on-scroll="onContainerScroll">
+<template is="dom-if" if="[[search]]">
 
-  <template is="dom-if" if="[[search]]">
-
-    <div class="sr-only" role="heading" aria-level="1">
-      Emoji Search Results
+  <div class="sr-only" role="heading" aria-level="1">
+    Emoji Search Results
+  </div>
+  <template is="dom-repeat" items="[[results]]">
+    <div class="result" tabindex="0" on-click="onResultClick">
+      <emoji-button tabindex="-1"
+          emoji="[[item.item.base.string]]"
+          variants="[[item.item.alternates]]">
+      </emoji-button>
+      <div class="name">[[item.item.base.name]]</div>
     </div>
-    <template is="dom-repeat" items="[[results]]">
-      <div class="result" tabindex="0" on-click="onResultClick">
-        <emoji-button tabindex="-1"
-            emoji="[[item.item.base.string]]"
-            variants="[[item.item.alternates]]">
-        </emoji-button>
-        <div class="name">[[item.item.base.name]]</div>
+  </template>
+  <template is="dom-if" if="[[!results.length]]">
+    <div class="no-result">
+      <img src="no_results.svg">
+      No emoji found
       </div>
-    </template>
-    <template is="dom-if" if="[[!results.length]]">
-      <div class="no-result">
-        <img src="no_results.svg">
-        No emoji found
-        </div>
-    </template>
-
   </template>
 
-</div>
\ No newline at end of file
+</template>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_search.js b/chrome/browser/resources/chromeos/emoji_picker/emoji_search.js
index 80cfb14..f64785d 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_search.js
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_search.js
@@ -52,6 +52,9 @@
         'base.keywords',
       ]
     });
+    this.addEventListener('scroll', () => {
+      this.onSearchScroll();
+    });
   }
 
   ready() {
@@ -160,11 +163,9 @@
         })).values());
   }
 
-  onContainerScroll() {
-    this.shadowRoot.getElementById('search-shadow').style.boxShadow =
-        this.shadowRoot.getElementById('container').scrollTop > 0 ?
-        'var(--cr-elevation-3)' :
-        'none';
+  onSearchScroll() {
+    this.$['search-shadow'].style.boxShadow =
+        this.scrollTop > 0 ? 'var(--cr-elevation-3)' : 'none';
   }
 
   /**
diff --git a/chrome/browser/resources/management/icons.html b/chrome/browser/resources/management/icons.html
index a17a0212..8043cba 100644
--- a/chrome/browser/resources/management/icons.html
+++ b/chrome/browser/resources/management/icons.html
@@ -10,6 +10,7 @@
       <g id="linux"><path d="M 6.9375 22.042969 C 3.867188 20.457031 1.886719 17.347656 1.824219 13.234375 C 1.527344 13.378906 1.1875 13.402344 0.800781 13.265625 C -0.3125 12.875 -0.0625 11.578125 0.34375 10.421875 C 0.683594 9.460938 1.835938 8.761719 2.402344 8.613281 C 3.71875 3.78125 6.804688 0 12 0 C 17.257812 0 20.367188 3.625 21.644531 8.628906 C 22.222656 8.796875 23.324219 9.484375 23.65625 10.421875 C 24.0625 11.578125 24.3125 12.875 23.199219 13.265625 C 22.8125 13.402344 22.472656 13.378906 22.175781 13.234375 C 22.117188 17.375 20.140625 20.472656 17.070312 22.046875 C 17.257812 22.191406 17.363281 22.375 17.363281 22.613281 C 17.363281 23.378906 17.75 24 14.898438 24 C 12.8125 24 12.457031 23.578125 12.417969 23.117188 C 12.28125 23.035156 12.140625 22.910156 12 22.910156 C 11.859375 22.910156 11.71875 23.042969 11.582031 23.128906 C 11.535156 23.582031 11.171875 24 9.101562 24 C 6.25 24 6.636719 23.378906 6.636719 22.613281 C 6.636719 22.371094 6.746094 22.183594 6.9375 22.042969 Z M 12 21.222656 C 17.929688 21.222656 20.070312 17.1875 20.070312 11.820312 C 20.070312 7.371094 18.125 3.28125 14.898438 2.597656 C 13.863281 2.378906 13.136719 4.761719 12 4.761719 C 10.863281 4.761719 10.035156 2.378906 9.101562 2.597656 C 5.863281 3.359375 3.929688 7.605469 3.929688 11.820312 C 3.929688 16.882812 6.070312 21.222656 12 21.222656 Z M 8.277344 9.324219 C 7.589844 9.324219 7.035156 8.789062 7.035156 8.132812 C 7.035156 7.476562 7.589844 6.941406 8.277344 6.941406 C 8.960938 6.941406 9.515625 7.476562 9.515625 8.132812 C 9.515625 8.789062 8.960938 9.324219 8.277344 9.324219 Z M 15.722656 9.324219 C 15.039062 9.324219 14.484375 8.789062 14.484375 8.132812 C 14.484375 7.476562 15.039062 6.941406 15.722656 6.941406 C 16.410156 6.941406 16.964844 7.476562 16.964844 8.132812 C 16.964844 8.789062 16.410156 9.324219 15.722656 9.324219 Z M 12.226562 9.964844 L 13.929688 10.683594 C 14.222656 10.804688 14.355469 11.132812 14.226562 11.414062 C 14.199219 11.46875 14.164062 11.519531 14.121094 11.5625 L 12.425781 13.308594 C 12.210938 13.535156 11.839844 13.546875 11.601562 13.339844 C 11.589844 13.332031 11.578125 13.320312 11.566406 13.308594 L 9.878906 11.558594 C 9.660156 11.332031 9.675781 10.980469 9.914062 10.773438 C 9.960938 10.734375 10.011719 10.703125 10.070312 10.679688 L 11.75 9.964844 C 11.898438 9.902344 12.074219 9.902344 12.226562 9.964844 Z M 12.226562 9.964844"></path></g>
       <g id="play-store"><path d="M20.18 10.88l-3.06-1.74L14.26 12l2.86 2.86 3.06-1.74c.55-.31.82-.71.82-1.12 0-.41-.27-.81-.82-1.12zM4.71 2.45l8.42 8.42 2.55-2.55-10.7-6.06c-.07-.04-.14-.07-.21-.1-.17-.07-.3.05-.15.21.03.02.06.05.09.08zm0 19.1l-.08.08c-.15.15-.02.28.15.21.07-.03.14-.06.21-.1l10.69-6.06-2.55-2.55s-7.2 7.21-8.42 8.42zM12 12L3.38 3.38c-.19-.19-.38-.07-.38.19v16.86c0 .26.19.38.38.19L12 12z"></path></g>
       <g id="crash"><path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12zm-4.51 2.11l.26 2.79-2.74.62-1.43 2.41L12 18.82l-2.58 1.11-1.43-2.41-2.74-.62.26-2.8L3.66 12l1.85-2.12-.26-2.78 2.74-.61 1.43-2.41L12 5.18l2.58-1.11 1.43 2.41 2.74.62-.26 2.79L20.34 12l-1.85 2.11zM11 15h2v2h-2zm0-8h2v6h-2z"></path></g>
+      <g id="policy"><path d="M21,5l-9-4L3,5v6c0,5.55,3.84,10.74,9,12c2.3-0.56,4.33-1.9,5.88-3.71l-3.12-3.12c-1.94,1.29-4.58,1.07-6.29-0.64 c-1.95-1.95-1.95-5.12,0-7.07c1.95-1.95,5.12-1.95,7.07,0c1.71,1.71,1.92,4.35,0.64,6.29l2.9,2.9C20.29,15.69,21,13.38,21,11V5z"></path><circle cx="12" cy="12" r="3"></circle></g>
 </if>
       <g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"></path><path d="M0 0h24v24H0z" fill="none"></path></g>
       <g id="public"><path d="M0 0h24v24H0z" fill="none"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"></path></g>
diff --git a/chrome/browser/resources/management/management_browser_proxy.js b/chrome/browser/resources/management/management_browser_proxy.js
index 65dee721..8233bfa5 100644
--- a/chrome/browser/resources/management/management_browser_proxy.js
+++ b/chrome/browser/resources/management/management_browser_proxy.js
@@ -78,6 +78,7 @@
   LOGS: 'logs',
   PRINT: 'print',
   PRINT_JOBS: 'print jobs',
+  DLP_EVENTS: 'dlp events',
   CROSTINI: 'crostini',
   USERNAME: 'username',
   EXTENSION: 'extension',
diff --git a/chrome/browser/resources/management/management_ui.js b/chrome/browser/resources/management/management_ui.js
index 4928d55..489f91a 100644
--- a/chrome/browser/resources/management/management_ui.js
+++ b/chrome/browser/resources/management/management_ui.js
@@ -279,6 +279,8 @@
         return 'cr:print';
       case DeviceReportingType.PRINT_JOBS:
         return 'cr:print';
+      case DeviceReportingType.DLP_EVENTS:
+        return 'management:policy';
       case DeviceReportingType.CROSTINI:
         return 'management:linux';
       case DeviceReportingType.USERNAME:
diff --git a/chrome/browser/safe_xml_parser_browsertest.cc b/chrome/browser/safe_xml_parser_browsertest.cc
index f0ebf5fc7c..1eacdaaa 100644
--- a/chrome/browser/safe_xml_parser_browsertest.cc
+++ b/chrome/browser/safe_xml_parser_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/macros.h"
+#include "base/strings/string_piece.h"
 #include "base/token.h"
 #include "base/values.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -45,7 +46,7 @@
     }
 
     data_decoder::DataDecoder::ParseXmlIsolated(
-        xml.as_string(),
+        std::string(xml),
         base::BindOnce(&SafeXmlParserTest::XmlParsingDone,
                        base::Unretained(this), run_loop.QuitClosure(),
                        std::move(expected_value)));
diff --git a/chrome/browser/shell_integration_linux_unittest.cc b/chrome/browser/shell_integration_linux_unittest.cc
index 5828022..aee01817 100644
--- a/chrome/browser/shell_integration_linux_unittest.cc
+++ b/chrome/browser/shell_integration_linux_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_path_override.h"
@@ -43,12 +44,12 @@
   MockEnvironment() {}
 
   void Set(base::StringPiece name, const std::string& value) {
-    variables_[name.as_string()] = value;
+    variables_[std::string(name)] = value;
   }
 
   bool GetVar(base::StringPiece variable_name, std::string* result) override {
-    if (base::Contains(variables_, variable_name.as_string())) {
-      *result = variables_[variable_name.as_string()];
+    if (base::Contains(variables_, std::string(variable_name))) {
+      *result = variables_[std::string(variable_name)];
       return true;
     }
 
diff --git a/chrome/browser/spellchecker/spellcheck_language_blocklist_policy_handler.cc b/chrome/browser/spellchecker/spellcheck_language_blocklist_policy_handler.cc
index 1522654..dab5dbb 100644
--- a/chrome/browser/spellchecker/spellcheck_language_blocklist_policy_handler.cc
+++ b/chrome/browser/spellchecker/spellcheck_language_blocklist_policy_handler.cc
@@ -8,6 +8,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/syslog_logging.h"
 #include "base/values.h"
@@ -113,9 +114,8 @@
   // Separate the valid languages from the unknown / unsupported languages and
   // the languages that also appear in the SpellcheckLanguage policy.
   for (const base::Value& language : value->GetList()) {
-    std::string candidate_language =
-        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL)
-            .as_string();
+    std::string candidate_language(
+        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL));
     std::string current_language =
         SpellcheckService::GetSupportedAcceptLanguageCode(candidate_language);
 
diff --git a/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc b/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
index f4072f31..9d7ca32b 100644
--- a/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
+++ b/chrome/browser/spellchecker/spellcheck_language_policy_handler.cc
@@ -7,6 +7,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/syslog_logging.h"
 #include "base/values.h"
@@ -87,9 +88,8 @@
 
   // Separate the valid languages from the unknown / unsupported languages.
   for (const base::Value& language : value->GetList()) {
-    std::string candidate_language =
-        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL)
-            .as_string();
+    std::string candidate_language(
+        base::TrimWhitespaceASCII(language.GetString(), base::TRIM_ALL));
     std::string current_language =
         SpellcheckService::GetSupportedAcceptLanguageCode(candidate_language);
 
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.cc
similarity index 74%
rename from chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
rename to chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.cc
index 9053646a..54d79905 100644
--- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
+++ b/chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h"
+#include "chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h"
 
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/infobars/infobar_service.h"
@@ -13,10 +13,6 @@
 #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
 #include "components/subresource_filter/content/browser/ruleset_service.h"
 
-#if defined(OS_ANDROID)
-#include "chrome/browser/infobars/infobar_service.h"
-#endif
-
 namespace {
 
 // Returns a scoped refptr to the SafeBrowsingService's database manager, if
@@ -31,18 +27,8 @@
 
 }  // namespace
 
-ChromeSubresourceFilterClient::ChromeSubresourceFilterClient(
-    content::WebContents* web_contents)
-    : web_contents_(web_contents) {
-  DCHECK(web_contents_);
-}
-
-ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() = default;
-
-// static
-void ChromeSubresourceFilterClient::
-    CreateThrottleManagerWithClientForWebContents(
-        content::WebContents* web_contents) {
+void CreateSubresourceFilterThrottleManagerForWebContents(
+    content::WebContents* web_contents) {
   subresource_filter::RulesetService* ruleset_service =
       g_browser_process->subresource_filter_ruleset_service();
   subresource_filter::VerifiedRulesetDealer::Handle* dealer =
@@ -50,7 +36,6 @@
   subresource_filter::ContentSubresourceFilterThrottleManager::
       CreateForWebContents(
           web_contents,
-          std::make_unique<ChromeSubresourceFilterClient>(web_contents),
           SubresourceFilterProfileContextFactory::GetForProfile(
               Profile::FromBrowserContext(web_contents->GetBrowserContext())),
           InfoBarService::FromWebContents(web_contents),
diff --git a/chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h b/chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h
new file mode 100644
index 0000000..7d9242e
--- /dev/null
+++ b/chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h
@@ -0,0 +1,17 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_CONTENT_SUBRESOURCE_FILTER_THROTTLE_MANAGER_FACTORY_H_
+#define CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_CONTENT_SUBRESOURCE_FILTER_THROTTLE_MANAGER_FACTORY_H_
+
+namespace content {
+class WebContents;
+}  // namespace content
+
+// Creates a ContentSubresourceFilterThrottleManager and attaches it to
+// |web_contents|, passing it embedder-level state.
+void CreateSubresourceFilterThrottleManagerForWebContents(
+    content::WebContents* web_contents);
+
+#endif  // CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_CONTENT_SUBRESOURCE_FILTER_THROTTLE_MANAGER_FACTORY_H_
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.h b/chrome/browser/subresource_filter/chrome_subresource_filter_client.h
deleted file mode 100644
index 5aeae20..0000000
--- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_SUBRESOURCE_FILTER_CLIENT_H_
-#define CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_SUBRESOURCE_FILTER_CLIENT_H_
-
-#include <memory>
-
-#include "base/macros.h"
-#include "build/build_config.h"
-#include "components/subresource_filter/content/browser/subresource_filter_client.h"
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-namespace subresource_filter {
-class ContentSubresourceFilterThrottleManager;
-}  // namespace subresource_filter
-
-// Chrome implementation of SubresourceFilterClient. Instances are associated
-// with and owned by ContentSubresourceFilterThrottleManager instances.
-class ChromeSubresourceFilterClient
-    : public subresource_filter::SubresourceFilterClient {
- public:
-  explicit ChromeSubresourceFilterClient(content::WebContents* web_contents);
-  ~ChromeSubresourceFilterClient() override;
-
-  // Creates a ContentSubresourceFilterThrottleManager and attaches it to
-  // |web_contents|, passing it an instance of this client and other
-  // embedder-level state.
-  static void CreateThrottleManagerWithClientForWebContents(
-      content::WebContents* web_contents);
-
-  // SubresourceFilterClient:
-  void OnNotificationShown() override {}
-
- private:
-  content::WebContents* web_contents_;
-
-  std::unique_ptr<subresource_filter::ContentSubresourceFilterThrottleManager>
-      throttle_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChromeSubresourceFilterClient);
-};
-
-#endif  // CHROME_BROWSER_SUBRESOURCE_FILTER_CHROME_SUBRESOURCE_FILTER_CLIENT_H_
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index b9602700b..3eee024 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1863,6 +1863,8 @@
       "app_list/search/search_result_ranker/recurrence_ranker_util.h",
       "app_list/search/search_result_ranker/search_result_ranker.cc",
       "app_list/search/search_result_ranker/search_result_ranker.h",
+      "app_list/search/search_tags_util.cc",
+      "app_list/search/search_tags_util.h",
       "ash/accessibility/accessibility_controller_client.cc",
       "ash/accessibility/accessibility_controller_client.h",
       "ash/ambient/ambient_client_impl.cc",
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
index 41eaed20..8ad7f99 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -18,6 +18,7 @@
 #include "base/observer_list.h"
 #include "base/scoped_multi_source_observation.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -620,21 +621,20 @@
   for (size_t i = 1; i < parts.size() - 1; ++i) {
     const size_t separator = parts[i].find('=');
     if (separator == std::string::npos) {
-      intent->AddExtraParam(parts[i].as_string());
+      intent->AddExtraParam(std::string(parts[i]));
       continue;
     }
     const base::StringPiece key = parts[i].substr(0, separator);
     const base::StringPiece value = parts[i].substr(separator + 1);
     if (key == kAction) {
-      intent->set_action(value.as_string());
+      intent->set_action(std::string(value));
     } else if (key == kCategory) {
-      intent->set_category(value.as_string());
+      intent->set_category(std::string(value));
     } else if (key == kLaunchFlags) {
       uint32_t launch_flags;
-      const bool parsed =
-          base::HexStringToUInt(value.as_string(), &launch_flags);
+      const bool parsed = base::HexStringToUInt(value, &launch_flags);
       if (!parsed) {
-        DVLOG(1) << "Failed to parse launchFlags: " << value.as_string() << ".";
+        DVLOG(1) << "Failed to parse launchFlags: " << value << ".";
         return false;
       }
       intent->set_launch_flags(launch_flags);
@@ -643,18 +643,18 @@
       if (component_separator == std::string::npos)
         return false;
       intent->set_package_name(
-          value.substr(0, component_separator).as_string());
+          std::string(value.substr(0, component_separator)));
       const base::StringPiece activity_compact_name =
           value.substr(component_separator + 1);
       if (!activity_compact_name.empty() && activity_compact_name[0] == '.') {
-        std::string activity = value.substr(0, component_separator).as_string();
-        activity += activity_compact_name.as_string();
+        std::string activity(value.substr(0, component_separator));
+        activity += std::string(activity_compact_name);
         intent->set_activity(activity);
       } else {
-        intent->set_activity(activity_compact_name.as_string());
+        intent->set_activity(std::string(activity_compact_name));
       }
     } else {
-      intent->AddExtraParam(parts[i].as_string());
+      intent->AddExtraParam(std::string(parts[i]));
     }
   }
 
diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc b/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc
index fd0681f57..0a5df4f 100644
--- a/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc
+++ b/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc
@@ -73,31 +73,7 @@
 // Metrics utilities
 //------------------
 
-// TODO(crbug.com/1034842): Add unit tests for histograms
-
-// Possible outcomes of a call to the ItemSuggest API. These values persist to
-// logs. Entries should not be renumbered and numeric values should never be
-// reused.
-enum class Status {
-  kOk = 0,
-  kDisabledByExperiment = 1,
-  kDisabledByPolicy = 2,
-  kInvalidServerUrl = 3,
-  kNoIdentityManager = 4,
-  kGoogleAuthError = 5,
-  kNetError = 6,
-  kResponseTooLarge = 7,
-  k3xxStatus = 8,
-  k4xxStatus = 9,
-  k5xxStatus = 10,
-  kEmptyResponse = 11,
-  kNoResultsInResponse = 12,
-  kJsonParseFailure = 13,
-  kJsonConversionFailure = 14,
-  kMaxValue = kJsonConversionFailure,
-};
-
-void LogStatus(Status status) {
+void LogStatus(ItemSuggestCache::Status status) {
   UMA_HISTOGRAM_ENUMERATION("Apps.AppList.ItemSuggestCache.Status", status);
 }
 
diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h b/chrome/browser/ui/app_list/search/files/item_suggest_cache.h
index 801a0fdd..1c2de97 100644
--- a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h
+++ b/chrome/browser/ui/app_list/search/files/item_suggest_cache.h
@@ -72,6 +72,28 @@
   // Whether or not to override configuration of the cache with an experiment.
   static const base::Feature kExperiment;
 
+  // Possible outcomes of a call to the ItemSuggest API. These values persist to
+  // logs. Entries should not be renumbered and numeric values should never be
+  // reused.
+  enum class Status {
+    kOk = 0,
+    kDisabledByExperiment = 1,
+    kDisabledByPolicy = 2,
+    kInvalidServerUrl = 3,
+    kNoIdentityManager = 4,
+    kGoogleAuthError = 5,
+    kNetError = 6,
+    kResponseTooLarge = 7,
+    k3xxStatus = 8,
+    k4xxStatus = 9,
+    k5xxStatus = 10,
+    kEmptyResponse = 11,
+    kNoResultsInResponse = 12,
+    kJsonParseFailure = 13,
+    kJsonConversionFailure = 14,
+    kMaxValue = kJsonConversionFailure,
+  };
+
  private:
   // Whether or not the ItemSuggestCache is enabled.
   static constexpr base::FeatureParam<bool> kEnabled{&kExperiment, "enabled",
diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache_unittest.cc b/chrome/browser/ui/app_list/search/files/item_suggest_cache_unittest.cc
index b4c5a2d..0361467 100644
--- a/chrome/browser/ui/app_list/search/files/item_suggest_cache_unittest.cc
+++ b/chrome/browser/ui/app_list/search/files/item_suggest_cache_unittest.cc
@@ -7,17 +7,67 @@
 #include <vector>
 
 #include "base/json/json_reader.h"
-#include "chrome/browser/profiles/profile.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "base/test/simple_test_clock.h"
+#include "base/test/task_environment.h"
+#include "chrome/browser/signin/chrome_signin_client_factory.h"
+#include "chrome/browser/signin/chrome_signin_client_test_util.h"
+#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/drive/drive_pref_names.h"
+#include "components/signin/public/identity_manager/identity_test_environment.h"
+#include "content/public/test/browser_task_environment.h"
+#include "google_apis/gaia/gaia_urls.h"
+#include "net/http/http_util.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
+#include "services/network/public/cpp/shared_url_loader_factory.h"
+#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/test/test_url_loader_factory.h"
+#include "services/network/test/test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace {
+
+constexpr char kEmail[] = "test-user@example.com";
+constexpr char kRequestUrl[] =
+    "https://appsitemsuggest-pa.googleapis.com/v1/items";
+constexpr char kValidJsonResponse[] = R"(
+    {
+      "item": [
+        {
+          "itemId": "item id 1",
+          "displayText": "display text 1"
+        },
+        {
+          "itemId": "item id 2",
+          "displayText": "display text 2",
+          "predictionReason": "unused field"
+        },
+        {
+          "itemId": "item id 3",
+          "displayText": "display text 3"
+        }
+      ],
+      "suggestionSessionId": "suggestion id 1"
+    })";
+constexpr char kStatusHistogramName[] = "Apps.AppList.ItemSuggestCache.Status";
+constexpr char kResponseSizeHistogramName[] =
+    "Apps.AppList.ItemSuggestCache.ResponseSize";
+}  // namespace
+
 namespace app_list {
+using base::test::ScopedFeatureList;
 
 // TODO(crbug.com/1034842): Add test checking we make no requests when disabled
 // by experiment or policy.
 
 class ItemSuggestCacheTest : public testing::Test {
- public:
+ protected:
   ItemSuggestCacheTest() = default;
   ~ItemSuggestCacheTest() override = default;
 
@@ -44,29 +94,53 @@
       ResultMatches(actual->results[i], results[i].first, results[i].second);
     }
   }
+
+  void SetUp() override {
+    profile_manager_ = std::make_unique<TestingProfileManager>(
+        TestingBrowserProcess::GetGlobal());
+    ASSERT_TRUE(profile_manager_->SetUp());
+    TestingProfile::TestingFactories factories =
+        IdentityTestEnvironmentProfileAdaptor::
+            GetIdentityTestEnvironmentFactories();
+    factories.push_back(
+        {ChromeSigninClientFactory::GetInstance(),
+         base::BindRepeating(&BuildChromeSigninClientWithURLLoader,
+                             &url_loader_factory_)});
+    profile_ = profile_manager_->CreateTestingProfile(
+        kEmail, /*prefs=*/{}, base::UTF8ToUTF16(kEmail),
+        /*avatar_id=*/0, /*supervised_user_id=*/{}, factories);
+
+    identity_test_env_adaptor_ =
+        std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_);
+    identity_test_env_ = identity_test_env_adaptor_->identity_test_env();
+    identity_test_env_->SetTestURLLoaderFactory(&url_loader_factory_);
+    shared_url_loader_factory_ =
+        base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
+            &url_loader_factory_);
+  }
+
+  content::BrowserTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  signin::IdentityTestEnvironment* identity_test_env_;
+  std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
+      identity_test_env_adaptor_;
+
+  std::unique_ptr<TestingProfileManager> profile_manager_;
+  TestingProfile* profile_;
+
+  network::TestURLLoaderFactory url_loader_factory_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
+  scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_;
+
+  ScopedFeatureList scoped_feature_list_;
+  base::Feature feature_ = ItemSuggestCache::kExperiment;
+
+  const base::HistogramTester histogram_tester_;
 };
 
 TEST_F(ItemSuggestCacheTest, ConvertJsonSuccess) {
-  const base::Value full = Parse(R"(
-    {
-      "item": [
-        {
-          "itemId": "item id 1",
-          "displayText": "display text 1"
-        },
-        {
-          "itemId": "item id 2",
-          "displayText": "display text 2",
-          "predictionReason": "unused field"
-        },
-        {
-          "itemId": "item id 3",
-          "displayText": "display text 3"
-        }
-      ],
-      "suggestionSessionId": "the suggestion id"
-    })");
-  ResultsMatch(ItemSuggestCache::ConvertJsonForTest(&full), "the suggestion id",
+  const base::Value full = Parse(kValidJsonResponse);
+  ResultsMatch(ItemSuggestCache::ConvertJsonForTest(&full), "suggestion id 1",
                {{"item id 1", "display text 1"},
                 {"item id 2", "display text 2"},
                 {"item id 3", "display text 3"}});
@@ -123,4 +197,298 @@
   EXPECT_FALSE(ItemSuggestCache::ConvertJsonForTest(&no_items).has_value());
 }
 
+TEST_F(ItemSuggestCacheTest, UpdateCacheDisabledByExperiment) {
+  scoped_feature_list_.InitAndEnableFeatureWithParameters(
+      feature_, {{"enabled", "false"}});
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kDisabledByExperiment, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheDisabledByPolicy) {
+  profile_->GetPrefs()->SetBoolean(drive::prefs::kDisableDrive, true);
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kDisabledByPolicy, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheServerUrlIsNotHttps) {
+  scoped_feature_list_.InitAndEnableFeatureWithParameters(
+      feature_,
+      {{"server_url", "http://appsitemsuggest-pa.googleapis.com/v1/items"}});
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kInvalidServerUrl, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheServerUrlIsNotGoogleDomain) {
+  scoped_feature_list_.InitAndEnableFeatureWithParameters(
+      feature_, {{"server_url", "https://foo.com"}});
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kInvalidServerUrl, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheServerNoAuthToken) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kGoogleAuthError, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheInsufficientResourcesError) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+
+  auto head = network::CreateURLResponseHead(net::HTTP_OK);
+  network::URLLoaderCompletionStatus status(net::ERR_INSUFFICIENT_RESOURCES);
+  url_loader_factory_.AddResponse(GURL(kRequestUrl), std::move(head), "content",
+                                  status);
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kResponseTooLarge, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheNetError) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+
+  auto head = network::CreateURLResponseHead(net::HTTP_OK);
+  network::URLLoaderCompletionStatus status(net::ERR_FAILED);
+  url_loader_factory_.AddResponse(GURL(kRequestUrl), std::move(head), "content",
+                                  status);
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kStatusHistogramName,
+                                       ItemSuggestCache::Status::kNetError, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCache5kkError) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+
+  auto head = network::mojom::URLResponseHead::New();
+  std::string headers("HTTP/1.1 500 Owiee\nContent-type: application/json\n\n");
+  head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(
+      net::HttpUtil::AssembleRawHeaders(headers));
+
+  url_loader_factory_.AddResponse(GURL(kRequestUrl), std::move(head),
+                                  /* content= */ "",
+                                  network::URLLoaderCompletionStatus(net::OK));
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kStatusHistogramName,
+                                       ItemSuggestCache::Status::k5xxStatus, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCache4kkError) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+
+  auto head = network::mojom::URLResponseHead::New();
+  std::string headers("HTTP/1.1 400 Owiee\nContent-type: application/json\n\n");
+  head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(
+      net::HttpUtil::AssembleRawHeaders(headers));
+
+  url_loader_factory_.AddResponse(GURL(kRequestUrl), std::move(head),
+                                  /* content= */ "",
+                                  network::URLLoaderCompletionStatus(net::OK));
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kStatusHistogramName,
+                                       ItemSuggestCache::Status::k4xxStatus, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCache3kkError) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+
+  auto head = network::mojom::URLResponseHead::New();
+  std::string headers("HTTP/1.1 300 Owiee\nContent-type: application/json\n\n");
+  head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(
+      net::HttpUtil::AssembleRawHeaders(headers));
+
+  url_loader_factory_.AddResponse(GURL(kRequestUrl), std::move(head),
+                                  /* content= */ "",
+                                  network::URLLoaderCompletionStatus(net::OK));
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kStatusHistogramName,
+                                       ItemSuggestCache::Status::k3xxStatus, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheEmptyResponse) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl,
+                                  /* content= */ "", net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kEmptyResponse, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheInvalidResponse) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl, "invalid = json", net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kResponseSizeHistogramName,
+                                       /* sample= */ 14,
+                                       /* expected_count= */ 1);
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kJsonParseFailure, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheConversionFailure) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl,
+                                  R"(
+        {
+          "a": ""
+        }
+      )",
+                                  net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kResponseSizeHistogramName, 45, 1);
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kJsonConversionFailure,
+      1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheConversionEmptyResults) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl,
+                                  R"(
+    {
+      "item": [],
+      "suggestionSessionId": "the suggestion id"
+    })",
+                                  net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kResponseSizeHistogramName,
+                                       /* sample= */ 79,
+                                       /* expected_count= */ 1);
+  histogram_tester_.ExpectUniqueSample(
+      kStatusHistogramName, ItemSuggestCache::Status::kNoResultsInResponse, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheSavesResults) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl, kValidJsonResponse,
+                                  net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+
+  task_environment_.RunUntilIdle();
+  histogram_tester_.ExpectUniqueSample(kResponseSizeHistogramName,
+                                       /* sample= */ 419,
+                                       /* expected_count= */ 1);
+  ResultsMatch(itemSuggestCache->GetResults(), "suggestion id 1",
+               {{"item id 1", "display text 1"},
+                {"item id 2", "display text 2"},
+                {"item id 3", "display text 3"}});
+  histogram_tester_.ExpectUniqueSample(kStatusHistogramName,
+                                       ItemSuggestCache::Status::kOk, 1);
+}
+
+TEST_F(ItemSuggestCacheTest, UpdateCacheSmallTimeBetweenUpdates) {
+  std::unique_ptr<ItemSuggestCache> itemSuggestCache =
+      std::make_unique<ItemSuggestCache>(profile_, shared_url_loader_factory_);
+  identity_test_env_->MakePrimaryAccountAvailable(kEmail);
+  identity_test_env_->SetAutomaticIssueOfAccessTokens(true);
+  url_loader_factory_.AddResponse(kRequestUrl,
+                                  R"(
+    {
+      "item": [
+        {
+          "itemId": "item id 1",
+          "displayText": "display text 1"
+        }
+      ],
+      "suggestionSessionId": "suggestion id 1"
+    })",
+                                  net::HTTP_OK);
+
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  ResultsMatch(itemSuggestCache->GetResults(), "suggestion id 1",
+               {{"item id 1", "display text 1"}});
+
+  task_environment_.AdvanceClock(base::TimeDelta::FromMinutes(2));
+
+  url_loader_factory_.AddResponse(kRequestUrl,
+                                  R"(
+    {
+      "item": [
+        {
+          "itemId": "item id 2",
+          "displayText": "display text 2"
+        }
+      ],
+      "suggestionSessionId": "suggestion id 2"
+    })",
+                                  net::HTTP_OK);
+  itemSuggestCache->UpdateCache();
+  task_environment_.RunUntilIdle();
+  // The first set of results are in the cache since the second update occurred
+  // before the minimum time between updates.
+  ResultsMatch(itemSuggestCache->GetResults(), "suggestion id 1",
+               {{"item id 1", "display text 1"}});
+}
+
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/omnibox_result.cc b/chrome/browser/ui/app_list/search/omnibox_result.cc
index 80715c8a..0ddad86 100644
--- a/chrome/browser/ui/app_list/search/omnibox_result.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_result.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
+#include "chrome/browser/ui/app_list/search/search_tags_util.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/omnibox/browser/autocomplete_controller.h"
@@ -68,47 +69,6 @@
             "publicly available image."
         })");
 
-int ACMatchStyleToTagStyle(int styles) {
-  int tag_styles = 0;
-  if (styles & ACMatchClassification::URL)
-    tag_styles |= ash::SearchResultTag::URL;
-  if (styles & ACMatchClassification::MATCH)
-    tag_styles |= ash::SearchResultTag::MATCH;
-  if (styles & ACMatchClassification::DIM)
-    tag_styles |= ash::SearchResultTag::DIM;
-
-  return tag_styles;
-}
-
-// Translates ACMatchClassifications into ChromeSearchResult tags.
-void ACMatchClassificationsToTags(const std::u16string& text,
-                                  const ACMatchClassifications& text_classes,
-                                  ChromeSearchResult::Tags* tags) {
-  int tag_styles = ash::SearchResultTag::NONE;
-  size_t tag_start = 0;
-
-  for (size_t i = 0; i < text_classes.size(); ++i) {
-    const ACMatchClassification& text_class = text_classes[i];
-
-    // Closes current tag.
-    if (tag_styles != ash::SearchResultTag::NONE) {
-      tags->push_back(
-          ash::SearchResultTag(tag_styles, tag_start, text_class.offset));
-      tag_styles = ash::SearchResultTag::NONE;
-    }
-
-    if (text_class.style == ACMatchClassification::NONE)
-      continue;
-
-    tag_start = text_class.offset;
-    tag_styles = ACMatchStyleToTagStyle(text_class.style);
-  }
-
-  if (tag_styles != ash::SearchResultTag::NONE) {
-    tags->push_back(ash::SearchResultTag(tag_styles, tag_start, text.length()));
-  }
-}
-
 // AutocompleteMatchType::Type to vector icon, used for app list.
 const gfx::VectorIcon& TypeToVectorIcon(AutocompleteMatchType::Type type) {
   switch (type) {
diff --git a/chrome/browser/ui/app_list/search/search_controller.cc b/chrome/browser/ui/app_list/search/search_controller.cc
index ea0d8cc..289622d7 100644
--- a/chrome/browser/ui/app_list/search/search_controller.cc
+++ b/chrome/browser/ui/app_list/search/search_controller.cc
@@ -15,6 +15,7 @@
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/metrics_hashes.h"
+#include "base/sequence_token.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -32,6 +33,8 @@
 #include "chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h"
 #include "components/metrics/structured/structured_events.h"
 #include "components/prefs/pref_service.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
 
 namespace app_list {
 
@@ -77,8 +80,10 @@
       list_controller_(list_controller) {
   if (app_list_features::IsCategoricalSearchEnabled()) {
     ranker_ = std::make_unique<RankerDelegate>(profile, model_updater, this);
+    mixer_ = nullptr;
   } else {
     mixer_ = std::make_unique<Mixer>(model_updater);
+    ranker_ = nullptr;
   }
 }
 
@@ -101,8 +106,9 @@
                                 : last_query_.length() - query.length();
     UMA_HISTOGRAM_BOOLEAN(kLauncherSearchQueryLengthJumped, length_diff > 1);
   }
-  for (const auto& provider : providers_)
+  for (const auto& provider : providers_) {
     provider->Start(query);
+  }
 
   dispatching_query_ = false;
   last_query_ = query;
@@ -154,24 +160,49 @@
 
 void SearchController::AddProvider(size_t group_id,
                                    std::unique_ptr<SearchProvider> provider) {
-  if (!ranker_) {
+  if (ranker_) {
+    provider->set_controller(this);
+  } else {
     mixer_->AddProviderToGroup(group_id, provider.get());
+    provider->set_controller(this);
+    provider->set_result_changed_callback(
+        base::BindRepeating(&SearchController::OnResultsChangedWithType,
+                            base::Unretained(this), provider->ResultType()));
+  }
+  providers_.emplace_back(std::move(provider));
+}
+
+void SearchController::SetResults(
+    const ash::AppListSearchResultType provider_type,
+    Results results) {
+  DCHECK(ranker_);
+
+  auto ui_thread = content::GetUIThreadTaskRunner({});
+  if (!ui_thread->RunsTasksInCurrentSequence()) {
+    ui_thread->PostTask(
+        FROM_HERE,
+        base::BindOnce(&SearchController::SetResults, base::Unretained(this),
+                       provider_type, std::move(results)));
+    return;
   }
 
-  provider->set_result_changed_callback(
-      base::BindRepeating(&SearchController::OnResultsChangedWithType,
-                          base::Unretained(this), provider->ResultType()));
-  providers_.emplace_back(std::move(provider));
+  results_[provider_type] = std::move(results);
 }
 
 void SearchController::OnResultsChangedWithType(
     ash::AppListSearchResultType result_type) {
+  if (!mixer_)
+    return;
+
   OnResultsChanged();
   if (results_changed_callback_)
     results_changed_callback_.Run(result_type);
 }
 
 void SearchController::OnResultsChanged() {
+  if (!mixer_)
+    return;
+
   if (dispatching_query_)
     return;
 
@@ -179,11 +210,7 @@
       query_for_recommendation_
           ? ash::SharedAppListConfig::instance().num_start_page_tiles()
           : ash::SharedAppListConfig::instance().max_search_results();
-  if (ranker_) {
-    // TODO(crbug.com/1199206): Implement.
-  } else {
-    mixer_->MixAndPublish(num_max_results, last_query_);
-  }
+  mixer_->MixAndPublish(num_max_results, last_query_);
 }
 
 ChromeSearchResult* SearchController::FindSearchResult(
@@ -218,17 +245,31 @@
 ChromeSearchResult* SearchController::GetResultByTitleForTest(
     const std::string& title) {
   std::u16string target_title = base::ASCIIToUTF16(title);
-  for (const auto& provider : providers_) {
-    for (const auto& result : provider->results()) {
-      if (result->title() == target_title &&
-          result->result_type() ==
-              ash::AppListSearchResultType::kInstalledApp &&
-          !result->is_recommendation()) {
-        return result.get();
+  if (ranker_) {
+    for (const auto& provider_results : results_) {
+      for (const auto& result : provider_results.second) {
+        if (result->title() == target_title &&
+            result->result_type() ==
+                ash::AppListSearchResultType::kInstalledApp &&
+            !result->is_recommendation()) {
+          return result.get();
+        }
       }
     }
+    return nullptr;
+  } else {
+    for (const auto& provider : providers_) {
+      for (const auto& result : provider->results()) {
+        if (result->title() == target_title &&
+            result->result_type() ==
+                ash::AppListSearchResultType::kInstalledApp &&
+            !result->is_recommendation()) {
+          return result.get();
+        }
+      }
+    }
+    return nullptr;
   }
-  return nullptr;
 }
 
 int SearchController::GetLastQueryLength() const {
diff --git a/chrome/browser/ui/app_list/search/search_controller.h b/chrome/browser/ui/app_list/search/search_controller.h
index f9aae4e..7c60db2 100644
--- a/chrome/browser/ui/app_list/search/search_controller.h
+++ b/chrome/browser/ui/app_list/search/search_controller.h
@@ -42,12 +42,21 @@
   using ResultsChangedCallback =
       base::RepeatingCallback<void(ash::AppListSearchResultType)>;
 
+  using ProviderType = ash::AppListSearchResultType;
+  using ResultType = ash::AppListSearchResultType;
+
+  using Results = std::vector<std::unique_ptr<ChromeSearchResult>>;
+  using ResultsMap = base::flat_map<ProviderType, Results>;
+
   SearchController(AppListModelUpdater* model_updater,
                    AppListControllerDelegate* list_controller,
                    ash::AppListNotifier* notifier,
                    Profile* profile);
   virtual ~SearchController();
 
+  SearchController(const SearchController&) = delete;
+  SearchController& operator=(const SearchController&) = delete;
+
   void InitializeRankers();
 
   void Start(const std::u16string& query);
@@ -62,6 +71,10 @@
   // Takes ownership of |provider| and associates it with given mixer group.
   void AddProvider(size_t group_id, std::unique_ptr<SearchProvider> provider);
 
+  // Update the controller with the given results. Used only if the categorical
+  // search feature flag is enabled.
+  void SetResults(ash::AppListSearchResultType provider_type, Results results);
+
   virtual ChromeSearchResult* FindSearchResult(const std::string& result_id);
   ChromeSearchResult* GetResultByTitleForTest(const std::string& title);
 
@@ -118,13 +131,15 @@
   // is enabled.
   std::unique_ptr<RankerDelegate> ranker_;
 
+  // Storage for all search results for the current query. Only used when
+  // categorical search is enabled.
+  ResultsMap results_;
+
   std::unique_ptr<Mixer> mixer_;
   std::unique_ptr<SearchMetricsObserver> metrics_observer_;
   using Providers = std::vector<std::unique_ptr<SearchProvider>>;
   Providers providers_;
   AppListControllerDelegate* list_controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(SearchController);
 };
 
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_provider.cc b/chrome/browser/ui/app_list/search/search_provider.cc
index c1ac34ee..4c219e5 100644
--- a/chrome/browser/ui/app_list/search/search_provider.cc
+++ b/chrome/browser/ui/app_list/search/search_provider.cc
@@ -6,7 +6,9 @@
 
 #include <utility>
 
+#include "ash/public/cpp/app_list/app_list_features.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
+#include "chrome/browser/ui/app_list/search/search_controller.h"
 
 namespace app_list {
 
@@ -18,18 +20,33 @@
   FireResultChanged();
 }
 
+// TODO(crbug.com/1199206): As part of the change to category-based search,
+// the method of updating the search controller is being changed. Once
+// categorical search is enabled, we should clean up the SearchProvider
+// interface.
+
 void SearchProvider::SwapResults(Results* new_results) {
-  results_.swap(*new_results);
-  FireResultChanged();
+  if (app_list_features::IsCategoricalSearchEnabled()) {
+    Results results;
+    results.swap(*new_results);
+    search_controller_->SetResults(ResultType(), std::move(results));
+  } else {
+    results_.swap(*new_results);
+    FireResultChanged();
+  }
 }
 
 void SearchProvider::ClearResults() {
-  results_.clear();
-  FireResultChanged();
+  if (!app_list_features::IsCategoricalSearchEnabled()) {
+    results_.clear();
+    FireResultChanged();
+  }
 }
 
 void SearchProvider::ClearResultsSilently() {
-  results_.clear();
+  if (!app_list_features::IsCategoricalSearchEnabled()) {
+    results_.clear();
+  }
 }
 
 void SearchProvider::FireResultChanged() {
diff --git a/chrome/browser/ui/app_list/search/search_provider.h b/chrome/browser/ui/app_list/search/search_provider.h
index d14ed0b1..a7a5bb2 100644
--- a/chrome/browser/ui/app_list/search/search_provider.h
+++ b/chrome/browser/ui/app_list/search/search_provider.h
@@ -18,6 +18,7 @@
 namespace app_list {
 
 enum class RankingItemType;
+class SearchController;
 
 class SearchProvider {
  public:
@@ -42,6 +43,10 @@
   // Returns the main result type created by this provider.
   virtual ash::AppListSearchResultType ResultType() = 0;
 
+  void set_controller(SearchController* controller) {
+    search_controller_ = controller;
+  }
+
   void set_result_changed_callback(ResultChangedCallback callback) {
     result_changed_callback_ = std::move(callback);
   }
@@ -67,6 +72,7 @@
   void FireResultChanged();
 
   ResultChangedCallback result_changed_callback_;
+  SearchController* search_controller_;
   Results results_;
 
   DISALLOW_COPY_AND_ASSIGN(SearchProvider);
diff --git a/chrome/browser/ui/app_list/search/search_tags_util.cc b/chrome/browser/ui/app_list/search/search_tags_util.cc
new file mode 100644
index 0000000..761619e1
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/search_tags_util.cc
@@ -0,0 +1,68 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/app_list/search/search_tags_util.h"
+
+#include "ash/public/cpp/app_list/app_list_types.h"
+#include "components/omnibox/browser/autocomplete_match_classification.h"
+
+namespace app_list {
+namespace {
+
+int ACMatchStyleToTagStyle(int styles) {
+  int tag_styles = 0;
+  if (styles & ACMatchClassification::URL)
+    tag_styles |= ash::SearchResultTag::URL;
+  if (styles & ACMatchClassification::MATCH)
+    tag_styles |= ash::SearchResultTag::MATCH;
+  if (styles & ACMatchClassification::DIM)
+    tag_styles |= ash::SearchResultTag::DIM;
+
+  return tag_styles;
+}
+
+}  // namespace
+
+void ACMatchClassificationsToTags(const std::u16string& text,
+                                  const ACMatchClassifications& text_classes,
+                                  ChromeSearchResult::Tags* tags) {
+  int tag_styles = ash::SearchResultTag::NONE;
+  size_t tag_start = 0;
+
+  for (size_t i = 0; i < text_classes.size(); ++i) {
+    const ACMatchClassification& text_class = text_classes[i];
+
+    // Closes current tag.
+    if (tag_styles != ash::SearchResultTag::NONE) {
+      tags->push_back(
+          ash::SearchResultTag(tag_styles, tag_start, text_class.offset));
+      tag_styles = ash::SearchResultTag::NONE;
+    }
+
+    if (text_class.style == ACMatchClassification::NONE)
+      continue;
+
+    tag_start = text_class.offset;
+    tag_styles = ACMatchStyleToTagStyle(text_class.style);
+  }
+
+  if (tag_styles != ash::SearchResultTag::NONE) {
+    tags->push_back(ash::SearchResultTag(tag_styles, tag_start, text.length()));
+  }
+}
+
+ChromeSearchResult::Tags CalculateTags(const std::u16string& query,
+                                       const std::u16string& text) {
+  const auto matches = FindTermMatches(query, text);
+  const auto classes =
+      ClassifyTermMatches(matches, text.length(),
+                          /*match_style=*/ACMatchClassification::MATCH,
+                          /*non_match_style=*/ACMatchClassification::NONE);
+
+  ChromeSearchResult::Tags tags;
+  ACMatchClassificationsToTags(text, classes, &tags);
+  return tags;
+}
+
+}  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_tags_util.h b/chrome/browser/ui/app_list/search/search_tags_util.h
new file mode 100644
index 0000000..aa5b571
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/search_tags_util.h
@@ -0,0 +1,25 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_TAGS_UTIL_H_
+#define CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_TAGS_UTIL_H_
+
+#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
+#include "components/omnibox/browser/autocomplete_match.h"
+
+namespace app_list {
+
+// Translates ACMatchClassifications into ChromeSearchResult tags.
+void ACMatchClassificationsToTags(const std::u16string& text,
+                                  const ACMatchClassifications& text_classes,
+                                  ChromeSearchResult::Tags* tags);
+
+// Calculates ChromeSearchResult tags for highlighting occurrences of |query| in
+// |text|.
+ChromeSearchResult::Tags CalculateTags(const std::u16string& query,
+                                       const std::u16string& text);
+
+}  // namespace app_list
+
+#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_TAGS_UTIL_H_
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
index 1c0f57789..3fa2987 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
@@ -6,6 +6,8 @@
 
 #include <vector>
 
+#include "ash/public/cpp/ash_features.h"
+#include "chrome/browser/chromeos/file_manager/path_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_context.h"
 
@@ -35,6 +37,17 @@
 }
 
 void HoldingSpaceDownloadsDelegate::Init() {
+  // ARC downloads.
+  if (features::IsTemporaryHoldingSpaceArcIntegrationEnabled()) {
+    // NOTE: The `arc_intent_helper_bridge` may be `nullptr` if the `profile()`
+    // is not allowed to use ARC, e.g. if the `profile()` is OTR.
+    auto* const arc_intent_helper_bridge =
+        arc::ArcIntentHelperBridge::GetForBrowserContext(profile());
+    if (arc_intent_helper_bridge)
+      arc_intent_helper_observation_.Observe(arc_intent_helper_bridge);
+  }
+
+  // Chrome downloads.
   download_manager_observation_.Observe(
       download_manager_for_testing
           ? download_manager_for_testing
@@ -51,6 +64,33 @@
     OnManagerInitialized();
 }
 
+void HoldingSpaceDownloadsDelegate::OnArcDownloadAdded(
+    const base::FilePath& relative_path,
+    const std::string& owner_package_name) {
+  DCHECK(features::IsTemporaryHoldingSpaceArcIntegrationEnabled());
+  if (is_restoring_persistence())
+    return;
+
+  // It is expected that `owner_package_name` be non-empty. Media files from
+  // Chrome are synced to ARC via media scan and have `NULL` owning packages but
+  // are expected *not* to have generated `OnArcDownloadAdded()` events.
+  if (owner_package_name.empty()) {
+    NOTREACHED();
+    return;
+  }
+
+  // It is expected that `relative_path` always be contained within `Download/`
+  // which refers to the public downloads folder for the current `profile()`.
+  base::FilePath path(
+      file_manager::util::GetDownloadsFolderForProfile(profile()));
+  if (!base::FilePath("Download/").AppendRelativePath(relative_path, &path)) {
+    NOTREACHED();
+    return;
+  }
+
+  OnDownloadCompleted(HoldingSpaceItem::Type::kArcDownload, path);
+}
+
 void HoldingSpaceDownloadsDelegate::OnManagerInitialized() {
   if (is_restoring_persistence())
     return;
@@ -97,7 +137,8 @@
     download::DownloadItem* item) {
   switch (item->GetState()) {
     case download::DownloadItem::COMPLETE:
-      OnDownloadCompleted(item->GetFullPath());
+      OnDownloadCompleted(HoldingSpaceItem::Type::kDownload,
+                          item->GetFullPath());
       FALLTHROUGH;
     case download::DownloadItem::CANCELLED:
     case download::DownloadItem::INTERRUPTED:
@@ -110,9 +151,11 @@
 }
 
 void HoldingSpaceDownloadsDelegate::OnDownloadCompleted(
+    HoldingSpaceItem::Type type,
     const base::FilePath& file_path) {
+  DCHECK(HoldingSpaceItem::IsDownload(type));
   if (!is_restoring_persistence())
-    item_downloaded_callback_.Run(file_path);
+    item_downloaded_callback_.Run(type, file_path);
 }
 
 void HoldingSpaceDownloadsDelegate::RemoveObservers() {
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
index 279b61e3..3c30d28a 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.h
@@ -9,6 +9,8 @@
 #include "base/scoped_multi_source_observation.h"
 #include "base/scoped_observation.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_delegate.h"
+#include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/intent_helper/arc_intent_helper_observer.h"
 #include "components/download/public/common/download_item.h"
 #include "content/public/browser/download_manager.h"
 
@@ -21,13 +23,16 @@
 // A delegate of `HoldingSpaceKeyedService` tasked with monitoring the status of
 // of downloads and notifying a callback on download completion.
 class HoldingSpaceDownloadsDelegate : public HoldingSpaceKeyedServiceDelegate,
+                                      public arc::ArcIntentHelperObserver,
                                       public content::DownloadManager::Observer,
                                       public download::DownloadItem::Observer {
  public:
-  // Callback to be invoked when a download is completed. Note that this
-  // callback will only be invoked after holding space persistence is restored.
+  // Callback to be invoked when a download is completed. Note that the
+  // specified type must be a download type. Also note that this callback will
+  // only be invoked after holding space persistence is restored.
   using ItemDownloadedCallback =
-      base::RepeatingCallback<void(const base::FilePath&)>;
+      base::RepeatingCallback<void(HoldingSpaceItem::Type,
+                                   const base::FilePath&)>;
 
   HoldingSpaceDownloadsDelegate(
       Profile* profile,
@@ -48,6 +53,10 @@
   void Init() override;
   void OnPersistenceRestored() override;
 
+  // arc::ArcIntentHelperObserver:
+  void OnArcDownloadAdded(const base::FilePath& relative_path,
+                          const std::string& owner_package_name) override;
+
   // content::DownloadManager::Observer:
   void OnManagerInitialized() override;
   void ManagerGoingDown(content::DownloadManager* manager) override;
@@ -57,8 +66,11 @@
   // download::DownloadItem::Observer:
   void OnDownloadUpdated(download::DownloadItem* item) override;
 
-  // Invoked when the specified `file_path` has completed downloading.
-  void OnDownloadCompleted(const base::FilePath& file_path);
+  // Invoked when a download of the specified `type` at the specified
+  // `file_path` has completed downloading. Note that the specified `type` must
+  // be a download type.
+  void OnDownloadCompleted(HoldingSpaceItem::Type type,
+                           const base::FilePath& file_path);
 
   // Removes all observers.
   void RemoveObservers();
@@ -66,6 +78,10 @@
   // Callback to invoke when a download is completed.
   ItemDownloadedCallback item_downloaded_callback_;
 
+  base::ScopedObservation<arc::ArcIntentHelperBridge,
+                          arc::ArcIntentHelperObserver>
+      arc_intent_helper_observation_{this};
+
   base::ScopedObservation<content::DownloadManager,
                           content::DownloadManager::Observer>
       download_manager_observation_{this};
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.cc
index 61050674..e6a0ff6 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.cc
@@ -232,7 +232,9 @@
 }
 
 void HoldingSpaceKeyedService::AddDownload(
+    HoldingSpaceItem::Type type,
     const base::FilePath& download_file) {
+  DCHECK(HoldingSpaceItem::IsDownload(type));
   const bool already_exists = holding_space_model_.ContainsItem(
       HoldingSpaceItem::Type::kDownload, download_file);
   if (already_exists)
@@ -244,7 +246,7 @@
     return;
 
   AddItem(HoldingSpaceItem::CreateFileBackedItem(
-      HoldingSpaceItem::Type::kDownload, download_file, file_system_url,
+      type, download_file, file_system_url,
       base::BindOnce(&holding_space_util::ResolveImage, &thumbnail_loader_)));
 }
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h
index 8f0088208..028ca98 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h
@@ -76,8 +76,10 @@
   // manager app (otherwise, the item will be dropped silently).
   void AddScreenshot(const base::FilePath& screenshot_path);
 
-  // Adds a download item backed by the provided absolute file path.
-  void AddDownload(const base::FilePath& download_path);
+  // Adds a download item of the specified `type` backed by the provided
+  // absolute file path. Note that `type` must refer to a download type.
+  void AddDownload(HoldingSpaceItem::Type type,
+                   const base::FilePath& download_path);
 
   // Adds a nearby share item backed by the provided absolute file path.
   void AddNearbyShare(const base::FilePath& nearby_share_path);
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.cc
index 647fd99..49e0240 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/chromeos/fileapi/file_change_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service.h"
+#include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_type.h"
@@ -28,6 +29,8 @@
     : BrowserContextKeyedServiceFactory(
           "HoldingSpaceService",
           BrowserContextDependencyManager::GetInstance()) {
+  if (features::IsTemporaryHoldingSpaceArcIntegrationEnabled())
+    DependsOn(arc::ArcIntentHelperBridge::GetFactory());
   DependsOn(chromeos::FileChangeServiceFactory::GetInstance());
   DependsOn(drive::DriveIntegrationServiceFactory::GetInstance());
   DependsOn(file_manager::VolumeManagerFactory::GetInstance());
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
index 336e853..04fd9b8 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -40,6 +40,8 @@
 #include "chrome/test/base/testing_profile_manager.h"
 #include "chromeos/disks/disk_mount_manager.h"
 #include "components/account_id/account_id.h"
+#include "components/arc/arc_service_manager.h"
+#include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/download/public/common/mock_download_item.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/sync_preferences/pref_service_mock_factory.h"
@@ -79,6 +81,14 @@
   return types;
 }
 
+std::unique_ptr<KeyedService> BuildArcIntentHelperBridge(
+    content::BrowserContext* context) {
+  EXPECT_TRUE(arc::ArcServiceManager::Get());
+  EXPECT_TRUE(arc::ArcServiceManager::Get()->arc_bridge_service());
+  return std::make_unique<arc::ArcIntentHelperBridge>(
+      context, arc::ArcServiceManager::Get()->arc_bridge_service());
+}
+
 std::unique_ptr<KeyedService> BuildVolumeManager(
     content::BrowserContext* context) {
   return std::make_unique<file_manager::VolumeManager>(
@@ -274,9 +284,7 @@
  public:
   HoldingSpaceKeyedServiceTest()
       : fake_user_manager_(new FakeChromeUserManager),
-        user_manager_enabler_(base::WrapUnique(fake_user_manager_)),
-        download_manager_(
-            std::make_unique<testing::NiceMock<MockDownloadManager>>()) {
+        user_manager_enabler_(base::WrapUnique(fake_user_manager_)) {
     scoped_feature_list_.InitAndEnableFeature(features::kTemporaryHoldingSpace);
     HoldingSpaceImage::SetUseZeroInvalidationDelayForTesting(true);
   }
@@ -302,6 +310,8 @@
     return profile_manager()->CreateTestingProfile(
         kPrimaryProfileName,
         /*testing_factories=*/{
+            {arc::ArcIntentHelperBridge::GetFactory(),
+             base::BindRepeating(&BuildArcIntentHelperBridge)},
             {file_manager::VolumeManagerFactory::GetInstance(),
              base::BindRepeating(&BuildVolumeManager)}});
   }
@@ -316,7 +326,9 @@
         kSecondaryProfileName, std::move(prefs), u"Test profile",
         1 /*avatar_id*/, std::string() /*supervised_user_id*/,
         /*testing_factories=*/
-        {{file_manager::VolumeManagerFactory::GetInstance(),
+        {{arc::ArcIntentHelperBridge::GetFactory(),
+          base::BindRepeating(&BuildArcIntentHelperBridge)},
+         {file_manager::VolumeManagerFactory::GetInstance(),
           base::BindRepeating(&BuildVolumeManager)}});
   }
 
@@ -414,7 +426,7 @@
     return item;
   }
 
-  MockDownloadManager* download_manager() { return download_manager_.get(); }
+  MockDownloadManager* download_manager() { return &download_manager_; }
 
  private:
   // BrowserWithTestWindowTest:
@@ -447,7 +459,8 @@
 
   FakeChromeUserManager* fake_user_manager_;
   user_manager::ScopedUserManager user_manager_enabler_;
-  std::unique_ptr<MockDownloadManager> download_manager_;
+  testing::NiceMock<MockDownloadManager> download_manager_;
+  arc::ArcServiceManager arc_service_manager_;
 
   base::test::ScopedFeatureList scoped_feature_list_;
 };
@@ -547,7 +560,9 @@
   guest_profile_builder.SetGuestSession();
   guest_profile_builder.SetProfileName("guest_profile");
   guest_profile_builder.AddTestingFactories(
-      {{file_manager::VolumeManagerFactory::GetInstance(),
+      {{arc::ArcIntentHelperBridge::GetFactory(),
+        base::BindRepeating(&BuildArcIntentHelperBridge)},
+       {file_manager::VolumeManagerFactory::GetInstance(),
         base::BindRepeating(&BuildVolumeManager)}});
   std::unique_ptr<TestingProfile> guest_profile = guest_profile_builder.Build();
 
@@ -1468,10 +1483,12 @@
   holding_space_service->AddScreenshot(file_path_1);
 
   const base::FilePath file_path_2 = test_mount_2->CreateArbitraryFile();
-  holding_space_service->AddDownload(file_path_2);
+  holding_space_service->AddDownload(HoldingSpaceItem::Type::kDownload,
+                                     file_path_2);
 
   const base::FilePath file_path_3 = test_mount_1->CreateArbitraryFile();
-  holding_space_service->AddDownload(file_path_3);
+  holding_space_service->AddDownload(HoldingSpaceItem::Type::kDownload,
+                                     file_path_3);
 
   EXPECT_EQ(3u, GetProfile()
                     ->GetPrefs()
@@ -1656,17 +1673,61 @@
                                   downloads_mount->name()));
 }
 
+class HoldingSpaceKeyedServiceArcIntegrationTest
+    : public HoldingSpaceKeyedServiceTest {
+ public:
+  HoldingSpaceKeyedServiceArcIntegrationTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kTemporaryHoldingSpaceArcIntegration);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(HoldingSpaceKeyedServiceArcIntegrationTest, AddArcDownloadItem) {
+  // Wait for the holding space model to attach.
+  TestingProfile* profile = GetProfile();
+  HoldingSpaceModelAttachedWaiter(profile).Wait();
+
+  // Verify the holding space `model` is empty.
+  HoldingSpaceModel* const model = HoldingSpaceController::Get()->model();
+  ASSERT_EQ(0u, model->items().size());
+
+  // Create a test downloads mount point.
+  std::unique_ptr<ScopedTestMountPoint> downloads_mount =
+      ScopedTestMountPoint::CreateAndMountDownloads(profile);
+  ASSERT_TRUE(downloads_mount->IsValid());
+
+  // Create a fake download file on the local file system.
+  const base::FilePath file_path = downloads_mount->CreateFile(
+      /*relative_path=*/base::FilePath("Download.png"), /*content=*/"foo");
+
+  // Simulate an event from ARC to indicate that the Android application with
+  // package `com.bar.foo` added a download at `file_path`.
+  auto* arc_intent_helper_bridge =
+      arc::ArcIntentHelperBridge::GetForBrowserContext(profile);
+  ASSERT_TRUE(arc_intent_helper_bridge);
+  arc_intent_helper_bridge->OnDownloadAdded(
+      /*relative_path=*/"Download/Download.png",
+      /*owner_package_name=*/"com.bar.foo");
+
+  // Verify that an item of type `kArcDownload` was added to holding space.
+  ASSERT_EQ(1u, model->items().size());
+  const HoldingSpaceItem* arc_download_item = model->items()[0].get();
+  EXPECT_EQ(arc_download_item->type(), HoldingSpaceItem::Type::kArcDownload);
+  EXPECT_EQ(arc_download_item->file_path(),
+            file_manager::util::GetDownloadsFolderForProfile(profile).Append(
+                base::FilePath("Download.png")));
+}
+
 class HoldingSpaceKeyedServiceNearbySharingTest
     : public HoldingSpaceKeyedServiceTest {
  public:
   HoldingSpaceKeyedServiceNearbySharingTest() {
-    scoped_feature_list_.InitWithFeatures(
-        {::features::kNearbySharing, ash::features::kTemporaryHoldingSpace},
-        {});
+    scoped_feature_list_.InitAndEnableFeature(::features::kNearbySharing);
   }
 
-  ~HoldingSpaceKeyedServiceNearbySharingTest() override = default;
-
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
 };
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.cc b/chrome/browser/ui/ash/network/network_state_notifier.cc
index 537823a..9e934e3 100644
--- a/chrome/browser/ui/ash/network/network_state_notifier.cc
+++ b/chrome/browser/ui/ash/network/network_state_notifier.cc
@@ -16,10 +16,12 @@
 #include "chrome/browser/notifications/system_notification_helper.h"
 #include "chrome/browser/ui/ash/system_tray_client.h"
 #include "chrome/grit/generated_resources.h"
+#include "chromeos/network/cellular_esim_profile_handler.h"
 #include "chromeos/network/network_configuration_handler.h"
 #include "chromeos/network/network_connect.h"
 #include "chromeos/network/network_connection_handler.h"
 #include "chromeos/network/network_event_log.h"
+#include "chromeos/network/network_name_util.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
 #include "chromeos/network/shill_property_util.h"
@@ -504,11 +506,21 @@
   NET_LOG(ERROR) << "Notify: " << log_id
                  << ": Connect error: " + base::UTF16ToUTF8(error);
 
+  CellularESimProfileHandler* cellular_esim_profile_handler =
+      NetworkHandler::Get()->cellular_esim_profile_handler();
   std::string network_name;
-  if (shill_properties) {
+  if (network) {
+    base::Optional<std::string> esim_name =
+        network_name_util::GetESimProfileName(cellular_esim_profile_handler,
+                                              network);
+    if (esim_name)
+      network_name = *esim_name;
+  }
+  if (network_name.empty() && shill_properties) {
     network_name = shill_property_util::GetNameFromProperties(
         service_path, shill_properties.value());
   }
+
   std::string network_error_details =
       GetStringFromDictionary(shill_properties, shill::kErrorDetailsProperty);
 
diff --git a/chrome/browser/ui/ash/network/network_state_notifier_unittest.cc b/chrome/browser/ui/ash/network/network_state_notifier_unittest.cc
index 4d6189b..5a99200e 100644
--- a/chrome/browser/ui/ash/network/network_state_notifier_unittest.cc
+++ b/chrome/browser/ui/ash/network/network_state_notifier_unittest.cc
@@ -7,20 +7,27 @@
 #include <memory>
 
 #include "ash/public/cpp/test/test_system_tray_client.h"
+#include "ash/strings/grit/ash_strings.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/notifications/system_notification_helper.h"
+#include "chrome/grit/generated_resources.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "chromeos/dbus/hermes/hermes_clients.h"
 #include "chromeos/dbus/shill/shill_clients.h"
 #include "chromeos/dbus/shill/shill_device_client.h"
 #include "chromeos/dbus/shill/shill_service_client.h"
 #include "chromeos/network/network_connect.h"
 #include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_state_handler.h"
+#include "chromeos/network/network_state_test_helper.h"
+#include "chromeos/network/test_cellular_esim_profile_handler.h"
 #include "testing/platform_test.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/message_center/public/cpp/notification.h"
 
 namespace chromeos {
@@ -28,6 +35,8 @@
 
 const char kWiFi1Guid[] = "wifi1_guid";
 const char kCellular1Guid[] = "cellular1_guid";
+const char kCellular1NetworkName[] = "cellular1";
+const char kTestEsimProfileName[] = "test_profile_name";
 
 class NetworkConnectTestDelegate : public NetworkConnect::Delegate {
  public:
@@ -67,6 +76,7 @@
   void SetUp() override {
     BrowserWithTestWindowTest::SetUp();
     shill_clients::InitializeFakes();
+    hermes_clients::InitializeFakes();
     SetupDefaultShillState();
     NetworkHandler::Initialize();
     base::RunLoop().RunUntilIdle();
@@ -89,6 +99,33 @@
   }
 
  protected:
+  void SetupESimNetwork() {
+    const char kCellularEsimServicePath[] = "/service/cellular_esim1";
+    const char kTestEuiccPath[] = "euicc_path";
+    const char kTestEidName[] = "eid";
+    const char kTestIccid[] = "iccid";
+
+    ShillServiceClient::TestInterface* service_test =
+        ShillServiceClient::Get()->GetTestInterface();
+    service_test->ClearServices();
+
+    hermes_manager_test_ = HermesManagerClient::Get()->GetTestInterface();
+    hermes_euicc_test_ = HermesEuiccClient::Get()->GetTestInterface();
+
+    hermes_manager_test_->AddEuicc(dbus::ObjectPath(kTestEuiccPath),
+                                   kTestEidName, /*is_active=*/true,
+                                   /*physical_slot=*/0);
+
+    hermes_euicc_test_->AddCarrierProfile(
+        dbus::ObjectPath(kCellularEsimServicePath),
+        dbus::ObjectPath(kTestEuiccPath), kTestIccid, kTestEsimProfileName,
+        "service_provider", "activation_code", kCellularEsimServicePath,
+        hermes::profile::State::kActive,
+        hermes::profile::ProfileClass::kOperational,
+        HermesEuiccClient::TestInterface::AddCarrierProfileBehavior::
+            kAddProfileWithService);
+    base::RunLoop().RunUntilIdle();
+  }
   void SetupDefaultShillState() {
     ShillDeviceClient::TestInterface* device_test =
         ShillDeviceClient::Get()->GetTestInterface();
@@ -118,8 +155,9 @@
     const char kCellular1Iccid[] = "iccid";
     device_test->AddDevice(kCellularDevicePath, shill::kTypeCellular,
                            "stub_cellular_device1");
-    service_test->AddService(kCellular1ServicePath, kCellular1Guid, "cellular1",
-                             shill::kTypeCellular, shill::kStateIdle, true);
+    service_test->AddService(kCellular1ServicePath, kCellular1Guid,
+                             kCellular1NetworkName, shill::kTypeCellular,
+                             shill::kStateIdle, true);
     service_test->SetServiceProperty(kCellular1ServicePath,
                                      shill::kIccidProperty,
                                      base::Value(kCellular1Iccid));
@@ -145,6 +183,9 @@
     base::RunLoop().RunUntilIdle();
   }
 
+  std::unique_ptr<NetworkStateHandler> network_state_handler_;
+  HermesManagerClient::TestInterface* hermes_manager_test_;
+  HermesEuiccClient::TestInterface* hermes_euicc_test_;
   ash::TestSystemTrayClient test_system_tray_client_;
   std::unique_ptr<NetworkConnectTestDelegate> network_connect_delegate_;
 
@@ -176,10 +217,39 @@
           NetworkStateNotifier::kNetworkConnectNotificationId);
   EXPECT_TRUE(notification);
 
+  EXPECT_EQ(
+      notification->message(),
+      l10n_util::GetStringFUTF16(
+          IDS_NETWORK_CONNECTION_ERROR_MESSAGE,
+          base::UTF8ToUTF16(kCellular1NetworkName),
+          l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIM_CARD_LOCKED)));
+
   // Clicking the notification should open SIM unlock settings.
   notification->delegate()->Click(/*button_index=*/base::nullopt,
                                   /*reply=*/base::nullopt);
   EXPECT_EQ(1, test_system_tray_client_.show_sim_unlock_settings_count());
 }
 
+TEST_F(NetworkStateNotifierTest, CellularEsimConnectionFailure) {
+  SetupESimNetwork();
+  TestingBrowserProcess::GetGlobal()->SetSystemNotificationHelper(
+      std::make_unique<SystemNotificationHelper>());
+  NotificationDisplayServiceTester tester(nullptr /* profile */);
+  NetworkConnect::Get()->ConnectToNetworkId("esim_guidiccid");
+  base::RunLoop().RunUntilIdle();
+
+  // Failure should spawn a notification.
+  base::Optional<message_center::Notification> notification =
+      tester.GetNotification(
+          NetworkStateNotifier::kNetworkConnectNotificationId);
+  EXPECT_TRUE(notification);
+
+  EXPECT_EQ(
+      notification->message(),
+      l10n_util::GetStringFUTF16(
+          IDS_NETWORK_CONNECTION_ERROR_MESSAGE,
+          base::UTF8ToUTF16(kTestEsimProfileName),
+          l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIM_CARD_LOCKED)));
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index d805b7ee..5683d9c 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -634,7 +634,8 @@
 
 void ManagePasswordsUIController::OnLeakDialogHidden() {
   dialog_controller_.reset();
-  if (GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
+  if (GetState() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE ||
+      GetState() == password_manager::ui::PENDING_PASSWORD_STATE) {
     bubble_status_ = BubbleStatus::SHOULD_POP_UP;
     UpdateBubbleAndIconVisibility();
   }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
index 82c2d8d2..0125cbf 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -1358,6 +1358,37 @@
 #endif
 }
 
+TEST_F(ManagePasswordsUIControllerTest, SaveBubbleAfterLeakCheck) {
+  std::vector<const PasswordForm*> matches;
+  auto test_form_manager = CreateFormManagerWithBestMatches(&matches);
+  EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
+  controller()->OnPasswordSubmitted(std::move(test_form_manager));
+  EXPECT_TRUE(controller()->opened_automatic_bubble());
+
+  // Leak detection dialog hides the bubble.
+  PasswordLeakDialogMock dialog_prompt;
+  CredentialLeakDialogController* dialog_controller = nullptr;
+  EXPECT_CALL(*controller(), CreateCredentialLeakPrompt)
+      .WillOnce(DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt)));
+  EXPECT_CALL(dialog_prompt, ShowCredentialLeakPrompt);
+  controller()->OnCredentialLeak(
+      password_manager::CreateLeakType(password_manager::IsSaved(false),
+                                       password_manager::IsReused(false),
+                                       password_manager::IsSyncing(false)),
+      GURL(kExampleUrl));
+  // The bubble is gone.
+  EXPECT_FALSE(controller()->opened_bubble());
+
+  // Close the dialog.
+  EXPECT_CALL(dialog_prompt, ControllerGone);
+  EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility());
+  dialog_controller->OnAcceptDialog();
+
+  // The save bubble is back.
+  EXPECT_TRUE(controller()->opened_automatic_bubble());
+  ExpectIconAndControllerStateIs(password_manager::ui::PENDING_PASSWORD_STATE);
+}
+
 TEST_F(ManagePasswordsUIControllerTest, UpdateBubbleAfterLeakCheck) {
   std::vector<const PasswordForm*> matches = {&test_local_form()};
   auto test_form_manager = CreateFormManagerWithBestMatches(&matches);
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index 0672cfda..d166480f 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -65,7 +65,7 @@
 #include "chrome/browser/ssl/chrome_security_blocking_page_factory.h"
 #include "chrome/browser/ssl/connection_help_tab_helper.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
-#include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h"
+#include "chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h"
 #include "chrome/browser/subresource_redirect/subresource_redirect_observer.h"
 #include "chrome/browser/sync/sessions/sync_sessions_router_tab_helper.h"
 #include "chrome/browser/sync/sessions/sync_sessions_web_contents_router_factory.h"
@@ -252,8 +252,7 @@
   ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient(
       web_contents,
       autofill::ChromeAutofillClient::FromWebContents(web_contents));
-  ChromeSubresourceFilterClient::CreateThrottleManagerWithClientForWebContents(
-      web_contents);
+  CreateSubresourceFilterThrottleManagerForWebContents(web_contents);
   ChromeTranslateClient::CreateForWebContents(web_contents);
   ConnectionHelpTabHelper::CreateForWebContents(web_contents);
   CoreTabHelper::CreateForWebContents(web_contents);
diff --git a/chrome/browser/ui/user_education/scoped_new_badge_tracker.cc b/chrome/browser/ui/user_education/scoped_new_badge_tracker.cc
index 5cdca33..41b92e90 100644
--- a/chrome/browser/ui/user_education/scoped_new_badge_tracker.cc
+++ b/chrome/browser/ui/user_education/scoped_new_badge_tracker.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/ui/user_education/scoped_new_badge_tracker.h"
 
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
-#include "base/stl_util.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "components/feature_engagement/public/tracker.h"
 
diff --git a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view_browsertest.cc b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view_browsertest.cc
index 8d7d2319..85a96b1 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view_browsertest.cc
+++ b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view_browsertest.cc
@@ -14,8 +14,8 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/views/crostini/crostini_dialogue_browser_test_util.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "components/crx_file/id_util.h"
 #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/ui/views/media_router/presentation_receiver_window_view.cc b/chrome/browser/ui/views/media_router/presentation_receiver_window_view.cc
index df63483..e58f902 100644
--- a/chrome/browser/ui/views/media_router/presentation_receiver_window_view.cc
+++ b/chrome/browser/ui/views/media_router/presentation_receiver_window_view.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
-#include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h"
+#include "chrome/browser/subresource_filter/chrome_content_subresource_filter_throttle_manager_factory.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
@@ -164,8 +164,7 @@
   SearchTabHelper::CreateForWebContents(web_contents);
   TabDialogs::CreateForWebContents(web_contents);
   FramebustBlockTabHelper::CreateForWebContents(web_contents);
-  ChromeSubresourceFilterClient::CreateThrottleManagerWithClientForWebContents(
-      web_contents);
+  CreateSubresourceFilterThrottleManagerForWebContents(web_contents);
   InfoBarService::CreateForWebContents(web_contents);
   MixedContentSettingsTabHelper::CreateForWebContents(web_contents);
   blocked_content::PopupBlockerTabHelper::CreateForWebContents(web_contents);
diff --git a/chrome/browser/ui/views/theme_copying_widget.cc b/chrome/browser/ui/views/theme_copying_widget.cc
index b5a8044..4984622c 100644
--- a/chrome/browser/ui/views/theme_copying_widget.cc
+++ b/chrome/browser/ui/views/theme_copying_widget.cc
@@ -5,14 +5,27 @@
 #include "chrome/browser/ui/views/theme_copying_widget.h"
 
 ThemeCopyingWidget::ThemeCopyingWidget(views::Widget* role_model)
-    : role_model_(role_model) {}
+    : role_model_(role_model) {
+  observed_widget_.Observe(role_model);
+}
 
-ThemeCopyingWidget::~ThemeCopyingWidget() {}
+ThemeCopyingWidget::~ThemeCopyingWidget() = default;
 
 const ui::NativeTheme* ThemeCopyingWidget::GetNativeTheme() const {
-  return role_model_->GetNativeTheme();
+  return observed_widget_.IsObserving() ? role_model_->GetNativeTheme()
+                                        : nullptr;
 }
 
 const ui::ThemeProvider* ThemeCopyingWidget::GetThemeProvider() const {
-  return role_model_->GetThemeProvider();
+  return observed_widget_.IsObserving() ? role_model_->GetThemeProvider()
+                                        : nullptr;
+}
+
+void ThemeCopyingWidget::OnWidgetDestroying(Widget* widget) {
+  observed_widget_.Reset();
+  role_model_ = nullptr;
+}
+
+void ThemeCopyingWidget::OnWidgetThemeChanged(Widget* widget) {
+  ThemeChanged();
 }
diff --git a/chrome/browser/ui/views/theme_copying_widget.h b/chrome/browser/ui/views/theme_copying_widget.h
index 2e9aebf3..b694963 100644
--- a/chrome/browser/ui/views/theme_copying_widget.h
+++ b/chrome/browser/ui/views/theme_copying_widget.h
@@ -5,24 +5,33 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_THEME_COPYING_WIDGET_H_
 #define CHROME_BROWSER_UI_VIEWS_THEME_COPYING_WIDGET_H_
 
+#include "base/scoped_observation.h"
 #include "ui/views/widget/widget.h"
+#include "ui/views/widget/widget_observer.h"
 
 // This widget uses a reference widget to provide its NativeTheme and
-// ThemeProvider. The reference widget is assumed to outlive |this|.
-class ThemeCopyingWidget : public views::Widget {
+// ThemeProvider.
+class ThemeCopyingWidget : public views::Widget, public views::WidgetObserver {
  public:
   explicit ThemeCopyingWidget(views::Widget* role_model);
+  ThemeCopyingWidget(const ThemeCopyingWidget&) = delete;
+  ThemeCopyingWidget& operator=(const ThemeCopyingWidget&) = delete;
   ~ThemeCopyingWidget() override;
 
-  // views::Widget
+  // views::Widget:
   const ui::NativeTheme* GetNativeTheme() const override;
   const ui::ThemeProvider* GetThemeProvider() const override;
 
+  // views::WidgetObserver:
+  void OnWidgetDestroying(Widget* widget) override;
+  void OnWidgetThemeChanged(Widget* widget) override;
+
  private:
   // The widget we'll copy our theme from.
   views::Widget* role_model_;
 
-  DISALLOW_COPY_AND_ASSIGN(ThemeCopyingWidget);
+  base::ScopedObservation<views::Widget, views::WidgetObserver>
+      observed_widget_{this};
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_THEME_COPYING_WIDGET_H_
diff --git a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
index 69f3709..9664b2a 100644
--- a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
@@ -513,6 +513,8 @@
 
 IN_PROC_BROWSER_TEST_F(WebAppDeclarativeLinkCapturingOriginTrialBrowserTest,
                        OriginTrial) {
+  WebAppProvider& provider = *WebAppProvider::Get(browser()->profile());
+
   bool serve_token = true;
   content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting(
       [&serve_token](
@@ -545,8 +547,8 @@
   AppId app_id =
       web_app::InstallWebAppFromPage(browser(), GURL(kTestWebAppUrl));
 
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
   // Origin trial should grant the app access.
-  WebAppProvider& provider = *WebAppProvider::Get(browser()->profile());
   EXPECT_EQ(provider.registrar().GetAppCaptureLinks(app_id),
             blink::mojom::CaptureLinks::kNewClient);
 
@@ -581,6 +583,13 @@
   // origin trial.
   EXPECT_EQ(provider.registrar().GetAppCaptureLinks(app_id),
             blink::mojom::CaptureLinks::kUndefined);
+#else
+  // The origin trial is not available outside of Chrome OS.
+  EXPECT_EQ(provider.registrar().GetAppCaptureLinks(app_id),
+            blink::mojom::CaptureLinks::kUndefined);
+
+  ALLOW_UNUSED_LOCAL(app_web_contents);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 }
 
 }  // namespace web_app
diff --git a/chrome/browser/ui/webui/about_ui_unittest.cc b/chrome/browser/ui/webui/about_ui_unittest.cc
index b7dbdfb..273d555 100644
--- a/chrome/browser/ui/webui/about_ui_unittest.cc
+++ b/chrome/browser/ui/webui/about_ui_unittest.cc
@@ -53,9 +53,8 @@
 
   void OnDataReceived(scoped_refptr<base::RefCountedMemory> bytes) {
     data_received_ = true;
-    data_ = base::StringPiece(reinterpret_cast<const char*>(bytes->front()),
-                              bytes->size())
-                .as_string();
+    data_ = std::string(base::StringPiece(
+        reinterpret_cast<const char*>(bytes->front()), bytes->size()));
   }
 
  private:
diff --git a/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc b/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
index 35e2c97..68753a7 100644
--- a/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
@@ -16,6 +16,7 @@
 #include "base/memory/ref_counted_memory.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/process/process_iterator.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
@@ -152,7 +153,7 @@
     std::vector<base::StringPiece> split_value_str = base::SplitStringPiece(
         value_str, "\t", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
     DCHECK_EQ(2U, split_value_str.size());
-    *out_name = split_value_str[1].as_string();
+    *out_name = std::string(split_value_str[1]);
     return true;
   }
 
diff --git a/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc b/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc
index 94f1bca..9c7d3b4f 100644
--- a/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc
+++ b/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/command_line.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/strcat.h"
+#include "base/strings/string_piece.h"
 #include "build/build_config.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/url_constants.h"
@@ -98,9 +99,8 @@
   void OnDataReceived(scoped_refptr<base::RefCountedMemory> bytes) {
     data_received_ = true;
     if (bytes.get()) {
-      data_ = base::StringPiece(reinterpret_cast<const char*>(bytes->front()),
-                                bytes->size())
-                  .as_string();
+      data_ = std::string(base::StringPiece(
+          reinterpret_cast<const char*>(bytes->front()), bytes->size()));
     }
   }
 
diff --git a/chrome/browser/ui/webui/management/management_ui.cc b/chrome/browser/ui/webui/management/management_ui.cc
index 90dbd7d..a7d92741 100644
--- a/chrome/browser/ui/webui/management/management_ui.cc
+++ b/chrome/browser/ui/webui/management/management_ui.cc
@@ -67,6 +67,7 @@
      IDS_MANAGEMENT_REPORT_APP_INFO_AND_ACTIVITY},
     {kManagementPrinting, IDS_MANAGEMENT_REPORT_PRINTING},
     {kManagementReportPrintJobs, IDS_MANAGEMENT_REPORT_PRINT_JOBS},
+    {kManagementReportDlpEvents, IDS_MANAGEMENT_REPORT_DLP_EVENTS},
     {kManagementCrostini, IDS_MANAGEMENT_CROSTINI},
     {kManagementCrostiniContainerConfiguration,
      IDS_MANAGEMENT_CROSTINI_CONTAINER_CONFIGURATION},
diff --git a/chrome/browser/ui/webui/management/management_ui_handler.cc b/chrome/browser/ui/webui/management/management_ui_handler.cc
index efde47f..81b12b40 100644
--- a/chrome/browser/ui/webui/management/management_ui_handler.cc
+++ b/chrome/browser/ui/webui/management/management_ui_handler.cc
@@ -50,6 +50,8 @@
 #include "chrome/browser/chromeos/crostini/crostini_pref_names.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h"
 #include "chrome/browser/chromeos/policy/minimum_version_policy_handler.h"
 #include "chrome/browser/chromeos/policy/policy_cert_service.h"
 #include "chrome/browser/chromeos/policy/policy_cert_service_factory.h"
@@ -172,6 +174,7 @@
 const char kManagementReportAndroidApplications[] =
     "managementReportAndroidApplications";
 const char kManagementReportPrintJobs[] = "managementReportPrintJobs";
+const char kManagementReportDlpEvents[] = "managementReportDlpEvents";
 const char kManagementPrinting[] = "managementPrinting";
 const char kManagementCrostini[] = "managementCrostini";
 const char kManagementCrostiniContainerConfiguration[] =
@@ -219,7 +222,8 @@
   kCrostini,
   kUsername,
   kExtensions,
-  kAndroidApplication
+  kAndroidApplication,
+  kDlpEvents
 };
 
 // Corresponds to DeviceReportingType in management_browser_proxy.js
@@ -251,6 +255,8 @@
       return "extension";
     case DeviceReportingType::kAndroidApplication:
       return "android application";
+    case DeviceReportingType::kDlpEvents:
+      return "dlp events";
     default:
       NOTREACHED() << "Unknown device reporting type";
       return "device";
@@ -529,6 +535,10 @@
   return connector->GetDeviceCloudPolicyManager();
 }
 
+const policy::DlpRulesManager* ManagementUIHandler::GetDlpRulesManager() const {
+  return policy::DlpRulesManagerFactory::GetForPrimaryProfile();
+}
+
 void ManagementUIHandler::AddDeviceReportingInfo(
     base::Value* report_sources,
     const policy::StatusCollector* collector,
@@ -585,6 +595,11 @@
                               DeviceReportingType::kPrint);
   }
 
+  if (GetDlpRulesManager() && GetDlpRulesManager()->IsReportingEnabled()) {
+    AddDeviceReportingElement(report_sources, kManagementReportDlpEvents,
+                              DeviceReportingType::kDlpEvents);
+  }
+
   if (crostini::CrostiniFeatures::Get()->IsAllowedNow(profile)) {
     if (!profile->GetPrefs()
              ->GetFilePath(crostini::prefs::kCrostiniAnsiblePlaybookFilePath)
diff --git a/chrome/browser/ui/webui/management/management_ui_handler.h b/chrome/browser/ui/webui/management/management_ui_handler.h
index 61c502f1..9748c22 100644
--- a/chrome/browser/ui/webui/management/management_ui_handler.h
+++ b/chrome/browser/ui/webui/management/management_ui_handler.h
@@ -35,6 +35,7 @@
 extern const char kManagementReportCrashReports[];
 extern const char kManagementReportAppInfoAndActivity[];
 extern const char kManagementReportPrintJobs[];
+extern const char kManagementReportDlpEvents[];
 extern const char kManagementPrinting[];
 extern const char kManagementCrostini[];
 extern const char kManagementCrostiniContainerConfiguration[];
@@ -73,6 +74,7 @@
 extern const char kPolicyKeyReportUserIdData[];
 extern const char kPolicyKeyReportVersionData[];
 extern const char kPolicyKeyReportPolicyData[];
+extern const char kPolicyKeyReportDlpEvents[];
 extern const char kPolicyKeyReportExtensionsData[];
 extern const char kPolicyKeyReportSystemTelemetryData[];
 extern const char kPolicyKeyReportUserBrowsingData[];
@@ -93,6 +95,7 @@
 
 namespace policy {
 class DeviceCloudPolicyManagerChromeOS;
+class DlpRulesManager;
 class PolicyService;
 class StatusCollector;
 class SystemLogUploader;
@@ -147,6 +150,7 @@
   virtual const std::string GetDeviceManager() const;
   virtual const policy::DeviceCloudPolicyManagerChromeOS*
   GetDeviceCloudPolicyManager() const;
+  virtual const policy::DlpRulesManager* GetDlpRulesManager() const;
   void AddDeviceReportingInfo(base::Value* report_sources,
                               const policy::StatusCollector* collector,
                               const policy::SystemLogUploader* uploader,
diff --git a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
index 7a18843..baa4487 100644
--- a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
+++ b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
@@ -50,6 +50,8 @@
 #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h"
 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h"
+#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
+#include "chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h"
 #include "chrome/browser/chromeos/policy/status_collector/device_status_collector.h"
 #include "chrome/browser/chromeos/policy/status_collector/status_collector.h"
 #include "chrome/browser/chromeos/policy/status_uploader.h"
@@ -193,8 +195,17 @@
  public:
   TestManagementUIHandler() = default;
   explicit TestManagementUIHandler(policy::PolicyService* policy_service)
-      : policy_service_(policy_service) {}
+      : policy_service_(policy_service) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    dlp_rules_manager_ = new policy::MockDlpRulesManager();
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+  }
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  ~TestManagementUIHandler() override { delete dlp_rules_manager_; }
+#else
   ~TestManagementUIHandler() override = default;
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
   void EnableUpdateRequiredEolInfo(bool enable) {
     update_required_eol_ = enable;
@@ -238,6 +249,9 @@
   }
 
   const std::string GetDeviceManager() const override { return device_domain; }
+  const policy::DlpRulesManager* GetDlpRulesManager() const override {
+    return dlp_rules_manager_;
+  }
   void SetDeviceDomain(const std::string& domain) { device_domain = domain; }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
@@ -245,11 +259,14 @@
   policy::PolicyService* policy_service_ = nullptr;
   bool update_required_eol_ = false;
   std::string device_domain = "devicedomain.com";
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  policy::DlpRulesManager* dlp_rules_manager_ = nullptr;
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 };
 
 // We need to use a different base class for ChromeOS and non ChromeOS case.
-// TODO(marcgrimme): refactor so that ChromeOS and non ChromeOS part is better
-// separated.
+// TODO(1071436, marcgrimme): refactor so that ChromeOS and non ChromeOS part is
+// better separated.
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 using TestingBaseClass = chromeos::DeviceSettingsTestBase;
 #else
@@ -344,6 +361,7 @@
     bool report_hw_status;
     bool report_crash_info;
     bool report_app_info_and_activity;
+    bool report_dlp_events;
     bool upload_enabled;
     bool printing_send_username_and_filename;
     bool crostini_report_usage;
@@ -365,6 +383,7 @@
     setup_config_.report_hw_status = default_value;
     setup_config_.report_crash_info = default_value;
     setup_config_.report_app_info_and_activity = default_value;
+    setup_config_.report_dlp_events = default_value;
     setup_config_.upload_enabled = default_value;
     setup_config_.printing_send_username_and_filename = default_value;
     setup_config_.crostini_report_usage = default_value;
@@ -448,7 +467,10 @@
                                       /*task_runner=*/task_runner_);
     ON_CALL(testing::Const(handler_), GetDeviceCloudPolicyManager())
         .WillByDefault(Return(manager_.get()));
-
+    EXPECT_CALL(*static_cast<const policy::MockDlpRulesManager*>(
+                    handler_.GetDlpRulesManager()),
+                IsReportingEnabled)
+        .WillRepeatedly(testing::Return(GetTestConfig().report_dlp_events));
     return handler_.GetDeviceReportingInfo(manager_.get(), status_collector,
                                            system_uploader, GetProfile());
   }
@@ -584,26 +606,41 @@
                                const char* expected_infolist_expr,
                                base::Value::ConstListView infolist,
                                const std::set<std::string>& expected_messages) {
-  if (infolist.size() != expected_messages.size()) {
-    return AssertionFailure()
-           << " " << infolist_expr << " and " << expected_infolist_expr
-           << " don't have the same size. (" << infolist.size() << ", "
-           << expected_messages.size() << ")";
-  }
   std::set<std::string> tmp_expected(expected_messages);
-  for (const base::Value& info : infolist) {
-    const std::string* message_id = info.FindStringKey("messageId");
-    if (message_id) {
-      if (tmp_expected.erase(*message_id) != 1u) {
-        return AssertionFailure() << " message " << *message_id << " is not in "
-                                  << expected_infolist_expr;
+  std::vector<std::string> tmp_info_messages;
+  for (const base::Value& tmp_info : infolist) {
+    const std::string* message = tmp_info.FindStringKey("messageId");
+    if (message) {
+      if (tmp_expected.erase(*message) != 1u) {
+        tmp_info_messages.push_back(*message);
       }
     }
   }
   if (!tmp_expected.empty()) {
+    AssertionResult result = AssertionFailure();
+    result << "Expected messages from " << expected_infolist_expr
+           << " has more contents than " << infolist_expr << std::endl
+           << "Messages missing from test: ";
+    for (const std::string& message : tmp_expected) {
+      result << message << ", ";
+    }
+    return result;
+  }
+  if (!tmp_info_messages.empty()) {
+    AssertionResult result = AssertionFailure();
+    result << "Recieved messages from " << infolist_expr
+           << " has more contents than " << expected_infolist_expr << std::endl
+           << "Additional messages not expected: ";
+    for (const std::string& message : tmp_info_messages) {
+      result << message << ", ";
+    }
+    return result;
+  }
+  if (infolist.size() != expected_messages.size()) {
     return AssertionFailure()
            << " " << infolist_expr << " and " << expected_infolist_expr
-           << " have different contents " << infolist.data();
+           << " don't have the same size. (info: " << infolist.size()
+           << ", expected: " << expected_messages.size() << ")";
   }
   return AssertionSuccess();
 }
@@ -614,12 +651,6 @@
     const char* expected_elements_expr,
     base::Value::ConstListView elements,
     const std::map<std::string, std::string> expected_elements) {
-  if (elements.size() != expected_elements.size()) {
-    return AssertionFailure()
-           << elements_expr << " and " << expected_elements_expr
-           << " don't have the same size. (" << elements.size() << ", "
-           << expected_elements.size() << ")";
-  }
   std::map<std::string, std::string> tmp_expected(expected_elements);
   for (const base::Value& element : elements) {
     const std::string* message_id = element.FindStringKey("messageId");
@@ -656,6 +687,12 @@
     result << "}";
     return result;
   }
+  if (elements.size() != expected_elements.size()) {
+    return AssertionFailure()
+           << elements_expr << " and " << expected_elements_expr
+           << " don't have the same size. (" << elements.size() << ", "
+           << expected_elements.size() << ")";
+  }
   return AssertionSuccess();
 }
 #endif
@@ -995,7 +1032,8 @@
       {kManagementCrostini, "crostini"},
       {kManagementExtensionReportUsername, "username"},
       {kManagementReportExtensions, "extension"},
-      {kManagementReportAndroidApplications, "android application"}};
+      {kManagementReportAndroidApplications, "android application"},
+      {kManagementReportDlpEvents, "dlp events"}};
 
   ASSERT_PRED_FORMAT2(ReportingElementsToBeEQ, info.GetList(),
                       expected_elements);
@@ -1004,6 +1042,7 @@
 TEST_F(ManagementUIHandlerTests,
        AllEnabledCrostiniAnsiblePlaybookDeviceReportingInfo) {
   ResetTestConfig(true);
+  GetTestConfig().report_dlp_events = false;
   GetTestConfig().crostini_ansible_playbook_filepath = base::FilePath("/tmp/");
   const base::Value info = SetUpForReportingInfo();
   const std::map<std::string, std::string> expected_elements = {
@@ -1023,6 +1062,17 @@
                       expected_elements);
 }
 
+TEST_F(ManagementUIHandlerTests, OnlyReportDlpEvents) {
+  ResetTestConfig(false);
+  GetTestConfig().report_dlp_events = true;
+  base::Value info = SetUpForReportingInfo();
+  const std::map<std::string, std::string> expected_elements = {
+      {kManagementReportDlpEvents, "dlp events"}};
+
+  ASSERT_PRED_FORMAT2(ReportingElementsToBeEQ, info.GetList(),
+                      expected_elements);
+}
+
 TEST_F(ManagementUIHandlerTests, OnlyReportUsersDeviceReportingInfo) {
   ResetTestConfig(false);
   GetTestConfig().report_users = true;
@@ -1137,6 +1187,7 @@
                       handler_.GetExtensionReportingInfo().GetList(),
                       expected_messages);
 }
+
 TEST_F(ManagementUIHandlerTests, ExtensionReportingInfoPoliciesMerge) {
   policy::PolicyMap on_prem_reporting_extension_beta_policies;
   policy::PolicyMap on_prem_reporting_extension_stable_policies;
diff --git a/chrome/browser/ui/webui/memories/memories_handler.cc b/chrome/browser/ui/webui/memories/memories_handler.cc
index f1b7c4d..20d7593 100644
--- a/chrome/browser/ui/webui/memories/memories_handler.cc
+++ b/chrome/browser/ui/webui/memories/memories_handler.cc
@@ -8,7 +8,6 @@
 #include <utility>
 #include <vector>
 
-#include "base/feature_list.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/history_clusters/memories_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -109,12 +108,6 @@
 }
 
 void MemoriesHandler::OnMemoriesDebugMessage(const std::string& message) {
-  // Ignore messages if all the debug flags are off.
-  if (!base::FeatureList::IsEnabled(history_clusters::kDebug) &&
-      !history_clusters::RemoteModelEndpointForDebugging().is_valid()) {
-    return;
-  }
-
   if (content::RenderFrameHost* rfh = web_contents_->GetMainFrame()) {
     rfh->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kInfo, message);
   }
diff --git a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
index 5b6d117..665bde8 100644
--- a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/bind.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/memory/ref_counted.h"
+#include "base/strings/string_piece.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/printing/test_cups_printers_manager.h"
@@ -122,7 +123,7 @@
         base::BindOnce(std::move(cb),
                        effective_make_and_model.empty() ? PpdProvider::NOT_FOUND
                                                         : PpdProvider::SUCCESS,
-                       effective_make_and_model.as_string()));
+                       std::string(effective_make_and_model)));
   }
 
   // These methods are not used by `CupsPrintersManager`.
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
index 9652d9d4..021c2e6c 100644
--- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/simple_test_clock.h"
@@ -2150,10 +2151,9 @@
 
 TEST_F(SiteSettingsHandlerChooserExceptionTest,
        HandleGetChooserExceptionListForUsb) {
-  const std::string kUsbChooserGroupName =
+  const std::string kUsbChooserGroupName(
       site_settings::ContentSettingsTypeToGroupName(
-          ContentSettingsType::USB_CHOOSER_DATA)
-          .as_string();
+          ContentSettingsType::USB_CHOOSER_DATA));
 
   const base::Value& exceptions = GetChooserExceptionListFromWebUiCallData(
       kUsbChooserGroupName, /*expected_total_calls=*/1u);
@@ -2167,10 +2167,9 @@
 
 TEST_F(SiteSettingsHandlerChooserExceptionTest,
        HandleGetChooserExceptionListForUsbOffTheRecord) {
-  const std::string kUsbChooserGroupName =
+  const std::string kUsbChooserGroupName(
       site_settings::ContentSettingsTypeToGroupName(
-          ContentSettingsType::USB_CHOOSER_DATA)
-          .as_string();
+          ContentSettingsType::USB_CHOOSER_DATA));
   SetUpOffTheRecordUsbChooserContext();
   web_ui()->ClearTrackedCalls();
 
@@ -2204,10 +2203,9 @@
 
 TEST_F(SiteSettingsHandlerChooserExceptionTest,
        HandleResetChooserExceptionForSiteForUsb) {
-  const std::string kUsbChooserGroupName =
+  const std::string kUsbChooserGroupName(
       site_settings::ContentSettingsTypeToGroupName(
-          ContentSettingsType::USB_CHOOSER_DATA)
-          .as_string();
+          ContentSettingsType::USB_CHOOSER_DATA));
   const auto kAndroidOrigin = url::Origin::Create(kAndroidUrl);
   const auto kChromiumOrigin = url::Origin::Create(kChromiumUrl);
   const auto kGoogleOrigin = url::Origin::Create(kGoogleUrl);
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc
index a1a95a9..ede4eff 100644
--- a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/callback_helpers.h"
 #include "base/guid.h"
 #include "base/json/json_reader.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -536,9 +537,8 @@
 }  // namespace
 
 TEST_F(SiteSettingsHelperTest, CreateChooserExceptionObject) {
-  const std::string kUsbChooserGroupName =
-      ContentSettingsTypeToGroupName(ContentSettingsType::USB_CHOOSER_DATA)
-          .as_string();
+  const std::string kUsbChooserGroupName(
+      ContentSettingsTypeToGroupName(ContentSettingsType::USB_CHOOSER_DATA));
   const std::string& kPolicySource =
       SiteSettingSourceToString(SiteSettingSource::kPolicy);
   const std::string& kPreferenceSource =
@@ -729,9 +729,8 @@
 
 TEST_F(SiteSettingsHelperChooserExceptionTest,
        GetChooserExceptionListFromProfile) {
-  const std::string kUsbChooserGroupName =
-      ContentSettingsTypeToGroupName(ContentSettingsType::USB_CHOOSER_DATA)
-          .as_string();
+  const std::string kUsbChooserGroupName(
+      ContentSettingsTypeToGroupName(ContentSettingsType::USB_CHOOSER_DATA));
   const ChooserTypeNameEntry* chooser_type =
       ChooserTypeFromGroupName(kUsbChooserGroupName);
   const std::string& kPolicySource =
diff --git a/chrome/browser/usb/usb_blocklist_unittest.cc b/chrome/browser/usb/usb_blocklist_unittest.cc
index bcea7606..75ee1e6 100644
--- a/chrome/browser/usb/usb_blocklist_unittest.cc
+++ b/chrome/browser/usb/usb_blocklist_unittest.cc
@@ -18,7 +18,7 @@
     params_manager_.ClearAllVariationParams();
 
     std::map<std::string, std::string> params;
-    params["blocklist_additions"] = list.as_string();
+    params["blocklist_additions"] = std::string(list);
     params_manager_.SetVariationParams("WebUSBBlocklist", params);
 
     blocklist_.ResetToDefaultValuesForTest();
diff --git a/chrome/browser/web_applications/components/preinstalled_app_install_features.cc b/chrome/browser/web_applications/components/preinstalled_app_install_features.cc
index c250c6c..a5c14ae 100644
--- a/chrome/browser/web_applications/components/preinstalled_app_install_features.cc
+++ b/chrome/browser/web_applications/components/preinstalled_app_install_features.cc
@@ -5,7 +5,10 @@
 #include "chrome/browser/web_applications/components/preinstalled_app_install_features.h"
 
 #include "base/feature_list.h"
+#include "chrome/browser/policy/profile_policy_connector.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/common/channel_info.h"
+#include "chrome/common/chrome_features.h"
 #include "components/version_info/channel.h"
 
 namespace web_app {
@@ -22,6 +25,13 @@
 
 bool g_always_enabled_for_testing = false;
 
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
+bool IsMigrationFeature(const base::Feature& feature) {
+  return &feature == &kMigrateDefaultChromeAppToWebAppsGSuite ||
+         &feature == &kMigrateDefaultChromeAppToWebAppsNonGSuite;
+}
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
+
 }  // namespace
 
 // Enables migration of default installed GSuite apps over to their replacement
@@ -56,21 +66,42 @@
 const base::Feature kMigrateDefaultChromeAppToWebAppsChromeOsBeta{
     "MigrateDefaultChromeAppToWebAppsChromeOsBeta",
     base::FEATURE_ENABLED_BY_DEFAULT};
+
+// Enables migration of default installed web apps over to their replacement
+// web apps for Chrome OS managed users.
+// This flag overrides the value of the kMigrateDefaultChromeAppToWebAppsGSuite
+// and kMigrateDefaultChromeAppToWebAppsNonGSuite for Chrome OS managed users.
+//
+// Why have a separate flag?
+// Field trials are not able to accurately distinguish managed Chrome OS users.
+// Because admin installed Chrome apps conflict with the default web app
+// migration we need to maintain separate control over the rollout for mananged
+// users.
+const base::Feature kMigrateDefaultChromeAppToWebAppsChromeOsManaged{
+    "MigrateDefaultChromeAppToWebAppsChromeOsManaged",
+    base::FEATURE_DISABLED_BY_DEFAULT};
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
-bool IsPreinstalledAppInstallFeatureEnabled(base::StringPiece feature_name) {
+bool IsPreinstalledAppInstallFeatureEnabled(base::StringPiece feature_name,
+                                            const Profile& profile) {
   if (g_always_enabled_for_testing)
     return true;
 
   for (const base::Feature* feature : kPreinstalledAppInstallFeatures) {
     if (feature->name == feature_name) {
 #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
-      // See |kMigrateDefaultChromeAppToWebAppsChromeOsBeta| comment above.
-      if (chrome::GetChannel() == version_info::Channel::BETA &&
-          (feature == &kMigrateDefaultChromeAppToWebAppsGSuite ||
-           feature == &kMigrateDefaultChromeAppToWebAppsNonGSuite)) {
-        return base::FeatureList::IsEnabled(
-            kMigrateDefaultChromeAppToWebAppsChromeOsBeta);
+      if (IsMigrationFeature(*feature)) {
+        // See |kMigrateDefaultChromeAppToWebAppsChromeOsBeta| comment above.
+        if (chrome::GetChannel() == version_info::Channel::BETA) {
+          return base::FeatureList::IsEnabled(
+              kMigrateDefaultChromeAppToWebAppsChromeOsBeta);
+        }
+
+        // See |kMigrateDefaultChromeAppToWebAppsChromeOsManaged| comment above.
+        if (profile.GetProfilePolicyConnector()->IsManaged()) {
+          return base::FeatureList::IsEnabled(
+              kMigrateDefaultChromeAppToWebAppsChromeOsManaged);
+        }
       }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
diff --git a/chrome/browser/web_applications/components/preinstalled_app_install_features.h b/chrome/browser/web_applications/components/preinstalled_app_install_features.h
index 9d79097..276e41d 100644
--- a/chrome/browser/web_applications/components/preinstalled_app_install_features.h
+++ b/chrome/browser/web_applications/components/preinstalled_app_install_features.h
@@ -9,6 +9,8 @@
 #include "base/feature_list.h"
 #include "base/strings/string_piece_forward.h"
 
+class Profile;
+
 namespace web_app {
 
 extern const base::Feature kMigrateDefaultChromeAppToWebAppsGSuite;
@@ -17,12 +19,15 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 extern const base::Feature kMigrateDefaultChromeAppToWebAppsChromeOsBeta;
-#endif
+
+extern const base::Feature kMigrateDefaultChromeAppToWebAppsChromeOsManaged;
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
 // Returns the base::Feature in |kPreinstalledAppInstallFeatures| that
 // corresponds to |feature_name|. Used by external app install configs to gate
 // installation on features listed in |kPreinstalledAppInstallFeatures|.
-bool IsPreinstalledAppInstallFeatureEnabled(base::StringPiece feature_name);
+bool IsPreinstalledAppInstallFeatureEnabled(base::StringPiece feature_name,
+                                            const Profile& profile);
 
 base::AutoReset<bool> SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
 
diff --git a/chrome/browser/web_applications/components/preinstalled_app_install_features_unittest.cc b/chrome/browser/web_applications/components/preinstalled_app_install_features_unittest.cc
index e7e6c9e..dd827220 100644
--- a/chrome/browser/web_applications/components/preinstalled_app_install_features_unittest.cc
+++ b/chrome/browser/web_applications/components/preinstalled_app_install_features_unittest.cc
@@ -9,7 +9,6 @@
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -22,6 +21,7 @@
 
 struct Migrate {
   bool beta;
+  bool managed;
 };
 
 class PreinstalledWebAppInstallFeaturesTest
@@ -30,7 +30,9 @@
  public:
   static std::string ParamToString(
       const ::testing::TestParamInfo<Migrate> param_info) {
-    return param_info.param.beta ? "MigrateBeta" : "UnmigrateBeta";
+    return base::StrCat(
+        {param_info.param.beta ? "MigrateBeta" : "UnmigrateBeta", "_",
+         param_info.param.managed ? "MigrateManaged" : "UnmigrateManaged"});
   }
 
   PreinstalledWebAppInstallFeaturesTest() {
@@ -48,22 +50,68 @@
           kMigrateDefaultChromeAppToWebAppsChromeOsBeta);
     }
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
+    if (GetMigrate().managed) {
+      managed_migration_.InitAndEnableFeature(
+          kMigrateDefaultChromeAppToWebAppsChromeOsManaged);
+    } else {
+      managed_migration_.InitAndDisableFeature(
+          kMigrateDefaultChromeAppToWebAppsChromeOsManaged);
+    }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
   }
+
   ~PreinstalledWebAppInstallFeaturesTest() override = default;
 
   const Migrate& GetMigrate() { return GetParam(); }
 
- private:
+  void ExpectMigrationEnabled(bool unmanaged_expectation,
+                              bool managed_expectation) {
+    {
+      TestingProfile::Builder builder;
+      builder.OverridePolicyConnectorIsManagedForTesting(false);
+      std::unique_ptr<TestingProfile> unmanaged_profile = builder.Build();
+      EXPECT_EQ(
+          IsPreinstalledAppInstallFeatureEnabled(
+              kMigrateDefaultChromeAppToWebAppsGSuite.name, *unmanaged_profile),
+          unmanaged_expectation);
+      EXPECT_EQ(IsPreinstalledAppInstallFeatureEnabled(
+                    kMigrateDefaultChromeAppToWebAppsNonGSuite.name,
+                    *unmanaged_profile),
+                unmanaged_expectation);
+    }
+
+    {
+      TestingProfile::Builder builder;
+      builder.OverridePolicyConnectorIsManagedForTesting(true);
+      std::unique_ptr<TestingProfile> managed_profile = builder.Build();
+      EXPECT_EQ(
+          IsPreinstalledAppInstallFeatureEnabled(
+              kMigrateDefaultChromeAppToWebAppsGSuite.name, *managed_profile),
+          managed_expectation);
+      EXPECT_EQ(IsPreinstalledAppInstallFeatureEnabled(
+                    kMigrateDefaultChromeAppToWebAppsNonGSuite.name,
+                    *managed_profile),
+                managed_expectation);
+    }
+  }
+
+ protected:
   base::test::ScopedFeatureList base_migration_;
   base::test::ScopedFeatureList beta_migration_;
+  base::test::ScopedFeatureList managed_migration_;
+
+  content::BrowserTaskEnvironment task_environment_;
 };
 
 TEST_P(PreinstalledWebAppInstallFeaturesTest, NonBetaChannel) {
-  EXPECT_TRUE(IsPreinstalledAppInstallFeatureEnabled(
-      kMigrateDefaultChromeAppToWebAppsGSuite.name));
-  EXPECT_TRUE(IsPreinstalledAppInstallFeatureEnabled(
-      kMigrateDefaultChromeAppToWebAppsNonGSuite.name));
+  ExpectMigrationEnabled(
+      /*unmanaged_expectation=*/true,
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
+      /*managed_expectation=*/GetMigrate().managed
+#else
+      /*managed_expectation=*/true
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  );
 }
 
 #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
@@ -74,22 +122,21 @@
           {crosapi::kChromeOSReleaseTrack, "=", crosapi::kReleaseChannelBeta}),
       base::Time::Now());
 
-  EXPECT_EQ(IsPreinstalledAppInstallFeatureEnabled(
-                kMigrateDefaultChromeAppToWebAppsGSuite.name),
-            GetMigrate().beta);
-  EXPECT_EQ(IsPreinstalledAppInstallFeatureEnabled(
-                kMigrateDefaultChromeAppToWebAppsNonGSuite.name),
-            GetMigrate().beta);
+  ExpectMigrationEnabled(/*unmanaged_expectation=*/GetMigrate().beta,
+                         /*managed_expectation=*/GetMigrate().beta);
 
   base::SysInfo::ResetChromeOSVersionInfoForTest();
 }
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
-INSTANTIATE_TEST_SUITE_P(All,
-                         PreinstalledWebAppInstallFeaturesTest,
-                         testing::Values(Migrate{.beta = true},
-                                         Migrate{.beta = false}),
-                         &PreinstalledWebAppInstallFeaturesTest::ParamToString);
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    PreinstalledWebAppInstallFeaturesTest,
+    testing::Values(Migrate{.beta = false, .managed = false},
+                    Migrate{.beta = false, .managed = true},
+                    Migrate{.beta = true, .managed = false},
+                    Migrate{.beta = true, .managed = true}),
+    &PreinstalledWebAppInstallFeaturesTest::ParamToString);
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/components/web_app_shortcut_linux_unittest.cc b/chrome/browser/web_applications/components/web_app_shortcut_linux_unittest.cc
index 0837092..faf3d9c 100644
--- a/chrome/browser/web_applications/components/web_app_shortcut_linux_unittest.cc
+++ b/chrome/browser/web_applications/components/web_app_shortcut_linux_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/nix/xdg_util.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
@@ -47,12 +48,12 @@
   MockEnvironment& operator=(const MockEnvironment&) = delete;
 
   void Set(base::StringPiece name, const std::string& value) {
-    variables_[name.as_string()] = value;
+    variables_[std::string(name)] = value;
   }
 
   bool GetVar(base::StringPiece variable_name, std::string* result) override {
-    if (base::Contains(variables_, variable_name.as_string())) {
-      *result = variables_[variable_name.as_string()];
+    if (base::Contains(variables_, std::string(variable_name))) {
+      *result = variables_[std::string(variable_name)];
       return true;
     }
 
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager.cc b/chrome/browser/web_applications/preinstalled_web_app_manager.cc
index 62739da9..69f6397 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_manager.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_manager.cc
@@ -164,8 +164,8 @@
   }
 
   // Remove if gated on a disabled feature.
-  if (options.gate_on_feature &&
-      !IsPreinstalledAppInstallFeatureEnabled(*options.gate_on_feature)) {
+  if (options.gate_on_feature && !IsPreinstalledAppInstallFeatureEnabled(
+                                     *options.gate_on_feature, *profile)) {
     return options.install_url.spec() +
            " disabled because feature is disabled: " + *options.gate_on_feature;
   }
@@ -541,10 +541,11 @@
 
   SetMigrationRun(profile_, kMigrateDefaultChromeAppToWebAppsGSuite.name,
                   IsPreinstalledAppInstallFeatureEnabled(
-                      kMigrateDefaultChromeAppToWebAppsGSuite.name));
-  SetMigrationRun(profile_, kMigrateDefaultChromeAppToWebAppsNonGSuite.name,
-                  IsPreinstalledAppInstallFeatureEnabled(
-                      kMigrateDefaultChromeAppToWebAppsNonGSuite.name));
+                      kMigrateDefaultChromeAppToWebAppsGSuite.name, *profile_));
+  SetMigrationRun(
+      profile_, kMigrateDefaultChromeAppToWebAppsNonGSuite.name,
+      IsPreinstalledAppInstallFeatureEnabled(
+          kMigrateDefaultChromeAppToWebAppsNonGSuite.name, *profile_));
 
   if (callback) {
     std::move(callback).Run(std::move(install_results),
diff --git a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
index 95b8076..66e359f 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
@@ -249,7 +249,8 @@
 
   // Set up pre-migration state.
   {
-    ASSERT_FALSE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_FALSE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     SyncExternalWebApps(/*expect_install=*/false, /*expect_uninstall=*/false);
@@ -274,7 +275,8 @@
   {
     base::AutoReset<bool> testing_scope =
         SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
-    ASSERT_TRUE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_TRUE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     // Extension sticks around to be uninstalled by the replacement web app.
@@ -317,7 +319,8 @@
 
   // Revert migration.
   {
-    ASSERT_FALSE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_FALSE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     SyncExternalWebApps(/*expect_install=*/false, /*expect_uninstall=*/true);
@@ -340,7 +343,8 @@
     base::HistogramTester histograms;
     base::AutoReset<bool> testing_scope =
         SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
-    ASSERT_TRUE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_TRUE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     extensions::TestExtensionRegistryObserver uninstall_observer(
         extensions::ExtensionRegistry::Get(profile()));
@@ -388,7 +392,8 @@
 
   // Set up pre-migration state.
   {
-    ASSERT_FALSE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_FALSE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     SyncExternalWebApps(/*expect_install=*/false, /*expect_uninstall=*/false);
@@ -422,7 +427,8 @@
   {
     base::AutoReset<bool> testing_scope =
         SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
-    ASSERT_TRUE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_TRUE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     // Extension sticks around to be uninstalled by the replacement web app.
@@ -482,7 +488,8 @@
                        UserUninstalledExtensionApp) {
   // Set up pre-migration state.
   {
-    ASSERT_FALSE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_FALSE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     SyncExternalWebApps(/*expect_install=*/false, /*expect_uninstall=*/false);
@@ -507,7 +514,8 @@
   {
     base::AutoReset<bool> testing_scope =
         SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
-    ASSERT_TRUE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_TRUE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     EXPECT_FALSE(IsExtensionAppInstalled());
@@ -540,7 +548,8 @@
   {
     base::HistogramTester histograms;
 
-    ASSERT_FALSE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_FALSE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     SyncExternalWebApps(/*expect_install=*/false, /*expect_uninstall=*/false,
@@ -561,7 +570,8 @@
   {
     base::AutoReset<bool> testing_scope =
         SetPreinstalledAppInstallFeatureAlwaysEnabledForTesting();
-    ASSERT_TRUE(IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag));
+    ASSERT_TRUE(
+        IsPreinstalledAppInstallFeatureEnabled(kMigrationFlag, *profile()));
 
     SyncExternalExtensions();
     // Extension sticks around to be uninstalled by the replacement web app.
diff --git a/chrome/browser/win/conflicts/module_info_util.cc b/chrome/browser/win/conflicts/module_info_util.cc
index 4967ecc..a1bc0a5 100644
--- a/chrome/browser/win/conflicts/module_info_util.cc
+++ b/chrome/browser/win/conflicts/module_info_util.cc
@@ -18,6 +18,7 @@
 #include "base/i18n/case_conversion.h"
 #include "base/logging.h"
 #include "base/scoped_generic.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/pe_image_reader.h"
@@ -266,7 +267,7 @@
   for (const std::wstring& variable : environment_variables) {
     std::string value;
     if (environment->GetVar(base::WideToASCII(variable).c_str(), &value)) {
-      value = base::TrimString(value, "\\", base::TRIM_TRAILING).as_string();
+      value = std::string(base::TrimString(value, "\\", base::TRIM_TRAILING));
       string_mapping.push_back(std::make_pair(
           base::i18n::ToLower(base::UTF8ToUTF16(value)),
           u"%" + base::i18n::ToLower(base::AsString16(variable)) + u"%"));
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 5aa4f37..6a33e5b 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-master-1619632776-bf9f30743a253033347f774818e9c95aee4c9cab.profdata
+chrome-mac-master-1619672805-fa4a84cc78f76e86554b1c1cdf6d56a9360a0315.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 979d981..419ebcd 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-master-1619621900-8d394bc4ef01627c429b71cef8df49097a385661.profdata
+chrome-win32-master-1619672805-ce53f98f92ccde0f80efffd2968099c86b1e3cb3.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 34fe5d2..0e576701 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1619632776-63b16d2daf336d315e60534a62a375f8b10fdde6.profdata
+chrome-win64-master-1619672805-1a739302f722be6d61a7e6509e6039d1e86f5d75.profdata
diff --git a/chrome/chrome_cleaner/logging/message_builder.cc b/chrome/chrome_cleaner/logging/message_builder.cc
index 1934ba33..266f206 100644
--- a/chrome/chrome_cleaner/logging/message_builder.cc
+++ b/chrome/chrome_cleaner/logging/message_builder.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 
 namespace chrome_cleaner {
@@ -15,7 +16,7 @@
     : value_(value) {}
 
 MessageBuilder::MessageItem::MessageItem(base::StringPiece value)
-    : value_(base::UTF8ToWide(value.as_string())) {}
+    : value_(base::UTF8ToWide(value)) {}
 
 MessageBuilder::MessageItem::MessageItem(int value)
     : value_(base::NumberToWString(value)) {}
diff --git a/chrome/chrome_cleaner/os/digest_verifier.cc b/chrome/chrome_cleaner/os/digest_verifier.cc
index fc6bc378..6ebf2ac 100644
--- a/chrome/chrome_cleaner/os/digest_verifier.cc
+++ b/chrome/chrome_cleaner/os/digest_verifier.cc
@@ -76,7 +76,7 @@
   }
 
   chrome_cleaner::FileDigests digests_pb;
-  if (!digests_pb.ParseFromString(serialized_digest_pb.as_string())) {
+  if (!digests_pb.ParseFromString(std::string(serialized_digest_pb))) {
     LOG(ERROR) << "Failed to parse digests protobuf";
     return false;
   }
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 96af1297b..db4e6d4 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -864,9 +864,6 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // Enables or disables SmartDim on Chrome OS.
 const base::Feature kSmartDim{"SmartDim", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// Enables or disables using smbfs for accessing SMB file shares.
-const base::Feature kSmbFs{"SmbFs", base::FEATURE_ENABLED_BY_DEFAULT};
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 // Enables or disables the ability to use the sound content setting to mute a
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index d7db15b..18b8168a 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -578,8 +578,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kSmartDim;
-
-COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kSmbFs;
 #endif
 
 COMPONENT_EXPORT(CHROME_FEATURES)
diff --git a/chrome/credential_provider/gaiacp/gem_device_details_manager.cc b/chrome/credential_provider/gaiacp/gem_device_details_manager.cc
index cdd9f6f..af1084e8 100644
--- a/chrome/credential_provider/gaiacp/gem_device_details_manager.cc
+++ b/chrome/credential_provider/gaiacp/gem_device_details_manager.cc
@@ -162,10 +162,21 @@
     return status;
   }
 
+  wchar_t found_username[kWindowsUsernameBufferLength] = {};
+  wchar_t found_domain[kWindowsDomainBufferLength] = {};
+
+  status = OSUserManager::Get()->FindUserBySID(
+      context.user_sid.c_str(), found_username, base::size(found_username),
+      found_domain, base::size(found_domain));
+  if (FAILED(status)) {
+    LOGFN(ERROR) << "Could not get username and domain from sid "
+                 << context.user_sid;
+  }
+
   return UploadDeviceDetailsInternal(
       /* access_token= */ std::string(), obfuscated_user_id, context.dm_token,
-      context.user_sid, context.device_resource_id,
-      /* username= */ L"", /* domain= */ L"");
+      context.user_sid, context.device_resource_id, found_username,
+      found_domain);
 }
 
 // Uploads the device details into GEM database using |access_token|
diff --git a/chrome/credential_provider/gaiacp/gem_device_details_manager_unittests.cc b/chrome/credential_provider/gaiacp/gem_device_details_manager_unittests.cc
index 0f1a773..e5d5c0b 100644
--- a/chrome/credential_provider/gaiacp/gem_device_details_manager_unittests.cc
+++ b/chrome/credential_provider/gaiacp/gem_device_details_manager_unittests.cc
@@ -6,6 +6,7 @@
 
 #include "base/base_paths_win.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_path_override.h"
@@ -27,12 +28,12 @@
 // Params:
 // string : The specified device resource ID.
 // bool : Whether a valid user sid is present.
-// bool : Whether the feature to upload device details via ESA is enabled.
+// bool : Whether the username and domain lookup fails.
 // string : The specified DM token.
 class GemDeviceDetailsExtensionTest
     : public GemDeviceDetailsBaseTest,
       public ::testing::WithParamInterface<
-          std::tuple<const wchar_t*, bool, const wchar_t*>> {
+          std::tuple<const wchar_t*, bool, bool, const wchar_t*>> {
  public:
   GemDeviceDetailsExtensionTest();
 
@@ -48,19 +49,25 @@
 TEST_P(GemDeviceDetailsExtensionTest, WithUserDeviceContext) {
   const std::wstring device_resource_id(std::get<0>(GetParam()));
   bool has_valid_sid = std::get<1>(GetParam());
-  const std::wstring dm_token(std::get<2>(GetParam()));
+  bool fail_sid_lookup = std::get<2>(GetParam());
+  const std::wstring dm_token(std::get<3>(GetParam()));
 
   std::wstring user_sid = L"invalid-user-sid";
+  std::wstring domain_name = L"company.com";
   if (has_valid_sid) {
     // Create a fake user associated to a gaia id.
     CComBSTR sid_str;
     ASSERT_EQ(S_OK, fake_os_user_manager()->CreateTestOSUser(
                         kDefaultUsername, L"password", L"Full Name", L"comment",
                         base::UTF8ToWide(kDefaultGaiaId), L"user@company.com",
-                        &sid_str));
+                        domain_name, &sid_str));
     user_sid = OLE2W(sid_str);
   }
 
+  if (fail_sid_lookup) {
+    fake_os_user_manager()->FailFindUserBySID(user_sid.c_str(), 1);
+  }
+
   base::Value expected_response_value(base::Value::Type::DICTIONARY);
   expected_response_value.SetStringKey("deviceResourceId",
                                        base::WideToUTF8(device_resource_id));
@@ -75,6 +82,7 @@
   fake_http_url_fetcher_factory()->SetFakeResponse(
       upload_device_details_url, FakeWinHttpUrlFetcher::Headers(),
       expected_response);
+  fake_http_url_fetcher_factory()->SetCollectRequestData(true);
 
   extension::UserDeviceContext context(device_resource_id, L"", L"", user_sid,
                                        dm_token);
@@ -89,6 +97,26 @@
     ASSERT_TRUE(FAILED(status));
   } else {
     ASSERT_TRUE(SUCCEEDED(status));
+
+    ASSERT_EQ(1UL, fake_http_url_fetcher_factory()->requests_created());
+    FakeWinHttpUrlFetcherFactory::RequestData request_data =
+        fake_http_url_fetcher_factory()->GetRequestData(0);
+    base::Value body_value = base::JSONReader::Read(request_data.body).value();
+
+    std::string uploaded_dm_token = GetDictStringUTF8(body_value, "dm_token");
+    ASSERT_EQ(uploaded_dm_token, base::WideToUTF8(dm_token));
+
+    std::string uploaded_username =
+        GetDictStringUTF8(body_value, "account_username");
+    std::string uploaded_domain =
+        GetDictStringUTF8(body_value, "device_domain");
+    if (!fail_sid_lookup) {
+      ASSERT_EQ(uploaded_username, base::WideToUTF8(kDefaultUsername));
+      ASSERT_EQ(uploaded_domain, base::WideToUTF8(domain_name));
+    } else {
+      ASSERT_EQ(uploaded_username, "");
+      ASSERT_EQ(uploaded_domain, "");
+    }
   }
 }
 
@@ -97,6 +125,7 @@
     GemDeviceDetailsExtensionTest,
     ::testing::Combine(::testing::Values(L"valid-device-resource-id"),
                        ::testing::Bool(),
+                       ::testing::Bool(),
                        ::testing::Values(L"valid-dm-token")));
 
 }  // namespace testing
diff --git a/chrome/credential_provider/test/gcp_fakes.cc b/chrome/credential_provider/test/gcp_fakes.cc
index ef003a4f..265db43 100644
--- a/chrome/credential_provider/test/gcp_fakes.cc
+++ b/chrome/credential_provider/test/gcp_fakes.cc
@@ -344,6 +344,15 @@
                                          DWORD username_size,
                                          wchar_t* domain,
                                          DWORD domain_size) {
+  auto it = to_be_failed_find_user_sids_.find(sid);
+  if (it != to_be_failed_find_user_sids_.end()) {
+    to_be_failed_find_user_sids_[sid]--;
+    if (to_be_failed_find_user_sids_[sid] == 0)
+      to_be_failed_find_user_sids_.erase(it);
+
+    return E_FAIL;
+  }
+
   for (auto& kv : username_to_info_) {
     if (kv.second.sid == sid) {
       if (username)
@@ -357,6 +366,11 @@
   return HRESULT_FROM_WIN32(ERROR_NONE_MAPPED);
 }
 
+void FakeOSUserManager::FailFindUserBySID(const wchar_t* sid,
+                                          int number_of_failures) {
+  to_be_failed_find_user_sids_[sid] = number_of_failures;
+}
+
 HRESULT FakeOSUserManager::RemoveUser(const wchar_t* username,
                                       const wchar_t* password) {
   username_to_info_.erase(username);
diff --git a/chrome/credential_provider/test/gcp_fakes.h b/chrome/credential_provider/test/gcp_fakes.h
index 371c9ac..26a4f16 100644
--- a/chrome/credential_provider/test/gcp_fakes.h
+++ b/chrome/credential_provider/test/gcp_fakes.h
@@ -146,6 +146,8 @@
     is_device_domain_joined_ = is_device_domain_joined;
   }
 
+  void FailFindUserBySID(const wchar_t* sid, int number_of_failures);
+
   struct UserInfo {
     UserInfo(const wchar_t* domain,
              const wchar_t* password,
@@ -216,6 +218,7 @@
   std::map<std::wstring, UserInfo> username_to_info_;
   bool is_device_domain_joined_ = false;
   std::map<FAILEDOPERATIONS, HRESULT> failure_reasons_;
+  std::map<std::wstring, int> to_be_failed_find_user_sids_;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/services/ipp_parser/public/cpp/ipp_converter.cc b/chrome/services/ipp_parser/public/cpp/ipp_converter.cc
index 438961c8..f8699431 100644
--- a/chrome/services/ipp_parser/public/cpp/ipp_converter.cc
+++ b/chrome/services/ipp_parser/public/cpp/ipp_converter.cc
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/strings/strcat.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/values.h"
 #include "net/http/http_util.h"
@@ -74,12 +75,12 @@
   const size_t value_begin_index = key_end_index + 1;
   if (value_begin_index == header.size()) {
     // Empty header value is valid
-    return HttpHeader{key.as_string(), ""};
+    return HttpHeader{std::string(key), ""};
   }
 
   base::StringPiece value = header.substr(value_begin_index);
   value = net::HttpUtil::TrimLWS(value);
-  return HttpHeader{key.as_string(), value.as_string()};
+  return HttpHeader{std::string(key), std::string(value)};
 }
 
 // Converts |value_tag| to corresponding mojom type for marshalling.
diff --git a/chrome/test/chromedriver/chrome/adb_impl.cc b/chrome/test/chromedriver/chrome/adb_impl.cc
index 539e0cae..315b22bc 100644
--- a/chrome/test/chromedriver/chrome/adb_impl.cc
+++ b/chrome/test/chromedriver/chrome/adb_impl.cc
@@ -15,6 +15,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
@@ -322,7 +323,7 @@
         base::SPLIT_WANT_NONEMPTY);
     if (tokens.size() != 8)
       continue;
-    *socket_name = tokens[7].as_string();
+    *socket_name = std::string(tokens[7]);
     return Status(kOk);
   }
 
diff --git a/chrome/updater/lib_util_unittest.cc b/chrome/updater/lib_util_unittest.cc
index c133b6a15..ff7a492 100644
--- a/chrome/updater/lib_util_unittest.cc
+++ b/chrome/updater/lib_util_unittest.cc
@@ -23,8 +23,8 @@
 
   for (auto pair : reserved_characters) {
     // If input contains a reserved character, just ignore it.
-    std::string escaped_includes_reserved = pair.first.as_string() + "%20";
-    std::string unescaped = pair.first.as_string() + " ";
+    std::string escaped_includes_reserved = std::string(pair.first) + "%20";
+    std::string unescaped = std::string(pair.first) + " ";
     EXPECT_EQ(unescaped, UnescapeURLComponent(escaped_includes_reserved));
   }
 }
diff --git a/chrome/updater/lib_util_win.cc b/chrome/updater/lib_util_win.cc
index 402038ca4..af7f91b 100644
--- a/chrome/updater/lib_util_win.cc
+++ b/chrome/updater/lib_util_win.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/updater/lib_util.h"
 
+#include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/win/shlwapi.h"
 #include "base/win/windows_full.h"
@@ -16,7 +17,7 @@
   if (escaped_text_piece.empty())
     return {};
 
-  std::string escaped_text = escaped_text_piece.as_string();
+  std::string escaped_text(escaped_text_piece);
 
   // UrlUnescapeA doesn't modify the buffer unless passed URL_UNESCAPE_INPLACE.
   char* escaped_text_ptr = const_cast<char*>(escaped_text.data());
diff --git a/chrome/updater/tag.cc b/chrome/updater/tag.cc
index 25aca505..c5fa9a5 100644
--- a/chrome/updater/tag.cc
+++ b/chrome/updater/tag.cc
@@ -118,22 +118,22 @@
   if (value.empty())
     return ErrorCode::kGlobal_BundleNameCannotBeWhitespace;
 
-  args->bundle_name = value.as_string();
+  args->bundle_name = std::string(value);
   return ErrorCode::kSuccess;
 }
 
 ErrorCode ParseInstallationId(base::StringPiece value, TagArgs* args) {
-  args->installation_id = value.as_string();
+  args->installation_id = std::string(value);
   return ErrorCode::kSuccess;
 }
 
 ErrorCode ParseBrandCode(base::StringPiece value, TagArgs* args) {
-  args->brand_code = value.as_string();
+  args->brand_code = std::string(value);
   return ErrorCode::kSuccess;
 }
 
 ErrorCode ParseClientId(base::StringPiece value, TagArgs* args) {
-  args->client_id = value.as_string();
+  args->client_id = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -142,12 +142,12 @@
   if (value.empty())
     return ErrorCode::kGlobal_ExperimentLabelsCannotBeWhitespace;
 
-  args->experiment_labels = value.as_string();
+  args->experiment_labels = std::string(value);
   return ErrorCode::kSuccess;
 }
 
 ErrorCode ParseReferralId(base::StringPiece value, TagArgs* args) {
-  args->referral_id = value.as_string();
+  args->referral_id = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -170,7 +170,7 @@
 ErrorCode ParseLanguage(base::StringPiece value, TagArgs* args) {
   // Even if we don't support the language, we want to pass it to the
   // installer. Omaha will pick its language later. See http://b/1336966.
-  args->language = value.as_string();
+  args->language = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -239,7 +239,7 @@
 namespace app_attributes {
 
 ErrorCode ParseAdditionalParameters(base::StringPiece value, AppArgs* args) {
-  args->ap = value.as_string();
+  args->ap = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -248,7 +248,7 @@
   if (value.empty())
     return ErrorCode::kApp_ExperimentLabelsCannotBeWhitespace;
 
-  args->experiment_labels = value.as_string();
+  args->experiment_labels = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -257,7 +257,7 @@
   if (value.empty())
     return ErrorCode::kApp_AppNameCannotBeWhitespace;
 
-  args->app_name = value.as_string();
+  args->app_name = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -271,12 +271,12 @@
 }
 
 ErrorCode ParseInstallDataIndex(base::StringPiece value, AppArgs* args) {
-  args->install_data_index = value.as_string();
+  args->install_data_index = std::string(value);
   return ErrorCode::kSuccess;
 }
 
 ErrorCode ParseUntrustedData(base::StringPiece value, AppArgs* args) {
-  args->untrusted_data = value.as_string();
+  args->untrusted_data = std::string(value);
   return ErrorCode::kSuccess;
 }
 
@@ -333,7 +333,7 @@
         kAppInstallerData_InstallerDataCannotBeSpecifiedBeforeAppId;
 
   args->apps[current_app_index->value()].encoded_installer_data =
-      value.as_string();
+      std::string(value);
 
   return ErrorCode::kSuccess;
 }
@@ -394,7 +394,7 @@
                                     base::TrimPositions::TRIM_ALL);
       attributes.emplace_back(name, unescape_value
                                         ? updater::UnescapeURLComponent(value)
-                                        : value.as_string());
+                                        : std::string(value));
     }
   }
   return attributes;
diff --git a/chromeos/components/camera_app_ui/resources/views/main.html b/chromeos/components/camera_app_ui/resources/views/main.html
index 4dc821d..c0430e75 100644
--- a/chromeos/components/camera_app_ui/resources/views/main.html
+++ b/chromeos/components/camera_app_ui/resources/views/main.html
@@ -251,15 +251,17 @@
     </div>
     <div id="view-ptz-panel">
       <div id="panel-container">
-        <button id="tilt-up" i18n-label="tilt_up_button" tabindex="0"></button>
-        <button id="pan-right" i18n-label="pan_right_button"
+        <button id="tilt-up" class="inkdrop" i18n-label="tilt_up_button"
           tabindex="0"></button>
-        <button id="tilt-down" i18n-label="tilt_down_button"
+        <button id="pan-right" class="inkdrop" i18n-label="pan_right_button"
           tabindex="0"></button>
-        <button id="pan-left" i18n-label="pan_left_button"
+        <button id="tilt-down" class="inkdrop" i18n-label="tilt_down_button"
           tabindex="0"></button>
-        <button id="zoom-in" i18n-label="zoom_in_button" tabindex="0"></button>
-        <button id="zoom-out" i18n-label="zoom_out_button"
+        <button id="pan-left" class="inkdrop" i18n-label="pan_left_button"
+          tabindex="0"></button>
+        <button id="zoom-in" class="inkdrop" i18n-label="zoom_in_button"
+          tabindex="0"></button>
+        <button id="zoom-out" class="inkdrop" i18n-label="zoom_out_button"
           tabindex="0"></button>
         <div id="ptz-divider1" class="ptz-divider"></div>
         <div id="ptz-divider2" class="ptz-divider"></div>
diff --git a/chromeos/components/help_app_ui/resources/help_app.externs.js b/chromeos/components/help_app_ui/resources/help_app.externs.js
index d7f9e86..2a0ab7f 100644
--- a/chromeos/components/help_app_ui/resources/help_app.externs.js
+++ b/chromeos/components/help_app_ui/resources/help_app.externs.js
@@ -230,3 +230,11 @@
  * @return {!helpApp.ClientApiDelegate}
  */
 helpApp.ClientApi.prototype.getDelegate = function() {};
+
+/**
+ * Launch data that can be read by the app when it first loads.
+ * @type {{
+ *     delegate: (!helpApp.ClientApiDelegate | undefined),
+ * }}
+ */
+window.customLaunchData;
diff --git a/chromeos/components/help_app_ui/resources/receiver.js b/chromeos/components/help_app_ui/resources/receiver.js
index 65eab81d..1c6cd25 100644
--- a/chromeos/components/help_app_ui/resources/receiver.js
+++ b/chromeos/components/help_app_ui/resources/receiver.js
@@ -57,6 +57,10 @@
   },
 };
 
+window.customLaunchData = {
+  delegate: DELEGATE,
+};
+
 /**
  * Returns the help app if it can find it in the DOM.
  * @return {?helpApp.ClientApi}
diff --git a/chromeos/components/local_search_service/content_extraction_utils.cc b/chromeos/components/local_search_service/content_extraction_utils.cc
index f503894..8899035 100644
--- a/chromeos/components/local_search_service/content_extraction_utils.cc
+++ b/chromeos/components/local_search_service/content_extraction_utils.cc
@@ -9,12 +9,12 @@
 #include <vector>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
 #include "base/i18n/case_conversion.h"
 #include "base/i18n/unicodestring.h"
 #include "base/memory/ptr_util.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chromeos/components/string_matching/tokenized_string.h"
 #include "third_party/icu/source/i18n/unicode/translit.h"
diff --git a/chromeos/components/media_app_ui/media_app_guest_ui.cc b/chromeos/components/media_app_ui/media_app_guest_ui.cc
index c151c28..9aa755cb 100644
--- a/chromeos/components/media_app_ui/media_app_guest_ui.cc
+++ b/chromeos/components/media_app_ui/media_app_guest_ui.cc
@@ -3,16 +3,14 @@
 // found in the LICENSE file.
 
 #include "chromeos/components/media_app_ui/media_app_guest_ui.h"
-#include "base/command_line.h"
-#include "base/memory/ref_counted_memory.h"
 #include "chromeos/components/media_app_ui/url_constants.h"
+#include "chromeos/components/web_applications/webui_test_prod_util.h"
 #include "chromeos/grit/chromeos_media_app_bundle_resources.h"
 #include "chromeos/grit/chromeos_media_app_bundle_resources_map.h"
 #include "chromeos/grit/chromeos_media_app_resources.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
-#include "content/public/common/content_switches.h"
 #include "services/network/public/mojom/content_security_policy.mojom.h"
 #include "ui/file_manager/grit/file_manager_resources.h"
 
@@ -20,31 +18,6 @@
 
 namespace {
 
-content::WebUIDataSource::ShouldHandleRequestCallback&
-GetTestShouldHandleRequest() {
-  static base::NoDestructor<
-      content::WebUIDataSource::ShouldHandleRequestCallback>
-      callback;
-  return *callback;
-}
-
-content::WebUIDataSource::HandleRequestCallback& GetTestRequestFilterHandler() {
-  static base::NoDestructor<content::WebUIDataSource::HandleRequestCallback>
-      callback;
-  return *callback;
-}
-
-bool InvokeTestShouldHandleRequestCallback(const std::string& path) {
-  const auto& callback = GetTestShouldHandleRequest();
-  return callback ? callback.Run(path) : false;
-}
-
-void InvokeTestFileRequestFilterCallback(
-    const std::string& path,
-    content::WebUIDataSource::GotDataCallback callback) {
-  return GetTestRequestFilterHandler().Run(path, std::move(callback));
-}
-
 content::WebUIDataSource* CreateMediaAppUntrustedDataSource(
     MediaAppGuestUIDelegate* delegate) {
   content::WebUIDataSource* source =
@@ -67,13 +40,8 @@
   source->AddResourcePath("js/app_image_handler_module.js",
                           IDR_MEDIA_APP_APP_IMAGE_HANDLER_MODULE_JS);
 
-  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
-  const bool is_running_test = command_line->HasSwitch(::switches::kTestType);
-  if (is_running_test) {
-    source->SetRequestFilter(
-        base::BindRepeating(&InvokeTestShouldHandleRequestCallback),
-        base::BindRepeating(&InvokeTestFileRequestFilterCallback));
-  }
+  MaybeConfigureTestableDataSource(source);
+
   // Add all resources from chromeos_media_app_bundle_resources.pak.
   source->AddResourcePaths(base::make_span(
       kChromeosMediaAppBundleResources, kChromeosMediaAppBundleResourcesSize));
@@ -127,13 +95,6 @@
 
 }  // namespace
 
-void SetMediaAppGuestUITestRequestHandlerForTesting(  // IN-TEST
-    content::WebUIDataSource::ShouldHandleRequestCallback should_handle,
-    content::WebUIDataSource::HandleRequestCallback handler) {
-  GetTestShouldHandleRequest() = std::move(should_handle);
-  GetTestRequestFilterHandler() = std::move(handler);
-}
-
 MediaAppGuestUI::MediaAppGuestUI(content::WebUI* web_ui,
                                  MediaAppGuestUIDelegate* delegate)
     : ui::UntrustedWebUIController(web_ui) {
diff --git a/chromeos/components/media_app_ui/media_app_guest_ui.h b/chromeos/components/media_app_ui/media_app_guest_ui.h
index 3ed62b6..b694f50 100644
--- a/chromeos/components/media_app_ui/media_app_guest_ui.h
+++ b/chromeos/components/media_app_ui/media_app_guest_ui.h
@@ -5,9 +5,12 @@
 #ifndef CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_
 #define CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_
 
-#include "content/public/browser/web_ui_data_source.h"
 #include "ui/webui/untrusted_web_ui_controller.h"
 
+namespace content {
+class WebUIDataSource;
+}
+
 namespace chromeos {
 
 // A delegate used during data source creation to expose some //chrome
@@ -27,11 +30,6 @@
   ~MediaAppGuestUI() override;
 };
 
-// Configures the data source request filter used for testing.
-void SetMediaAppGuestUITestRequestHandlerForTesting(
-    content::WebUIDataSource::ShouldHandleRequestCallback should_handle,
-    content::WebUIDataSource::HandleRequestCallback handler);
-
 }  // namespace chromeos
 
 #endif  // CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_GUEST_UI_H_
diff --git a/chromeos/components/media_app_ui/media_app_ui.cc b/chromeos/components/media_app_ui/media_app_ui.cc
index a2488e9..b747792 100644
--- a/chromeos/components/media_app_ui/media_app_ui.cc
+++ b/chromeos/components/media_app_ui/media_app_ui.cc
@@ -6,16 +6,16 @@
 
 #include <utility>
 
-#include "base/command_line.h"
 #include "chromeos/components/media_app_ui/media_app_page_handler.h"
 #include "chromeos/components/media_app_ui/url_constants.h"
+#include "chromeos/components/web_applications/webui_test_prod_util.h"
 #include "chromeos/grit/chromeos_media_app_bundle_resources.h"
 #include "chromeos/grit/chromeos_media_app_resources.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
-#include "content/public/common/content_switches.h"
+#include "content/public/browser/web_ui_data_source.h"
 #include "content/public/common/url_constants.h"
 #include "services/network/public/mojom/content_security_policy.mojom.h"
 #include "ui/webui/webui_allowlist.h"
@@ -56,22 +56,6 @@
   return source;
 }
 
-bool TestShouldHandleRequest(const std::string& path) {
-  return path == "media_app_ui_browsertest.js" || path == "driver.js";
-}
-
-content::WebUIDataSource::HandleRequestCallback& GetTestRequestFilterHandler() {
-  static base::NoDestructor<content::WebUIDataSource::HandleRequestCallback>
-      callback;
-  return *callback;
-}
-
-void InvokeTestFileRequestFilterCallback(
-    const std::string& path,
-    content::WebUIDataSource::GotDataCallback callback) {
-  return GetTestRequestFilterHandler().Run(path, std::move(callback));
-}
-
 }  // namespace
 
 MediaAppUI::MediaAppUI(content::WebUI* web_ui,
@@ -90,17 +74,10 @@
   host_source->OverrideCrossOriginOpenerPolicy("same-origin");
   host_source->OverrideCrossOriginEmbedderPolicy("require-corp");
 
-  // Only add a filter when running as test.
-  const bool is_running_test =
-      base::CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType);
-  if (is_running_test) {
+  if (MaybeConfigureTestableDataSource(host_source)) {
     host_source->OverrideContentSecurityPolicy(
         network::mojom::CSPDirectiveName::TrustedTypes,
         std::string("trusted-types test-harness;"));
-
-    host_source->SetRequestFilter(
-        base::BindRepeating(&TestShouldHandleRequest),
-        base::BindRepeating(&InvokeTestFileRequestFilterCallback));
   }
 
   // Register auto-granted permissions.
@@ -143,9 +120,4 @@
 
 WEB_UI_CONTROLLER_TYPE_IMPL(MediaAppUI)
 
-void SetMediaAppUITestRequestHandlerForTesting(
-    content::WebUIDataSource::HandleRequestCallback callback) {
-  GetTestRequestFilterHandler() = std::move(callback);
-}
-
 }  // namespace chromeos
diff --git a/chromeos/components/media_app_ui/media_app_ui.h b/chromeos/components/media_app_ui/media_app_ui.h
index b5fb3bb..508c38f 100644
--- a/chromeos/components/media_app_ui/media_app_ui.h
+++ b/chromeos/components/media_app_ui/media_app_ui.h
@@ -9,7 +9,6 @@
 
 #include "chromeos/components/media_app_ui/media_app_ui.mojom.h"
 #include "chromeos/components/media_app_ui/media_app_ui_delegate.h"
-#include "content/public/browser/web_ui_data_source.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "ui/webui/mojo_web_ui_controller.h"
 
@@ -47,10 +46,6 @@
   WEB_UI_CONTROLLER_TYPE_DECL();
 };
 
-// Lets tests add their own handlers for requests made from testing code.
-void SetMediaAppUITestRequestHandlerForTesting(
-    content::WebUIDataSource::HandleRequestCallback callback);
-
 }  // namespace chromeos
 
 #endif  // CHROMEOS_COMPONENTS_MEDIA_APP_UI_MEDIA_APP_UI_H_
diff --git a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.cc b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.cc
index 1bbcbf9..6d93244 100644
--- a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.cc
+++ b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.cc
@@ -4,11 +4,7 @@
 
 #include "chromeos/components/media_app_ui/test/media_app_ui_browsertest.h"
 
-#include "base/base_paths.h"
 #include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/memory/ref_counted_memory.h"
-#include "base/path_service.h"
 #include "chromeos/components/media_app_ui/media_app_guest_ui.h"
 #include "chromeos/components/media_app_ui/media_app_ui.h"
 #include "chromeos/components/media_app_ui/url_constants.h"
@@ -35,27 +31,12 @@
 constexpr base::FilePath::CharType kTestFileLocation[] =
     FILE_PATH_LITERAL("chromeos/components/media_app_ui/test");
 
-void HandleTestFileRequestCallback(
-    const std::string& path,
-    content::WebUIDataSource::GotDataCallback callback) {
-  base::ScopedAllowBlockingForTesting allow_blocking;
-
-  base::FilePath source_root;
-  base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root);
-  const base::FilePath test_file_path =
-      source_root.AppendASCII(kTestFileLocation).AppendASCII(path);
-
-  std::string contents;
-  CHECK(base::ReadFileToString(test_file_path, &contents)) << test_file_path;
-
-  std::move(callback).Run(base::RefCountedString::TakeString(&contents));
-}
-
-bool GuestTestShouldHandleRequest(const std::string& path) {
-  return path == "test_worker.js" ||
-         path == "media_app_guest_ui_browsertest.js" ||
-         path == "guest_query_receiver.js";
-}
+// Paths requested on the media-app origin that should be delivered by the test
+// handler.
+constexpr const char* kTestFiles[] = {
+    kGuestTestCases,  "media_app_ui_browsertest.js", "driver.js",
+    "test_worker.js", "guest_query_receiver.js",
+};
 
 }  // namespace
 
@@ -66,12 +47,9 @@
           {base::FilePath(kTestLibraryPath), base::FilePath(kCr),
            base::FilePath(kWebUiTestUtil)},
           kGuestTestCases) {
-  chromeos::SetMediaAppGuestUITestRequestHandlerForTesting(
-      base::BindRepeating(&GuestTestShouldHandleRequest),
-      base::BindRepeating(&HandleTestFileRequestCallback));
-
-  chromeos::SetMediaAppUITestRequestHandlerForTesting(
-      base::BindRepeating(&HandleTestFileRequestCallback));
+  ConfigureDefaultTestRequestHandler(
+      base::FilePath(kTestFileLocation),
+      {std::begin(kTestFiles), std::end(kTestFiles)});
 }
 
 MediaAppUiBrowserTest::~MediaAppUiBrowserTest() = default;
diff --git a/chromeos/components/web_applications/BUILD.gn b/chromeos/components/web_applications/BUILD.gn
index 389cdde..c2541bc 100644
--- a/chromeos/components/web_applications/BUILD.gn
+++ b/chromeos/components/web_applications/BUILD.gn
@@ -5,6 +5,10 @@
 assert(is_chromeos, "These utils are Chrome OS only")
 
 static_library("web_applications") {
+  sources = [
+    "webui_test_prod_util.cc",
+    "webui_test_prod_util.h",
+  ]
   deps = [
     "//base",
     "//base:i18n",
diff --git a/chromeos/components/web_applications/DEPS b/chromeos/components/web_applications/DEPS
index c36190b..aed5532 100644
--- a/chromeos/components/web_applications/DEPS
+++ b/chromeos/components/web_applications/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
   "+content/public/browser",
+  "+content/public/common",
   "+ui/base",
 ]
diff --git a/chromeos/components/web_applications/test/BUILD.gn b/chromeos/components/web_applications/test/BUILD.gn
index 5a346c4..04c29cfd 100644
--- a/chromeos/components/web_applications/test/BUILD.gn
+++ b/chromeos/components/web_applications/test/BUILD.gn
@@ -15,6 +15,7 @@
     "//base/test:test_support",
     "//chrome/test:test_support",
     "//chrome/test:test_support_ui",
+    "//chromeos/components/web_applications",
     "//content/test:test_support",
     "//ui/webui:webui",
   ]
diff --git a/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.cc b/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.cc
index ce0ba5aa..61002c3 100644
--- a/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.cc
+++ b/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.cc
@@ -6,14 +6,44 @@
 
 #include <vector>
 
+#include "base/base_paths.h"
 #include "base/files/file_util.h"
+#include "base/memory/ref_counted_memory.h"
 #include "base/path_service.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/test/base/js_test_api.h"
+#include "chromeos/components/web_applications/webui_test_prod_util.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace {
+
+void HandleTestFileRequestCallback(
+    const base::FilePath& test_file_location,
+    const std::string& path,
+    content::WebUIDataSource::GotDataCallback callback) {
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
+  base::FilePath source_root;
+  base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root);
+  const base::FilePath test_file_path =
+      source_root.Append(test_file_location).AppendASCII(path);
+
+  std::string contents;
+  CHECK(base::ReadFileToString(test_file_path, &contents)) << test_file_path;
+
+  std::move(callback).Run(base::RefCountedString::TakeString(&contents));
+}
+
+bool TestRequestHandlerShouldHandleRequest(
+    const std::vector<std::string>& test_paths,
+    const std::string& path) {
+  return base::Contains(test_paths, path);
+}
+
+}  // namespace
+
 class SandboxedWebUiAppTestBase::TestCodeInjector
     : public content::TestNavigationObserver {
  public:
@@ -75,6 +105,16 @@
 SandboxedWebUiAppTestBase::~SandboxedWebUiAppTestBase() = default;
 
 // static
+void SandboxedWebUiAppTestBase::ConfigureDefaultTestRequestHandler(
+    const base::FilePath& root_folder,
+    const std::vector<std::string>& resource_files) {
+  SetTestableDataSourceRequestHandlerForTesting(
+      base::BindRepeating(&TestRequestHandlerShouldHandleRequest,
+                          resource_files),
+      base::BindRepeating(&HandleTestFileRequestCallback, root_folder));
+}
+
+// static
 std::string SandboxedWebUiAppTestBase::LoadJsTestLibrary(
     const base::FilePath& script_path) {
   base::FilePath source_root;
diff --git a/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.h b/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.h
index 3d5d6dd..9e01f9c 100644
--- a/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.h
+++ b/chromeos/components/web_applications/test/sandboxed_web_ui_test_base.h
@@ -28,6 +28,17 @@
   SandboxedWebUiAppTestBase& operator=(const SandboxedWebUiAppTestBase&) =
       delete;
 
+  // Configures and installs a handler to deliver testing resources into a
+  // WebUIDataSource configured using MaybeConfigureTestableDataSource().
+  // This installs the "default" handler which serves requests of the form
+  // scheme://origin/<file>, where <file> is in |resource_files| and can be
+  // found from |root_folder| under the source tree.
+  // Tests can invoke SetTestableDataSourceRequestHandlerForTesting() directly
+  // for more elaborate handlers.
+  static void ConfigureDefaultTestRequestHandler(
+      const base::FilePath& root_folder,
+      const std::vector<std::string>& resource_files);
+
   // Returns the contents of the JavaScript library used to help test the
   // sandboxed frame.
   static std::string LoadJsTestLibrary(const base::FilePath& script_path);
diff --git a/chromeos/components/web_applications/webui_test_prod_util.cc b/chromeos/components/web_applications/webui_test_prod_util.cc
new file mode 100644
index 0000000..1a716561
--- /dev/null
+++ b/chromeos/components/web_applications/webui_test_prod_util.cc
@@ -0,0 +1,55 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/web_applications/webui_test_prod_util.h"
+
+#include "base/command_line.h"
+#include "base/no_destructor.h"
+#include "content/public/common/content_switches.h"
+
+namespace {
+
+content::WebUIDataSource::ShouldHandleRequestCallback&
+GetTestShouldHandleRequest() {
+  static base::NoDestructor<
+      content::WebUIDataSource::ShouldHandleRequestCallback>
+      callback;
+  return *callback;
+}
+
+content::WebUIDataSource::HandleRequestCallback& GetTestRequestFilterHandler() {
+  static base::NoDestructor<content::WebUIDataSource::HandleRequestCallback>
+      callback;
+  return *callback;
+}
+
+bool InvokeTestShouldHandleRequestCallback(const std::string& path) {
+  const auto& callback = GetTestShouldHandleRequest();
+  return callback ? callback.Run(path) : false;
+}
+
+void InvokeTestFileRequestFilterCallback(
+    const std::string& path,
+    content::WebUIDataSource::GotDataCallback callback) {
+  return GetTestRequestFilterHandler().Run(path, std::move(callback));
+}
+
+}  // namespace
+
+bool MaybeConfigureTestableDataSource(content::WebUIDataSource* host_source) {
+  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType))
+    return false;
+
+  host_source->SetRequestFilter(
+      base::BindRepeating(&InvokeTestShouldHandleRequestCallback),
+      base::BindRepeating(&InvokeTestFileRequestFilterCallback));
+  return true;
+}
+
+void SetTestableDataSourceRequestHandlerForTesting(  // IN-TEST
+    content::WebUIDataSource::ShouldHandleRequestCallback should_handle,
+    content::WebUIDataSource::HandleRequestCallback handler) {
+  GetTestShouldHandleRequest() = std::move(should_handle);
+  GetTestRequestFilterHandler() = std::move(handler);
+}
diff --git a/chromeos/components/web_applications/webui_test_prod_util.h b/chromeos/components/web_applications/webui_test_prod_util.h
new file mode 100644
index 0000000..c8b5686
--- /dev/null
+++ b/chromeos/components/web_applications/webui_test_prod_util.h
@@ -0,0 +1,23 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_COMPONENTS_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_
+#define CHROMEOS_COMPONENTS_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_
+
+#include "content/public/browser/web_ui_data_source.h"
+
+// If the current process is running for tests, configures |host_source| for
+// testing by installing a request filter that can be satisfied by tests wanting
+// to provide custom resources. Note that if these resources are scripts,
+// further CSP changes (e.g. trusted-types) may be required in order for them to
+// load. Returns true if the request filter was installed.
+bool MaybeConfigureTestableDataSource(content::WebUIDataSource* host_source);
+
+// Configures the data source request filter used for testing. Only testing code
+// should call this.
+void SetTestableDataSourceRequestHandlerForTesting(
+    content::WebUIDataSource::ShouldHandleRequestCallback should_handle,
+    content::WebUIDataSource::HandleRequestCallback handler);
+
+#endif  // CHROMEOS_COMPONENTS_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_
diff --git a/chromeos/dbus/BUILD.gn b/chromeos/dbus/BUILD.gn
index 6295613..b600b6b 100644
--- a/chromeos/dbus/BUILD.gn
+++ b/chromeos/dbus/BUILD.gn
@@ -15,6 +15,7 @@
   public_deps = [
     ":common",
     "//chromeos/dbus/arc",
+    "//chromeos/dbus/cicerone",
     "//chromeos/dbus/constants",
     "//chromeos/dbus/debug_daemon",
     "//chromeos/dbus/lorgnette_manager",
@@ -50,8 +51,6 @@
     "cec_service_client.h",
     "chunneld_client.cc",
     "chunneld_client.h",
-    "cicerone_client.cc",
-    "cicerone_client.h",
     "concierge_client.cc",
     "concierge_client.h",
     "cros_disks_client.cc",
@@ -69,8 +68,6 @@
     "fake_cec_service_client.h",
     "fake_chunneld_client.cc",
     "fake_chunneld_client.h",
-    "fake_cicerone_client.cc",
-    "fake_cicerone_client.h",
     "fake_concierge_client.cc",
     "fake_concierge_client.h",
     "fake_cros_disks_client.cc",
diff --git a/chromeos/dbus/biod/fake_biod_client.cc b/chromeos/dbus/biod/fake_biod_client.cc
index 10d3915a..1f1c312 100644
--- a/chromeos/dbus/biod/fake_biod_client.cc
+++ b/chromeos/dbus/biod/fake_biod_client.cc
@@ -9,8 +9,8 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "dbus/object_path.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chromeos/dbus/cicerone/BUILD.gn b/chromeos/dbus/cicerone/BUILD.gn
new file mode 100644
index 0000000..5662895
--- /dev/null
+++ b/chromeos/dbus/cicerone/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos")
+
+component("cicerone") {
+  defines = [ "IS_CHROMEOS_DBUS_IMPL" ]
+  deps = [
+    "//base",
+    "//chromeos/dbus:cicerone_proto",
+    "//chromeos/dbus:common",
+    "//dbus",
+  ]
+
+  sources = [
+    "cicerone_client.cc",
+    "cicerone_client.h",
+    "fake_cicerone_client.cc",
+    "fake_cicerone_client.h",
+  ]
+}
diff --git a/chromeos/dbus/cicerone_client.cc b/chromeos/dbus/cicerone/cicerone_client.cc
similarity index 99%
rename from chromeos/dbus/cicerone_client.cc
rename to chromeos/dbus/cicerone/cicerone_client.cc
index c341f6c..b4921a0 100644
--- a/chromeos/dbus/cicerone_client.cc
+++ b/chromeos/dbus/cicerone/cicerone_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 
 #include <string>
 #include <utility>
diff --git a/chromeos/dbus/cicerone_client.h b/chromeos/dbus/cicerone/cicerone_client.h
similarity index 98%
rename from chromeos/dbus/cicerone_client.h
rename to chromeos/dbus/cicerone/cicerone_client.h
index 09cc9c9..e86a375 100644
--- a/chromeos/dbus/cicerone_client.h
+++ b/chromeos/dbus/cicerone/cicerone_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_CICERONE_CLIENT_H_
-#define CHROMEOS_DBUS_CICERONE_CLIENT_H_
+#ifndef CHROMEOS_DBUS_CICERONE_CICERONE_CLIENT_H_
+#define CHROMEOS_DBUS_CICERONE_CICERONE_CLIENT_H_
 
 #include <memory>
 
@@ -359,4 +359,4 @@
 
 }  // namespace chromeos
 
-#endif  // CHROMEOS_DBUS_CICERONE_CLIENT_H_
+#endif  // CHROMEOS_DBUS_CICERONE_CICERONE_CLIENT_H_
diff --git a/chromeos/dbus/fake_cicerone_client.cc b/chromeos/dbus/cicerone/fake_cicerone_client.cc
similarity index 99%
rename from chromeos/dbus/fake_cicerone_client.cc
rename to chromeos/dbus/cicerone/fake_cicerone_client.cc
index dca5df5..14baaca 100644
--- a/chromeos/dbus/fake_cicerone_client.cc
+++ b/chromeos/dbus/cicerone/fake_cicerone_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/dbus/fake_cicerone_client.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 
 #include <utility>
 
diff --git a/chromeos/dbus/fake_cicerone_client.h b/chromeos/dbus/cicerone/fake_cicerone_client.h
similarity index 98%
rename from chromeos/dbus/fake_cicerone_client.h
rename to chromeos/dbus/cicerone/fake_cicerone_client.h
index 1346d58..a07b316 100644
--- a/chromeos/dbus/fake_cicerone_client.h
+++ b/chromeos/dbus/cicerone/fake_cicerone_client.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_FAKE_CICERONE_CLIENT_H_
-#define CHROMEOS_DBUS_FAKE_CICERONE_CLIENT_H_
+#ifndef CHROMEOS_DBUS_CICERONE_FAKE_CICERONE_CLIENT_H_
+#define CHROMEOS_DBUS_CICERONE_FAKE_CICERONE_CLIENT_H_
 
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 
 namespace chromeos {
 
@@ -480,4 +480,4 @@
 
 }  // namespace chromeos
 
-#endif  // CHROMEOS_DBUS_FAKE_CICERONE_CLIENT_H_
+#endif  // CHROMEOS_DBUS_CICERONE_FAKE_CICERONE_CLIENT_H_
diff --git a/chromeos/dbus/dbus_clients_browser.cc b/chromeos/dbus/dbus_clients_browser.cc
index 01dd8e8..84deb1a6 100644
--- a/chromeos/dbus/dbus_clients_browser.cc
+++ b/chromeos/dbus/dbus_clients_browser.cc
@@ -18,7 +18,8 @@
 #include "chromeos/dbus/arc/fake_arc_obb_mounter_client.h"
 #include "chromeos/dbus/cec_service_client.h"
 #include "chromeos/dbus/chunneld_client.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/concierge_client.h"
 #include "chromeos/dbus/cros_disks_client.h"
 #include "chromeos/dbus/dbus_client_implementation_type.h"
@@ -29,7 +30,6 @@
 #include "chromeos/dbus/fake_anomaly_detector_client.h"
 #include "chromeos/dbus/fake_cec_service_client.h"
 #include "chromeos/dbus/fake_chunneld_client.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 #include "chromeos/dbus/fake_concierge_client.h"
 #include "chromeos/dbus/fake_cros_disks_client.h"
 #include "chromeos/dbus/fake_easy_unlock_client.h"
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index ef7f035..bed50f0 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -20,7 +20,7 @@
 #include "chromeos/dbus/arc/arc_obb_mounter_client.h"
 #include "chromeos/dbus/cec_service_client.h"
 #include "chromeos/dbus/chunneld_client.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/concierge_client.h"
 #include "chromeos/dbus/constants/dbus_switches.h"
 #include "chromeos/dbus/cros_disks_client.h"
diff --git a/chromeos/dbus/fake_concierge_client.cc b/chromeos/dbus/fake_concierge_client.cc
index a531c95b..58d7bc8 100644
--- a/chromeos/dbus/fake_concierge_client.cc
+++ b/chromeos/dbus/fake_concierge_client.cc
@@ -8,8 +8,8 @@
 
 #include "base/bind.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "chromeos/dbus/cicerone/fake_cicerone_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_cicerone_client.h"
 
 namespace chromeos {
 
diff --git a/chromeos/dbus/fake_concierge_client.h b/chromeos/dbus/fake_concierge_client.h
index ca0dd30..63ffacf7 100644
--- a/chromeos/dbus/fake_concierge_client.h
+++ b/chromeos/dbus/fake_concierge_client.h
@@ -11,7 +11,7 @@
 #include "base/observer_list.h"
 #include "base/optional.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/cicerone_client.h"
+#include "chromeos/dbus/cicerone/cicerone_client.h"
 #include "chromeos/dbus/concierge_client.h"
 
 namespace chromeos {
diff --git a/chromeos/dbus/hermes/hermes_response_status.h b/chromeos/dbus/hermes/hermes_response_status.h
index 319c787..89fd7e4db 100644
--- a/chromeos/dbus/hermes/hermes_response_status.h
+++ b/chromeos/dbus/hermes/hermes_response_status.h
@@ -12,21 +12,24 @@
 namespace chromeos {
 
 // Enum values the represent response status of hermes client method calls.
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
 enum class HermesResponseStatus {
-  kSuccess,
-  kErrorAlreadyDisabled,
-  kErrorAlreadyEnabled,
-  kErrorInvalidActivationCode,
-  kErrorInvalidIccid,
-  kErrorInvalidParameter,
-  kErrorNeedConfirmationCode,
-  kErrorSendNotificationFailure,
-  kErrorTestProfileInProd,
-  kErrorUnknown,
-  kErrorUnsupported,
-  kErrorWrongState,
-  kErrorInvalidResponse,
-  kErrorNoResponse,
+  kSuccess = 0,
+  kErrorAlreadyDisabled = 1,
+  kErrorAlreadyEnabled = 2,
+  kErrorInvalidActivationCode = 3,
+  kErrorInvalidIccid = 4,
+  kErrorInvalidParameter = 5,
+  kErrorNeedConfirmationCode = 6,
+  kErrorSendNotificationFailure = 7,
+  kErrorTestProfileInProd = 8,
+  kErrorUnknown = 9,
+  kErrorUnsupported = 10,
+  kErrorWrongState = 11,
+  kErrorInvalidResponse = 12,
+  kErrorNoResponse = 13,
+  kMaxValue = kErrorNoResponse
 };
 
 // Callback that receives only a HermesResponseStatus.
diff --git a/chromeos/dbus/lorgnette_manager/lorgnette_manager_client.cc b/chromeos/dbus/lorgnette_manager/lorgnette_manager_client.cc
index 82e0a94..e2706bc 100644
--- a/chromeos/dbus/lorgnette_manager/lorgnette_manager_client.cc
+++ b/chromeos/dbus/lorgnette_manager/lorgnette_manager_client.cc
@@ -11,13 +11,13 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/files/scoped_file.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/optional.h"
 #include "base/sequence_checker.h"
-#include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chromeos/dbus/userdataauth/fake_userdataauth_client.cc b/chromeos/dbus/userdataauth/fake_userdataauth_client.cc
index c89df3cc..24e7acf5 100644
--- a/chromeos/dbus/userdataauth/fake_userdataauth_client.cc
+++ b/chromeos/dbus/userdataauth/fake_userdataauth_client.cc
@@ -6,9 +6,9 @@
 
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_task_runner_handle.h"
 
diff --git a/chromeos/lacros/lacros_chrome_service_impl.h b/chromeos/lacros/lacros_chrome_service_impl.h
index d6fcec9b..8289b725 100644
--- a/chromeos/lacros/lacros_chrome_service_impl.h
+++ b/chromeos/lacros/lacros_chrome_service_impl.h
@@ -13,13 +13,13 @@
 
 #include "base/check.h"
 #include "base/component_export.h"
+#include "base/containers/contains.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/optional.h"
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/token.h"
 #include "chromeos/components/sensors/mojom/cros_sensor_service.mojom.h"
 #include "chromeos/crosapi/mojom/account_manager.mojom.h"
diff --git a/chromeos/services/cellular_setup/BUILD.gn b/chromeos/services/cellular_setup/BUILD.gn
index e55d02c86..bf7ce6d9 100644
--- a/chromeos/services/cellular_setup/BUILD.gn
+++ b/chromeos/services/cellular_setup/BUILD.gn
@@ -36,6 +36,8 @@
     "esim_profile.h",
     "euicc.cc",
     "euicc.h",
+    "metrics_util.cc",
+    "metrics_util.h",
   ]
 
   deps = [
diff --git a/chromeos/services/cellular_setup/esim_profile.cc b/chromeos/services/cellular_setup/esim_profile.cc
index fb7ac1a..5d4d182 100644
--- a/chromeos/services/cellular_setup/esim_profile.cc
+++ b/chromeos/services/cellular_setup/esim_profile.cc
@@ -21,6 +21,7 @@
 #include "chromeos/services/cellular_setup/esim_manager.h"
 #include "chromeos/services/cellular_setup/esim_mojo_utils.h"
 #include "chromeos/services/cellular_setup/euicc.h"
+#include "chromeos/services/cellular_setup/metrics_util.h"
 #include "chromeos/services/cellular_setup/public/mojom/esim_manager.mojom-shared.h"
 #include "chromeos/services/cellular_setup/public/mojom/esim_manager.mojom.h"
 #include "components/device_event_log/device_event_log.h"
@@ -369,6 +370,8 @@
 void ESimProfile::OnPendingProfileInstallResult(
     std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock,
     HermesResponseStatus status) {
+  metrics::LogInstallPendingProfileResult(status);
+
   if (status != HermesResponseStatus::kSuccess) {
     NET_LOG(ERROR) << "Error Installing pending profile status="
                    << static_cast<int>(status);
diff --git a/chromeos/services/cellular_setup/esim_profile_unittest.cc b/chromeos/services/cellular_setup/esim_profile_unittest.cc
index a0dc0184..ec8c2656 100644
--- a/chromeos/services/cellular_setup/esim_profile_unittest.cc
+++ b/chromeos/services/cellular_setup/esim_profile_unittest.cc
@@ -24,6 +24,10 @@
     "Network.Cellular.ESim.ProfileUninstallationResult";
 const char kProfileRenameResultHistogram[] =
     "Network.Cellular.ESim.ProfileRenameResult";
+const char kPendingProfileLatencyHistogram[] =
+    "Network.Cellular.ESim.ProfileDownload.PendingProfile.Latency";
+const char kPendingProfileInstallHistogram[] =
+    "Network.Cellular.ESim.InstallPendingProfile.Result";
 
 mojom::ESimOperationResult UninstallProfile(
     const mojo::Remote<mojom::ESimProfile>& esim_profile) {
@@ -191,6 +195,8 @@
 }
 
 TEST_F(ESimProfileTest, InstallProfile) {
+  base::HistogramTester histogram_tester;
+
   HermesEuiccClient::TestInterface* euicc_test =
       HermesEuiccClient::Get()->GetTestInterface();
   dbus::ObjectPath profile_path = euicc_test->AddFakeCarrierProfile(
@@ -213,9 +219,11 @@
   EXPECT_EQ(mojom::ProfileInstallResult::kErrorNeedsConfirmationCode,
             install_result);
 
-  base::HistogramTester histogram_tester;
-  histogram_tester.ExpectTotalCount(
-      "Network.Cellular.ESim.ProfileDownload.PendingProfile.Latency", 0);
+  histogram_tester.ExpectTotalCount(kPendingProfileLatencyHistogram, 0);
+  histogram_tester.ExpectBucketCount(
+      kPendingProfileInstallHistogram,
+      HermesResponseStatus::kErrorNeedConfirmationCode,
+      /*expected_count=*/1);
 
   // Verify that installing pending profile returns proper results
   // and updates esim_profile properties.
@@ -230,8 +238,10 @@
   EXPECT_NE(mojo_properties->state, mojom::ProfileState::kPending);
   EXPECT_EQ(1u, observer()->profile_list_change_calls().size());
 
-  histogram_tester.ExpectTotalCount(
-      "Network.Cellular.ESim.ProfileDownload.PendingProfile.Latency", 1);
+  histogram_tester.ExpectTotalCount(kPendingProfileLatencyHistogram, 1);
+  histogram_tester.ExpectBucketCount(kPendingProfileInstallHistogram,
+                                     HermesResponseStatus::kSuccess,
+                                     /*expected_count=*/1);
 }
 
 TEST_F(ESimProfileTest, InstallProfileAlreadyConnected) {
diff --git a/chromeos/services/cellular_setup/euicc.cc b/chromeos/services/cellular_setup/euicc.cc
index 2853f24f..829f7d65 100644
--- a/chromeos/services/cellular_setup/euicc.cc
+++ b/chromeos/services/cellular_setup/euicc.cc
@@ -20,6 +20,7 @@
 #include "chromeos/services/cellular_setup/esim_manager.h"
 #include "chromeos/services/cellular_setup/esim_mojo_utils.h"
 #include "chromeos/services/cellular_setup/esim_profile.h"
+#include "chromeos/services/cellular_setup/metrics_util.h"
 #include "chromeos/services/cellular_setup/public/mojom/esim_manager.mojom-shared.h"
 #include "components/device_event_log/device_event_log.h"
 #include "components/qr_code_generator/qr_code_generator.h"
@@ -255,6 +256,8 @@
     std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock,
     HermesResponseStatus status,
     const dbus::ObjectPath* profile_path) {
+  metrics::LogInstallViaQrCodeResult(status);
+
   if (status != HermesResponseStatus::kSuccess) {
     NET_LOG(ERROR) << "Error Installing profile status="
                    << static_cast<int>(status);
diff --git a/chromeos/services/cellular_setup/euicc_unittest.cc b/chromeos/services/cellular_setup/euicc_unittest.cc
index 3828411..d574fd9 100644
--- a/chromeos/services/cellular_setup/euicc_unittest.cc
+++ b/chromeos/services/cellular_setup/euicc_unittest.cc
@@ -21,6 +21,9 @@
 
 namespace {
 
+const char kInstallViaQrCodeHistogram[] =
+    "Network.Cellular.ESim.InstallViaQrCode.Result";
+
 using InstallResultPair = std::pair<mojom::ProfileInstallResult,
                                     mojo::PendingRemote<mojom::ESimProfile>>;
 
@@ -130,6 +133,8 @@
 }
 
 TEST_F(EuiccTest, InstallProfileFromActivationCode) {
+  base::HistogramTester histogram_tester;
+
   mojo::Remote<mojom::Euicc> euicc = GetEuiccForEid(ESimTestBase::kTestEid);
   ASSERT_TRUE(euicc.is_bound());
 
@@ -145,6 +150,10 @@
   EXPECT_EQ(mojom::ProfileInstallResult::kErrorInvalidActivationCode,
             result_pair.first);
   EXPECT_FALSE(result_pair.second.is_valid());
+  histogram_tester.ExpectBucketCount(
+      kInstallViaQrCodeHistogram,
+      HermesResponseStatus::kErrorInvalidActivationCode,
+      /*expected_count=*/1);
 
   // Verify that connect failures are handled properly.
   result_pair = InstallProfileFromActivationCode(
@@ -153,8 +162,9 @@
       /*fail_connect=*/true);
   EXPECT_EQ(mojom::ProfileInstallResult::kSuccess, result_pair.first);
   ASSERT_TRUE(result_pair.second.is_valid());
-
-  base::HistogramTester histogram_tester;
+  histogram_tester.ExpectBucketCount(kInstallViaQrCodeHistogram,
+                                     HermesResponseStatus::kSuccess,
+                                     /*expected_count=*/1);
 
   // Verify that install succeeds when valid activation code is passed.
   result_pair = InstallProfileFromActivationCode(
@@ -165,7 +175,10 @@
   ASSERT_TRUE(result_pair.second.is_valid());
 
   histogram_tester.ExpectTotalCount(
-      "Network.Cellular.ESim.ProfileDownload.ActivationCode.Latency", 1);
+      "Network.Cellular.ESim.ProfileDownload.ActivationCode.Latency", 2);
+  histogram_tester.ExpectBucketCount(kInstallViaQrCodeHistogram,
+                                     HermesResponseStatus::kSuccess,
+                                     /*expected_count=*/2);
 }
 
 TEST_F(EuiccTest, InstallProfileAlreadyConnected) {
diff --git a/chromeos/services/cellular_setup/metrics_util.cc b/chromeos/services/cellular_setup/metrics_util.cc
new file mode 100644
index 0000000..38834703
--- /dev/null
+++ b/chromeos/services/cellular_setup/metrics_util.cc
@@ -0,0 +1,25 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/services/cellular_setup/metrics_util.h"
+
+#include "base/metrics/histogram_functions.h"
+
+namespace chromeos {
+namespace cellular_setup {
+namespace metrics {
+
+void LogInstallViaQrCodeResult(HermesResponseStatus status) {
+  base::UmaHistogramEnumeration("Network.Cellular.ESim.InstallViaQrCode.Result",
+                                status);
+}
+
+void LogInstallPendingProfileResult(HermesResponseStatus status) {
+  base::UmaHistogramEnumeration(
+      "Network.Cellular.ESim.InstallPendingProfile.Result", status);
+}
+
+}  // namespace metrics
+}  // namespace cellular_setup
+}  // namespace chromeos
diff --git a/chromeos/services/cellular_setup/metrics_util.h b/chromeos/services/cellular_setup/metrics_util.h
new file mode 100644
index 0000000..1a9a1e4
--- /dev/null
+++ b/chromeos/services/cellular_setup/metrics_util.h
@@ -0,0 +1,21 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_SERVICES_CELLULAR_SETUP_METRICS_UTIL_H_
+#define CHROMEOS_SERVICES_CELLULAR_SETUP_METRICS_UTIL_H_
+
+#include "chromeos/dbus/hermes/hermes_response_status.h"
+
+namespace chromeos {
+namespace cellular_setup {
+namespace metrics {
+
+void LogInstallViaQrCodeResult(HermesResponseStatus status);
+void LogInstallPendingProfileResult(HermesResponseStatus status);
+
+}  // namespace metrics
+}  // namespace cellular_setup
+}  // namespace chromeos
+
+#endif  // CHROMEOS_SERVICES_CELLULAR_SETUP_METRICS_UTIL_H_
diff --git a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
index 135dd5b..1e67282 100644
--- a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
+++ b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
@@ -176,10 +176,15 @@
       &fake_service_connection);
   ServiceConnection::GetInstance()->Initialize();
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   mojo::Remote<mojom::MachineLearningService> ml_service;
-  ServiceConnection::GetInstance()->BindMachineLearningService(
-      ml_service.BindNewPipeAndPassReceiver());
-  base::RunLoop().RunUntilIdle();
+  base::OnceClosure callback =
+      base::BindOnce(&ServiceConnection::BindMachineLearningService,
+                     base::Unretained(ServiceConnection::GetInstance()),
+                     ml_service.BindNewPipeAndPassReceiver())
+          .Then(run_loop->QuitClosure());
+  std::move(callback).Run();
+  run_loop->Run();
   ASSERT_TRUE(ml_service.is_bound());
 
   // Check the bound ml_service remote can be used to call
@@ -187,6 +192,7 @@
   mojo::Remote<mojom::Model> model;
   bool callback_done = false;
 
+  run_loop.reset(new base::RunLoop);
   ml_service->LoadBuiltinModel(
       mojom::BuiltinModelSpec::New(mojom::BuiltinModelId::TEST_MODEL),
       model.BindNewPipeAndPassReceiver(),
@@ -195,8 +201,10 @@
             EXPECT_EQ(result, mojom::LoadModelResult::OK);
             *callback_done = true;
           },
-          &callback_done));
-  base::RunLoop().RunUntilIdle();
+          &callback_done)
+          .Then(run_loop->QuitClosure()));
+
+  run_loop->Run();
   EXPECT_TRUE(callback_done);
   EXPECT_TRUE(model.is_bound());
 }
@@ -248,6 +256,7 @@
   const double expected_value = 200.002;
   fake_service_connection.SetOutputValue(std::vector<int64_t>{1L},
                                          std::vector<double>{expected_value});
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadBuiltinModel(
@@ -258,13 +267,15 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(model.is_bound());
 
   callback_done = false;
   mojo::Remote<mojom::GraphExecutor> graph;
+  run_loop.reset(new base::RunLoop);
   model->CreateGraphExecutor(
       graph.BindNewPipeAndPassReceiver(),
       base::BindOnce(
@@ -272,14 +283,16 @@
             EXPECT_EQ(result, mojom::CreateGraphExecutorResult::OK);
             *callback_done = true;
           },
-          &callback_done));
-  base::RunLoop().RunUntilIdle();
+          &callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(graph.is_bound());
 
   callback_done = false;
   base::flat_map<std::string, mojom::TensorPtr> inputs;
   std::vector<std::string> outputs;
+  run_loop.reset(new base::RunLoop);
   graph->Execute(std::move(inputs), std::move(outputs),
                  base::BindOnce(
                      [](bool* callback_done, double expected_value,
@@ -294,9 +307,10 @@
 
                        *callback_done = true;
                      },
-                     &callback_done, expected_value));
+                     &callback_done, expected_value)
+                     .Then(run_loop->QuitClosure()));
 
-  base::RunLoop().RunUntilIdle();
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
 }
 
@@ -313,6 +327,7 @@
   fake_service_connection.SetOutputValue(std::vector<int64_t>{1L},
                                          std::vector<double>{expected_value});
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadFlatBufferModel(
@@ -322,13 +337,15 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(model.is_bound());
 
   callback_done = false;
   mojo::Remote<mojom::GraphExecutor> graph;
+  run_loop.reset(new base::RunLoop);
   model->CreateGraphExecutor(
       graph.BindNewPipeAndPassReceiver(),
       base::BindOnce(
@@ -336,14 +353,16 @@
             EXPECT_EQ(result, mojom::CreateGraphExecutorResult::OK);
             *callback_done = true;
           },
-          &callback_done));
-  base::RunLoop().RunUntilIdle();
+          &callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(graph.is_bound());
 
   callback_done = false;
   base::flat_map<std::string, mojom::TensorPtr> inputs;
   std::vector<std::string> outputs;
+  run_loop.reset(new base::RunLoop);
   graph->Execute(std::move(inputs), std::move(outputs),
                  base::BindOnce(
                      [](bool* callback_done, double expected_value,
@@ -358,9 +377,9 @@
 
                        *callback_done = true;
                      },
-                     &callback_done, expected_value));
-
-  base::RunLoop().RunUntilIdle();
+                     &callback_done, expected_value)
+                     .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
 }
 
@@ -388,6 +407,7 @@
   annotations.emplace_back(std::move(dummy_annotation));
   fake_service_connection.SetOutputAnnotation(annotations);
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadTextClassifier(
@@ -397,13 +417,15 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(text_classifier.is_bound());
 
   auto request = mojom::TextAnnotationRequest::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   text_classifier->Annotate(
       std::move(request),
       base::BindOnce(
@@ -418,8 +440,9 @@
             EXPECT_EQ(annotations[0]->entities[0]->data->get_numeric_value(),
                       123456789.);
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -438,6 +461,7 @@
   span->end_offset = 2;
   fake_service_connection.SetOutputSelection(span);
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadTextClassifier(
@@ -447,14 +471,16 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(text_classifier.is_bound());
 
   auto request = mojom::TextSuggestSelectionRequest::New();
   request->user_selection = mojom::CodepointSpan::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   text_classifier->SuggestSelection(
       std::move(request), base::BindOnce(
                               [](bool* infer_callback_done,
@@ -464,8 +490,9 @@
                                 EXPECT_EQ(suggested_span->start_offset, 1u);
                                 EXPECT_EQ(suggested_span->end_offset, 2u);
                               },
-                              &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+                              &infer_callback_done)
+                              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -484,6 +511,7 @@
   languages.emplace_back(mojom::TextLanguage::New("fr", 0.1));
   fake_service_connection.SetOutputLanguages(languages);
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadTextClassifier(
@@ -493,13 +521,15 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(text_classifier.is_bound());
 
   std::string input_text = "dummy input text";
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   text_classifier->FindLanguages(
       input_text, base::BindOnce(
                       [](bool* infer_callback_done,
@@ -512,8 +542,9 @@
                         EXPECT_EQ(languages[1]->locale, "fr");
                         EXPECT_EQ(languages[1]->confidence, 0.1f);
                       },
-                      &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+                      &infer_callback_done)
+                      .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -526,6 +557,7 @@
       &fake_service_connection);
   ServiceConnection::GetInstance()->Initialize();
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadHandwritingModel(
@@ -537,8 +569,9 @@
                 EXPECT_EQ(result, mojom::LoadHandwritingModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(recognizer.is_bound());
 
@@ -555,6 +588,7 @@
 
   auto query = mojom::HandwritingRecognitionQuery::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   recognizer->Recognize(
       std::move(query),
       base::BindOnce(
@@ -567,8 +601,9 @@
             EXPECT_EQ(result->candidates.at(0)->text, "cat");
             EXPECT_EQ(result->candidates.at(0)->score, 0.5f);
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -582,6 +617,7 @@
       &fake_service_connection);
   ServiceConnection::GetInstance()->Initialize();
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadHandwritingModelWithSpec(
@@ -592,8 +628,9 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(recognizer.is_bound());
 
@@ -610,6 +647,7 @@
 
   auto query = mojom::HandwritingRecognitionQuery::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   recognizer->Recognize(
       std::move(query),
       base::BindOnce(
@@ -622,8 +660,9 @@
             EXPECT_EQ(result->candidates.at(0)->text, "cat");
             EXPECT_EQ(result->candidates.at(0)->score, 0.5f);
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -637,6 +676,7 @@
   ServiceConnection::GetInstance()->Initialize();
   auto constraint = web_platform::mojom::HandwritingModelConstraint::New();
   constraint->languages.emplace_back("en");
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadWebPlatformHandwritingModel(
@@ -647,8 +687,9 @@
                 EXPECT_EQ(result, mojom::LoadHandwritingModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(recognizer.is_bound());
 
@@ -663,6 +704,7 @@
   std::vector<web_platform::mojom::HandwritingStrokePtr> strokes;
   auto hints = web_platform::mojom::HandwritingHints::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   recognizer->GetPrediction(
       std::move(strokes), std::move(hints),
       base::BindOnce(
@@ -673,8 +715,9 @@
             ASSERT_TRUE(predictions.has_value());
             ASSERT_EQ(predictions.value().size(), 1u);
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -686,6 +729,7 @@
       &fake_service_connection);
   ServiceConnection::GetInstance()->Initialize();
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadGrammarChecker(
@@ -695,8 +739,9 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(checker.is_bound());
 
@@ -718,6 +763,7 @@
 
   auto query = mojom::GrammarCheckerQuery::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   checker->Check(
       std::move(query),
       base::BindOnce(
@@ -735,8 +781,9 @@
             EXPECT_EQ(result->candidates.at(0)->fragments.at(0)->replacement,
                       "dog");
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
@@ -748,6 +795,7 @@
       &fake_service_connection);
   ServiceConnection::GetInstance()->Initialize();
 
+  std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
   ServiceConnection::GetInstance()
       ->GetMachineLearningService()
       .LoadTextSuggester(
@@ -757,8 +805,9 @@
                 EXPECT_EQ(result, mojom::LoadModelResult::OK);
                 *callback_done = true;
               },
-              &callback_done));
-  base::RunLoop().RunUntilIdle();
+              &callback_done)
+              .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(callback_done);
   ASSERT_TRUE(suggester.is_bound());
 
@@ -779,6 +828,7 @@
 
   auto query = mojom::TextSuggesterQuery::New();
   bool infer_callback_done = false;
+  run_loop.reset(new base::RunLoop);
   suggester->Suggest(
       std::move(query),
       base::BindOnce(
@@ -794,8 +844,9 @@
                 result->candidates.at(0)->get_multi_word()->normalized_score,
                 0.5f);
           },
-          &infer_callback_done));
-  base::RunLoop().RunUntilIdle();
+          &infer_callback_done)
+          .Then(run_loop->QuitClosure()));
+  run_loop->Run();
   ASSERT_TRUE(infer_callback_done);
 }
 
diff --git a/chromeos/services/network_config/cros_network_config.cc b/chromeos/services/network_config/cros_network_config.cc
index 7f847f3..39915c1 100644
--- a/chromeos/services/network_config/cros_network_config.cc
+++ b/chromeos/services/network_config/cros_network_config.cc
@@ -1991,12 +1991,6 @@
     return;
   }
 
-  // If network is not known by Shill, there are no properties to fetch.
-  if (network->IsNonProfileType()) {
-    std::move(callback).Run(nullptr);
-    return;
-  }
-
   network_configuration_handler_->GetManagedProperties(
       chromeos::LoginState::Get()->primary_user_hash(), network->path(),
       base::BindOnce(&CrosNetworkConfig::OnGetManagedProperties,
diff --git a/chromeos/services/network_config/cros_network_config_unittest.cc b/chromeos/services/network_config/cros_network_config_unittest.cc
index 4f82297..1183e6d 100644
--- a/chromeos/services/network_config/cros_network_config_unittest.cc
+++ b/chromeos/services/network_config/cros_network_config_unittest.cc
@@ -15,7 +15,6 @@
 #include "chromeos/dbus/shill/fake_shill_device_client.h"
 #include "chromeos/login/login_state/login_state.h"
 #include "chromeos/network/cellular_inhibitor.h"
-#include "chromeos/network/fake_stub_cellular_networks_provider.h"
 #include "chromeos/network/managed_network_configuration_handler.h"
 #include "chromeos/network/network_cert_loader.h"
 #include "chromeos/network/network_certificate_handler.h"
@@ -72,8 +71,6 @@
 const char kCellularTestApnPassword3[] = "Test Pass";
 const char kCellularTestApnAttach3[] = "attach";
 
-const char kStubCellularIccid[] = "test_iccid";
-
 }  // namespace
 
 class CrosNetworkConfigTest : public testing::Test {
@@ -129,8 +126,6 @@
         cellular_inhibitor_.get(), cellular_esim_profile_handler_.get(),
         managed_network_configuration_handler_.get(),
         network_connection_handler_.get(), network_certificate_handler_.get());
-    helper_.network_state_handler()->set_stub_cellular_networks_provider(
-        &fake_stub_cellular_networks_provider_);
     SetupPolicy();
     SetupNetworks();
   }
@@ -295,24 +290,6 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  mojom::NetworkStatePropertiesPtr SetupStubCellularNetwork() {
-    fake_stub_cellular_networks_provider_.AddStub(kStubCellularIccid);
-    helper().network_state_handler()->SyncStubCellularNetworks();
-
-    mojom::NetworkFilterPtr filter = mojom::NetworkFilter::New();
-    filter->filter = mojom::FilterType::kAll;
-    filter->network_type = mojom::NetworkType::kCellular;
-    filter->limit = mojom::kNoLimit;
-    std::vector<mojom::NetworkStatePropertiesPtr> networks =
-        GetNetworkStateList(std::move(filter));
-    for (auto& network : networks) {
-      if (network->type_state->get_cellular()->iccid == kStubCellularIccid) {
-        return std::move(network);
-      }
-    }
-    return nullptr;
-  }
-
   void SetupObserver() {
     observer_ = std::make_unique<CrosNetworkConfigTestObserver>();
     cros_network_config_->AddObserver(observer_->GenerateRemote());
@@ -618,7 +595,6 @@
   TestingPrefServiceSimple local_state_;
   std::unique_ptr<CrosNetworkConfig> cros_network_config_;
   std::unique_ptr<CrosNetworkConfigTestObserver> observer_;
-  FakeStubCellularNetworksProvider fake_stub_cellular_networks_provider_;
   std::string wifi1_path_;
 
   DISALLOW_COPY_AND_ASSIGN(CrosNetworkConfigTest);
@@ -1006,12 +982,6 @@
   EXPECT_TRUE(cellular->sim_locked);
   EXPECT_EQ(mojom::ActivationStateType::kActivated, cellular->activation_state);
 
-  mojom::NetworkStatePropertiesPtr stub_cellular = SetupStubCellularNetwork();
-  ASSERT_TRUE(stub_cellular);
-  ASSERT_FALSE(stub_cellular->guid.empty());
-  properties = GetManagedProperties(stub_cellular->guid);
-  ASSERT_FALSE(properties);
-
   properties = GetManagedProperties("vpn_guid");
   ASSERT_TRUE(properties);
   EXPECT_EQ("vpn_guid", properties->guid);
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.cc b/components/arc/intent_helper/arc_intent_helper_bridge.cc
index ccf95fb..1598d1e1 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge.cc
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.cc
@@ -97,7 +97,7 @@
 }
 
 // static
-KeyedServiceBaseFactory* ArcIntentHelperBridge::GetFactory() {
+BrowserContextKeyedServiceFactory* ArcIntentHelperBridge::GetFactory() {
   return ArcIntentHelperBridgeFactory::GetInstance();
 }
 
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.h b/components/arc/intent_helper/arc_intent_helper_bridge.h
index 0075833..4f64c34 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge.h
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.h
@@ -21,7 +21,7 @@
 #include "components/keyed_service/core/keyed_service.h"
 #include "url/gurl.h"
 
-class KeyedServiceBaseFactory;
+class BrowserContextKeyedServiceFactory;
 
 namespace content {
 class BrowserContext;
@@ -55,7 +55,7 @@
       content::BrowserContext* context);
 
   // Returns factory for the ArcIntentHelperBridge.
-  static KeyedServiceBaseFactory* GetFactory();
+  static BrowserContextKeyedServiceFactory* GetFactory();
 
   // Appends '.' + |to_append| to the intent helper package name.
   static std::string AppendStringToIntentHelperPackageName(
diff --git a/components/arc/session/OWNERS b/components/arc/session/OWNERS
index 868d420..eb39984 100644
--- a/components/arc/session/OWNERS
+++ b/components/arc/session/OWNERS
@@ -1,4 +1,3 @@
-ereth@chromium.org
 lgcheng@google.com
 # backup reviewers
 hashimoto@chromium.org
diff --git a/components/autofill/android/provider/java/src/org/chromium/components/autofill/AutofillProvider.java b/components/autofill/android/provider/java/src/org/chromium/components/autofill/AutofillProvider.java
index 068411d..926b12fa 100644
--- a/components/autofill/android/provider/java/src/org/chromium/components/autofill/AutofillProvider.java
+++ b/components/autofill/android/provider/java/src/org/chromium/components/autofill/AutofillProvider.java
@@ -430,6 +430,11 @@
         sAutofillManagerForTestingFactory = factory;
     }
 
+    @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+    public void replaceAutofillManagerWrapperForTesting(AutofillManagerWrapper wrapper) {
+        mAutofillManager = wrapper;
+    }
+
     /**
      * Invoked when filling form is need. AutofillProvider shall ask autofill
      * service for the values with which to fill the form.
diff --git a/components/autofill/core/browser/autofill_profile_sync_util.cc b/components/autofill/core/browser/autofill_profile_sync_util.cc
index 2d5178a..db5b7be 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util.cc
@@ -97,6 +97,8 @@
   if (!entry.profile_label().empty())
     specifics->set_profile_label(entry.profile_label());
 
+  specifics->set_disallow_settings_visible_updates(
+      entry.disallow_settings_visible_updates());
   specifics->set_use_count(entry.use_count());
   specifics->set_use_date(entry.use_date().ToTimeT());
   specifics->set_address_home_language_code(
@@ -260,6 +262,11 @@
   if (specifics.has_profile_label())
     profile->set_profile_label(specifics.profile_label());
 
+  // Set the `disallow_settings_visible_updates state` if it exists.
+  if (specifics.has_disallow_settings_visible_updates())
+    profile->set_disallow_settings_visible_updates(
+        specifics.disallow_settings_visible_updates());
+
   // Set repeated fields.
   profile->SetRawInfoWithVerificationStatus(
       NAME_HONORIFIC_PREFIX,
diff --git a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
index 44d05075..166a529b 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
@@ -43,6 +43,7 @@
   profile.set_use_date(base::Time::FromTimeT(1423182152));
 
   profile.set_profile_label("profile_label");
+  profile.set_disallow_settings_visible_updates(true);
 
   // Set testing values and statuses for the name.
   profile.SetRawInfoWithVerificationStatus(NAME_HONORIFIC_PREFIX, u"Dr.",
@@ -137,6 +138,7 @@
   specifics.set_use_count(7);
   specifics.set_use_date(1423182152);
   specifics.set_profile_label("profile_label");
+  specifics.set_disallow_settings_visible_updates(true);
 
   // Set values and statuses for the names.
   specifics.add_name_honorific("Dr.");
diff --git a/components/autofill/core/browser/data_model/autofill_profile.cc b/components/autofill/core/browser/data_model/autofill_profile.cc
index f57a93e..1b20f06 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile.cc
@@ -269,6 +269,8 @@
   if (this == &profile)
     return *this;
 
+  set_disallow_settings_visible_updates(
+      profile.disallow_settings_visible_updates());
   set_use_count(profile.use_count());
   set_use_date(profile.use_date());
   set_previous_use_date(profile.previous_use_date());
@@ -1316,6 +1318,8 @@
 
 bool AutofillProfile::EqualsSansGuid(const AutofillProfile& profile) const {
   return origin() == profile.origin() &&
+         disallow_settings_visible_updates() ==
+             profile.disallow_settings_visible_updates() &&
          language_code() == profile.language_code() &&
          profile_label() == profile.profile_label() && Compare(profile) == 0;
 }
diff --git a/components/autofill/core/browser/data_model/autofill_profile.h b/components/autofill/core/browser/data_model/autofill_profile.h
index 80443fc..70a059f 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.h
+++ b/components/autofill/core/browser/data_model/autofill_profile.h
@@ -305,6 +305,13 @@
   // Sets the label of the profile.
   void set_profile_label(const std::string& label) { profile_label_ = label; }
 
+  bool disallow_settings_visible_updates() const {
+    return disallow_settings_visible_updates_;
+  }
+  void set_disallow_settings_visible_updates(bool disallow) {
+    disallow_settings_visible_updates_ = disallow;
+  }
+
  private:
   // FormGroup:
   std::u16string GetInfoImpl(const AutofillType& type,
@@ -361,6 +368,12 @@
   // The BCP 47 language code that can be used to format |address_| for display.
   std::string language_code_;
 
+  // The state indicates if the profile qualifies to get merged with a
+  // profile observed in a form submission. If true, the profile can still be
+  // updated silently, but it should not be considered for merges that need to
+  // involve user interactions.
+  bool disallow_settings_visible_updates_{false};
+
   // ID used for identifying this profile. Only set for SERVER_PROFILEs. This is
   // a hash of the contents.
   std::string server_id_;
diff --git a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
index 86dd3c6..0eb5a4bd 100644
--- a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
@@ -2109,6 +2109,35 @@
   EXPECT_NE(p1, p2);
 }
 
+// Test that the state to disallow confirmable merges is correctly set and
+// retrieved from the profile.
+TEST_P(AutofillProfileTest, SetAndGetProfileDisallowConfirmableMergestate) {
+  AutofillProfile p;
+  EXPECT_EQ(p.disallow_settings_visible_updates(), false);
+
+  p.set_disallow_settings_visible_updates(true);
+  EXPECT_EQ(p.disallow_settings_visible_updates(), true);
+}
+
+TEST_P(AutofillProfileTest, LockStateInAssignmentAndComparisonOperator) {
+  AutofillProfile p1;
+  p1.set_disallow_settings_visible_updates(true);
+
+  AutofillProfile p2;
+  EXPECT_EQ(p2.disallow_settings_visible_updates(), false);
+
+  p2 = p1;
+
+  // Check that the lock state was assigned correctly to p2.
+  EXPECT_EQ(p2.disallow_settings_visible_updates(), true);
+
+  // Now test that the comparison returns false if the lock state is not the
+  // same.
+  ASSERT_EQ(p1, p2);
+  p2.set_disallow_settings_visible_updates(false);
+  EXPECT_NE(p1, p2);
+}
+
 TEST_P(AutofillProfileTest, SetClientValidityFromBitfieldValue_Email) {
   AutofillProfile profile;
 
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
index 376366b..2c0895b 100644
--- a/components/autofill/core/browser/webdata/autofill_table.cc
+++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -105,6 +105,7 @@
   s->BindInt64(index++, profile.GetClientValidityBitfieldValue());
   s->BindBool(index++, profile.is_client_validity_states_updated());
   s->BindString(index++, profile.profile_label());
+  s->BindBool(index++, profile.disallow_settings_visible_updates());
 }
 
 void AddAutofillProfileDetailsFromStatement(const sql::Statement& s,
@@ -127,6 +128,7 @@
   profile->SetClientValidityFromBitfieldValue(s.ColumnInt64(index++));
   profile->set_is_client_validity_states_updated(s.ColumnBool(index++));
   profile->set_profile_label(s.ColumnString(index++));
+  profile->set_disallow_settings_visible_updates(s.ColumnBool(index++));
 }
 
 void BindEncryptedCardToColumn(sql::Statement* s,
@@ -799,6 +801,8 @@
     case 95:
       *update_compatible_version = false;
       return MigrateToVersion95AddVirtualCardMetadata();
+    case 96:
+      return MigrateToVersion96AddAutofillProfileDisallowConfirmableMergesColumn();
   }
   return true;
 }
@@ -1141,8 +1145,9 @@
       "(guid, company_name, street_address, dependent_locality, city, state,"
       " zipcode, sorting_code, country_code, use_count, use_date, "
       " date_modified, origin, language_code, validity_bitfield, "
-      " is_client_validity_states_updated, label) "
-      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
+      " is_client_validity_states_updated, label, "
+      " disallow_settings_visible_updates) "
+      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
   BindAutofillProfileToStatement(profile, AutofillClock::Now(), &s);
 
   if (!s.Run())
@@ -1173,14 +1178,14 @@
       "    use_count=?, use_date=?, date_modified=?, origin=?, "
       "    language_code=?, validity_bitfield=?, "
       "    is_client_validity_states_updated=?, "
-      "    label=? "
+      "    label=?, disallow_settings_visible_updates=? "
       "WHERE guid=?"));
   BindAutofillProfileToStatement(profile,
                                  update_modification_date
                                      ? AutofillClock::Now()
                                      : old_profile->modification_date(),
                                  &s);
-  s.BindString(17, profile.guid());
+  s.BindString(18, profile.guid());
 
   bool result = s.Run();
   DCHECK_GT(db_->GetLastChangeCount(), 0);
@@ -1224,7 +1229,8 @@
       "SELECT guid, company_name, street_address, dependent_locality, city,"
       " state, zipcode, sorting_code, country_code, use_count, use_date,"
       " date_modified, origin, language_code, validity_bitfield,"
-      " is_client_validity_states_updated, label "
+      " is_client_validity_states_updated, label,"
+      " disallow_settings_visible_updates "
       "FROM autofill_profiles "
       "WHERE guid=?"));
   s.BindString(0, guid);
@@ -3503,6 +3509,18 @@
 }
 
 bool AutofillTable::
+    MigrateToVersion96AddAutofillProfileDisallowConfirmableMergesColumn() {
+  if (!db_->DoesTableExist("autofill_profiles"))
+    InitProfileAddressesTable();
+
+  return db_->DoesColumnExist("autofill_profiles",
+                              "disallow_settings_visible_updates") ||
+         db_->Execute(
+             "ALTER TABLE autofill_profiles ADD COLUMN "
+             "disallow_settings_visible_updates INTEGER NOT NULL DEFAULT 0");
+}
+
+bool AutofillTable::
     MigrateToVersion89AddInstrumentIdColumnToMaskedCreditCard() {
   // Add the new instrument_id column to the masked_credit_cards table and set
   // the default value to 0.
@@ -3844,25 +3862,27 @@
 
 bool AutofillTable::InitProfilesTable() {
   if (!db_->DoesTableExist("autofill_profiles")) {
-    if (!db_->Execute("CREATE TABLE autofill_profiles ( "
-                      "guid VARCHAR PRIMARY KEY, "
-                      "company_name VARCHAR, "
-                      "street_address VARCHAR, "
-                      "dependent_locality VARCHAR, "
-                      "city VARCHAR, "
-                      "state VARCHAR, "
-                      "zipcode VARCHAR, "
-                      "sorting_code VARCHAR, "
-                      "country_code VARCHAR, "
-                      "date_modified INTEGER NOT NULL DEFAULT 0, "
-                      "origin VARCHAR DEFAULT '', "
-                      "language_code VARCHAR, "
-                      "use_count INTEGER NOT NULL DEFAULT 0, "
-                      "use_date INTEGER NOT NULL DEFAULT 0, "
-                      "validity_bitfield UNSIGNED NOT NULL DEFAULT 0, "
-                      "is_client_validity_states_updated BOOL NOT NULL DEFAULT "
-                      "FALSE, "
-                      "label VARCHAR) ")) {
+    if (!db_->Execute(
+            "CREATE TABLE autofill_profiles ( "
+            "guid VARCHAR PRIMARY KEY, "
+            "company_name VARCHAR, "
+            "street_address VARCHAR, "
+            "dependent_locality VARCHAR, "
+            "city VARCHAR, "
+            "state VARCHAR, "
+            "zipcode VARCHAR, "
+            "sorting_code VARCHAR, "
+            "country_code VARCHAR, "
+            "date_modified INTEGER NOT NULL DEFAULT 0, "
+            "origin VARCHAR DEFAULT '', "
+            "language_code VARCHAR, "
+            "use_count INTEGER NOT NULL DEFAULT 0, "
+            "use_date INTEGER NOT NULL DEFAULT 0, "
+            "validity_bitfield UNSIGNED NOT NULL DEFAULT 0, "
+            "is_client_validity_states_updated BOOL NOT NULL DEFAULT "
+            "FALSE, "
+            "label VARCHAR, "
+            "disallow_settings_visible_updates INTEGER NOT NULL DEFAULT 0)")) {
       NOTREACHED();
       return false;
     }
diff --git a/components/autofill/core/browser/webdata/autofill_table.h b/components/autofill/core/browser/webdata/autofill_table.h
index 66e026a..f72a8413 100644
--- a/components/autofill/core/browser/webdata/autofill_table.h
+++ b/components/autofill/core/browser/webdata/autofill_table.h
@@ -102,6 +102,9 @@
 //                      A flag indicating whether the validity states of
 //                      different fields according to the client validity api is
 //                      updated or not. Added in version 80.
+//   disallow_settings_visible_updates
+//                      If true, a profile does not qualify to get merged with
+//                      a profile observed in a form submission.
 //
 // autofill_profile_addresses
 //   guid               The guid string that identifies the profile to which
@@ -719,6 +722,7 @@
   bool MigrateToVersion93AddAutofillProfileLabelColumn();
   bool MigrateToVersion94AddPromoCodeColumnsToOfferData();
   bool MigrateToVersion95AddVirtualCardMetadata();
+  bool MigrateToVersion96AddAutofillProfileDisallowConfirmableMergesColumn();
 
   // Max data length saved in the table, AKA the maximum length allowed for
   // form data.
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
index fbbba2e..1013feef 100644
--- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -1299,6 +1299,7 @@
   home_profile.SetRawInfo(ADDRESS_HOME_SORTING_CODE, u"MAGIC ###");
   home_profile.SetRawInfo(ADDRESS_HOME_COUNTRY, u"US");
   home_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181234567");
+  home_profile.set_disallow_settings_visible_updates(true);
   home_profile.set_language_code("en");
   home_profile.SetClientValidityFromBitfieldValue(6);
   home_profile.set_is_client_validity_states_updated(true);
diff --git a/components/browser_ui/photo_picker/android/BUILD.gn b/components/browser_ui/photo_picker/android/BUILD.gn
index dc18ede..02a83a91 100644
--- a/components/browser_ui/photo_picker/android/BUILD.gn
+++ b/components/browser_ui/photo_picker/android/BUILD.gn
@@ -26,7 +26,9 @@
     "java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHost.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/FileEnumWorkerTask.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java",
+    "java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDelegateBase.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialog.java",
+    "java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerFeatures.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerToolbar.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/PickerAdapter.java",
     "java/src/org/chromium/components/browser_ui/photo_picker/PickerBitmap.java",
@@ -56,7 +58,10 @@
 }
 
 generate_jni("photo_picker_jni_headers") {
-  sources = [ "java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java" ]
+  sources = [
+    "java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java",
+    "java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerFeatures.java",
+  ]
 }
 
 android_aidl("photo_picker_aidl") {
diff --git a/components/browser_ui/photo_picker/android/features.cc b/components/browser_ui/photo_picker/android/features.cc
index a517698..b71197e8 100644
--- a/components/browser_ui/photo_picker/android/features.cc
+++ b/components/browser_ui/photo_picker/android/features.cc
@@ -4,11 +4,29 @@
 
 #include "components/browser_ui/photo_picker/android/features.h"
 
+#include "components/browser_ui/photo_picker/android/photo_picker_jni_headers/PhotoPickerFeatures_jni.h"
+
 namespace photo_picker {
 namespace features {
 
+namespace {
+
+// Array of features exposed through the Java Features brdige class. Entries in
+// this array may either refer to features defined in the header of this file or
+// in other locations in the code base (e.g. content_features.h), and must be
+// replicated in the same order in PhotoPickerFeatures.java.
+const base::Feature* kFeaturesExposedToJava[] = {
+    &kPhotoPickerVideoSupport,
+};
+
+}  // namespace
+
 const base::Feature kPhotoPickerVideoSupport{"PhotoPickerVideoSupport",
                                              base::FEATURE_DISABLED_BY_DEFAULT};
 
+static jlong JNI_PhotoPickerFeatures_GetFeature(JNIEnv* env, jint ordinal) {
+  return reinterpret_cast<jlong>(kFeaturesExposedToJava[ordinal]);
+}
+
 }  // namespace features
 }  // namespace photo_picker
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHost.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHost.java
index 62d6a55..c556e4c 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHost.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHost.java
@@ -49,6 +49,9 @@
     // A tag for logging error messages.
     private static final String TAG = "ImageDecoderHost";
 
+    // The feature param for determining whether the PhotoPicker should animate thumbnails.
+    private static final String FEATURE_PARAM_ANIMATE_THUMBNAILS = "animate_thumbnails";
+
     // The current context.
     private final Context mContext;
 
@@ -80,7 +83,7 @@
     private int mFailedVideoDecodesUnknown;
 
     // Whether animated thumbnails should be generated for video clips.
-    private final boolean mAnimatedThumbnailsSupported;
+    private boolean mAnimatedThumbnailsSupported;
 
     // A worker task for asynchronously handling video decode requests.
     private DecodeVideoTask mWorkerTask;
@@ -234,18 +237,17 @@
      * The DecoderServiceHost constructor.
      * @param callback The callback to use when communicating back to the client.
      * @param context The current context.
-     * @param animatedThumbnailsSupported Whether animated thumbnails should be generated for video
-     *         clips.
      */
-    public DecoderServiceHost(
-            DecoderStatusCallback callback, Context context, boolean animatedThumbnailsSupported) {
+    public DecoderServiceHost(DecoderStatusCallback callback, Context context) {
         mCallbacks.add(callback);
-        mAnimatedThumbnailsSupported = animatedThumbnailsSupported;
         if (sStatusCallbackForTesting != null) {
             mCallbacks.add(sStatusCallbackForTesting);
         }
         mContext = context;
         mContentResolver = mContext.getContentResolver();
+        mAnimatedThumbnailsSupported =
+                PhotoPickerFeatures.PHOTO_PICKER_VIDEO_SUPPORT.getFieldTrialParamByFeatureAsBoolean(
+                        FEATURE_PARAM_ANIMATE_THUMBNAILS, false);
     }
 
     /**
@@ -282,6 +284,7 @@
         DecoderServiceParams params = new DecoderServiceParams(
                 uri, width, fullWidth, fileType, /*firstFrame=*/true, callback);
         mPendingRequests.add(params);
+
         if (params.mFileType == PickerBitmap.TileTypes.VIDEO && mAnimatedThumbnailsSupported) {
             // Decoding requests for videos are requests for first frames only. Add another
             // low-priority request for decoding the rest of the frames.
@@ -602,4 +605,9 @@
     public static void setStatusCallback(DecoderStatusCallback callback) {
         sStatusCallbackForTesting = callback;
     }
+
+    @VisibleForTesting
+    void setAnimatedThumbnailsSupportedForTesting(boolean supported) {
+        mAnimatedThumbnailsSupported = supported;
+    }
 }
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHostTest.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHostTest.java
index 9363b63..1d1a57b6 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHostTest.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/DecoderServiceHostTest.java
@@ -23,6 +23,7 @@
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.base.test.util.UrlUtils;
+import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.io.File;
@@ -63,6 +64,7 @@
     @Before
     public void setUp() throws Exception {
         mContext = InstrumentationRegistry.getTargetContext();
+        NativeLibraryTestUtils.loadNativeLibraryNoBrowserProcess();
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             DecoderServiceHost.setIntentSupplier(
@@ -143,8 +145,7 @@
         lowerPri = new DecoderServiceHost.DecoderServiceParams(uri, width, fullWidth,
                 PickerBitmap.TileTypes.VIDEO,
                 /* firstFrame= */ true, callback);
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
         Assert.assertTrue("Still images have priority over requests for initial video frame",
                 host.mRequestComparator.compare(higherPri, lowerPri) < 0);
 
@@ -203,8 +204,8 @@
     @LargeTest
     @MinAndroidSdkLevel(Build.VERSION_CODES.O) // Video is only supported on O+.
     public void testDecodingOrder() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
+        host.setAnimatedThumbnailsSupportedForTesting(true);
         host.bind();
         waitForDecoder();
 
@@ -269,8 +270,8 @@
     @LargeTest
     @MinAndroidSdkLevel(Build.VERSION_CODES.O) // Video is only supported on O+.
     public void testDecodingOrderNoAnimationSupported() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ false);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
+        host.setAnimatedThumbnailsSupportedForTesting(false);
         host.bind();
         waitForDecoder();
 
@@ -331,8 +332,8 @@
     @LargeTest
     @MinAndroidSdkLevel(Build.VERSION_CODES.O) // Video is only supported on O+.
     public void testDecodingSizes() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
+        host.setAnimatedThumbnailsSupportedForTesting(true);
         host.bind();
         waitForDecoder();
 
@@ -411,8 +412,7 @@
     @Test
     @LargeTest
     public void testCancelation() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
         host.bind();
         waitForDecoder();
 
@@ -448,8 +448,7 @@
     @Test
     @LargeTest
     public void testNoConnectionFailureMode() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
 
         // Try decoding without a connection to the decoder.
         String green = "green100x100.jpg";
@@ -463,8 +462,7 @@
     @Test
     @LargeTest
     public void testFileNotFoundFailureMode() throws Throwable {
-        DecoderServiceHost host =
-                new DecoderServiceHost(this, mContext, /* animatedThumbnailsSupported = */ true);
+        DecoderServiceHost host = new DecoderServiceHost(this, mContext);
         host.bind();
         waitForDecoder();
 
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDelegateBase.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDelegateBase.java
new file mode 100644
index 0000000..30b9217
--- /dev/null
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDelegateBase.java
@@ -0,0 +1,21 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.photo_picker;
+
+import org.chromium.ui.base.PhotoPickerDelegate;
+
+/**
+ * A shared base implementation of {@link PhotoPickerDelegate}.
+ *
+ * Routes video support queries to the feature flag.
+ */
+public abstract class PhotoPickerDelegateBase implements PhotoPickerDelegate {
+    protected PhotoPickerDelegateBase() {}
+
+    @Override
+    public boolean supportsVideos() {
+        return PhotoPickerFeatures.PHOTO_PICKER_VIDEO_SUPPORT.isEnabled();
+    }
+}
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialog.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialog.java
index 7854543..544c6ff 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialog.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialog.java
@@ -84,21 +84,18 @@
      * @param listener The listener object that gets notified when an action is taken.
      * @param multiSelectionAllowed Whether the photo picker should allow multiple items to be
      *                              selected.
-     * @param animatedThumbnailsSupported Whether animated thumbnails should be generated for video
-     *         clips.
      * @param mimeTypes A list of mime types to show in the dialog.
      */
     public PhotoPickerDialog(WindowAndroid windowAndroid, ContentResolver contentResolver,
-            PhotoPickerListener listener, boolean multiSelectionAllowed,
-            boolean animatedThumbnailsSupported, List<String> mimeTypes) {
+            PhotoPickerListener listener, boolean multiSelectionAllowed, List<String> mimeTypes) {
         super(windowAndroid.getContext().get(), R.style.Theme_Chromium_Fullscreen);
 
         mWindowAndroid = windowAndroid;
         mListenerWrapper = new PhotoPickerListenerWrapper(listener);
 
         // Initialize the main content view.
-        mCategoryView = new PickerCategoryView(windowAndroid, contentResolver,
-                multiSelectionAllowed, animatedThumbnailsSupported, this);
+        mCategoryView =
+                new PickerCategoryView(windowAndroid, contentResolver, multiSelectionAllowed, this);
         mCategoryView.initialize(this, mListenerWrapper, mimeTypes);
         setView(mCategoryView);
     }
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialogTest.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialogTest.java
index a8b9ac8c..902c5c58 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialogTest.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerDialogTest.java
@@ -37,6 +37,7 @@
 import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils;
 import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate;
 import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate.SelectionObserver;
+import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.content_public.browser.test.util.TouchCommon;
 import org.chromium.ui.base.ActivityWindowAndroid;
@@ -128,6 +129,7 @@
 
     @Before
     public void setUp() throws Exception {
+        NativeLibraryTestUtils.loadNativeLibraryNoBrowserProcess();
         mWindowAndroid = TestThreadUtils.runOnUiThreadBlocking(
                 () -> { return new ActivityWindowAndroid(getActivity()); });
         TestThreadUtils.runOnUiThreadBlocking(() -> {
@@ -272,9 +274,9 @@
                 TestThreadUtils.runOnUiThreadBlocking(new Callable<PhotoPickerDialog>() {
                     @Override
                     public PhotoPickerDialog call() {
-                        final PhotoPickerDialog dialog = new PhotoPickerDialog(mWindowAndroid,
-                                contentResolver, PhotoPickerDialogTest.this, multiselect,
-                                /* animatedThumbnailsSupported = */ true, mimeTypes);
+                        final PhotoPickerDialog dialog =
+                                new PhotoPickerDialog(mWindowAndroid, contentResolver,
+                                        PhotoPickerDialogTest.this, multiselect, mimeTypes);
                         dialog.show();
                         return dialog;
                     }
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerFeatures.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerFeatures.java
new file mode 100644
index 0000000..c0ec0314
--- /dev/null
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PhotoPickerFeatures.java
@@ -0,0 +1,38 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.photo_picker;
+
+import org.chromium.base.Features;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.NativeMethods;
+
+/**
+ * Provides an API for querying the status of Photo Picker features.
+ */
+@JNINamespace("photo_picker::features")
+public class PhotoPickerFeatures extends Features {
+    public static final String PHOTO_PICKER_VIDEO_SUPPORT_NAME = "PhotoPickerVideoSupport";
+
+    // This list must be kept in sync with kFeaturesExposedToJava in native.
+    public static final PhotoPickerFeatures PHOTO_PICKER_VIDEO_SUPPORT =
+            new PhotoPickerFeatures(0, PHOTO_PICKER_VIDEO_SUPPORT_NAME);
+
+    private final int mOrdinal;
+
+    private PhotoPickerFeatures(int ordinal, String name) {
+        super(name);
+        mOrdinal = ordinal;
+    }
+
+    @Override
+    protected long getFeaturePointer() {
+        return PhotoPickerFeaturesJni.get().getFeature(mOrdinal);
+    }
+
+    @NativeMethods
+    interface Natives {
+        long getFeature(int ordinal);
+    }
+}
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerCategoryView.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerCategoryView.java
index 49aaa5a..0e175fb 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerCategoryView.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerCategoryView.java
@@ -192,20 +192,17 @@
      *         selection.
      * @param contentResolver The ContentResolver to use to retrieve image metadata from disk.
      * @param multiSelectionAllowed Whether to allow the user to select more than one image.
-     * @param animatedThumbnailsSupported Whether animated thumbnails should be generated for video
-     *         clips.
      */
     @SuppressWarnings("unchecked") // mSelectableListLayout
     public PickerCategoryView(WindowAndroid windowAndroid, ContentResolver contentResolver,
-            boolean multiSelectionAllowed, boolean animatedThumbnailsSupported,
-            PhotoPickerToolbar.PhotoPickerToolbarDelegate delegate) {
+            boolean multiSelectionAllowed, PhotoPickerToolbar.PhotoPickerToolbarDelegate delegate) {
         super(windowAndroid.getContext().get());
         mWindowAndroid = windowAndroid;
         Context context = mWindowAndroid.getContext().get();
         mContentResolver = contentResolver;
         mMultiSelectionAllowed = multiSelectionAllowed;
 
-        mDecoderServiceHost = new DecoderServiceHost(this, context, animatedThumbnailsSupported);
+        mDecoderServiceHost = new DecoderServiceHost(this, context);
         mDecoderServiceHost.bind();
 
         mSelectionDelegate = new SelectionDelegate<PickerBitmap>();
diff --git a/components/cdm/renderer/widevine_key_system_properties.cc b/components/cdm/renderer/widevine_key_system_properties.cc
index b49141a..f3e9336 100644
--- a/components/cdm/renderer/widevine_key_system_properties.cc
+++ b/components/cdm/renderer/widevine_key_system_properties.cc
@@ -5,6 +5,7 @@
 #include "components/cdm/renderer/widevine_key_system_properties.h"
 
 #include "base/feature_list.h"
+#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/media_switches.h"
 #include "media/media_buildflags.h"
@@ -160,12 +161,16 @@
   if (robustness >= Robustness::SW_SECURE_DECODE) {
     return EmeConfigRule::HW_SECURE_CODECS_REQUIRED;
   }
+#elif defined(OS_WIN)
+  // On Windows, hardware security uses MediaFoundation-based CDM which requires
+  // identifier and persistent state.
+  if (robustness >= Robustness::HW_SECURE_CRYPTO)
+    return EmeConfigRule::IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED;
 #else
-  // On other platforms, generally hardware security requires hardware secure
-  // codecs and an identifier.
-  if (robustness >= Robustness::HW_SECURE_CRYPTO) {
-    return EmeConfigRule::IDENTIFIER_AND_HW_SECURE_CODECS_REQUIRED;
-  }
+  // On other platforms, require hardware secure codecs for HW_SECURE_CRYPTO and
+  // above.
+  if (robustness >= Robustness::HW_SECURE_CRYPTO)
+    return EmeConfigRule::HW_SECURE_CODECS_REQUIRED;
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
   return EmeConfigRule::SUPPORTED;
diff --git a/components/history/content/browser/history_database_helper.h b/components/history/content/browser/history_database_helper.h
index 4a97514..12f89f1 100644
--- a/components/history/content/browser/history_database_helper.h
+++ b/components/history/content/browser/history_database_helper.h
@@ -13,7 +13,7 @@
 
 struct HistoryDatabaseParams;
 
-// Returns a HistoryDatabaseParams for |history_dir|.
+// Returns a HistoryDatabaseParams for `history_dir`.
 HistoryDatabaseParams HistoryDatabaseParamsForPath(
     const base::FilePath& history_dir);
 
diff --git a/components/history/core/browser/android/android_cache_database.h b/components/history/core/browser/android/android_cache_database.h
index 273e8e1..c2c087c8 100644
--- a/components/history/core/browser/android/android_cache_database.h
+++ b/components/history/core/browser/android/android_cache_database.h
@@ -38,27 +38,27 @@
   // Clears all rows in the bookmark_cache table; returns true on success.
   bool ClearAllBookmarkCache();
 
-  // Marks the given |url_ids| as bookmarked; Returns true on success.
+  // Marks the given `url_ids` as bookmarked; Returns true on success.
   bool MarkURLsAsBookmarked(const std::vector<URLID>& url_id);
 
-  // Set the given |url_id|'s favicon column to |favicon_id|. Returns true on
+  // Set the given `url_id`'s favicon column to `favicon_id`. Returns true on
   // success.
   bool SetFaviconID(URLID url_id, favicon_base::FaviconID favicon_id);
 
   // The search_terms table -------------------------------------------------
   //
-  // Add a row in the search_term table with the given |term| and
-  // |last_visit_time|. Return the new row's id on success, otherwise 0 is
+  // Add a row in the search_term table with the given `term` and
+  // `last_visit_time`. Return the new row's id on success, otherwise 0 is
   // returned.
   SearchTermID AddSearchTerm(const std::u16string& term,
                              const base::Time& last_visit_time);
 
-  // Updates the |id|'s row with the given |row|; returns true on success.
+  // Updates the `id`'s row with the given `row`; returns true on success.
   bool UpdateSearchTerm(SearchTermID id, const SearchTermRow& row);
 
-  // Get SearchTermRow of the given |term|; return the row id on success.
+  // Get SearchTermRow of the given `term`; return the row id on success.
   // otherwise 0 is returned.
-  // The found row is return in |row| if it is not NULL.
+  // The found row is return in `row` if it is not NULL.
   SearchTermID GetSearchTerm(const std::u16string& term, SearchTermRow* row);
 
   // Delete the search terms which don't exist in keyword_search_terms table.
diff --git a/components/history/core/browser/android/android_history_types.h b/components/history/core/browser/android/android_history_types.h
index 81cd383a..ab37d9ef 100644
--- a/components/history/core/browser/android/android_history_types.h
+++ b/components/history/core/browser/android/android_history_types.h
@@ -137,7 +137,7 @@
   }
   URLID url_id() const { return url_id_; }
 
-  // Returns true if the given |id| has been set explicitly.
+  // Returns true if the given `id` has been set explicitly.
   bool is_value_set_explicitly(ColumnID id) const {
     return values_set_.find(id) != values_set_.end();
   }
@@ -214,7 +214,7 @@
     keyword_id_ = keyword_id;
   }
 
-  // Returns true if the given |id| has been set explicitly.
+  // Returns true if the given `id` has been set explicitly.
   bool is_value_set_explicitly(ColumnID id) const {
     return values_set_.find(id) != values_set_.end();
   }
diff --git a/components/history/core/browser/android/android_urls_database.h b/components/history/core/browser/android/android_urls_database.h
index 37b714e..9b465e5 100644
--- a/components/history/core/browser/android/android_urls_database.h
+++ b/components/history/core/browser/android/android_urls_database.h
@@ -34,24 +34,24 @@
   // table was created or already exists.
   bool CreateAndroidURLsTable();
 
-  // Adds a new mapping between |raw_url| and |url_id|, returns the id if it
+  // Adds a new mapping between `raw_url` and `url_id`, returns the id if it
   // succeeds, otherwise 0 is returned.
   AndroidURLID AddAndroidURLRow(const std::string& raw_url, URLID url_id);
 
-  // Looks up the given |url_id| in android_urls table. Returns true if success,
-  // and fill in the |row| if it not NULL, returns false if the |url_id| is not
+  // Looks up the given `url_id` in android_urls table. Returns true if success,
+  // and fill in the `row` if it not NULL, returns false if the `url_id` is not
   // found.
   bool GetAndroidURLRow(URLID url_id, AndroidURLRow* row);
 
-  // Deletes the rows whose url_id is in |url_ids|. Returns true if all
-  // |url_ids| were found and deleted, otherwise false is returned.
+  // Deletes the rows whose url_id is in `url_ids`. Returns true if all
+  // `url_ids` were found and deleted, otherwise false is returned.
   bool DeleteAndroidURLRows(const std::vector<URLID>& url_ids);
 
   // Deletes all the rows whose url_id doesn't exist in urls table. Returns true
   // on success.
   bool DeleteUnusedAndroidURLs();
 
-  // Updates the row of |id| with the given |raw_url| and |url_id|. Returns true
+  // Updates the row of `id` with the given `raw_url` and `url_id`. Returns true
   // on success.
   bool UpdateAndroidURLRow(AndroidURLID id,
                            const std::string& raw_url,
diff --git a/components/history/core/browser/android/sql_handler.h b/components/history/core/browser/android/sql_handler.h
index 02c28d2b..a257abb 100644
--- a/components/history/core/browser/android/sql_handler.h
+++ b/components/history/core/browser/android/sql_handler.h
@@ -38,30 +38,30 @@
 // need be inserted or updated.
 class SQLHandler {
  public:
-  // |columns| is the implementation's columns.
-  // |column_count| is the number of column in |columns|.
+  // `columns` is the implementation's columns.
+  // `column_count` is the number of column in `columns`.
   SQLHandler(const HistoryAndBookmarkRow::ColumnID columns[], int column_count);
   virtual ~SQLHandler();
 
-  // Updates the rows whose URLID or URL is in the given |ids_set| with new
-  // value stored in |row|. Return true if the update succeeds.
+  // Updates the rows whose URLID or URL is in the given `ids_set` with new
+  // value stored in `row`. Return true if the update succeeds.
   virtual bool Update(const HistoryAndBookmarkRow& row,
                       const TableIDRows& ids_set) = 0;
 
-  // Inserts the given |row|, return true on success; The id of insertted row
-  // should be set in |row|, so other implemnetations could use it to complete
+  // Inserts the given `row`, return true on success; The id of insertted row
+  // should be set in `row`, so other implemnetations could use it to complete
   // the insert.
   virtual bool Insert(HistoryAndBookmarkRow* row) = 0;
 
-  // Deletes the rows whose id is in |ids_set|, returns false if any deletion
+  // Deletes the rows whose id is in `ids_set`, returns false if any deletion
   // failed, otherwise return true even all/some of rows are not found.
   virtual bool Delete(const TableIDRows& ids_set) = 0;
 
-  // Return true if |row| has a value explicitly set for at least one of the
-  // columns in |row| that are known to this class.
+  // Return true if `row` has a value explicitly set for at least one of the
+  // columns in `row` that are known to this class.
   bool HasColumnIn(const HistoryAndBookmarkRow& row);
 
-  // Returns true if |id| is one of the columns known to this class.
+  // Returns true if `id` is one of the columns known to this class.
   bool HasColumn(HistoryAndBookmarkRow::ColumnID id);
 
  private:
diff --git a/components/history/core/browser/android/visit_sql_handler.cc b/components/history/core/browser/android/visit_sql_handler.cc
index 14e7db90..7451eb8 100644
--- a/components/history/core/browser/android/visit_sql_handler.cc
+++ b/components/history/core/browser/android/visit_sql_handler.cc
@@ -32,7 +32,7 @@
 VisitSQLHandler::~VisitSQLHandler() {
 }
 
-// The created time is updated according the given |row|.
+// The created time is updated according the given `row`.
 // We simulate updating created time by
 // a. Remove all visits.
 // b. Insert a new visit which has visit time same as created time.
diff --git a/components/history/core/browser/android/visit_sql_handler.h b/components/history/core/browser/android/visit_sql_handler.h
index 39f1e54..c23335d 100644
--- a/components/history/core/browser/android/visit_sql_handler.h
+++ b/components/history/core/browser/android/visit_sql_handler.h
@@ -30,16 +30,16 @@
   bool Delete(const TableIDRows& ids_set) override;
 
  private:
-  // Add a row in visit table with the given |url_id| and |visit_time|.
+  // Add a row in visit table with the given `url_id` and `visit_time`.
   bool AddVisit(URLID url_id, const base::Time& visit_time);
 
-  // Add the given |visit_count| rows for |url_id|. The visit time of each row
-  // has minium difference and ends with the |last_visit_time|.
+  // Add the given `visit_count` rows for `url_id`. The visit time of each row
+  // has minium difference and ends with the `last_visit_time`.
   bool AddVisitRows(URLID url_id,
                     int visit_count,
                     const base::Time& last_visit_time);
 
-  // Delete the visits of the given |url_id|.
+  // Delete the visits of the given `url_id`.
   bool DeleteVisitsForURL(URLID url_id);
 
   URLDatabase* url_db_;
diff --git a/components/history/core/browser/browsing_history_driver.h b/components/history/core/browser/browsing_history_driver.h
index c41f240a..00f6515 100644
--- a/components/history/core/browser/browsing_history_driver.h
+++ b/components/history/core/browser/browsing_history_driver.h
@@ -64,7 +64,7 @@
 
   // Whether the Clear Browsing Data UI should show a notice about the existence
   // of other forms of browsing history stored in user's account. The response
-  // is returned in a |callback|.
+  // is returned in a `callback`.
   virtual void ShouldShowNoticeAboutOtherFormsOfBrowsingHistory(
       const syncer::SyncService* sync_service,
       WebHistoryService* history_service,
diff --git a/components/history/core/browser/browsing_history_service.cc b/components/history/core/browser/browsing_history_service.cc
index 336fc22..0f89304b 100644
--- a/components/history/core/browser/browsing_history_service.cc
+++ b/components/history/core/browser/browsing_history_service.cc
@@ -184,10 +184,10 @@
   if (web_history) {
     web_history_service_observation_.Observe(web_history);
   } else if (sync_service_) {
-    // If |web_history| is not available, it means that history sync is
-    // disabled. If |sync_service_| is not null, it means that syncing is
+    // If `web_history` is not available, it means that history sync is
+    // disabled. If `sync_service_` is not null, it means that syncing is
     // possible, and that history sync/web history may become enabled later, so
-    // attach start observing. If |sync_service_| is null then we cannot start
+    // attach start observing. If `sync_service_` is null then we cannot start
     // observing. This is okay because sync will never start for us, for example
     // it may be disabled by flag or we're part of an incognito/guest mode
     // window.
@@ -216,7 +216,7 @@
     scoped_refptr<QueryHistoryState> state) {
   state->remote_status = TIMED_OUT;
 
-  // Don't reset |web_history_request_| so we can still record histogram.
+  // Don't reset `web_history_request_` so we can still record histogram.
   // TODO(dubroy): Communicate the failure to the front end.
   if (!query_task_tracker_.HasTrackedTasks())
     ReturnResultsToDriver(std::move(state));
@@ -463,7 +463,7 @@
   // Maps a URL to the most recent entry on a particular day.
   std::map<GURL, HistoryEntry*> current_day_entries;
 
-  // Keeps track of the day that |current_day_entries| is holding entries for
+  // Keeps track of the day that `current_day_entries` is holding entries for
   // in order to handle removing per-day duplicates.
   base::Time current_day_midnight;
 
@@ -517,7 +517,7 @@
   } else if (CanRetry(state->remote_status)) {
     // TODO(skym): It is unclear if this is the best behavior. The UI is going
     // to behave incorrectly if out of order results are received. So to
-    // guarantee that doesn't happen, use |oldest_local| for continuation
+    // guarantee that doesn't happen, use `oldest_local` for continuation
     // calls. This will result in missing history entries for the failed calls.
     // crbug.com/685866 is related to this problem.
     state->remote_end_time_for_continuation = oldest_local;
diff --git a/components/history/core/browser/browsing_history_service.h b/components/history/core/browser/browsing_history_service.h
index 30fa2bd..bf0905d 100644
--- a/components/history/core/browser/browsing_history_service.h
+++ b/components/history/core/browser/browsing_history_service.h
@@ -85,7 +85,7 @@
     std::u16string title;  // Title of the entry. May be empty.
 
     // The time of the entry. Usually this will be the time of the most recent
-    // visit to |url| on a particular day as defined in the local timezone.
+    // visit to `url` on a particular day as defined in the local timezone.
     base::Time time;
 
     // The sync ID of the client on which the most recent visit occurred.
@@ -144,7 +144,7 @@
   void QueryHistory(const std::u16string& search_text,
                     const QueryOptions& options);
 
-  // Removes |items| from history.
+  // Removes `items` from history.
   void RemoveVisits(const std::vector<HistoryEntry>& items);
 
   // SyncServiceObserver implementation.
@@ -164,12 +164,12 @@
   // Used to hold and track query state between asynchronous calls.
   struct QueryHistoryState;
 
-  // Moves results from |state| into |results|, merging both remote and local
+  // Moves results from `state` into `results`, merging both remote and local
   // results together and maintaining reverse chronological order. Any results
   // with the same URL will be merged together for each day. Often holds back
-  // some results in |state| from one of the two sources to ensure that they're
+  // some results in `state` from one of the two sources to ensure that they're
   // always returned to the driver in correct order. This function also updates
-  // the end times in |state| for both sources that the next query should be
+  // the end times in `state` for both sources that the next query should be
   // made against.
   static void MergeDuplicateResults(QueryHistoryState* state,
                                     std::vector<HistoryEntry>* results);
@@ -186,7 +186,7 @@
   // BrowsingHistoryDriver.
   void ReturnResultsToDriver(scoped_refptr<QueryHistoryState> state);
 
-  // Callback from |web_history_timer_| when a response from web history has
+  // Callback from `web_history_timer_` when a response from web history has
   // not been received in time.
   void WebHistoryTimeout(scoped_refptr<QueryHistoryState> state);
 
diff --git a/components/history/core/browser/browsing_history_service_unittest.cc b/components/history/core/browser/browsing_history_service_unittest.cc
index 0957420..7a5e097 100644
--- a/components/history/core/browser/browsing_history_service_unittest.cc
+++ b/components/history/core/browser/browsing_history_service_unittest.cc
@@ -381,9 +381,9 @@
   QueryOptions options;
   options.begin_time = OffsetToTime(2);
   options.end_time = OffsetToTime(4);
-  // Having a |reached_beginning| value of false here seems
-  // counterintuitive. Seems to be for paging by |begin_time| instead of
-  // |count|. If the local history implementation changes, feel free to update
+  // Having a `reached_beginning` value of false here seems
+  // counterintuitive. Seems to be for paging by `begin_time` instead of
+  // `count`. If the local history implementation changes, feel free to update
   // this value, all this test cares about is that BrowsingHistoryService passes
   // the values through correctly.
   VerifyQueryResult(/*reached_beginning*/ false,
@@ -654,7 +654,7 @@
 
   // WebHistoryService will DCHECK if we destroy it before the observer in
   // BrowsingHistoryService is removed, so reset our first
-  // BrowsingHistoryService before |timeout| goes out of scope.
+  // BrowsingHistoryService before `timeout` goes out of scope.
   driver()->SetWebHistory(nullptr);
   ResetService(driver(), nullptr, nullptr);
 }
@@ -716,7 +716,7 @@
 
   // WebHistoryService will DCHECK if we destroy it before the observer in
   // BrowsingHistoryService is removed, so reset our first
-  // BrowsingHistoryService before |reversed| goes out of scope.
+  // BrowsingHistoryService before `reversed` goes out of scope.
   driver()->SetWebHistory(nullptr);
   ResetService(driver(), nullptr, nullptr);
 }
diff --git a/components/history/core/browser/download_database.cc b/components/history/core/browser/download_database.cc
index 4eff6f8..d034b2af0 100644
--- a/components/history/core/browser/download_database.cc
+++ b/components/history/core/browser/download_database.cc
@@ -394,11 +394,11 @@
   // return 0 = kInvalidDownloadId, so GetNextDownloadId() will set
   // *id = kInvalidDownloadId + 1.
   //
-  // If there is at least one record but all of the |id|s are
+  // If there is at least one record but all of the `id`s are
   // <= kInvalidDownloadId, then max(id) will return <= kInvalidDownloadId,
   // so GetNextDownloadId() should return kInvalidDownloadId + 1.
   //
-  // Note that any records with |id <= kInvalidDownloadId| will be dropped in
+  // Note that any records with `id <= kInvalidDownloadId` will be dropped in
   // QueryDownloads().
   //
   // SQLITE doesn't have unsigned integers.
@@ -437,7 +437,7 @@
     int column = 0;
 
     // SQLITE does not have unsigned integers, so explicitly handle negative
-    // |id|s instead of casting them to very large uint32s, which would break
+    // `id`s instead of casting them to very large uint32s, which would break
     // the max(id) logic in GetNextDownloadId().
     int64_t signed_id = statement_main.ColumnInt64(column++);
     bool valid = ConvertIntToDownloadId(signed_id, &(info->id));
@@ -791,8 +791,8 @@
 bool DownloadDatabase::CreateOrUpdateDownloadSlice(
     const DownloadSliceInfo& info) {
   // If the slice has no data, there is no need to insert it into the db. Note
-  // that for each slice, |received_bytes| can only go up. So if a slice is
-  // already in the db, its |received_bytes| should always be larger than 0.
+  // that for each slice, `received_bytes` can only go up. So if a slice is
+  // already in the db, its `received_bytes` should always be larger than 0.
   if (info.received_bytes == 0)
     return true;
   sql::Statement statement_replace(GetDB().GetCachedStatement(
diff --git a/components/history/core/browser/download_database.h b/components/history/core/browser/download_database.h
index e64e666..a7d428c 100644
--- a/components/history/core/browser/download_database.h
+++ b/components/history/core/browser/download_database.h
@@ -40,7 +40,7 @@
   void QueryDownloads(std::vector<DownloadRow>* results);
 
   // Update the state of one download. Returns true if successful.
-  // Does not update |url|, |start_time|; uses |id| only
+  // Does not update `url`, `start_time`; uses `id` only
   // to select the row in the database table to update.
   bool UpdateDownload(const DownloadRow& data);
 
@@ -48,7 +48,7 @@
   // creation succeeded, false otherwise.
   bool CreateDownload(const DownloadRow& info);
 
-  // Remove |id| from the database.
+  // Remove `id` from the database.
   void RemoveDownload(DownloadId id);
 
   size_t CountDownloads();
@@ -61,7 +61,7 @@
   bool MigrateMimeType();
 
   // Returns true if able to successfully rewrite the invalid values for the
-  // |state| field from 3 to 4. Returns false if there was an error fixing the
+  // `state` field from 3 to 4. Returns false if there was an error fixing the
   // database. See http://crbug.com/140687
   bool MigrateDownloadsState();
 
@@ -116,14 +116,14 @@
   // Fixes state of the download entries. Sometimes entries with IN_PROGRESS
   // state are not updated during browser shutdown (particularly when crashing).
   // On the next start such entries are considered interrupted with
-  // interrupt reason |DOWNLOAD_INTERRUPT_REASON_CRASH|.  This function
+  // interrupt reason `DOWNLOAD_INTERRUPT_REASON_CRASH`.  This function
   // fixes such entries.
   void EnsureInProgressEntriesCleanedUp();
 
   // Ensures a column exists in downloads table.
   bool EnsureColumnExists(const std::string& name, const std::string& type);
 
-  // Ensures a column exists in |table|.
+  // Ensures a column exists in `table`.
   bool EnsureColumnExistsInTable(const std::string& table,
                                  const std::string& name,
                                  const std::string& type);
@@ -138,7 +138,7 @@
   void RemoveDownloadSlices(DownloadId id);
 
   // Helper method to query the download slices for all the records in
-  // |download_row_map|.
+  // `download_row_map`.
   using DownloadRowMap = std::map<DownloadId, DownloadRow*>;
   void QueryDownloadSlices(DownloadRowMap* download_row_map);
 
diff --git a/components/history/core/browser/download_row.h b/components/history/core/browser/download_row.h
index bef2803..cf812e5 100644
--- a/components/history/core/browser/download_row.h
+++ b/components/history/core/browser/download_row.h
@@ -101,7 +101,7 @@
   std::string hash;
 
   // The id of the download in the database. Is not changed by UpdateDownload().
-  // Note: This field should be considered deprecated in favor of |guid| below.
+  // Note: This field should be considered deprecated in favor of `guid` below.
   // See http://crbug.com/593020.
   DownloadId id = kInvalidDownloadId;
 
diff --git a/components/history/core/browser/expire_history_backend.cc b/components/history/core/browser/expire_history_backend.cc
index 26b17af..b35372a5 100644
--- a/components/history/core/browser/expire_history_backend.cc
+++ b/components/history/core/browser/expire_history_backend.cc
@@ -68,9 +68,9 @@
 
 // Reads only AUTO_SUBFRAME visits, within a computed range. The range is
 // computed as follows:
-// * |begin_time| is read from the meta table. This value is updated whenever
+// * `begin_time` is read from the meta table. This value is updated whenever
 //   there are no more additional visits to expire by this reader.
-// * |end_time| is advanced forward by a constant (kEarlyExpirationAdvanceDay),
+// * `end_time` is advanced forward by a constant (kEarlyExpirationAdvanceDay),
 //   but not past the current time.
 class AutoSubframeVisitsReader : public ExpiringVisitsReader {
  public:
@@ -82,7 +82,7 @@
     DCHECK(visits) << "visit vector has to exist in order to populate it";
 
     base::Time begin_time = db->GetEarlyExpirationThreshold();
-    // Advance |end_time| to expire early.
+    // Advance `end_time` to expire early.
     base::Time early_end_time = end_time +
         base::TimeDelta::FromDays(kEarlyExpirationAdvanceDays);
 
@@ -213,7 +213,7 @@
     main_db_->GetVisitsForURL(url_row.id(), &visits_to_delete);
     size_t total_visits = visits_to_delete.size();
     if (!end_time.is_null() && !end_time.is_max()) {
-      // Remove all items that should not be deleted from |visits_to_delete|.
+      // Remove all items that should not be deleted from `visits_to_delete`.
       base::EraseIf(visits_to_delete,
                     [=](auto& v) { return v.visit_time > end_time; });
     }
@@ -265,7 +265,7 @@
 
 void ExpireHistoryBackend::ExpireHistoryForTimes(
     const std::vector<base::Time>& times) {
-  // |times| must be in reverse chronological order and have no
+  // `times` must be in reverse chronological order and have no
   // duplicates, i.e. each member must be earlier than the one before
   // it.
   DCHECK(
diff --git a/components/history/core/browser/expire_history_backend.h b/components/history/core/browser/expire_history_backend.h
index e9118f42..f1309ea 100644
--- a/components/history/core/browser/expire_history_backend.h
+++ b/components/history/core/browser/expire_history_backend.h
@@ -37,7 +37,7 @@
 class ExpiringVisitsReader {
  public:
   virtual ~ExpiringVisitsReader() {}
-  // Populates |visits| from |db|, using provided |end_time| and |max_visits|
+  // Populates `visits` from `db`, using provided `end_time` and `max_visits`
   // cap.
   virtual bool Read(base::Time end_time, HistoryDatabase* db,
                     VisitVector* visits, int max_visits) const = 0;
@@ -74,10 +74,10 @@
   // will continue until the object is deleted.
   void StartExpiringOldStuff(base::TimeDelta expiration_threshold);
 
-  // Deletes everything associated with a URL until |end_time|.
+  // Deletes everything associated with a URL until `end_time`.
   void DeleteURL(const GURL& url, base::Time end_time);
 
-  // Deletes everything associated with each URL in the list until |end_time|.
+  // Deletes everything associated with each URL in the list until `end_time`.
   void DeleteURLs(const std::vector<GURL>& url, base::Time end_time);
 
   // Removes all visits to restrict_urls (or all URLs if empty) in the given
@@ -88,7 +88,7 @@
                             bool user_initiated);
 
   // Removes all visits to all URLs with the given times, updating the
-  // URLs accordingly.  |times| must be in reverse chronological order
+  // URLs accordingly.  `times` must be in reverse chronological order
   // and not contain any duplicates.
   void ExpireHistoryForTimes(const std::vector<base::Time>& times);
 
@@ -152,7 +152,7 @@
     std::set<GURL> deleted_favicons;
   };
 
-  // Returns a vector with all visits that eventually redirect to |visits|.
+  // Returns a vector with all visits that eventually redirect to `visits`.
   VisitVector GetVisitsAndRedirectParents(const VisitVector& visits);
 
   // Deletes the visit-related stuff for all the visits in the given list, and
@@ -180,7 +180,7 @@
                     bool is_pinned,
                     DeleteEffects* effects);
 
-  // Deletes all favicons associated with |gurl|.
+  // Deletes all favicons associated with `gurl`.
   void DeleteIcons(const GURL& gurl, DeleteEffects* effects);
 
   // Deletes all the URLs in the given vector and handles their dependencies.
@@ -197,7 +197,7 @@
   //
   // The visits in the given vector should have already been deleted from the
   // database, and the list of affected URLs already be filled into
-  // |depenencies->affected_urls|.
+  // `depenencies->affected_urls`.
   //
   // Starred URLs will not be deleted. The information in the dependencies that
   // DeleteOneURL fills in will be updated, and this function will also delete
@@ -218,9 +218,9 @@
                             const std::set<GURL>& restrict_urls,
                             DeletionType type);
 
-  // Deletes the favicons listed in |effects->affected_favicons| if they are
+  // Deletes the favicons listed in `effects->affected_favicons` if they are
   // unused. Fails silently (we don't care about favicons so much, so don't want
-  // to stop everything if it fails). Fills |expired_favicons| with the set of
+  // to stop everything if it fails). Fills `expired_favicons` with the set of
   // favicon urls that no longer have associated visits and were therefore
   // expired.
   void DeleteFaviconsIfPossible(DeleteEffects* effects);
@@ -239,8 +239,8 @@
   // future.
   void DoExpireIteration();
 
-  // Tries to expire the oldest |max_visits| visits from history that are older
-  // than |time_threshold|. The return value indicates if we think there might
+  // Tries to expire the oldest `max_visits` visits from history that are older
+  // than `time_threshold`. The return value indicates if we think there might
   // be more history to expire with the current time threshold (it does not
   // indicate success or failure).
   bool ExpireSomeOldHistory(base::Time end_time,
diff --git a/components/history/core/browser/expire_history_backend_unittest.cc b/components/history/core/browser/expire_history_backend_unittest.cc
index da481c41..365ec078 100644
--- a/components/history/core/browser/expire_history_backend_unittest.cc
+++ b/components/history/core/browser/expire_history_backend_unittest.cc
@@ -62,7 +62,7 @@
   return out_time;
 }
 
-// Returns whether |url| can be added to history.
+// Returns whether `url` can be added to history.
 bool MockCanAddURLToHistory(const GURL& url) {
   return url.is_valid();
 }
@@ -99,7 +99,7 @@
 
   // EXPECTs that each URL-specific history thing (basically, everything but
   // favicons) is gone, the reason being either that it was automatically
-  // |expired|, or manually deleted.
+  // `expired`, or manually deleted.
   void EnsureURLInfoGone(const URLRow& row, bool expired);
 
   const DeletionInfo* GetLastDeletionInfo() {
@@ -109,7 +109,7 @@
   }
 
   // Returns whether HistoryBackendNotifier::NotifyURLsModified was
-  // called for |url|.
+  // called for `url`.
   bool ModifiedNotificationSentDueToExpiry(const GURL& url);
   bool ModifiedNotificationSentDueToUserAction(const GURL& url);
 
@@ -335,8 +335,8 @@
 }
 
 void ExpireHistoryTest::EnsureURLInfoGone(const URLRow& row, bool expired) {
-  // The passed in |row| must originate from |main_db_| so that its ID will be
-  // set to what had been in effect in |main_db_| before the deletion.
+  // The passed in `row` must originate from `main_db_` so that its ID will be
+  // set to what had been in effect in `main_db_` before the deletion.
   ASSERT_NE(0, row.id());
 
   // Verify the URL no longer exists.
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc
index af64c7b9..ef030a2 100644
--- a/components/history/core/browser/history_backend.cc
+++ b/components/history/core/browser/history_backend.cc
@@ -199,7 +199,7 @@
 }
 
 QueuedHistoryDBTask::~QueuedHistoryDBTask() {
-  // Ensure that |task_| is destroyed on its origin thread.
+  // Ensure that `task_` is destroyed on its origin thread.
   origin_loop_->PostTask(FROM_HERE,
                          base::BindOnce(&base::DeletePointer<HistoryDBTask>,
                                         base::Unretained(task_.release())));
@@ -645,12 +645,12 @@
     ui::PageTransition redirect_info = ui::PAGE_TRANSITION_CHAIN_START;
 
     RedirectList redirects = request.redirects;
-    // In the presence of client redirects, |request.redirects| can be a partial
+    // In the presence of client redirects, `request.redirects` can be a partial
     // chain because previous calls to this function may have reported a
     // redirect chain already. This is fine for the visits database where we'll
-    // just append data but insufficient for |recent_redirects_|
+    // just append data but insufficient for `recent_redirects_`
     // (backpropagation of favicons and titles), where we'd like the full
-    // (extended) redirect chain. We use |extended_redirect_chain| to represent
+    // (extended) redirect chain. We use `extended_redirect_chain` to represent
     // this.
     RedirectList extended_redirect_chain;
 
@@ -1714,9 +1714,9 @@
 
 void HistoryBackend::GetRedirectsToSpecificVisit(VisitID cur_visit,
                                                  RedirectList* redirects) {
-  // Follow redirects going to cur_visit. These are added to |redirects| in
+  // Follow redirects going to cur_visit. These are added to `redirects` in
   // the order they are found. If a redirect chain looks like A -> B -> C and
-  // |cur_visit| = C, redirects will be {B, A} in that order.
+  // `cur_visit` = C, redirects will be {B, A} in that order.
   if (!db_)
     return;
 
@@ -1986,7 +1986,7 @@
     DCHECK_EQ(iter->second.back(), page_url);
     return iter->second;
   }
-  // No known redirects, construct mock redirect chain containing |page_url|.
+  // No known redirects, construct mock redirect chain containing `page_url`.
   return RedirectList{page_url};
 }
 
@@ -2164,7 +2164,7 @@
   QueryResults results;
   QueryHistoryBasic(options, &results);
 
-  // 1st pass: find URLs that are visited at one of |times|.
+  // 1st pass: find URLs that are visited at one of `times`.
   std::set<GURL> urls;
   for (const auto& result : results) {
     if (times.count(result.visit_time()) > 0)
@@ -2194,7 +2194,7 @@
   Commit();
 
   DCHECK_GE(times_to_expire.back(), first_recorded_time_);
-  // Update |first_recorded_time_| if we expired it.
+  // Update `first_recorded_time_` if we expired it.
   if (times_to_expire.back() == first_recorded_time_)
     db_->GetStartDate(&first_recorded_time_);
 }
@@ -2213,7 +2213,7 @@
     }
     Commit();
 
-    // Update |first_recorded_time_| if any deletion might have affected it.
+    // Update `first_recorded_time_` if any deletion might have affected it.
     if (update_first_recorded_time)
       db_->GetStartDate(&first_recorded_time_);
   }
@@ -2251,7 +2251,7 @@
 
     db_diagnostics_ = db_->GetDiagnosticInfo(error, stmt);
 
-    // Don't just do the close/delete here, as we are being called by |db| and
+    // Don't just do the close/delete here, as we are being called by `db` and
     // that seems dangerous.
     // TODO(https://crbug.com/854258): It is also dangerous to kill the database
     // by a posted task: tasks that run before KillHistoryDatabase still can try
@@ -2286,7 +2286,7 @@
   // databases which will be closed.
   expirer_.SetDatabases(nullptr, nullptr);
 
-  // Reopen a new transaction for |db_| for the sake of CloseAllDatabases().
+  // Reopen a new transaction for `db_` for the sake of CloseAllDatabases().
   db_->BeginTransaction();
   CloseAllDatabases();
 }
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h
index 61723a7..c540009f 100644
--- a/components/history/core/browser/history_backend.h
+++ b/components/history/core/browser/history_backend.h
@@ -68,12 +68,12 @@
 class TypedURLSyncBridge;
 class URLDatabase;
 
-// Returns a formatted version of |url| with the HTTP/HTTPS scheme, port,
+// Returns a formatted version of `url` with the HTTP/HTTPS scheme, port,
 // username/password, and any trivial subdomains (e.g., "www.", "m.") removed.
 std::u16string FormatUrlForRedirectComparison(const GURL& url);
 
-// Advances (if |day| >= 0) or backtracks (if |day| < 0) from |time| by
-// abs(|day|) calendar days in local timezone and returns the midnight of the
+// Advances (if `day` >= 0) or backtracks (if `day` < 0) from `time` by
+// abs(`day`) calendar days in local timezone and returns the midnight of the
 // resulting day.
 base::Time MidnightNDaysLater(base::Time time, int days);
 
@@ -123,7 +123,7 @@
     virtual ~Delegate() = default;
 
     // Called when the database cannot be read correctly for some reason.
-    // |diagnostics| contains information about the underlying database
+    // `diagnostics` contains information about the underlying database
     // which can help in identifying the cause of the profile error.
     virtual void NotifyProfileError(sql::InitStatus init_status,
                                     const std::string& diagnostics) = 0;
@@ -142,7 +142,7 @@
     // http://www.google.com) and the given icon URL (e.g.
     // http://www.google.com/favicon.ico) have changed. HistoryService notifies
     // any registered callbacks. It is valid to call NotifyFaviconsChanged()
-    // with non-empty |page_urls| and an empty |icon_url| and vice versa.
+    // with non-empty `page_urls` and an empty `icon_url` and vice versa.
     virtual void NotifyFaviconsChanged(const std::set<GURL>& page_urls,
                                        const GURL& icon_url) = 0;
 
@@ -190,11 +190,11 @@
   // constructed on any thread, but all other functions including Init() must
   // be called on the history thread.
   //
-  // |history_dir| is the directory where the history files will be placed.
+  // `history_dir` is the directory where the history files will be placed.
   // See the definition of BroadcastNotificationsCallback above. This function
   // takes ownership of the callback pointer.
   //
-  // |history_client| is used to determine bookmarked URLs when deleting and
+  // `history_client` is used to determine bookmarked URLs when deleting and
   // may be null.
   //
   // This constructor is fast and does no I/O, so can be called at any time.
@@ -206,7 +206,7 @@
   // fails, all other functions will fail as well. (Since this runs on another
   // thread, we don't bother returning failure.)
   //
-  // |force_fail| can be set during unittests to unconditionally fail to init.
+  // `force_fail` can be set during unittests to unconditionally fail to init.
   void Init(bool force_fail,
             const HistoryDatabaseParams& history_database_params);
 
@@ -226,7 +226,7 @@
   // Clears all on-demand favicons.
   void ClearAllOnDemandFavicons();
 
-  // Gets the counts and last last time of URLs that belong to |origins| in the
+  // Gets the counts and last last time of URLs that belong to `origins` in the
   // history database. Origins that are not in the history database will be in
   // the map with a count and time of 0.
   // Returns an empty map if db_ is not initialized.
@@ -235,7 +235,7 @@
 
   // Navigation ----------------------------------------------------------------
 
-  // |request.time| must be unique with high probability.
+  // `request.time` must be unique with high probability.
   void AddPage(const HistoryAddPageArgs& request);
   virtual void SetPageTitle(const GURL& url, const std::u16string& title);
   void AddPageNoVisitForBookmark(const GURL& url, const std::u16string& title);
@@ -250,8 +250,8 @@
 
   // Querying ------------------------------------------------------------------
 
-  // Run the |callback| on the History thread.
-  // |callback| should handle the null database case.
+  // Run the `callback` on the History thread.
+  // `callback` should handle the null database case.
   void ScheduleAutocomplete(
       base::OnceCallback<void(HistoryBackend*, URLDatabase*)> callback);
 
@@ -267,22 +267,22 @@
   RedirectList QueryRedirectsFrom(const GURL& url);
 
   // Similar to above function except computes a chain of redirects to the
-  // given URL. Stores the most recent list of redirects ending at |url| in the
+  // given URL. Stores the most recent list of redirects ending at `url` in the
   // given RedirectList. For example, if we have the redirect list A -> B -> C,
   // then calling this function with url=C would fill redirects with {B, A}.
   RedirectList QueryRedirectsTo(const GURL& url);
 
   VisibleVisitCountToHostResult GetVisibleVisitCountToHost(const GURL& url);
 
-  // Request the |result_count| most visited URLs and the chain of
-  // redirects leading to each of these URLs. |days_back| is the
+  // Request the `result_count` most visited URLs and the chain of
+  // redirects leading to each of these URLs. `days_back` is the
   // number of days of history to use. Used by TopSites.
   MostVisitedURLList QueryMostVisitedURLs(int result_count, int days_back);
 
   // Statistics ----------------------------------------------------------------
 
   // Gets the number of URLs as seen in chrome://history within the time range
-  // [|begin_time|, |end_time|). Each URL is counted only once per day. For
+  // [`begin_time`, `end_time`). Each URL is counted only once per day. For
   // determination of the date, timestamps are converted to dates using local
   // time.
   HistoryCountResult GetHistoryCount(const base::Time& begin_time,
@@ -296,21 +296,21 @@
   // top-level domain (eTLD) + 1, e.g. "foo.com", "bar.co.uk") visited within
   // the 1-day, 7-day or 28-day span that ends at a midnight in local timezone.
   //
-  // For each of the most recent |number_of_days_to_report| midnights before
-  // |report_time|(inclusive), this function computes a subset of
+  // For each of the most recent `number_of_days_to_report` midnights before
+  // `report_time`(inclusive), this function computes a subset of
   // {1-day, 7-day, 28-day} metrics whose spanning periods all end on that
   // midnight. This subset of metrics to compute is specified by a bitmask
-  // |metric_type_bitmask|, which takes a bitwise combination of
+  // `metric_type_bitmask`, which takes a bitwise combination of
   // kEnableLast1DayMetric, kEnableLast7DayMetric and kEnableLast28DayMetric.
   //
   // All computed metrics are stored in DomainDiversityResults, which represents
   // a collection of DomainMetricSet's. Each DomainMetricSet contains up to 3
   // metrics ending at one unique midnight in the time range of
-  // |number_of_days_to_report| days before |report_time|. The collection of
+  // `number_of_days_to_report` days before `report_time`. The collection of
   // DomainMetricSet is sorted reverse chronologically by the ending midnight.
   //
-  // For example, when |report_time| = 2019/11/01 00:01am, |number_of_days| = 3,
-  // |metric_type_bitmask| = kEnableLast28DayMetric | kEnableLast1DayMetric,
+  // For example, when `report_time` = 2019/11/01 00:01am, `number_of_days` = 3,
+  // `metric_type_bitmask` = kEnableLast28DayMetric | kEnableLast1DayMetric,
   // DomainDiversityResults will hold 3 DomainMetricSets, each containing 2
   // metrics measuring domain visit counts spanning the following date ranges
   // (all dates are inclusive):
@@ -321,20 +321,20 @@
       DomainMetricBitmaskType metric_type_bitmask);
 
   // Gets the last time any webpage on the given host was visited within the
-  // time range [|begin_time|, |end_time|). If the given host has not been
+  // time range [`begin_time`, `end_time`). If the given host has not been
   // visited in the given time range, the result will have a null base::Time,
   // but still report success.
   HistoryLastVisitResult GetLastVisitToHost(const GURL& host,
                                             base::Time begin_time,
                                             base::Time end_time);
 
-  // Gets the last time |url| was visited before |end_time|. If the given URL
+  // Gets the last time `url` was visited before `end_time`. If the given URL
   // has not been visited in the past, the result will have a null base::Time,
   // but still report success.
   HistoryLastVisitResult GetLastVisitToURL(const GURL& url,
                                            base::Time end_time);
 
-  // Gets counts for total visits and days visited for pages matching |host|'s
+  // Gets counts for total visits and days visited for pages matching `host`'s
   // scheme, port, and host. Counts only user-visible visits.
   DailyVisitsResult GetDailyVisitsToHost(const GURL& host,
                                          base::Time begin_time,
@@ -377,7 +377,7 @@
                     scoped_refptr<base::RefCountedMemory> bitmap_data,
                     const gfx::Size& pixel_size);
 
-  // |page_urls| must not be empty.
+  // `page_urls` must not be empty.
   void SetFavicons(const base::flat_set<GURL>& page_urls,
                    favicon_base::IconType icon_type,
                    const GURL& icon_url,
@@ -448,12 +448,12 @@
 
   virtual bool GetVisitsForURL(URLID id, VisitVector* visits);
 
-  // Fetches up to |max_visits| most recent visits for the passed URL.
+  // Fetches up to `max_visits` most recent visits for the passed URL.
   virtual bool GetMostRecentVisitsForURL(URLID id,
                                          int max_visits,
                                          VisitVector* visits);
 
-  // For each element in |urls|, updates the pre-existing URLRow in the database
+  // For each element in `urls`, updates the pre-existing URLRow in the database
   // with the same ID; or ignores the element if no such row exists. Returns the
   // number of records successfully updated.
   virtual size_t UpdateURLs(const URLRows& urls);
@@ -475,7 +475,7 @@
   bool GetURLByID(URLID url_id, URLRow* url_row);
 
   // Returns the sync controller delegate for syncing typed urls. The returned
-  // delegate is owned by |this| object.
+  // delegate is owned by `this` object.
   base::WeakPtr<syncer::ModelTypeControllerDelegate>
   GetTypedURLSyncControllerDelegate();
 
@@ -495,9 +495,9 @@
                             base::Time end_time,
                             bool user_initiated);
 
-  // Finds the URLs visited at |times| and expires all their visits within
-  // [|begin_time|, |end_time|). All times in |times| should be in
-  // [|begin_time|, |end_time|). This is used when expiration request is from
+  // Finds the URLs visited at `times` and expires all their visits within
+  // [`begin_time`, `end_time`). All times in `times` should be in
+  // [`begin_time`, `end_time`). This is used when expiration request is from
   // server side, i.e. web history deletes, where only visit times (possibly
   // incomplete) are transmitted to protect user's privacy.
   void ExpireHistoryForTimes(const std::set<base::Time>& times,
@@ -505,7 +505,7 @@
                              base::Time end_time);
 
   // Calls ExpireHistoryBetween() once for each element in the vector.
-  // The fields of |ExpireHistoryArgs| map directly to the arguments of
+  // The fields of `ExpireHistoryArgs` map directly to the arguments of
   // of ExpireHistoryBetween().
   void ExpireHistory(const std::vector<ExpireHistoryArgs>& expire_list);
 
@@ -699,20 +699,20 @@
       bool floc_allowed,
       base::Optional<std::u16string> title = base::nullopt);
 
-  // Returns a redirect chain in |redirects| for the VisitID
-  // |cur_visit|. |cur_visit| is assumed to be valid. Assumes that
+  // Returns a redirect chain in `redirects` for the VisitID
+  // `cur_visit`. `cur_visit` is assumed to be valid. Assumes that
   // this HistoryBackend object has been Init()ed successfully.
   void GetRedirectsFromSpecificVisit(VisitID cur_visit,
                                      RedirectList* redirects);
 
   // Similar to the above function except returns a redirect list ending
-  // at |cur_visit|.
+  // at `cur_visit`.
   void GetRedirectsToSpecificVisit(VisitID cur_visit, RedirectList* redirects);
 
   // Updates the visit_duration information in visits table.
   void UpdateVisitDuration(VisitID visit_id, const base::Time end_ts);
 
-  // Returns whether |url| is on an untyped intranet host.
+  // Returns whether `url` is on an untyped intranet host.
   bool IsUntypedIntranetHost(const GURL& url);
 
   // Querying ------------------------------------------------------------------
@@ -762,19 +762,19 @@
 
   // Favicons ------------------------------------------------------------------
 
-  // Returns all the page URLs in the redirect chain for |page_url|. If there
-  // are no known redirects for |page_url|, returns a vector with |page_url|.
+  // Returns all the page URLs in the redirect chain for `page_url`. If there
+  // are no known redirects for `page_url`, returns a vector with `page_url`.
   RedirectList GetCachedRecentRedirects(const GURL& page_url);
 
-  // Send notification that the favicon has changed for |page_url| and all its
+  // Send notification that the favicon has changed for `page_url` and all its
   // redirects. This should be called if the mapping between the page URL
   // (e.g. http://www.google.com) and the icon URL (e.g.
   // http://www.google.com/favicon.ico) has changed.
   void SendFaviconChangedNotificationForPageAndRedirects(const GURL& page_url);
 
-  // Send notification that the bitmap data for the favicon at |icon_url| has
+  // Send notification that the bitmap data for the favicon at `icon_url` has
   // changed. Sending this notification is important because the favicon at
-  // |icon_url| may be mapped to hundreds of page URLs.
+  // `icon_url` may be mapped to hundreds of page URLs.
   void SendFaviconChangedNotificationForIconURL(const GURL& icon_url);
 
   // Generic stuff -------------------------------------------------------------
diff --git a/components/history/core/browser/history_backend_client.h b/components/history/core/browser/history_backend_client.h
index 7f8bcda..75391575 100644
--- a/components/history/core/browser/history_backend_client.h
+++ b/components/history/core/browser/history_backend_client.h
@@ -30,7 +30,7 @@
   // Returns the set of pinned URLs with their titles.
   virtual std::vector<URLAndTitle> GetPinnedURLs() = 0;
 
-  // Returns whether |url| should be considered web-safe (see
+  // Returns whether `url` should be considered web-safe (see
   // content::ChildProcessSecurityPolicy).
   virtual bool IsWebSafe(const GURL& url) = 0;
 
diff --git a/components/history/core/browser/history_backend_notifier.h b/components/history/core/browser/history_backend_notifier.h
index d63a68e0..077d37c 100644
--- a/components/history/core/browser/history_backend_notifier.h
+++ b/components/history/core/browser/history_backend_notifier.h
@@ -24,25 +24,25 @@
   // Sends notification that the favicons for the given page URLs (e.g.
   // http://www.google.com) and the given icon URL (e.g.
   // http://www.google.com/favicon.ico) have changed. It is valid to call
-  // NotifyFaviconsChanged() with non-empty |page_urls| and an empty |icon_url|
+  // NotifyFaviconsChanged() with non-empty `page_urls` and an empty `icon_url`
   // and vice versa.
   virtual void NotifyFaviconsChanged(const std::set<GURL>& page_urls,
                                      const GURL& icon_url) = 0;
 
-  // Sends notification that |transition| to |row| occurred at |visit_time|
-  // following |redirects| (empty if there is no redirects).
+  // Sends notification that `transition` to `row` occurred at `visit_time`
+  // following `redirects` (empty if there is no redirects).
   virtual void NotifyURLVisited(ui::PageTransition transition,
                                 const URLRow& row,
                                 const RedirectList& redirects,
                                 base::Time visit_time) = 0;
 
-  // Sends notification that |changed_urls| have been changed or added.
+  // Sends notification that `changed_urls` have been changed or added.
   virtual void NotifyURLsModified(const URLRows& changed_urls,
                                   UrlsModifiedReason reason) = 0;
 
   // Sends notification that some or the totality of the URLs have been
   // deleted.
-  // |deletion_info| describes the urls that have been removed from history.
+  // `deletion_info` describes the urls that have been removed from history.
   virtual void NotifyURLsDeleted(DeletionInfo deletion_info) = 0;
 };
 
diff --git a/components/history/core/browser/history_backend_observer.h b/components/history/core/browser/history_backend_observer.h
index f0e905ad..ead1241 100644
--- a/components/history/core/browser/history_backend_observer.h
+++ b/components/history/core/browser/history_backend_observer.h
@@ -19,11 +19,11 @@
 
   // Called when user visits an URL.
   //
-  // The |row| ID will be set to the value that is currently in effect in the
-  // main history database. |redirects| is the list of redirects leading up to
+  // The `row` ID will be set to the value that is currently in effect in the
+  // main history database. `redirects` is the list of redirects leading up to
   // the URL. If we have a redirect chain A -> B -> C and user is visiting C,
-  // then |redirects[0]=B| and |redirects[1]=A|. If there are no redirects,
-  // |redirects| is an empty vector.
+  // then `redirects[0]=B` and `redirects[1]=A`. If there are no redirects,
+  // `redirects` is an empty vector.
   virtual void OnURLVisited(HistoryBackend* history_backend,
                             ui::PageTransition transition,
                             const URLRow& row,
@@ -32,9 +32,9 @@
 
   // Called when a URL has been added or modified.
   //
-  // |changed_urls| lists the information for each of the URLs affected. The
+  // `changed_urls` lists the information for each of the URLs affected. The
   // rows will have the IDs that are currently in effect in the main history
-  // database. |is_from_expiration| is true if the modification is caused by
+  // database. `is_from_expiration` is true if the modification is caused by
   // automatic history expiration (the visit count got reduced by expiring some
   // of the visits); it is false if the modification is caused by user action.
   virtual void OnURLsModified(HistoryBackend* history_backend,
@@ -43,12 +43,12 @@
 
   // Called when one or more of URLs are deleted.
   //
-  // |all_history| is set to true, if all the URLs are deleted.
-  //               When set to true, |deleted_rows| and |favicon_urls| are
+  // `all_history` is set to true, if all the URLs are deleted.
+  //               When set to true, `deleted_rows` and `favicon_urls` are
   //               undefined.
-  // |expired| is set to true, if the URL deletion is due to expiration.
-  // |deleted_rows| list of the deleted URLs.
-  // |favicon_urls| list of favicon URLs that correspond to the deleted URLs.
+  // `expired` is set to true, if the URL deletion is due to expiration.
+  // `deleted_rows` list of the deleted URLs.
+  // `favicon_urls` list of favicon URLs that correspond to the deleted URLs.
   virtual void OnURLsDeleted(HistoryBackend* history_backend,
                              bool all_history,
                              bool expired,
diff --git a/components/history/core/browser/history_backend_unittest.cc b/components/history/core/browser/history_backend_unittest.cc
index 77c419d..d2628d6 100644
--- a/components/history/core/browser/history_backend_unittest.cc
+++ b/components/history/core/browser/history_backend_unittest.cc
@@ -365,12 +365,12 @@
   }
 
   // Adds CLIENT_REDIRECT page transition.
-  // |url1| is the source URL and |url2| is the destination.
-  // |did_replace| is true if the transition is non-user initiated and the
-  // navigation entry for |url2| has replaced that for |url1|. The possibly
-  // updated transition code of the visit records for |url1| and |url2| is
-  // returned by filling in |*transition1| and |*transition2|, respectively,
-  // unless null. |time| is a time of the redirect.
+  // `url1` is the source URL and `url2` is the destination.
+  // `did_replace` is true if the transition is non-user initiated and the
+  // navigation entry for `url2` has replaced that for `url1`. The possibly
+  // updated transition code of the visit records for `url1` and `url2` is
+  // returned by filling in `*transition1` and `*transition2`, respectively,
+  // unless null. `time` is a time of the redirect.
   void AddClientRedirect(const GURL& url1,
                          const GURL& url2,
                          bool did_replace,
@@ -397,12 +397,12 @@
   }
 
   // Adds SERVER_REDIRECT page transition.
-  // |url1| is the source URL and |url2| is the destination.
-  // |did_replace| is true if the transition is non-user initiated and the
-  // navigation entry for |url2| has replaced that for |url1|. The possibly
-  // updated transition code of the visit records for |url1| and |url2| is
-  // returned by filling in |*transition1| and |*transition2|, respectively,
-  // unless null. |time| is a time of the redirect.
+  // `url1` is the source URL and `url2` is the destination.
+  // `did_replace` is true if the transition is non-user initiated and the
+  // navigation entry for `url2` has replaced that for `url1`. The possibly
+  // updated transition code of the visit records for `url1` and `url2` is
+  // returned by filling in `*transition1` and `*transition2`, respectively,
+  // unless null. `time` is a time of the redirect.
   void AddServerRedirect(const GURL& url1,
                          const GURL& url2,
                          bool did_replace,
@@ -444,7 +444,7 @@
     return sizes_small_and_large;
   }
 
-  // Returns the number of icon mappings of |icon_type| to |page_url|.
+  // Returns the number of icon mappings of `icon_type` to `page_url`.
   size_t NumIconMappingsForPageURL(const GURL& page_url, IconType icon_type) {
     std::vector<IconMapping> icon_mappings;
     favicon_db()->GetIconMappingsForPageURL(page_url, {icon_type},
@@ -452,14 +452,14 @@
     return icon_mappings.size();
   }
 
-  // Returns the icon mappings for |page_url|.
+  // Returns the icon mappings for `page_url`.
   std::vector<IconMapping> GetIconMappingsForPageURL(const GURL& page_url) {
     std::vector<IconMapping> icon_mappings;
     favicon_db()->GetIconMappingsForPageURL(page_url, &icon_mappings);
     return icon_mappings;
   }
 
-  // Returns the favicon bitmaps for |icon_id| sorted by pixel size in
+  // Returns the favicon bitmaps for `icon_id` sorted by pixel size in
   // ascending order. Returns true if there is at least one favicon bitmap.
   bool GetSortedFaviconBitmaps(favicon_base::FaviconID icon_id,
                                std::vector<FaviconBitmap>* favicon_bitmaps) {
@@ -473,7 +473,7 @@
   }
 
   // Returns true if there is exactly one favicon bitmap associated to
-  // |favicon_id|. If true, returns favicon bitmap in output parameter.
+  // `favicon_id`. If true, returns favicon bitmap in output parameter.
   bool GetOnlyFaviconBitmap(const favicon_base::FaviconID icon_id,
                             FaviconBitmap* favicon_bitmap) {
     std::vector<FaviconBitmap> favicon_bitmaps;
@@ -485,7 +485,7 @@
     return true;
   }
 
-  // Creates an |edge_size|x|edge_size| bitmap of |color|.
+  // Creates an `edge_size`x`edge_size` bitmap of `color`.
   SkBitmap CreateBitmap(SkColor color, int edge_size) {
     SkBitmap bitmap;
     bitmap.allocN32Pixels(edge_size, edge_size);
@@ -493,7 +493,7 @@
     return bitmap;
   }
 
-  // Returns true if |bitmap_data| is equal to |expected_data|.
+  // Returns true if `bitmap_data` is equal to `expected_data`.
   bool BitmapDataEqual(char expected_data,
                        scoped_refptr<base::RefCountedMemory> bitmap_data) {
     return bitmap_data.get() &&
@@ -735,7 +735,7 @@
   GURL kPageURL("http://www.google.com");
   GURL kFaviconURL("http://www.google.com/favicon.ico");
 
-  // Setup: Add visit for |kPageURL|.
+  // Setup: Add visit for `kPageURL`.
   URLRow row(kPageURL);
   row.set_visit_count(2);
   row.set_typed_count(1);
@@ -743,7 +743,7 @@
   backend_->AddPagesWithDetails(std::vector<URLRow>(1u, row),
                                 history::SOURCE_BROWSED);
 
-  // Setup: Add favicon for |kPageURL|.
+  // Setup: Add favicon for `kPageURL`.
   std::vector<unsigned char> data;
   data.push_back('a');
   favicon_base::FaviconID favicon = favicon_db()->AddFavicon(
@@ -765,7 +765,7 @@
       kPageURL, {IconType::kFavicon}, &icon_mappings));
   ASSERT_EQ(1u, icon_mappings.size());
 
-  // Delete information for |kPageURL|, then clear all browsing data.
+  // Delete information for `kPageURL`, then clear all browsing data.
   backend_->DeleteURL(kPageURL);
   backend_->DeleteAllHistory();
 
@@ -1067,7 +1067,7 @@
   rows.push_back(row4);
   backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED);
 
-  // Verify that recent URLs have ended up in the main |db_|, while the already
+  // Verify that recent URLs have ended up in the main `db_`, while the already
   // expired URL has been ignored.
   URLRow stored_row1, stored_row2, stored_row3, stored_row4;
   EXPECT_NE(0, backend_->db_->GetRowForURL(row1.url(), &stored_row1));
@@ -1968,7 +1968,7 @@
   EXPECT_FALSE(s.Step());
 }
 
-// Test that |recent_redirects_| stores the full redirect chain in case of
+// Test that `recent_redirects_` stores the full redirect chain in case of
 // client redirects. In this case, a server-side redirect is followed by a
 // client-side one.
 TEST_F(HistoryBackendTest, RecentRedirectsForClientRedirects) {
@@ -2103,8 +2103,8 @@
     backend_->SetFavicons({page_url1}, IconType::kFavicon, icon_url1, bitmaps);
     backend_->SetFavicons({page_url2}, IconType::kFavicon, icon_url2, bitmaps);
 
-    // Map |page_url3| to |icon_url1| so that the test does not delete the
-    // favicon at |icon_url1|.
+    // Map `page_url3` to `icon_url1` so that the test does not delete the
+    // favicon at `icon_url1`.
     std::vector<favicon_base::FaviconRawBitmapResult> bitmap_results =
         backend_->UpdateFaviconMappingsAndFetch({page_url3}, icon_url1,
                                                 IconType::kFavicon,
@@ -2206,8 +2206,8 @@
     backend_->SetFavicons({page_url1}, IconType::kFavicon, icon_url1, bitmaps);
     backend_->SetFavicons({page_url2}, IconType::kFavicon, icon_url2, bitmaps);
 
-    // Map |page_url3| to |icon_url1| so that the test does not delete the
-    // favicon at |icon_url1|.
+    // Map `page_url3` to `icon_url1` so that the test does not delete the
+    // favicon at `icon_url1`.
     std::vector<favicon_base::FaviconRawBitmapResult> bitmap_results =
         backend_->UpdateFaviconMappingsAndFetch({page_url3}, icon_url1,
                                                 IconType::kFavicon,
@@ -2264,17 +2264,17 @@
                          new base::RefCountedBytes(png_bytes2), kLargeSize);
   ClearBroadcastedNotifications();
 
-  // Calling MergeFavicon() with |page_url2|, |icon_url1|, |png_bytes1| and
-  // |kSmallSize| should cause the large favicon bitmap from |icon_url2| to
-  // be copied to |icon_url1|.
+  // Calling MergeFavicon() with `page_url2`, `icon_url1`, `png_bytes1` and
+  // `kSmallSize` should cause the large favicon bitmap from `icon_url2` to
+  // be copied to `icon_url1`.
   backend_->MergeFavicon(page_url2, icon_url1, IconType::kFavicon,
                          new base::RefCountedBytes(png_bytes1), kSmallSize);
 
   ASSERT_EQ(1u, favicon_changed_notifications_page_urls().size());
   EXPECT_EQ(page_url2, favicon_changed_notifications_page_urls()[0]);
 
-  // A favicon bitmap was copied to the favicon at |icon_url1|. A notification
-  // that the favicon at |icon_url1| has changed should be sent.
+  // A favicon bitmap was copied to the favicon at `icon_url1`. A notification
+  // that the favicon at `icon_url1` has changed should be sent.
   ASSERT_EQ(1u, favicon_changed_notifications_icon_urls().size());
   EXPECT_EQ(icon_url1, favicon_changed_notifications_icon_urls()[0]);
 }
@@ -2327,7 +2327,7 @@
 
   // Setup
   {
-    // A mapping exists for |landing_page_url1|.
+    // A mapping exists for `landing_page_url1`.
     std::vector<favicon_base::FaviconRawBitmapData> favicon_bitmap_data;
     backend_->SetFavicons({landing_page_url1}, IconType::kFavicon, icon_url,
                           {CreateBitmap(SK_ColorBLUE, kSmallEdgeSize)});
diff --git a/components/history/core/browser/history_database.h b/components/history/core/browser/history_database.h
index b83f8370..4dd4a57 100644
--- a/components/history/core/browser/history_database.h
+++ b/components/history/core/browser/history_database.h
@@ -93,7 +93,7 @@
   int CountUniqueHostsVisitedLastMonth();
 
   // Counts the number of unique domains (eLTD+1) visited within
-  // [|begin_time|, |end_time|).
+  // [`begin_time`, `end_time`).
   int CountUniqueDomainsVisited(base::Time begin_time, base::Time end_time);
 
   // Call to set the mode on the database to exclusive. The default locking mode
@@ -172,7 +172,7 @@
 
  private:
 #if defined(OS_ANDROID)
-  // AndroidProviderBackend uses the |db_|.
+  // AndroidProviderBackend uses the `db_`.
   friend class AndroidProviderBackend;
   FRIEND_TEST_ALL_PREFIXES(AndroidURLsMigrationTest, MigrateToVersion22);
 #endif
diff --git a/components/history/core/browser/history_querying_unittest.cc b/components/history/core/browser/history_querying_unittest.cc
index 8c75bf5..25f0063 100644
--- a/components/history/core/browser/history_querying_unittest.cc
+++ b/components/history/core/browser/history_querying_unittest.cc
@@ -128,7 +128,7 @@
       options.end_time = results.back().visit_time();
     }
 
-    // Add a couple of entries with duplicate timestamps. Use |query_text| as
+    // Add a couple of entries with duplicate timestamps. Use `query_text` as
     // the title of both entries so that they match a text query.
     TestEntry duplicates[] = {
       { "http://www.google.com/x",  query_text.c_str(), 1, },
@@ -266,7 +266,7 @@
   QueryHistory("some", options, &results);
   EXPECT_FALSE(results.reached_beginning());
 
-  // Try |begin_time| just later than the oldest visit.
+  // Try `begin_time` just later than the oldest visit.
   options.begin_time =
       test_entries[0].time + base::TimeDelta::FromMicroseconds(1);
   QueryHistory(std::string(), options, &results);
@@ -274,14 +274,14 @@
   QueryHistory("some", options, &results);
   EXPECT_FALSE(results.reached_beginning());
 
-  // Try |begin_time| equal to the oldest visit.
+  // Try `begin_time` equal to the oldest visit.
   options.begin_time = test_entries[0].time;
   QueryHistory(std::string(), options, &results);
   EXPECT_TRUE(results.reached_beginning());
   QueryHistory("some", options, &results);
   EXPECT_TRUE(results.reached_beginning());
 
-  // Try |begin_time| just earlier than the oldest visit.
+  // Try `begin_time` just earlier than the oldest visit.
   options.begin_time =
       test_entries[0].time - base::TimeDelta::FromMicroseconds(1);
   QueryHistory(std::string(), options, &results);
@@ -289,14 +289,14 @@
   QueryHistory("some", options, &results);
   EXPECT_TRUE(results.reached_beginning());
 
-  // Test with |max_count| specified.
+  // Test with `max_count` specified.
   options.max_count = 1;
   QueryHistory(std::string(), options, &results);
   EXPECT_FALSE(results.reached_beginning());
   QueryHistory("some", options, &results);
   EXPECT_FALSE(results.reached_beginning());
 
-  // Test with |max_count| greater than the number of results,
+  // Test with `max_count` greater than the number of results,
   // and exactly equal to the number of results.
   options.max_count = 100;
   QueryHistory(std::string(), options, &results);
diff --git a/components/history/core/browser/history_service.cc b/components/history/core/browser/history_service.cc
index bc8543b..69f7bf51 100644
--- a/components/history/core/browser/history_service.cc
+++ b/components/history/core/browser/history_service.cc
@@ -1005,7 +1005,7 @@
                                                  std::move(history_backend_)));
   }
 
-  // Clear |backend_task_runner_| to make sure it's not used after Cleanup().
+  // Clear `backend_task_runner_` to make sure it's not used after Cleanup().
   backend_task_runner_ = nullptr;
 }
 
@@ -1015,7 +1015,7 @@
   TRACE_EVENT0("browser,startup", "HistoryService::Init");
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  // Unit tests can inject |backend_task_runner_| before this is called.
+  // Unit tests can inject `backend_task_runner_` before this is called.
   if (!backend_task_runner_) {
     backend_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
         {base::MayBlock(), base::WithBaseSyncPrimitives(),
@@ -1186,7 +1186,7 @@
     // Attempt online deletion from the history server, but ignore the result.
     // Deletion directives ensure that the results will eventually be deleted.
     //
-    // TODO(davidben): |callback| should not run until this operation completes
+    // TODO(davidben): `callback` should not run until this operation completes
     // too.
     net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation =
         net::DefinePartialNetworkTrafficAnnotation(
diff --git a/components/history/core/browser/history_service.h b/components/history/core/browser/history_service.h
index 65ea15cc..dabb6d8 100644
--- a/components/history/core/browser/history_service.h
+++ b/components/history/core/browser/history_service.h
@@ -83,8 +83,8 @@
 class HistoryService : public KeyedService {
  public:
   // Must call Init after construction. The empty constructor provided only for
-  // unit tests. When using the full constructor, |history_client| may only be
-  // null during testing, while |visit_delegate| may be null if the embedder use
+  // unit tests. When using the full constructor, `history_client` may only be
+  // null during testing, while `visit_delegate` may be null if the embedder use
   // another way to track visited links.
   HistoryService();
   HistoryService(std::unique_ptr<HistoryClient> history_client,
@@ -140,7 +140,7 @@
   using GetCountsAndLastVisitForOriginsCallback =
       base::OnceCallback<void(OriginCountAndLastVisitMap)>;
 
-  // Gets the counts and most recent visit date of URLs that belong to |origins|
+  // Gets the counts and most recent visit date of URLs that belong to `origins`
   // in the history database.
   void GetCountsAndLastVisitForOriginsForTesting(
       const std::set<GURL>& origins,
@@ -160,7 +160,7 @@
   // should be the unique ID of the current navigation entry in the given
   // process.
   //
-  // |floc_allowed| indicates whether this URL visit can be included in FLoC
+  // `floc_allowed` indicates whether this URL visit can be included in FLoC
   // computation. See VisitRow::floc_allowed for details.
   // TODO(yaoxia): Remove the floc_allowed param from this API as well as from
   // HistoryAddPageArgs. This bit will never be set at this point.
@@ -237,7 +237,7 @@
 
   // Queries the basic information about the URL in the history database. If
   // the caller is interested in the visits (each time the URL is visited),
-  // set |want_visits| to true. If these are not needed, the function will be
+  // set `want_visits` to true. If these are not needed, the function will be
   // faster by setting this to false.
   base::CancelableTaskTracker::TaskId QueryURL(
       const GURL& url,
@@ -288,7 +288,7 @@
       base::CancelableTaskTracker* tracker);
 
   // Requests the number of user-visible visits (i.e. no redirects or subframes)
-  // to all urls on the same scheme/host/port as |url|.  This is only valid for
+  // to all urls on the same scheme/host/port as `url`.  This is only valid for
   // HTTP and HTTPS URLs.
   using GetVisibleVisitCountToHostCallback =
       base::OnceCallback<void(VisibleVisitCountToHostResult)>;
@@ -298,8 +298,8 @@
       GetVisibleVisitCountToHostCallback callback,
       base::CancelableTaskTracker* tracker);
 
-  // Request the |result_count| most visited URLs and the chain of
-  // redirects leading to each of these URLs. |days_back| is the
+  // Request the `result_count` most visited URLs and the chain of
+  // redirects leading to each of these URLs. `days_back` is the
   // number of days of history to use. Used by TopSites.
   using QueryMostVisitedURLsCallback =
       base::OnceCallback<void(MostVisitedURLList)>;
@@ -313,7 +313,7 @@
   // Statistics ----------------------------------------------------------------
 
   // Gets the number of URLs as seen in chrome://history within the time range
-  // [|begin_time|, |end_time|). Each URL is counted only once per day. For
+  // [`begin_time`, `end_time`). Each URL is counted only once per day. For
   // determination of the date, timestamps are converted to dates using local
   // time.
   using GetHistoryCountCallback = base::OnceCallback<void(HistoryCountResult)>;
@@ -328,10 +328,10 @@
   void CountUniqueHostsVisitedLastMonth(GetHistoryCountCallback callback,
                                         base::CancelableTaskTracker* tracker);
 
-  // For each of the continuous |number_of_days_to_report| midnights
-  // immediately preceding |report_time| (inclusive), report (a subset of) the
+  // For each of the continuous `number_of_days_to_report` midnights
+  // immediately preceding `report_time` (inclusive), report (a subset of) the
   // last 1-day, 7-day and 28-day domain visit counts ending at that midnight.
-  // The subset of metric types to report is specified by |metric_type_bitmask|.
+  // The subset of metric types to report is specified by `metric_type_bitmask`.
   void GetDomainDiversity(base::Time report_time,
                           int number_of_days_to_report,
                           DomainMetricBitmaskType metric_type_bitmask,
@@ -341,7 +341,7 @@
   using GetLastVisitCallback = base::OnceCallback<void(HistoryLastVisitResult)>;
 
   // Gets the last time any webpage on the given host was visited within the
-  // time range [|begin_time|, |end_time|). If the given host has not been
+  // time range [`begin_time`, `end_time`). If the given host has not been
   // visited in the given time range, the callback will be called with a null
   // base::Time.
   base::CancelableTaskTracker::TaskId GetLastVisitToHost(
@@ -351,7 +351,7 @@
       GetLastVisitCallback callback,
       base::CancelableTaskTracker* tracker);
 
-  // Gets the last time |url| was visited before |end_time|. If the given URL
+  // Gets the last time `url` was visited before `end_time`. If the given URL
   // has not been visited in the past, the callback will be called with a null
   // base::Time.
   base::CancelableTaskTracker::TaskId GetLastVisitToURL(
@@ -383,10 +383,10 @@
   // Removes all visits in the selected time range (including the
   // start time), updating the URLs accordingly. This deletes any
   // associated data. This function also deletes the associated
-  // favicons, if they are no longer referenced. |callback| runs when
+  // favicons, if they are no longer referenced. `callback` runs when
   // the expiration is complete. You may use null Time values to do an
   // unbounded delete in either direction.
-  // If |restrict_urls| is not empty, only visits to the URLs in this set are
+  // If `restrict_urls` is not empty, only visits to the URLs in this set are
   // removed.
   void ExpireHistoryBetween(const std::set<GURL>& restrict_urls,
                             base::Time begin_time,
@@ -397,7 +397,7 @@
 
   // Removes all visits to specified URLs in specific time ranges.
   // This is the equivalent ExpireHistoryBetween() once for each element in the
-  // vector. The fields of |ExpireHistoryArgs| map directly to the arguments of
+  // vector. The fields of `ExpireHistoryArgs` map directly to the arguments of
   // of ExpireHistoryBetween().
   void ExpireHistory(const std::vector<ExpireHistoryArgs>& expire_list,
                      base::OnceClosure callback,
@@ -410,7 +410,7 @@
                                      base::CancelableTaskTracker* tracker);
 
   // Mark all favicons as out of date that have been modified at or after
-  // |begin| and before |end|. Calls |callback| when done.
+  // `begin` and before `end`. Calls `callback` when done.
   void SetFaviconsOutOfDateBetween(base::Time begin,
                                    base::Time end,
                                    base::OnceClosure callback,
@@ -429,7 +429,7 @@
   // visits and handles deletion of synced visits if appropriate.
   void DeleteLocalAndRemoteUrl(WebHistoryService* web_history, const GURL& url);
 
-  // Processes the given |delete_directive| and sends it to the
+  // Processes the given `delete_directive` and sends it to the
   // SyncChangeProcessor (if it exists).
   void ProcessLocalDeleteDirective(
       const sync_pb::HistoryDeleteDirectiveSpecifics& delete_directive);
@@ -485,11 +485,11 @@
   // Deletes all search terms for the specified keyword.
   void DeleteAllSearchTermsForKeyword(KeywordID keyword_id);
 
-  // Deletes any search term corresponding to |url|.
+  // Deletes any search term corresponding to `url`.
   void DeleteKeywordSearchTermForURL(const GURL& url);
 
-  // Deletes all URL and search term entries matching the given |term| and
-  // |keyword_id|.
+  // Deletes all URL and search term entries matching the given `term` and
+  // `keyword_id`.
   void DeleteMatchingURLsForKeyword(KeywordID keyword_id,
                                     const std::u16string& term);
 
@@ -500,10 +500,10 @@
 
   // Clusters ------------------------------------------------------------------
 
-  // Add a |ClusterVisitRow|.
+  // Add a `ClusterVisitRow`.
   void AddClusterVisit(const ClusterVisitRow& row);
 
-  // Get all |ClusterVisitRow|s and map them to |ClusterVisit|s.
+  // Get all `ClusterVisitRow`s and map them to `ClusterVisit`s.
   using GetClusterVisitsCallback =
       base::OnceCallback<void(std::vector<ClusterVisit>)>;
   base::CancelableTaskTracker::TaskId GetClusterVisits(
@@ -520,7 +520,7 @@
   // Generic Stuff -------------------------------------------------------------
 
   // Schedules a HistoryDBTask for running on the history backend. See
-  // HistoryDBTask for details on what this does. Takes ownership of |task|.
+  // HistoryDBTask for details on what this does. Takes ownership of `task`.
   virtual base::CancelableTaskTracker::TaskId ScheduleDBTask(
       const base::Location& from_here,
       std::unique_ptr<HistoryDBTask> task,
@@ -543,7 +543,7 @@
 
   // Testing -------------------------------------------------------------------
 
-  // Runs |flushed| after the backend has processed all other pre-existing
+  // Runs `flushed` after the backend has processed all other pre-existing
   // tasks.
   void FlushForTest(base::OnceClosure flushed);
 
@@ -566,8 +566,8 @@
   // instead.
   //
   // Note that this routine (and AddPageWithDetails()) always adds a single
-  // visit using the |last_visit| timestamp, and a PageTransition type of LINK,
-  // if |visit_source| != SYNCED.
+  // visit using the `last_visit` timestamp, and a PageTransition type of LINK,
+  // if `visit_source` != SYNCED.
   void AddPageWithDetails(const GURL& url,
                           const std::u16string& title,
                           int visit_count,
@@ -590,7 +590,7 @@
   std::unique_ptr<syncer::ModelTypeControllerDelegate>
   GetTypedURLSyncControllerDelegate();
 
-  // Override |backend_task_runner_| for testing; needs to be called before
+  // Override `backend_task_runner_` for testing; needs to be called before
   // Init.
   void set_backend_task_runner_for_testing(
       scoped_refptr<base::SequencedTaskRunner> task_runner) {
@@ -638,7 +638,7 @@
   // still in memory (pending requests may be holding a reference to us).
   void Cleanup();
 
-  // Low-level Init().  Same as the public version, but adds a |no_db| parameter
+  // Low-level Init().  Same as the public version, but adds a `no_db` parameter
   // that is only set by unittests which causes the backend to not init its DB.
   bool Init(bool no_db, const HistoryDatabaseParams& history_database_params);
 
@@ -655,23 +655,23 @@
   // Observers ----------------------------------------------------------------
 
   // Notify all HistoryServiceObservers registered that user is visiting a URL.
-  // The |row| ID will be set to the value that is currently in effect in the
-  // main history database. |redirects| is the list of redirects leading up to
+  // The `row` ID will be set to the value that is currently in effect in the
+  // main history database. `redirects` is the list of redirects leading up to
   // the URL. If we have a redirect chain A -> B -> C and user is visiting C,
-  // then |redirects[0]=B| and |redirects[1]=A|. If there are no redirects,
-  // |redirects| is an empty vector.
+  // then `redirects[0]=B` and `redirects[1]=A`. If there are no redirects,
+  // `redirects` is an empty vector.
   void NotifyURLVisited(ui::PageTransition transition,
                         const URLRow& row,
                         const RedirectList& redirects,
                         base::Time visit_time);
 
   // Notify all HistoryServiceObservers registered that URLs have been added or
-  // modified. |changed_urls| contains the list of affects URLs.
+  // modified. `changed_urls` contains the list of affects URLs.
   void NotifyURLsModified(const URLRows& changed_urls,
                           UrlsModifiedReason reason);
 
   // Notify all HistoryServiceObservers registered that URLs have been deleted.
-  // |deletion_info| describes the urls that have been removed from history.
+  // `deletion_info` describes the urls that have been removed from history.
   void NotifyURLsDeleted(const DeletionInfo& deletion_info);
 
   // Notify all HistoryServiceObservers registered that the
@@ -683,14 +683,14 @@
   void NotifyHistoryServiceBeingDeleted();
 
   // Notify all HistoryServiceObservers registered that a keyword search term
-  // has been updated. |row| contains the URL information for search |term|.
-  // |keyword_id| associated with a URL and search term.
+  // has been updated. `row` contains the URL information for search `term`.
+  // `keyword_id` associated with a URL and search term.
   void NotifyKeywordSearchTermUpdated(const URLRow& row,
                                       KeywordID keyword_id,
                                       const std::u16string& term);
 
   // Notify all HistoryServiceObservers registered that keyword search term is
-  // deleted. |url_id| is the id of the url row.
+  // deleted. `url_id` is the id of the url row.
   void NotifyKeywordSearchTermDeleted(URLID url_id);
 
   // Favicon -------------------------------------------------------------------
@@ -700,11 +700,11 @@
   // FaviconService.
 
   // Used by FaviconService to get the favicon bitmaps from the history backend
-  // whose edge sizes most closely match |desired_sizes| for |icon_type|. If
-  // |desired_sizes| has a '0' entry, the largest favicon bitmap for
-  // |icon_type| is returned. The returned FaviconBitmapResults will have at
-  // most one result for each entry in |desired_sizes|. If a favicon bitmap is
-  // determined to be the best candidate for multiple |desired_sizes| there will
+  // whose edge sizes most closely match `desired_sizes` for `icon_type`. If
+  // `desired_sizes` has a '0' entry, the largest favicon bitmap for
+  // `icon_type` is returned. The returned FaviconBitmapResults will have at
+  // most one result for each entry in `desired_sizes`. If a favicon bitmap is
+  // determined to be the best candidate for multiple `desired_sizes` there will
   // be fewer results.
   base::CancelableTaskTracker::TaskId GetFavicon(
       const GURL& icon_url,
@@ -713,18 +713,18 @@
       favicon_base::FaviconResultsCallback callback,
       base::CancelableTaskTracker* tracker);
 
-  // Used by the FaviconService to get favicons mapped to |page_url| for
-  // |icon_types| whose edge sizes most closely match |desired_sizes|. If
-  // |desired_sizes| has a '0' entry, the largest favicon bitmap for
-  // |icon_types| is returned. The returned FaviconBitmapResults will have at
-  // most one result for each entry in |desired_sizes|. If a favicon bitmap is
-  // determined to be the best candidate for multiple |desired_sizes| there
-  // will be fewer results. If |fallback_to_host| is true, the host of
-  // |page_url| will be used to search the favicon database if an exact match
+  // Used by the FaviconService to get favicons mapped to `page_url` for
+  // `icon_types` whose edge sizes most closely match `desired_sizes`. If
+  // `desired_sizes` has a '0' entry, the largest favicon bitmap for
+  // `icon_types` is returned. The returned FaviconBitmapResults will have at
+  // most one result for each entry in `desired_sizes`. If a favicon bitmap is
+  // determined to be the best candidate for multiple `desired_sizes` there
+  // will be fewer results. If `fallback_to_host` is true, the host of
+  // `page_url` will be used to search the favicon database if an exact match
   // cannot be found. Generally, code showing an icon for a full/previously
-  // visited URL should set |fallback_to_host|=false. Otherwise, if only a host
+  // visited URL should set `fallback_to_host`=false. Otherwise, if only a host
   // is available, and any icon matching the host is permissible, use
-  // |fallback_to_host|=true.
+  // `fallback_to_host`=true.
   base::CancelableTaskTracker::TaskId GetFaviconsForURL(
       const GURL& page_url,
       const favicon_base::IconTypeSet& icon_types,
@@ -734,14 +734,14 @@
       base::CancelableTaskTracker* tracker);
 
   // Used by FaviconService to find the first favicon bitmap whose width and
-  // height are greater than that of |minimum_size_in_pixels|. This searches
-  // for icons by IconType. Each element of |icon_types| is a bitmask of
+  // height are greater than that of `minimum_size_in_pixels`. This searches
+  // for icons by IconType. Each element of `icon_types` is a bitmask of
   // IconTypes indicating the types to search for.
-  // If the largest icon of |icon_types[0]| is not larger than
-  // |minimum_size_in_pixel|, the next icon types of
-  // |icon_types| will be searched and so on.
-  // If no icon is larger than |minimum_size_in_pixel|, the largest one of all
-  // icon types in |icon_types| is returned.
+  // If the largest icon of `icon_types[0]` is not larger than
+  // `minimum_size_in_pixel`, the next icon types of
+  // `icon_types` will be searched and so on.
+  // If no icon is larger than `minimum_size_in_pixel`, the largest one of all
+  // icon types in `icon_types` is returned.
   // This feature is especially useful when some types of icon is preferred as
   // long as its size is larger than a specific value.
   base::CancelableTaskTracker::TaskId GetLargestFaviconForURL(
@@ -752,20 +752,20 @@
       base::CancelableTaskTracker* tracker);
 
   // Used by the FaviconService to get the favicon bitmap which most closely
-  // matches |desired_size| from the favicon with |favicon_id| from the history
-  // backend. If |desired_size| is 0, the largest favicon bitmap for
-  // |favicon_id| is returned.
+  // matches `desired_size` from the favicon with `favicon_id` from the history
+  // backend. If `desired_size` is 0, the largest favicon bitmap for
+  // `favicon_id` is returned.
   base::CancelableTaskTracker::TaskId GetFaviconForID(
       favicon_base::FaviconID favicon_id,
       int desired_size,
       favicon_base::FaviconResultsCallback callback,
       base::CancelableTaskTracker* tracker);
 
-  // Maps |page_urls| to the favicon at |icon_url| if there is an entry in the
-  // database for |icon_url| and |icon_type|. This occurs when there is a
-  // mapping from a different page URL to |icon_url|. The favicon bitmaps whose
-  // edge sizes most closely match |desired_sizes| from the favicons which were
-  // just mapped to |page_urls| are returned. If |desired_sizes| has a '0'
+  // Maps `page_urls` to the favicon at `icon_url` if there is an entry in the
+  // database for `icon_url` and `icon_type`. This occurs when there is a
+  // mapping from a different page URL to `icon_url`. The favicon bitmaps whose
+  // edge sizes most closely match `desired_sizes` from the favicons which were
+  // just mapped to `page_urls` are returned. If `desired_sizes` has a '0'
   // entry, the largest favicon bitmap is returned.
   base::CancelableTaskTracker::TaskId UpdateFaviconMappingsAndFetch(
       const base::flat_set<GURL>& page_urls,
@@ -775,28 +775,28 @@
       favicon_base::FaviconResultsCallback callback,
       base::CancelableTaskTracker* tracker);
 
-  // Deletes favicon mappings for each URL in |page_urls| and their redirects.
+  // Deletes favicon mappings for each URL in `page_urls` and their redirects.
   void DeleteFaviconMappings(const base::flat_set<GURL>& page_urls,
                              favicon_base::IconType icon_type);
 
-  // Used by FaviconService to set a favicon for |page_url| and |icon_url| with
-  // |pixel_size|.
+  // Used by FaviconService to set a favicon for `page_url` and `icon_url` with
+  // `pixel_size`.
   // Example:
-  //   |page_url|: www.google.com
-  // 2 favicons in history for |page_url|:
+  //   `page_url`: www.google.com
+  // 2 favicons in history for `page_url`:
   //   www.google.com/a.ico  16x16
   //   www.google.com/b.ico  32x32
-  // MergeFavicon(|page_url|, www.google.com/a.ico, ..., ..., 16x16)
+  // MergeFavicon(`page_url`, www.google.com/a.ico, ..., ..., 16x16)
   //
   // Merging occurs in the following manner:
-  // 1) |page_url| is set to map to only to |icon_url|. In order to not lose
-  //    data, favicon bitmaps mapped to |page_url| but not to |icon_url| are
-  //    copied to the favicon at |icon_url|.
-  //    For the example above, |page_url| will only be mapped to a.ico.
+  // 1) `page_url` is set to map to only to `icon_url`. In order to not lose
+  //    data, favicon bitmaps mapped to `page_url` but not to `icon_url` are
+  //    copied to the favicon at `icon_url`.
+  //    For the example above, `page_url` will only be mapped to a.ico.
   //    The 32x32 favicon bitmap at b.ico is copied to a.ico
-  // 2) |bitmap_data| is added to the favicon at |icon_url|, overwriting any
-  //    favicon bitmaps of |pixel_size|.
-  //    For the example above, |bitmap_data| overwrites the 16x16 favicon
+  // 2) `bitmap_data` is added to the favicon at `icon_url`, overwriting any
+  //    favicon bitmaps of `pixel_size`.
+  //    For the example above, `bitmap_data` overwrites the 16x16 favicon
   //    bitmap for a.ico.
   // TODO(pkotwicz): Remove once no longer required by sync.
   void MergeFavicon(const GURL& page_url,
@@ -806,39 +806,39 @@
                     const gfx::Size& pixel_size);
 
   // Used by the FaviconService to replace the favicon bitmaps mapped to all
-  // URLs in |page_urls| for |icon_type|.
-  // Use MergeFavicon() if |bitmaps| is incomplete, and favicon bitmaps in the
+  // URLs in `page_urls` for `icon_type`.
+  // Use MergeFavicon() if `bitmaps` is incomplete, and favicon bitmaps in the
   // database should be preserved if possible. For instance, favicon bitmaps
   // from sync are 1x only. MergeFavicon() is used to avoid deleting the 2x
-  // favicon bitmap if it is present in the history backend. |page_urls| must
+  // favicon bitmap if it is present in the history backend. `page_urls` must
   // not be empty.
   void SetFavicons(const base::flat_set<GURL>& page_urls,
                    favicon_base::IconType icon_type,
                    const GURL& icon_url,
                    const std::vector<SkBitmap>& bitmaps);
 
-  // Causes each page in |page_urls_to_write| to be associated to the same
-  // icon as the page |page_url_to_read| for icon types matching |icon_types|.
-  // No-op if |page_url_to_read| has no mappings for |icon_types|.
+  // Causes each page in `page_urls_to_write` to be associated to the same
+  // icon as the page `page_url_to_read` for icon types matching `icon_types`.
+  // No-op if `page_url_to_read` has no mappings for `icon_types`.
   void CloneFaviconMappingsForPages(
       const GURL& page_url_to_read,
       const favicon_base::IconTypeSet& icon_types,
       const base::flat_set<GURL>& page_urls_to_write);
 
   // Figures out whether an on-demand favicon can be written for provided
-  // |page_url| and returns the result via |callback|. The result is false if
-  // there is an existing cached favicon for |icon_type| or if there is a
-  // non-expired icon of *any* type for |page_url|.
+  // `page_url` and returns the result via `callback`. The result is false if
+  // there is an existing cached favicon for `icon_type` or if there is a
+  // non-expired icon of *any* type for `page_url`.
   void CanSetOnDemandFavicons(const GURL& page_url,
                               favicon_base::IconType icon_type,
                               base::OnceCallback<void(bool)> callback);
 
   // Same as SetFavicons with three differences:
   // 1) It will be a no-op if CanSetOnDemandFavicons() returns false.
-  // 2) If |icon_url| is known to the database, |bitmaps| will be ignored (i.e.
-  //    the icon won't be overwritten) but the mappings from |page_url| to
-  //    |icon_url| will be stored (conditioned to point 1 above).
-  // 3) If |icon_url| is stored, it will be marked as "on-demand".
+  // 2) If `icon_url` is known to the database, `bitmaps` will be ignored (i.e.
+  //    the icon won't be overwritten) but the mappings from `page_url` to
+  //    `icon_url` will be stored (conditioned to point 1 above).
+  // 3) If `icon_url` is stored, it will be marked as "on-demand".
   //
   // On-demand favicons are those that are fetched without visiting their page.
   // For this reason, their life-time cannot be bound to the life-time of the
@@ -860,7 +860,7 @@
   // of date.
   void SetFaviconsOutOfDateForPage(const GURL& page_url);
 
-  // Mark that the on-demand favicon at |icon_url| was requested now. This
+  // Mark that the on-demand favicon at `icon_url` was requested now. This
   // postpones the automatic eviction of the favicon from the database. Not all
   // calls end up in a write into the DB:
   // - it is no-op if the bitmaps are not stored using SetOnDemandFavicons();
@@ -890,7 +890,7 @@
   // Called when the favicons for the given page URLs (e.g.
   // http://www.google.com) and the given icon URL (e.g.
   // http://www.google.com/favicon.ico) have changed. It is valid to call
-  // NotifyFaviconsChanged() with non-empty |page_urls| and an empty |icon_url|
+  // NotifyFaviconsChanged() with non-empty `page_urls` and an empty `icon_url`
   // and vice versa.
   void NotifyFaviconsChanged(const std::set<GURL>& page_urls,
                              const GURL& icon_url);
@@ -902,7 +902,7 @@
   scoped_refptr<base::SequencedTaskRunner> backend_task_runner_;
 
   // This class has most of the implementation. You MUST communicate with this
-  // class ONLY through |backend_task_runner_|.
+  // class ONLY through `backend_task_runner_`.
   //
   // This pointer will be null once Cleanup() has been called, meaning no
   // more tasks should be scheduled.
diff --git a/components/history/core/browser/history_service_observer.h b/components/history/core/browser/history_service_observer.h
index 45d79550..6f5cd13 100644
--- a/components/history/core/browser/history_service_observer.h
+++ b/components/history/core/browser/history_service_observer.h
@@ -20,11 +20,11 @@
 
   // Called when user visits an URL.
   //
-  // The |row| ID will be set to the value that is currently in effect in the
-  // main history database. |redirects| is the list of redirects leading up to
+  // The `row` ID will be set to the value that is currently in effect in the
+  // main history database. `redirects` is the list of redirects leading up to
   // the URL. If we have a redirect chain A -> B -> C and user is visiting C,
-  // then |redirects[0]=B| and |redirects[1]=A|. If there are no redirects,
-  // |redirects| is an empty vector.
+  // then `redirects[0]=B` and `redirects[1]=A`. If there are no redirects,
+  // `redirects` is an empty vector.
   virtual void OnURLVisited(HistoryService* history_service,
                             ui::PageTransition transition,
                             const URLRow& row,
@@ -33,7 +33,7 @@
 
   // Called when a URL has been added or modified.
   //
-  // |changed_urls| lists the information for each of the URLs affected. The
+  // `changed_urls` lists the information for each of the URLs affected. The
   // rows will have the IDs that are currently in effect in the main history
   // database.
   virtual void OnURLsModified(HistoryService* history_service,
@@ -47,27 +47,27 @@
 
   // Called when one or more URLs are deleted.
   //
-  // |deletion_info| describes the urls that have been removed from history.
+  // `deletion_info` describes the urls that have been removed from history.
   virtual void OnURLsDeleted(HistoryService* history_service,
                              const DeletionInfo& deletion_info) {}
 
-  // Is called to notify when |history_service| has finished loading.
+  // Is called to notify when `history_service` has finished loading.
   virtual void OnHistoryServiceLoaded(HistoryService* history_service) {}
 
-  // Is called to notify when |history_service| is being deleted.
+  // Is called to notify when `history_service` is being deleted.
   virtual void HistoryServiceBeingDeleted(HistoryService* history_service) {}
 
   // Sent when a keyword search term is updated.
   //
-  // |row| contains the URL information for search |term|.
-  // |keyword_id| associated with a URL and search term.
+  // `row` contains the URL information for search `term`.
+  // `keyword_id` associated with a URL and search term.
   virtual void OnKeywordSearchTermUpdated(HistoryService* history_service,
                                           const URLRow& row,
                                           KeywordID keyword_id,
                                           const std::u16string& term) {}
 
   // Sent when a keyword search term is deleted.
-  // |url_id| is the id of the url row.
+  // `url_id` is the id of the url row.
   virtual void OnKeywordSearchTermDeleted(HistoryService* history_service,
                                           URLID url_id) {}
 
diff --git a/components/history/core/browser/history_service_unittest.cc b/components/history/core/browser/history_service_unittest.cc
index 3cc333bc..91993fe2 100644
--- a/components/history/core/browser/history_service_unittest.cc
+++ b/components/history/core/browser/history_service_unittest.cc
@@ -760,8 +760,8 @@
 
   base::Time query_time = base::Time::Now();
 
-  // Make sure |query_time| is at least some time past the midnight so that
-  // some domain visits can be inserted between |query_time| and midnight
+  // Make sure `query_time` is at least some time past the midnight so that
+  // some domain visits can be inserted between `query_time` and midnight
   // for testing.
   query_time =
       std::max(query_time.LocalMidnight() + base::TimeDelta::FromMinutes(10),
@@ -791,7 +791,7 @@
                 GetTimeInThePast(query_time, 1, 8));
   AddPageAtTime(history, "http://ak/", GetTimeInThePast(query_time, 1, 14));
 
-  // Should return empty result if |begin_time| == |end_time|.
+  // Should return empty result if `begin_time` == `end_time`.
   DomainDiversityResults res = GetDomainDiversityHelper(
       history, query_time, query_time,
       history::kEnableLast1DayMetric | history::kEnableLast7DayMetric |
diff --git a/components/history/core/browser/history_types.h b/components/history/core/browser/history_types.h
index d68f385..f0fff2fc 100644
--- a/components/history/core/browser/history_types.h
+++ b/components/history/core/browser/history_types.h
@@ -161,12 +161,12 @@
   }
 
   // Returns a pointer to the beginning of an array of all matching indices
-  // for entries with the given URL. The array will be |*num_matches| long.
-  // |num_matches| can be NULL if the caller is not interested in the number of
+  // for entries with the given URL. The array will be `*num_matches` long.
+  // `num_matches` can be NULL if the caller is not interested in the number of
   // results (commonly it will only be interested in the first one and can test
   // the pointer for NULL).
   //
-  // When there is no match, it will return NULL and |*num_matches| will be 0.
+  // When there is no match, it will return NULL and `*num_matches` will be 0.
   const size_t* MatchesForURL(const GURL& url, size_t* num_matches) const;
 
   // Swaps the current result with another. This allows ownership to be
@@ -190,11 +190,11 @@
   // memory when possible.
   typedef std::map<GURL, base::StackVector<size_t, 4>> URLToResultIndices;
 
-  // Inserts an entry into the |url_to_results_| map saying that the given URL
+  // Inserts an entry into the `url_to_results_` map saying that the given URL
   // is at the given index in the results_.
   void AddURLUsageAtIndex(const GURL& url, size_t index);
 
-  // Adds |delta| to each index in url_to_results_ in the range [begin,end]
+  // Adds `delta` to each index in url_to_results_ in the range [begin,end]
   // (this is inclusive). This is used when inserting or deleting.
   void AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta);
 
@@ -227,7 +227,7 @@
   base::Time begin_time;
   base::Time end_time;
 
-  // Sets the query time to the last |days_ago| days to the present time.
+  // Sets the query time to the last `days_ago` days to the present time.
   void SetRecentDayRange(int days_ago);
 
   // The maximum number of results to return. The results will be sorted with
@@ -276,7 +276,7 @@
   ~QueryURLResult();
 
   // Indicates whether the call to HistoryBackend::QueryURL was successful
-  // or not. If false, then both |row| and |visits| fields are undefined.
+  // or not. If false, then both `row` and `visits` fields are undefined.
   bool success = false;
   URLRow row;
   VisitVector visits;
@@ -288,7 +288,7 @@
 // HistoryBackend::GetVisibleVisitCountToHost.
 struct VisibleVisitCountToHostResult {
   // Indicates whether the call to HistoryBackend::GetVisibleVisitCountToHost
-  // was successful or not. If false, then both |count| and |first_visit| are
+  // was successful or not. If false, then both `count` and `first_visit` are
   // undefined.
   bool success = false;
   int count = 0;
@@ -423,7 +423,7 @@
 // HistoryBackend::GetHistoryCount or
 // HistoryBackend::CountUniqueHostsVisitedLastMonth.
 struct HistoryCountResult {
-  // Indicates whether the call was successful or not. If false, then |count|
+  // Indicates whether the call was successful or not. If false, then `count`
   // is undefined.
   bool success = false;
   int count = 0;
@@ -481,9 +481,9 @@
 struct HistoryLastVisitResult {
   // Indicates whether the call was successful or not. This can happen if there
   // are internal database errors or the query was called with invalid
-  // arguments. |success| will be true and |last_visit| will be null if
-  // the host was never visited before. |last_visit| will always be null if
-  // |success| is false.
+  // arguments. `success` will be true and `last_visit` will be null if
+  // the host was never visited before. `last_visit` will always be null if
+  // `success` is false.
   bool success = false;
   base::Time last_visit;
 };
@@ -506,8 +506,8 @@
   ExpireHistoryArgs(const ExpireHistoryArgs& other);
   ~ExpireHistoryArgs();
 
-  // Sets |begin_time| and |end_time| to the beginning and end of the day (in
-  // local time) on which |time| occurs.
+  // Sets `begin_time` and `end_time` to the beginning and end of the day (in
+  // local time) on which `time` occurs.
   void SetTimeRangeForOneDay(base::Time time);
 
   std::set<GURL> urls;
@@ -515,7 +515,7 @@
   base::Time end_time;
 };
 
-// Represents the time range of a history deletion. If |IsValid()| is false,
+// Represents the time range of a history deletion. If `IsValid()` is false,
 // the time range doesn't apply to this deletion e.g. because only a list of
 // urls was deleted.
 class DeletionTimeRange {
@@ -555,11 +555,11 @@
 };
 
 // Describes the urls that have been removed due to a history deletion.
-// If |IsAllHistory()| returns true, all urls haven been deleted.
-// In this case, |deleted_rows()| and |favicon_urls()| are undefined.
-// Otherwise |deleted_rows()| contains the urls where all visits have been
+// If `IsAllHistory()` returns true, all urls haven been deleted.
+// In this case, `deleted_rows()` and `favicon_urls()` are undefined.
+// Otherwise `deleted_rows()` contains the urls where all visits have been
 // removed from history.
-// If |expired()| returns true, this deletion is due to a regularly performed
+// If `expired()` returns true, this deletion is due to a regularly performed
 // history expiration. Otherwise it is an explicit deletion due to a user
 // action.
 class DeletionInfo {
@@ -581,15 +581,15 @@
   DeletionInfo(DeletionInfo&& other) noexcept;
   DeletionInfo& operator=(DeletionInfo&& rhs) noexcept;
 
-  // If IsAllHistory() returns true, all URLs are deleted and |deleted_rows()|
-  //  and |favicon_urls()| are undefined.
+  // If IsAllHistory() returns true, all URLs are deleted and `deleted_rows()`
+  //  and `favicon_urls()` are undefined.
   bool IsAllHistory() const { return time_range_.IsAllTime(); }
 
-  // If time_range.IsValid() is true, |restrict_urls| (or all URLs if empty)
+  // If time_range.IsValid() is true, `restrict_urls` (or all URLs if empty)
   // between time_range.begin() and time_range.end() have been removed.
   const DeletionTimeRange& time_range() const { return time_range_; }
 
-  // Restricts deletions within |time_range()|.
+  // Restricts deletions within `time_range()`.
   const base::Optional<std::set<GURL>>& restrict_urls() const {
     return restrict_urls_;
   }
@@ -598,11 +598,11 @@
   bool is_from_expiration() const { return is_from_expiration_; }
 
   // Returns the list of the deleted URLs.
-  // Undefined if |IsAllHistory()| returns true.
+  // Undefined if `IsAllHistory()` returns true.
   const URLRows& deleted_rows() const { return deleted_rows_; }
 
   // Returns the list of favicon URLs that correspond to the deleted URLs.
-  // Undefined if |IsAllHistory()| returns true.
+  // Undefined if `IsAllHistory()` returns true.
   const std::set<GURL>& favicon_urls() const { return favicon_urls_; }
 
   // Returns a map from origins with deleted urls to a count of remaining URLs
@@ -664,7 +664,7 @@
 
 // Context signals about a page visit collected during the page lifetime.
 // This struct encapsulates data that's shared between UKM and the on-device
-// storage for |HistoryCluster| metadata, recorded to both when the page
+// storage for `HistoryCluster` metadata, recorded to both when the page
 // lifetime ends. This is to ensure that History actually has the visit row
 // already written.
 struct ClusterVisitContextSignals {
@@ -684,7 +684,7 @@
 
   // True if the page was NOT a bookmark when the navigation was committed and
   // was MADE a bookmark during the page's lifetime. In other words:
-  // If |is_existing_bookmark| is true, that implies |is_new_bookmark| is false.
+  // If `is_existing_bookmark` is true, that implies `is_new_bookmark` is false.
   bool is_new_bookmark = false;
 
   // True if the page has been explicitly added (by the user) to the list of
@@ -712,15 +712,15 @@
   int page_end_reason = 0;
 };
 
-// A |VisitRow| along with its corresponding |URLRow| and
-// |ClusterVisitContextSignals|. This is used to cluster visits.
+// A `VisitRow` along with its corresponding `URLRow` and
+// `ClusterVisitContextSignals`. This is used to cluster visits.
 struct ClusterVisit {
   URLRow url_row;
   VisitRow visit_row;
   ClusterVisitContextSignals context_signals;
 };
 
-// The DB representation of |ClusterVisit|.
+// The DB representation of `ClusterVisit`.
 struct ClusterVisitRow {
   ClusterVisitRow() = default;
   explicit ClusterVisitRow(const ClusterVisit& cluster_visit)
diff --git a/components/history/core/browser/in_memory_history_backend.h b/components/history/core/browser/in_memory_history_backend.h
index 7e203eb..c6ae62c 100644
--- a/components/history/core/browser/in_memory_history_backend.h
+++ b/components/history/core/browser/in_memory_history_backend.h
@@ -7,7 +7,7 @@
 // low-latency operations, such as in-line autocomplete.
 //
 // The in-memory cache provides the following guarantees:
-//  (1.) It will always contain URLRows that either have a |typed_count| > 0; or
+//  (1.) It will always contain URLRows that either have a `typed_count` > 0; or
 //       that have a corresponding search term, in which case information about
 //       the search term is also stored.
 //  (2.) It will be an actual subset, i.e., it will contain verbatim data, and
@@ -47,7 +47,7 @@
   ~InMemoryHistoryBackend() override;
 
   // Initializes the backend from the history database pointed to by the
-  // full path in |history_filename|.
+  // full path in `history_filename`.
   bool Init(const base::FilePath& history_filename);
 
   // Does initialization work when this object is attached to the history
diff --git a/components/history/core/browser/keyword_search_term.h b/components/history/core/browser/keyword_search_term.h
index 295dfeb6..a8c88f4e 100644
--- a/components/history/core/browser/keyword_search_term.h
+++ b/components/history/core/browser/keyword_search_term.h
@@ -27,8 +27,8 @@
   //                   recency_in_seconds + recency_decay_unit_in_seconds
   // This score combines frequency and recency of the visit favoring ones that
   // are more frequent and more recent (see go/local-zps-frecency-ranking).
-  // |recency_decay_unit_sec| is the number of seconds until the recency
-  // component of the score decays to half. |frequency_exponent| is factor by
+  // `recency_decay_unit_sec` is the number of seconds until the recency
+  // component of the score decays to half. `frequency_exponent` is factor by
   // which the frequency of the visit is exponentiated.
   double GetFrecency(base::Time now,
                      int recency_decay_unit_sec,
diff --git a/components/history/core/browser/sync/delete_directive_handler.cc b/components/history/core/browser/sync/delete_directive_handler.cc
index 1246872..ec80d27 100644
--- a/components/history/core/browser/sync/delete_directive_handler.cc
+++ b/components/history/core/browser/sync/delete_directive_handler.cc
@@ -70,7 +70,7 @@
   return (time - base::Time::UnixEpoch()).InMicroseconds();
 }
 
-// Converts global IDs in |global_id_directive| to times.
+// Converts global IDs in `global_id_directive` to times.
 void GetTimesFromGlobalIds(
     const sync_pb::GlobalIdDirective& global_id_directive,
     std::set<base::Time>* times) {
@@ -158,8 +158,8 @@
       const syncer::SyncDataList& global_id_directives);
 
   // Process a list of time range directives, all history entries within the
-  // time ranges are deleted. |time_range_directives| should be sorted by
-  // |start_time_usec| and |end_time_usec| already.
+  // time ranges are deleted. `time_range_directives` should be sorted by
+  // `start_time_usec` and `end_time_usec` already.
   void ProcessTimeRangeDeleteDirectives(
       HistoryBackend* history_backend,
       const syncer::SyncDataList& time_range_directives);
diff --git a/components/history/core/browser/sync/delete_directive_handler.h b/components/history/core/browser/sync/delete_directive_handler.h
index cdf2b1fc..efea393f 100644
--- a/components/history/core/browser/sync/delete_directive_handler.h
+++ b/components/history/core/browser/sync/delete_directive_handler.h
@@ -48,17 +48,17 @@
   void OnBackendLoaded();
 
   // Create delete directives for the deletion of visits identified by
-  // |global_ids| (which may be empty), in the time range specified by
-  // |begin_time| and |end_time|.
+  // `global_ids` (which may be empty), in the time range specified by
+  // `begin_time` and `end_time`.
   bool CreateDeleteDirectives(const std::set<int64_t>& global_ids,
                               base::Time begin_time,
                               base::Time end_time);
 
   bool CreateUrlDeleteDirective(const GURL& url);
 
-  // Sends the given |delete_directive| to SyncChangeProcessor (if it exists).
+  // Sends the given `delete_directive` to SyncChangeProcessor (if it exists).
   // Returns any error resulting from sending the delete directive to sync.
-  // NOTE: the given |delete_directive| is not processed to remove local
+  // NOTE: the given `delete_directive` is not processed to remove local
   //       history entries that match. Caller still needs to call other
   //       interfaces, e.g. HistoryService::ExpireHistoryBetween(), to delete
   //       local history entries.
@@ -85,7 +85,7 @@
   enum PostProcessingAction { KEEP_AFTER_PROCESSING, DROP_AFTER_PROCESSING };
 
   // Callback when history backend finishes deleting visits according to
-  // |delete_directives|.
+  // `delete_directives`.
   void FinishProcessing(PostProcessingAction post_processing_action,
                         const syncer::SyncDataList& delete_directives);
 
diff --git a/components/history/core/browser/sync/history_delete_directives_model_type_controller.h b/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
index 16801b46..fe78e6c 100644
--- a/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
+++ b/components/history/core/browser/sync/history_delete_directives_model_type_controller.h
@@ -25,7 +25,7 @@
     : public syncer::SyncableServiceBasedModelTypeController,
       public syncer::SyncServiceObserver {
  public:
-  // |sync_service| and |history_service| must not be null and must outlive this
+  // `sync_service` and `history_service` must not be null and must outlive this
   // object.
   HistoryDeleteDirectivesModelTypeController(
       const base::RepeatingClosure& dump_stack,
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge.cc b/components/history/core/browser/sync/typed_url_sync_bridge.cc
index 91cad61..7d86e30 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge.cc
+++ b/components/history/core/browser/sync/typed_url_sync_bridge.cc
@@ -124,7 +124,7 @@
 
   // Iterate through entity_data and check for all the urls that
   // sync already knows about. MergeURLWithSync() will remove urls that
-  // are the same as the synced ones from |new_db_urls|.
+  // are the same as the synced ones from `new_db_urls`.
   for (const std::unique_ptr<EntityChange>& entity_change : entity_data) {
     DCHECK(entity_change->data().specifics.has_typed_url());
     const TypedUrlSpecifics& specifics =
@@ -199,7 +199,7 @@
           entity_change->storage_key());
       if (!history_backend_->GetURLByID(url_id, &url_row)) {
         // Ignoring the case that there is no matching URLRow with URLID
-        // |url_id|.
+        // `url_id`.
         continue;
       }
 
@@ -263,7 +263,7 @@
     URLID url_id = TypedURLSyncMetadataDatabase::StorageKeyToURLID(key);
 
     if (!history_backend_->GetURLByID(url_id, &url_row)) {
-      // Ignoring the case which no matching URLRow with URLID |url_id|.
+      // Ignoring the case which no matching URLRow with URLID `url_id`.
       DLOG(ERROR) << "Could not find URL for id: " << url_id;
       continue;
     }
@@ -776,7 +776,7 @@
     bool is_existing_url =
         history_backend_->GetURL(untyped_url.url(), &untyped_url);
     if (is_existing_url) {
-      // Add a new entry to |local_typed_urls|, and set the iterator to it.
+      // Add a new entry to `local_typed_urls`, and set the iterator to it.
       VisitVector untyped_visits;
       if (!FixupURLAndGetVisits(&untyped_url, &untyped_visits)) {
         return;
@@ -786,7 +786,7 @@
       // Store row info that will be used to update sync's visits.
       (*local_typed_urls)[untyped_url.url()] = untyped_url;
 
-      // Set iterator |it| to point to this entry.
+      // Set iterator `it` to point to this entry.
       it = local_typed_urls->find(untyped_url.url());
       DCHECK(it != local_typed_urls->end());
       // Continue with merge below.
@@ -822,7 +822,7 @@
   // Empty URLs should be filtered out by ShouldIgnoreUrl() previously.
   DCHECK(!it->second.url().spec().empty());
 
-  // Initialize fields in |new_url| to the same values as the fields in
+  // Initialize fields in `new_url` to the same values as the fields in
   // the existing URLRow in the history DB. This is needed because we
   // overwrite the existing value in WriteToHistoryBackend(), but some of
   // the values in that structure are not synced (like typed_count).
@@ -927,7 +927,7 @@
     // If the URL has no typed visits any more we should get rid of it. It is
     // possible that this URL never had typed visits and thus it has no sync
     // entity and no sync metadata. We do not need to check for this case
-    // as all the code below is no-op if there is no sync metadata for |row|.
+    // as all the code below is no-op if there is no sync metadata for `row`.
     if (is_from_expiration) {
       // Only remove its metadata as we do not sync up deletions for expired
       // entities (see the comment in OnURLsDeleted()).
@@ -943,7 +943,7 @@
 void TypedURLSyncBridge::ExpireMetadataForURL(const URLRow& row) {
   std::string storage_key = GetStorageKeyFromURLRow(row);
   // The following functions need to tolerate if there exists no metadata
-  // for |storage_key| as we might call this function multiple times for a given
+  // for `storage_key` as we might call this function multiple times for a given
   // url.
   sync_metadata_database_->ClearSyncMetadata(syncer::TYPED_URLS, storage_key);
   change_processor()->UntrackEntityForStorageKey(storage_key);
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge.h b/components/history/core/browser/sync/typed_url_sync_bridge.h
index af10e38..4e535d5 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge.h
+++ b/components/history/core/browser/sync/typed_url_sync_bridge.h
@@ -26,7 +26,7 @@
 class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
                            public HistoryBackendObserver {
  public:
-  // |sync_metadata_store| is owned by |history_backend|, and must outlive
+  // `sync_metadata_store` is owned by `history_backend`, and must outlive
   // TypedURLSyncBridge.
   TypedURLSyncBridge(
       HistoryBackend* history_backend,
@@ -88,7 +88,7 @@
   typedef std::map<GURL, URLRow> TypedURLMap;
 
   // This is a helper map used to associate visit vectors from the history db
-  // to the typed urls in the above map |TypedURLMap|.
+  // to the typed urls in the above map `TypedURLMap`.
   typedef std::map<GURL, VisitVector> URLVisitVectorMap;
 
   // Bitfield returned from MergeUrls to specify the result of a merge.
@@ -98,14 +98,14 @@
   static const MergeResult DIFF_LOCAL_ROW_CHANGED = 1 << 1;
   static const MergeResult DIFF_LOCAL_VISITS_ADDED = 1 << 2;
 
-  // Merges the URL information in |typed_url| with the URL information from the
-  // history database in |url| and |visits|, and returns a bitmask with the
+  // Merges the URL information in `typed_url` with the URL information from the
+  // history database in `url` and `visits`, and returns a bitmask with the
   // results of the merge:
-  // DIFF_UPDATE_NODE - changes have been made to |new_url| and |visits| which
+  // DIFF_UPDATE_NODE - changes have been made to `new_url` and `visits` which
   //   should be persisted to the sync node.
-  // DIFF_LOCAL_ROW_CHANGED - The history data in |new_url| should be persisted
+  // DIFF_LOCAL_ROW_CHANGED - The history data in `new_url` should be persisted
   //   to the history DB.
-  // DIFF_LOCAL_VISITS_ADDED - |new_visits| contains a list of visits that
+  // DIFF_LOCAL_VISITS_ADDED - `new_visits` contains a list of visits that
   //   should be written to the history DB for this URL. Deletions are not
   //   written to the DB - each client is left to age out visits on their own.
   static MergeResult MergeUrls(const sync_pb::TypedUrlSpecifics& typed_url,
@@ -115,16 +115,16 @@
                                std::vector<VisitInfo>* new_visits);
 
   // Diffs the set of visits between the history DB and the sync DB, using the
-  // sync DB as the canonical copy. Result is the set of |new_visits| and
-  // |removed_visits| that can be applied to the history DB to make it match
-  // the sync DB version. |removed_visits| can be null if the caller does not
+  // sync DB as the canonical copy. Result is the set of `new_visits` and
+  // `removed_visits` that can be applied to the history DB to make it match
+  // the sync DB version. `removed_visits` can be null if the caller does not
   // care about which visits to remove.
   static void DiffVisits(const VisitVector& history_visits,
                          const sync_pb::TypedUrlSpecifics& sync_specifics,
                          std::vector<VisitInfo>* new_visits,
                          VisitVector* removed_visits);
 
-  // Fills |new_url| with formatted data from |typed_url|.
+  // Fills `new_url` with formatted data from `typed_url`.
   static void UpdateURLRowFromTypedUrlSpecifics(
       const sync_pb::TypedUrlSpecifics& typed_url,
       URLRow* new_url);
@@ -133,7 +133,7 @@
   // pass it to the processor so that it can start tracking changes.
   void LoadMetadata();
 
-  // Compares |server_typed_url| from the server against local history to decide
+  // Compares `server_typed_url` from the server against local history to decide
   // how to merge any existing data, and updates appropriate data containers to
   // write to server and backend.
   void MergeURLWithSync(const sync_pb::TypedUrlSpecifics& server_typed_url,
@@ -146,9 +146,9 @@
   // Given a typed URL in the sync DB, looks for an existing entry in the
   // local history DB and generates a list of visits to add to the
   // history DB to bring it up to date (avoiding duplicates).
-  // Updates the passed |visits_to_add| and |visits_to_remove| vectors with the
+  // Updates the passed `visits_to_add` and `visits_to_remove` vectors with the
   // visits to add to/remove from the history DB, and adds a new entry to either
-  // |updated_urls| or |new_urls| depending on whether the URL already existed
+  // `updated_urls` or `new_urls` depending on whether the URL already existed
   // in the history DB.
   void UpdateFromSync(const sync_pb::TypedUrlSpecifics& typed_url,
                       TypedURLVisitVector* visits_to_add,
@@ -157,14 +157,14 @@
                       URLRows* new_urls);
 
   // Utility routine that (a) updates an existing sync node or (b) creates a
-  // new one for the passed |typed_url| if one does not already exist or (c)
-  // removes metadata for |row| if |is_from_expiration| is true and the |row|
+  // new one for the passed `typed_url` if one does not already exist or (c)
+  // removes metadata for `row` if `is_from_expiration` is true and the `row`
   // has no more typed visits.
   void UpdateSyncFromLocal(URLRow row,
                            bool is_from_expiration,
                            syncer::MetadataChangeList* metadata_change_list);
 
-  // Deletes metadata for an expired URL |row| but does not send up the deletion
+  // Deletes metadata for an expired URL `row` but does not send up the deletion
   // to the server (each client expires them independently). It is an no-op when
   // called on an url with already expired metadata.
   void ExpireMetadataForURL(const URLRow& row);
@@ -201,21 +201,21 @@
   // function compensates for the fact that the history DB has rather poor data
   // integrity (duplicate visits, visit timestamps that don't match the
   // last_visit timestamp, huge data sets that exhaust memory when fetched,
-  // expired visits that are not deleted by |ExpireHistoryBackend|, etc) by
-  // modifying the passed |url| object and |visits| vector. The order of
-  // |visits| will be from the oldest to the newest order.
+  // expired visits that are not deleted by `ExpireHistoryBackend`, etc) by
+  // modifying the passed `url` object and `visits` vector. The order of
+  // `visits` will be from the oldest to the newest order.
   // Returns false in two cases.
   // 1. we could not fetch the visits for the passed URL, DB error.
   // 2. No visits for the passed url, or all the visits are expired.
   bool FixupURLAndGetVisits(URLRow* url, VisitVector* visits);
 
-  // Create an EntityData by URL |row| and its visits |visits|.
+  // Create an EntityData by URL `row` and its visits `visits`.
   std::unique_ptr<syncer::EntityData> CreateEntityData(
       const URLRow& row,
       const VisitVector& visits);
 
   // Get all the typed urls and visits from the history db, after filtering
-  // them, put them into |url_to_visit| and |url_to_urlrow|.
+  // them, put them into `url_to_visit` and `url_to_urlrow`.
   // Return false if cannot get urls from HistoryBackend.
   bool GetValidURLsAndVisits(URLVisitVectorMap* url_to_visit,
                              TypedURLMap* url_to_urlrow);
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
index babb09f..7f8c4dd 100644
--- a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
+++ b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
@@ -143,7 +143,7 @@
 }
 
 // Create a new row object and the typed visit çorresponding with the time at
-// |last_visit| in the |visits| vector.
+// `last_visit` in the `visits` vector.
 URLRow MakeTypedUrlRow(const std::string& url,
                        const std::string& title,
                        int typed_count,
@@ -161,11 +161,11 @@
   history_url.set_last_visit(last_visit_time);
 
   if (typed_count > 0) {
-    // Add a typed visit for time |last_visit_time|.
+    // Add a typed visit for time `last_visit_time`.
     visits->push_back(VisitRow(history_url.id(), last_visit_time, 0,
                                ui::PAGE_TRANSITION_TYPED, 0, true, false));
   } else {
-    // Add a non-typed visit for time |last_visit_time|.
+    // Add a non-typed visit for time `last_visit_time`.
     visits->push_back(VisitRow(history_url.id(), last_visit_time, 0,
                                ui::PAGE_TRANSITION_RELOAD, 0, false, false));
   }
@@ -197,7 +197,7 @@
 
   visits->push_back(VisitRow(history_url.id(), typed_visit_time, 0,
                              ui::PAGE_TRANSITION_TYPED, 0, true, false));
-  // Add a non-typed visit for time |last_visit|.
+  // Add a non-typed visit for time `last_visit`.
   visits->push_back(VisitRow(history_url.id(), reload_visit_time, 0,
                              ui::PAGE_TRANSITION_RELOAD, 0, false, false));
   return history_url;
@@ -323,7 +323,7 @@
     fake_history_backend_->Closing();
   }
 
-  // Starts sync for |typed_url_sync_bridge_| with |initial_data| as the
+  // Starts sync for `typed_url_sync_bridge_` with `initial_data` as the
   // initial sync data.
   void StartSyncing(const std::vector<TypedUrlSpecifics>& specifics) {
     ON_CALL(mock_processor_, IsTrackingMetadata()).WillByDefault(Return(true));
@@ -415,7 +415,7 @@
 
   void RemoveObserver() { bridge()->history_backend_observation_.Reset(); }
 
-  // Fills |specifics| with the sync data for |url| and |visits|.
+  // Fills `specifics` with the sync data for `url` and `visits`.
   static bool WriteToTypedUrlSpecifics(const URLRow& url,
                                        const VisitVector& visits,
                                        TypedUrlSpecifics* specifics) {
@@ -1150,7 +1150,7 @@
   URLRow url_row = url_rows.front();
   VisitVector visits;
 
-  // Add |kMaxTypedUrlVisits| + 10 visits to the url. The 10 oldest
+  // Add `kMaxTypedUrlVisits` + 10 visits to the url. The 10 oldest
   // non-typed visits are expected to be skipped.
   int i = 1;
   for (; i <= kMaxTypedUrlVisits - 20; ++i)
diff --git a/components/history/core/browser/sync/typed_url_sync_metadata_database.cc b/components/history/core/browser/sync/typed_url_sync_metadata_database.cc
index 1f76bce86..241e3d0 100644
--- a/components/history/core/browser/sync/typed_url_sync_metadata_database.cc
+++ b/components/history/core/browser/sync/typed_url_sync_metadata_database.cc
@@ -131,15 +131,15 @@
       "SELECT storage_key FROM typed_url_sync_metadata ORDER BY storage_key"));
   while (sorted_metadata_rowids.Step()) {
     URLID metadata_rowid = sorted_metadata_rowids.ColumnInt64(0);
-    // Both collections are sorted, we check whether |metadata_rowid| is valid
+    // Both collections are sorted, we check whether `metadata_rowid` is valid
     // by iterating both at the same time.
 
-    // First, skip all valid IDs that are omitted in |sorted_metadata_rowids|.
+    // First, skip all valid IDs that are omitted in `sorted_metadata_rowids`.
     while (valid_rowids_iter != sorted_valid_rowids.end() &&
            *valid_rowids_iter < metadata_rowid) {
       valid_rowids_iter++;
     }
-    // Now, is |metadata_rowid| invalid?
+    // Now, is `metadata_rowid` invalid?
     if (valid_rowids_iter == sorted_valid_rowids.end() ||
         *valid_rowids_iter != metadata_rowid) {
       invalid_metadata_rowids.push_back(metadata_rowid);
diff --git a/components/history/core/browser/sync/typed_url_sync_metadata_database.h b/components/history/core/browser/sync/typed_url_sync_metadata_database.h
index e49c9c5..b3d10bdc 100644
--- a/components/history/core/browser/sync/typed_url_sync_metadata_database.h
+++ b/components/history/core/browser/sync/typed_url_sync_metadata_database.h
@@ -32,7 +32,7 @@
   TypedURLSyncMetadataDatabase();
   ~TypedURLSyncMetadataDatabase() override;
 
-  // Read all the stored metadata for typed URL and fill |metadata_batch|
+  // Read all the stored metadata for typed URL and fill `metadata_batch`
   // with it.
   bool GetAllSyncMetadata(syncer::MetadataBatch* metadata_batch);
 
@@ -63,7 +63,7 @@
   bool InitSyncTable();
 
   // Cleans up orphaned metadata for typed URLs, i.e. deletes all metadata
-  // entries for rowids not present in |sorted_valid_rowids| (which must be
+  // entries for rowids not present in `sorted_valid_rowids` (which must be
   // sorted in ascending order). Returns true if the clean up finishes without
   // any DB error.
   bool CleanTypedURLOrphanedMetadataForMigrationToVersion40(
@@ -71,10 +71,10 @@
 
  private:
   // Read all sync_pb::EntityMetadata for typed URL and fill
-  // |metadata_records| with it.
+  // `metadata_records` with it.
   bool GetAllSyncEntityMetadata(syncer::MetadataBatch* metadata_batch);
 
-  // Read sync_pb::ModelTypeState for typed URL and fill |state| with it.
+  // Read sync_pb::ModelTypeState for typed URL and fill `state` with it.
   bool GetModelTypeState(sync_pb::ModelTypeState* state);
 
   DISALLOW_COPY_AND_ASSIGN(TypedURLSyncMetadataDatabase);
diff --git a/components/history/core/browser/top_sites.h b/components/history/core/browser/top_sites.h
index 481728b..58661166 100644
--- a/components/history/core/browser/top_sites.h
+++ b/components/history/core/browser/top_sites.h
@@ -86,7 +86,7 @@
   // Returns the set of prepopulated pages.
   virtual PrepopulatedPageList GetPrepopulatedPages() = 0;
 
-  // Called when user has navigated to |url|.
+  // Called when user has navigated to `url`.
   virtual void OnNavigationCommitted(const GURL& url) = 0;
 
   // Add Observer to the list.
diff --git a/components/history/core/browser/top_sites_database.cc b/components/history/core/browser/top_sites_database.cc
index 3da74a9..cc2d038d 100644
--- a/components/history/core/browser/top_sites_database.cc
+++ b/components/history/core/browser/top_sites_database.cc
@@ -160,7 +160,7 @@
   sql::Statement update_statement(db->GetUniqueStatement(
       base::StringPrintf(kAdjustRankSql, kTableName).c_str()));
 
-  // Update any rows where |next_rank| doesn't match |url_rank|.
+  // Update any rows where `next_rank` doesn't match `url_rank`.
   int next_rank = 0;
   bool adjusted = false;
   while (select_statement.Step()) {
@@ -246,7 +246,7 @@
     // Prevent reentrant calls.
     db->reset_error_callback();
 
-    // After this call, the |db| handle is poisoned so that future calls will
+    // After this call, the `db` handle is poisoned so that future calls will
     // return errors until the handle is re-opened.
     RecoverAndFixup(db, db_path);
 
diff --git a/components/history/core/browser/top_sites_database.h b/components/history/core/browser/top_sites_database.h
index f97d43a..14a720a6 100644
--- a/components/history/core/browser/top_sites_database.h
+++ b/components/history/core/browser/top_sites_database.h
@@ -33,7 +33,7 @@
   // Returns true on success. If false, no other functions should be called.
   bool Init(const base::FilePath& db_name);
 
-  // Updates the database according to the changes recorded in |delta|.
+  // Updates the database according to the changes recorded in `delta`.
   void ApplyDelta(const TopSitesDelta& delta);
 
   // Returns a list of all URLs currently in the table.
@@ -61,7 +61,7 @@
   // was successful.
   bool UpgradeToVersion4();
 
-  // Sets a top site for the URL. |new_rank| is the position of the URL in the
+  // Sets a top site for the URL. `new_rank` is the position of the URL in the
   // list of top sites, zero-based.
   // If the URL is not in the table, adds it. If it is, updates its rank and
   // shifts the ranks of other URLs if necessary. Should be called within an
@@ -75,7 +75,7 @@
   // Returns true if the database query succeeds.
   bool UpdateSite(const MostVisitedURL& url);
 
-  // Returns |url|'s current rank or kRankOfNonExistingURL if not present.
+  // Returns `url`'s current rank or kRankOfNonExistingURL if not present.
   int GetURLRank(const MostVisitedURL& url);
 
   // Sets the rank for a given URL. The URL must be in the database. Should be
diff --git a/components/history/core/browser/top_sites_impl.cc b/components/history/core/browser/top_sites_impl.cc
index 8d27ae60..59c89ab3 100644
--- a/components/history/core/browser/top_sites_impl.cc
+++ b/components/history/core/browser/top_sites_impl.cc
@@ -46,7 +46,7 @@
     task_runner->PostTask(FROM_HERE, base::BindOnce(std::move(callback), urls));
 }
 
-// Checks if the titles stored in |old_list| and |new_list| have changes.
+// Checks if the titles stored in `old_list` and `new_list` have changes.
 bool DoTitlesDiffer(const MostVisitedURLList& old_list,
                     const MostVisitedURLList& new_list) {
   // If the two lists have different sizes, the most visited titles are
@@ -419,7 +419,7 @@
 void TopSitesImpl::OnGotMostVisitedURLs(MostVisitedURLList sites) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  // Set |top_sites_| directly so that SetTopSites() diffs correctly.
+  // Set `top_sites_` directly so that SetTopSites() diffs correctly.
   top_sites_ = sites;
   SetTopSites(std::move(sites), CALL_LOCATION_FROM_ON_GOT_MOST_VISITED_URLS);
 
diff --git a/components/history/core/browser/top_sites_impl.h b/components/history/core/browser/top_sites_impl.h
index 168912b2d..6d65a76 100644
--- a/components/history/core/browser/top_sites_impl.h
+++ b/components/history/core/browser/top_sites_impl.h
@@ -111,11 +111,11 @@
   // Generates the diff of things that happened between "old" and "new."
   //
   // The URLs that are in "new" but not "old" will be have their index from
-  // "new" placed in |added_urls|. The URLs that are in "old" but not "new" will
-  // have their index from "old" placed in |deleted_urls|.
+  // "new" placed in `added_urls`. The URLs that are in "old" but not "new" will
+  // have their index from "old" placed in `deleted_urls`.
   //
   // URLs that appear in both lists but have different indices will have their
-  // index from "new" placed in |moved_urls|.
+  // index from "new" placed in `moved_urls`.
   static void DiffMostVisited(const MostVisitedURLList& old_list,
                               const MostVisitedURLList& new_list,
                               TopSitesDelta* delta);
@@ -123,15 +123,15 @@
   // Adds prepopulated pages to TopSites. Returns true if any pages were added.
   bool AddPrepopulatedPages(MostVisitedURLList* urls) const;
 
-  // Takes |urls|, produces it's copy in |out| after removing blocked urls.
+  // Takes `urls`, produces it's copy in `out` after removing blocked urls.
   // Also ensures we respect the maximum number TopSites URLs.
   MostVisitedURLList ApplyBlockedUrls(const MostVisitedURLList& urls);
 
   // Returns an MD5 hash of the URL. Hashing is required for blocking urls.
   static std::string GetURLHash(const GURL& url);
 
-  // Updates URLs in |cache_| and the db (in the background). The URLs in
-  // |new_top_sites| replace those in |cache_|. All mutations to cache_ *must*
+  // Updates URLs in `cache_` and the db (in the background). The URLs in
+  // `new_top_sites` replace those in `cache_`. All mutations to cache_ *must*
   // go through this. Should be called from the UI thread.
   void SetTopSites(MostVisitedURLList new_top_sites,
                    const CallLocation location);
@@ -167,15 +167,15 @@
 
   scoped_refptr<TopSitesBackend> backend_;
 
-  // Lock used to access |thread_safe_cache_|.
+  // Lock used to access `thread_safe_cache_`.
   mutable base::Lock lock_;
 
   // The top sites data.
   MostVisitedURLList top_sites_;
 
   // Copy of the top sites data that may be accessed on any thread (assuming
-  // you hold |lock_|). The data in |thread_safe_cache_| has blocked urls
-  // applied (|top_sites_| does not).
+  // you hold `lock_`). The data in `thread_safe_cache_` has blocked urls
+  // applied (`top_sites_` does not).
   MostVisitedURLList thread_safe_cache_ GUARDED_BY(lock_);
 
   // Task tracker for history and backend requests.
diff --git a/components/history/core/browser/top_sites_impl_unittest.cc b/components/history/core/browser/top_sites_impl_unittest.cc
index 6fb350a..fe86326 100644
--- a/components/history/core/browser/top_sites_impl_unittest.cc
+++ b/components/history/core/browser/top_sites_impl_unittest.cc
@@ -47,7 +47,7 @@
 const char kPrepopulatedPageURL[] =
     "http://www.google.com/int/chrome/welcome.html";
 
-// Returns whether |url| can be added to history.
+// Returns whether `url` can be added to history.
 bool MockCanAddURLToHistory(const GURL& url) {
   return url.is_valid() && !url.SchemeIs(kApplicationScheme);
 }
@@ -59,7 +59,7 @@
  public:
   TopSitesQuerier() : number_of_callbacks_(0), waiting_(false) {}
 
-  // Queries top sites. If |wait| is true a nested run loop is run until the
+  // Queries top sites. If `wait` is true a nested run loop is run until the
   // callback is notified.
   void QueryTopSites(TopSitesImpl* top_sites, bool wait) {
     int start_number_of_callbacks = number_of_callbacks_;
@@ -149,7 +149,7 @@
   }
 
   // Returns true if the TopSitesQuerier contains the prepopulate data starting
-  // at |start_index|.
+  // at `start_index`.
   void ContainsPrepopulatePages(const TopSitesQuerier& querier,
                                 size_t start_index) {
     PrepopulatedPageList prepopulate_pages = GetPrepopulatedPages();
@@ -308,7 +308,7 @@
   SetTopSites(list_1);
   EXPECT_FALSE(observer.is_notified());
 
-  // Change |url_2|'s title to |title_1| in list_2. The two lists are different
+  // Change `url_2`'s title to `title_1` in list_2. The two lists are different
   // in titles now. TopSites should notify its observers.
   list_2.pop_back();
   list_2.emplace_back(url_2, title_1);
diff --git a/components/history/core/browser/url_database.cc b/components/history/core/browser/url_database.cc
index 9987f00..98d056b 100644
--- a/components/history/core/browser/url_database.cc
+++ b/components/history/core/browser/url_database.cc
@@ -378,7 +378,7 @@
                                           int min_typed,
                                           bool allow_base,
                                           URLRow* info) {
-  // Select URLs that start with |base| and are prefixes of |url|.  All parts
+  // Select URLs that start with `base` and are prefixes of `url`.  All parts
   // of this query except the substr() call can be done using the index.  We
   // could do this query with a couple of LIKE or GLOB statements as well, but
   // those wouldn't use the index, and would run into problems with "wildcard"
@@ -732,7 +732,7 @@
   sql.append(name);
   sql.append(
       "("
-      // The id uses AUTOINCREMENT is for sync propose. Sync uses this |id| as
+      // The id uses AUTOINCREMENT is for sync propose. Sync uses this `id` as
       // an unique key to identify the URLs. If here did not use AUTOINCREMENT,
       // and Sync was not working somehow, a ROWID could be deleted and re-used
       // during this period. Once Sync come back, Sync would use ROWIDs and
diff --git a/components/history/core/browser/url_database.h b/components/history/core/browser/url_database.h
index a258c829..34f6a4f 100644
--- a/components/history/core/browser/url_database.h
+++ b/components/history/core/browser/url_database.h
@@ -72,7 +72,7 @@
   bool UpdateURLRow(URLID url_id, const URLRow& info);
 
   // Adds a line to the URL database with the given information and returns the
-  // newly generated ID for the row (the |id| in |info| is ignored). A row with
+  // newly generated ID for the row (the `id` in `info` is ignored). A row with
   // the given URL must not exist. Returns 0 on error.
   //
   // This does NOT add a row to the full text search database. Use
@@ -82,8 +82,8 @@
   }
 
   // Either adds a new row to the URL table with the given information (with the
-  // the |id| as specified in |info|), or updates the pre-existing row with this
-  // |id| if there is one already. This is also known as an "upsert" or "merge"
+  // the `id` as specified in `info`), or updates the pre-existing row with this
+  // `id` if there is one already. This is also known as an "upsert" or "merge"
   // operation. Returns true on success.
   bool InsertOrUpdateURLRowByID(const URLRow& info);
 
@@ -154,7 +154,7 @@
 
   // Fills the given array with URLs matching the given prefix.  They will be
   // sorted by typed count, then by visit count, then by visit date (most recent
-  // first) up to the given maximum number.  If |typed_only| is true, only urls
+  // first) up to the given maximum number.  If `typed_only` is true, only urls
   // that have been typed once are returned.  For caller convenience, returns
   // whether any results were found.
   bool AutocompleteForPrefix(const std::string& prefix,
@@ -163,16 +163,16 @@
                              URLRows* results);
 
   // Returns true if the database holds some past typed navigation to a URL on
-  // the provided hostname. If the return value is true and |scheme| is not
-  // nullptr, |scheme| holds the scheme of one of the corresponding entries in
+  // the provided hostname. If the return value is true and `scheme` is not
+  // nullptr, `scheme` holds the scheme of one of the corresponding entries in
   // the database.
   bool IsTypedHost(const std::string& host, std::string* scheme);
 
-  // Tries to find the shortest URL beginning with |base| that strictly
-  // prefixes |url|, and has minimum visit_ and typed_counts as specified.
-  // If found, fills in |info| and returns true; otherwise returns false,
-  // leaving |info| unchanged.
-  // We allow matches of exactly |base| iff |allow_base| is true.
+  // Tries to find the shortest URL beginning with `base` that strictly
+  // prefixes `url`, and has minimum visit_ and typed_counts as specified.
+  // If found, fills in `info` and returns true; otherwise returns false,
+  // leaving `info` unchanged.
+  // We allow matches of exactly `base` iff `allow_base` is true.
   bool FindShortestURLFromBase(const std::string& base,
                                const std::string& url,
                                int min_visits,
@@ -183,11 +183,11 @@
   // History search ------------------------------------------------------------
 
   // Performs a brute force search over the database to find any URLs or titles
-  // which match the |query| string, using the default text matching algorithm.
-  // Returns any matches in |results|.
+  // which match the `query` string, using the default text matching algorithm.
+  // Returns any matches in `results`.
   bool GetTextMatches(const std::u16string& query, URLRows* results);
 
-  // Same as GetTextMatches, using |algorithm| as the text matching
+  // Same as GetTextMatches, using `algorithm` as the text matching
   // algorithm.
   bool GetTextMatchesWithAlgorithm(const std::u16string& query,
                                    query_parser::MatchingAlgorithm algorithm,
@@ -201,7 +201,7 @@
                                    const std::u16string& term);
 
   // Looks up a keyword search term given a url id. Returns all the search terms
-  // in |rows|. Returns true on success.
+  // in `rows`. Returns true on success.
   bool GetKeywordSearchTermRow(URLID url_id, KeywordSearchTermRow* row);
 
   // Looks up all keyword search terms given a term, Fills the rows with data.
@@ -221,22 +221,22 @@
       int max_count,
       std::vector<KeywordSearchTermVisit>* matches);
 
-  // Returns the most recent (i.e., no older than |age_threshold|) normalized
+  // Returns the most recent (i.e., no older than `age_threshold`) normalized
   // search terms (i.e., search terms in lower case with whitespaces collapsed)
   // for the specified keyword.
   std::vector<NormalizedKeywordSearchTermVisit>
   GetMostRecentNormalizedKeywordSearchTerms(KeywordID keyword_id,
                                             base::Time age_threshold);
 
-  // Deletes all searches matching |term|.
+  // Deletes all searches matching `term`.
   bool DeleteKeywordSearchTerm(const std::u16string& term);
 
-  // Deletes any search corresponding to |normalized_term|.
+  // Deletes any search corresponding to `normalized_term`.
   bool DeleteKeywordSearchTermForNormalizedTerm(
       KeywordID keyword_id,
       const std::u16string& normalized_term);
 
-  // Deletes any search corresponding to |url_id|.
+  // Deletes any search corresponding to `url_id`.
   bool DeleteKeywordSearchTermForURL(URLID url_id);
 
   // This is a cover for VisitDatabase::GetVisitsForURL(). It's here to avoid
@@ -289,7 +289,7 @@
 
   // Inserts the given URL row into the URLs table, using the regular table
   // if is_temporary is false, or the temporary URL table if is temporary is
-  // true. The current |id| of |info| will be ignored in both cases and a new ID
+  // true. The current `id` of `info` will be ignored in both cases and a new ID
   // will be generated, which will also constitute the return value, except in
   // case of an error, when the return value is 0. The temporary table may only
   // be used in between CreateTemporaryURLTable() and CommitTemporaryURLTable().
@@ -350,11 +350,11 @@
 // Returns the date threshold for considering an history item as significant.
 base::Time AutocompleteAgeThreshold();
 
-// Return true if |row| qualifies as an autocomplete candidate. If |threshold|
+// Return true if `row` qualifies as an autocomplete candidate. If `threshold`
 // is_null() then this function determines a new time threshold each time it is
 // called. Since getting system time can be costly (such as for cases where
 // this function will be called in a loop over many history items), you can
-// provide a non-null |threshold| by simply initializing |threshold| with
+// provide a non-null `threshold` by simply initializing `threshold` with
 // AutocompleteAgeThreshold() (or any other desired time in the past).
 bool RowQualifiesAsSignificant(const URLRow& row, const base::Time& threshold);
 
diff --git a/components/history/core/browser/url_database_unittest.cc b/components/history/core/browser/url_database_unittest.cc
index 4a6dff7..d1db494 100644
--- a/components/history/core/browser/url_database_unittest.cc
+++ b/components/history/core/browser/url_database_unittest.cc
@@ -343,7 +343,7 @@
 
   ASSERT_TRUE(SetKeywordSearchTermsForURL(url_id3, keyword_id, keyword2));
 
-  // We should get 2 rows for |keyword|.
+  // We should get 2 rows for `keyword`.
   std::vector<KeywordSearchTermRow> rows;
   ASSERT_TRUE(GetKeywordSearchTermRows(keyword, &rows));
   ASSERT_EQ(2u, rows.size());
@@ -358,7 +358,7 @@
     EXPECT_EQ(url_id2, rows[0].url_id);
   }
 
-  // We should get 1 row for |keyword2|.
+  // We should get 1 row for `keyword2`.
   rows.clear();
   ASSERT_TRUE(GetKeywordSearchTermRows(keyword2, &rows));
   ASSERT_EQ(1u, rows.size());
diff --git a/components/history/core/browser/url_utils.cc b/components/history/core/browser/url_utils.cc
index 307c894..d38f49e 100644
--- a/components/history/core/browser/url_utils.cc
+++ b/components/history/core/browser/url_utils.cc
@@ -41,7 +41,7 @@
     ++ch2;
   }
   int pri_diff = GetURLCharPriority(*ch1) - GetURLCharPriority(*ch2);
-  // We want false to be returned if |pri_diff| > 0.
+  // We want false to be returned if `pri_diff` > 0.
   return (pri_diff != 0) ? pri_diff < 0 : *ch1 < *ch2;
 }
 
@@ -55,18 +55,18 @@
     return false;
   std::pair<std::string::const_iterator, std::string::const_iterator>
       first_diff = std::mismatch(p1.begin(), p1.end(), p2.begin());
-  // Necessary condition: |p1| is a string prefix of |p2|.
+  // Necessary condition: `p1` is a string prefix of `p2`.
   if (first_diff.first != p1.end())
-    return false;  // E.g.: (|p1| = "/test", |p2| = "/exam") => false.
+    return false;  // E.g.: (`p1` = "/test", `p2` = "/exam") => false.
 
-  // |p1| is string prefix.
+  // `p1` is string prefix.
   if (first_diff.second == p2.end())  // Is exact match?
     return true;  // E.g.: ("/test", "/test") => true.
-  // |p1| is strict string prefix, check full match of last path component.
+  // `p1` is strict string prefix, check full match of last path component.
   if (!p1.empty() && *p1.rbegin() == '/')  // Ends in '/'?
     return true;  // E.g.: ("/test/", "/test/stuff") => true.
 
-  // Finally, |p1| does not end in "/": check first extra character in |p2|.
+  // Finally, `p1` does not end in "/": check first extra character in `p2`.
   // E.g.: ("/test", "/test/stuff") => true; ("/test", "/testing") => false.
   return *(first_diff.second) == '/';
 }
diff --git a/components/history/core/browser/url_utils.h b/components/history/core/browser/url_utils.h
index ba4f4aa5c..4721b65 100644
--- a/components/history/core/browser/url_utils.h
+++ b/components/history/core/browser/url_utils.h
@@ -15,30 +15,30 @@
 // that represent valid URLs, so that if the pre-path (scheme, host, and port)
 // parts are equal, then the path parts are compared by treating path components
 // (delimited by "/") as separate tokens that form units of comparison.
-// For example, let us compare |s1| and |s2|, with
-//   |s1| = "http://www.google.com:80/base/test/ab/cd?query/stuff"
-//   |s2| = "http://www.google.com:80/base/test-case/yz#ref/stuff"
+// For example, let us compare `s1` and `s2`, with
+//   `s1` = "http://www.google.com:80/base/test/ab/cd?query/stuff"
+//   `s2` = "http://www.google.com:80/base/test-case/yz#ref/stuff"
 // The pre-path parts "http://www.google.com:80/" match. We treat the paths as
-//   |s1| => ["base", "test", "ab", "cd"]
-//   |s2| => ["base", "test-case", "yz"]
+//   `s1` => ["base", "test", "ab", "cd"]
+//   `s2` => ["base", "test-case", "yz"]
 // Components 1 "base" are identical. Components 2 yield "test" < "test-case",
-// so we consider |s1| < |s2|, and return true. Note that naive string
-// comparison would yield the opposite (|s1| > |s2|), since '/' > '-' in ASCII.
+// so we consider `s1` < `s2`, and return true. Note that naive string
+// comparison would yield the opposite (`s1` > `s2`), since '/' > '-' in ASCII.
 // Note that path can be terminated by "?query" or "#ref". The post-path parts
 // are compared in an arbitrary (but consistent) way.
 bool CanonicalURLStringCompare(const std::string& s1, const std::string& s2);
 
-// Returns whether |url1| and |url2| have the same scheme, host, and port.
+// Returns whether `url1` and `url2` have the same scheme, host, and port.
 bool HaveSameSchemeHostAndPort(const GURL&url1, const GURL& url2);
 
-// Treats |path1| and |path2| as lists of path components (e.g., ["a", "bb"]
-// for "/a/bb"). Returns whether |path1|'s list is a prefix of |path2|'s list.
+// Treats `path1` and `path2` as lists of path components (e.g., ["a", "bb"]
+// for "/a/bb"). Returns whether `path1`'s list is a prefix of `path2`'s list.
 // This is used to define "URL prefix". Note that "test" does not count as a
 // prefix of "testing", even though "test" is a (string) prefix of "testing".
 bool IsPathPrefix(const std::string& p1, const std::string& p2);
 
-// Converts |url| from HTTP to HTTPS, and vice versa, then returns the result.
-// If |url| is neither HTTP nor HTTPS, returns an empty URL.
+// Converts `url` from HTTP to HTTPS, and vice versa, then returns the result.
+// If `url` is neither HTTP nor HTTPS, returns an empty URL.
 GURL ToggleHTTPAndHTTPS(const GURL& url);
 
 // Returns the host of the given URL, canonicalized as it would be for
diff --git a/components/history/core/browser/visit_database.cc b/components/history/core/browser/visit_database.cc
index 6cf62226..e7c04dc0 100644
--- a/components/history/core/browser/visit_database.cc
+++ b/components/history/core/browser/visit_database.cc
@@ -172,7 +172,7 @@
                                                VisitVector* visits) {
   std::set<URLID> found_urls;
 
-  // Keeps track of the day that |found_urls| is holding the URLs for, in order
+  // Keeps track of the day that `found_urls` is holding the URLs for, in order
   // to handle removing per-day duplicates.
   base::Time found_urls_midnight;
 
diff --git a/components/history/core/browser/visit_database.h b/components/history/core/browser/visit_database.h
index 352adaa..42485f4 100644
--- a/components/history/core/browser/visit_database.h
+++ b/components/history/core/browser/visit_database.h
@@ -62,7 +62,7 @@
   // and match the set of options passed, sorted in ascending order of date.
   //
   // Returns true if there are more results available, i.e. if the number of
-  // results was restricted by |options.max_count|.
+  // results was restricted by `options.max_count`.
   bool GetVisibleVisitsForURL(URLID url_id,
                               const QueryOptions& options,
                               VisitVector* visits);
@@ -70,8 +70,8 @@
   // Fills the vector with all visits with times in the given list.
   //
   // The results will be in no particular order.  Also, no duplicate
-  // detection is performed, so if |times| has duplicate times,
-  // |visits| may have duplicate visits.
+  // detection is performed, so if `times` has duplicate times,
+  // `visits` may have duplicate visits.
   bool GetVisitsForTimes(const std::vector<base::Time>& times,
                          VisitVector* visits);
 
@@ -79,7 +79,7 @@
   // time can be is_null(), in which case the times in that direction are
   // unbounded.
   //
-  // If |max_results| is non-zero, up to that many results will be returned. If
+  // If `max_results` is non-zero, up to that many results will be returned. If
   // there are more results than that, the oldest ones will be returned. (This
   // is used for history expiration.)
   //
@@ -93,7 +93,7 @@
   // to the given vector. Either time can be is_null(), in which case the times
   // in that direction are unbounded.
   //
-  // If |max_results| is non-zero, up to that many results will be returned. If
+  // If `max_results` is non-zero, up to that many results will be returned. If
   // there are more results than that, the oldest ones will be returned. (This
   // is used for history expiration.)
   //
@@ -114,15 +114,15 @@
   // begin time is inclusive, the end time is exclusive. Either time can be
   // is_null(), in which case the times in that direction are unbounded.
   //
-  // Up to |max_count| visits will be returned. If there are more visits than
-  // that, the most recent |max_count| will be returned. If 0, all visits in the
+  // Up to `max_count` visits will be returned. If there are more visits than
+  // that, the most recent `max_count` will be returned. If 0, all visits in the
   // range will be computed.
   //
   // Only one visit for each URL will be returned, and it will be the most
   // recent one in the time range.
   //
   // Returns true if there are more results available, i.e. if the number of
-  // results was restricted by |options.max_count|.
+  // results was restricted by `options.max_count`.
   bool GetVisibleVisitsInRange(const QueryOptions& options,
                                VisitVector* visits);
 
@@ -133,16 +133,16 @@
   // the found visit. When no visit is found, the row will be unchanged.
   VisitID GetMostRecentVisitForURL(URLID url_id, VisitRow* visit_row);
 
-  // Returns the |max_results| most recent visit sessions for |url_id|.
+  // Returns the `max_results` most recent visit sessions for `url_id`.
   //
   // Returns false if there's a failure preparing the statement. True
-  // otherwise. (No results are indicated with an empty |visits|
+  // otherwise. (No results are indicated with an empty `visits`
   // vector.)
   bool GetMostRecentVisitsForURL(URLID url_id,
                                  int max_results,
                                  VisitVector* visits);
 
-  // Finds a redirect coming from the given |from_visit|. If a redirect is
+  // Finds a redirect coming from the given `from_visit`. If a redirect is
   // found, it fills the visit ID and URL into the out variables and returns
   // true. If there is no redirect from the given visit, returns false.
   //
@@ -157,13 +157,13 @@
                             GURL* to_url);
 
   // Similar to the above function except finds a redirect going to a given
-  // |to_visit|.
+  // `to_visit`.
   bool GetRedirectToVisit(VisitID to_visit,
                           VisitID* from_visit,
                           GURL* from_url);
 
   // Gets the number of user-visible visits to all URLs on the same
-  // scheme/host/port as |url|, as well as the time of the earliest visit.
+  // scheme/host/port as `url`, as well as the time of the earliest visit.
   // "User-visible" is defined as in GetVisibleVisitsInRange() above, i.e.
   // excluding redirects and subframes.
   // This function is only valid for HTTP and HTTPS URLs; all other schemes
@@ -173,7 +173,7 @@
                                   base::Time* first_visit);
 
   // Gets the number of URLs as seen in chrome://history within the time
-  // range [|begin_time|, |end_time|). "User-visible" is defined as in
+  // range [`begin_time`, `end_time`). "User-visible" is defined as in
   // GetVisibleVisitsInRange() above, i.e. excluding redirects and subframes.
   // Each URL is counted only once per day. For determination of the date,
   // timestamps are converted to dates using local time. Returns false if
@@ -183,8 +183,8 @@
                        int* count);
 
   // Gets the last time any webpage on the given host was visited within the
-  // time range [|begin_time|, |end_time|). If the given host has not been
-  // visited in the given time range, this will return true and |last_visit|
+  // time range [`begin_time`, `end_time`). If the given host has not been
+  // visited in the given time range, this will return true and `last_visit`
   // will be set to base::Time(). False will be returned if the host is not a
   // valid HTTP or HTTPS url or for other database errors.
   bool GetLastVisitToHost(const GURL& host,
@@ -192,15 +192,15 @@
                           base::Time end_time,
                           base::Time* last_visit);
 
-  // Gets the last time |url| was visited before |end_time|. If the given |url|
-  // has no past visits, this will return true and |last_visit| will be set to
-  // base::Time(). False will be returned if |url| is not a valid HTTP or HTTPS
+  // Gets the last time `url` was visited before `end_time`. If the given `url`
+  // has no past visits, this will return true and `last_visit` will be set to
+  // base::Time(). False will be returned if `url` is not a valid HTTP or HTTPS
   // url or for other database errors.
   bool GetLastVisitToURL(const GURL& url,
                          base::Time end_time,
                          base::Time* last_visit);
 
-  // Gets counts for total visits and days visited for pages matching |host|'s
+  // Gets counts for total visits and days visited for pages matching `host`'s
   // scheme, port, and host. Counts only user-visible visits.
   DailyVisitsResult GetDailyVisitsToHost(const GURL& host,
                                          base::Time begin_time,
@@ -236,7 +236,7 @@
   static bool FillVisitVector(sql::Statement& statement, VisitVector* visits);
 
   // Convenience to fill a VisitVector while respecting the set of options.
-  // |statement| should order the query descending by visit_time to ensure
+  // `statement` should order the query descending by visit_time to ensure
   // correct duplicate management behavior. Assumes that statement.step()
   // hasn't happened yet.
   static bool FillVisitVectorWithOptions(sql::Statement& statement,
diff --git a/components/history/core/browser/visit_database_unittest.cc b/components/history/core/browser/visit_database_unittest.cc
index fe1bc14f..4fb0925 100644
--- a/components/history/core/browser/visit_database_unittest.cc
+++ b/components/history/core/browser/visit_database_unittest.cc
@@ -554,19 +554,19 @@
   EXPECT_TRUE(GetHistoryCount(Time(), Time::Max(), &result));
   EXPECT_EQ(5, result);
 
-  // Narrowing the range to exclude |first_day_1| will still return 5,
-  // because |first_day_1| is not unique.
+  // Narrowing the range to exclude `first_day_1` will still return 5,
+  // because `first_day_1` is not unique.
   EXPECT_TRUE(
       GetHistoryCount(two_days_ago + TimeDelta::FromHours(2), today, &result));
   EXPECT_EQ(5, result);
 
-  // Narrowing the range to exclude |second_day_4| will return 4,
-  // because |second_day_4| is unique.
+  // Narrowing the range to exclude `second_day_4` will return 4,
+  // because `second_day_4` is unique.
   EXPECT_TRUE(GetHistoryCount(two_days_ago, yesterday + TimeDelta::FromHours(3),
                               &result));
   EXPECT_EQ(4, result);
 
-  // Narrowing the range to exclude both |first_day_1| and |second_day_4| will
+  // Narrowing the range to exclude both `first_day_1` and `second_day_4` will
   // still return 4.
   EXPECT_TRUE(GetHistoryCount(two_days_ago + TimeDelta::FromHours(2),
                               yesterday + TimeDelta::FromHours(3), &result));
@@ -582,7 +582,7 @@
   // TimeDelta::FromDays(1) to move one day, as this simply removes 24 hours and
   // thus does not work correctly with DST shifts. Instead, we'll go back
   // 1 second (i.e. somewhere in the middle of the previous day), and use
-  // |LocalMidnight()| to round down to the beginning of the day in the local
+  // `LocalMidnight()` to round down to the beginning of the day in the local
   // time, taking timezones and DST into account. This is necessary to achieve
   // the same equivalence class on days as the DATE(..., 'localtime') function
   // in SQL.
@@ -824,7 +824,7 @@
                                   base::Time::FromTimeT(1000), &last_visit));
     EXPECT_EQ(last_visit, base::Time::FromTimeT(200));
   }
-  // Test getting the older visit using an |end_time| of 150.
+  // Test getting the older visit using an `end_time` of 150.
   {
     base::Time last_visit;
     EXPECT_TRUE(GetLastVisitToURL(GURL("https://foo.com/bar/baz"),
diff --git a/components/history/core/browser/visitsegment_database.cc b/components/history/core/browser/visitsegment_database.cc
index e1b6b6011..9dc5fc2 100644
--- a/components/history/core/browser/visitsegment_database.cc
+++ b/components/history/core/browser/visitsegment_database.cc
@@ -329,7 +329,7 @@
 
     SegmentID to_segment_id = GetSegmentNamed(new_name);
     if (to_segment_id) {
-      // |new_name| is already in use, so merge.
+      // `new_name` is already in use, so merge.
       success = success && MergeSegments(/*from_segment_id=*/id, to_segment_id);
     } else {
       // Trivial rename of the segment.
@@ -355,8 +355,8 @@
     return false;
 
   // For each time slot where there are visits for the absorbed segment
-  // (|from_segment_id|), add them to the absorbing/staying segment
-  // (|to_segment_id|).
+  // (`from_segment_id`), add them to the absorbing/staying segment
+  // (`to_segment_id`).
   sql::Statement select(
       GetDB().GetCachedStatement(SQL_FROM_HERE,
                                  "SELECT time_slot, visit_count FROM "
diff --git a/components/history/core/browser/visitsegment_database.h b/components/history/core/browser/visitsegment_database.h
index 629f1e1..a3b5aef 100644
--- a/components/history/core/browser/visitsegment_database.h
+++ b/components/history/core/browser/visitsegment_database.h
@@ -35,9 +35,9 @@
   // is no segment with that name.
   SegmentID GetSegmentNamed(const std::string& segment_name);
 
-  // Update the segment identified by |out_segment_id| with the provided URL ID.
+  // Update the segment identified by `out_segment_id` with the provided URL ID.
   // The URL identifies the page that will now represent the segment. If url_id
-  // is non zero, it is assumed to be the row id of |url|.
+  // is non zero, it is assumed to be the row id of `url`.
   bool UpdateSegmentRepresentationURL(SegmentID segment_id,
                                       URLID url_id);
 
@@ -50,9 +50,9 @@
   bool IncreaseSegmentVisitCount(SegmentID segment_id, base::Time ts,
                                  int amount);
 
-  // Computes the segment usage since |from_time|. If |url_filter| is non-null,
+  // Computes the segment usage since `from_time`. If `url_filter` is non-null,
   // then only URLs for which it returns true will be included.
-  // Returns the highest-scored segments up to |max_result_count|.
+  // Returns the highest-scored segments up to `max_result_count`.
   std::vector<std::unique_ptr<PageUsageData>> QuerySegmentUsage(
       base::Time from_time,
       int max_result_count,
@@ -79,16 +79,16 @@
 
   // Runs ComputeSegmentName() to recompute 'name'. If multiple segments have
   // the same name, they are merged by:
-  // 1. Choosing one arbitrary |segment_id| and updating all references.
-  // 2. Merging duplicate |segment_usage| entries (add up visit counts).
+  // 1. Choosing one arbitrary `segment_id` and updating all references.
+  // 2. Merging duplicate `segment_usage` entries (add up visit counts).
   // 3. Deleting old data for the absorbed segment.
   bool MigrateVisitSegmentNames();
 
  private:
-  // Updates the |name| column for a single segment. Returns true on success.
+  // Updates the `name` column for a single segment. Returns true on success.
   bool RenameSegment(SegmentID segment_id, const std::string& new_name);
   // Merges two segments such that data is aggregated, all former references to
-  // |from_segment_id| are updated to |to_segment_id| and |from_segment_id| is
+  // `from_segment_id` are updated to `to_segment_id` and `from_segment_id` is
   // deleted. Returns true on success.
   bool MergeSegments(SegmentID from_segment_id, SegmentID to_segment_id);
 
diff --git a/components/history/core/browser/web_history_service.cc b/components/history/core/browser/web_history_service.cc
index 5f64ac3..8c19fcd 100644
--- a/components/history/core/browser/web_history_service.cc
+++ b/components/history/core/browser/web_history_service.cc
@@ -111,7 +111,7 @@
       UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", false);
       std::move(callback_).Run(this, false);
 
-      // It is valid for the callback to delete |this|, so do not access any
+      // It is valid for the callback to delete `this`, so do not access any
       // members below here.
       return;
     }
@@ -210,7 +210,7 @@
     }
     is_pending_ = false;
     std::move(callback_).Run(this, true);
-    // It is valid for the callback to delete |this|, so do not access any
+    // It is valid for the callback to delete `this`, so do not access any
     // members below here.
   }
 
@@ -283,7 +283,7 @@
 }
 
 // Returns a URL for querying the history server for a query specified by
-// |options|. |version_info|, if not empty, should be a token that was received
+// `options`. `version_info`, if not empty, should be a token that was received
 // from the server in response to a write operation. It is used to help ensure
 // read consistency after a write.
 GURL GetQueryUrl(const std::u16string& text_query,
@@ -292,9 +292,9 @@
   GURL url = GURL(kHistoryQueryHistoryUrl);
   url = net::AppendQueryParameter(url, "titles", "1");
 
-  // Take |begin_time|, |end_time|, and |max_count| from the original query
+  // Take `begin_time`, `end_time`, and `max_count` from the original query
   // options, and convert them to the equivalent URL parameters. Note that
-  // QueryOptions uses exclusive |end_time| while the history.google.com API
+  // QueryOptions uses exclusive `end_time` while the history.google.com API
   // uses it inclusively, so we subtract 1us during conversion.
 
   base::Time end_time =
@@ -325,7 +325,7 @@
 
 // Creates a DictionaryValue to hold the parameters for a deletion.
 // Ownership is passed to the caller.
-// |url| may be empty, indicating a time-range deletion.
+// `url` may be empty, indicating a time-range deletion.
 std::unique_ptr<base::DictionaryValue> CreateDeletion(
     const std::string& min_time,
     const std::string& max_time,
@@ -616,7 +616,7 @@
   }
 
   // If there is no response_value, then for our purposes, the request has
-  // failed, despite receiving a true |success| value. This can happen if
+  // failed, despite receiving a true `success` value. This can happen if
   // the user is offline.
   std::move(callback).Run(success && response_value, enabled_value);
 }
diff --git a/components/history/core/browser/web_history_service.h b/components/history/core/browser/web_history_service.h
index 55a2ee3..f10d26ef 100644
--- a/components/history/core/browser/web_history_service.h
+++ b/components/history/core/browser/web_history_service.h
@@ -104,9 +104,9 @@
   void AddObserver(WebHistoryServiceObserver* observer);
   void RemoveObserver(WebHistoryServiceObserver* observer);
 
-  // Searches synced history for visits matching |text_query|. The timeframe to
-  // search, along with other options, is specified in |options|. If
-  // |text_query| is empty, all visits in the timeframe will be returned.
+  // Searches synced history for visits matching `text_query`. The timeframe to
+  // search, along with other options, is specified in `options`. If
+  // `text_query` is empty, all visits in the timeframe will be returned.
   // This method is the equivalent of HistoryService::QueryHistory.
   // The caller takes ownership of the returned Request. If it is destroyed, the
   // request is cancelled.
@@ -139,7 +139,7 @@
       const net::PartialNetworkTrafficAnnotationTag&
           partial_traffic_annotation);
 
-  // Sets the state of audio history recording to |new_enabled_value|.
+  // Sets the state of audio history recording to `new_enabled_value`.
   virtual void SetAudioHistoryEnabled(
       bool new_enabled_value,
       AudioWebHistoryCallback callback,
@@ -171,44 +171,44 @@
                                      partial_traffic_annotation);
 
   // Extracts a JSON-encoded HTTP response into a DictionaryValue.
-  // If |request|'s HTTP response code indicates failure, or if the response
+  // If `request`'s HTTP response code indicates failure, or if the response
   // body is not JSON, a null pointer is returned.
   static std::unique_ptr<base::DictionaryValue> ReadResponse(Request* request);
 
-  // Called by |request| when a web history query has completed. Unpacks the
-  // response and calls |callback|, which is the original callback that was
+  // Called by `request` when a web history query has completed. Unpacks the
+  // response and calls `callback`, which is the original callback that was
   // passed to QueryHistory().
   static void QueryHistoryCompletionCallback(
       WebHistoryService::QueryWebHistoryCallback callback,
       WebHistoryService::Request* request,
       bool success);
 
-  // Called by |request| when a request to delete history from the server has
-  // completed. Unpacks the response and calls |callback|, which is the original
+  // Called by `request` when a request to delete history from the server has
+  // completed. Unpacks the response and calls `callback`, which is the original
   // callback that was passed to ExpireHistory().
   void ExpireHistoryCompletionCallback(
       WebHistoryService::ExpireWebHistoryCallback callback,
       WebHistoryService::Request* request,
       bool success);
 
-  // Called by |request| when a request to get or set audio history from the
-  // server has completed. Unpacks the response and calls |callback|, which is
+  // Called by `request` when a request to get or set audio history from the
+  // server has completed. Unpacks the response and calls `callback`, which is
   // the original callback that was passed to AudioHistory().
   void AudioHistoryCompletionCallback(
       WebHistoryService::AudioWebHistoryCallback callback,
       WebHistoryService::Request* request,
       bool success);
 
-  // Called by |request| when a web and app activity query has completed.
-  // Unpacks the response and calls |callback|, which is the original callback
+  // Called by `request` when a web and app activity query has completed.
+  // Unpacks the response and calls `callback`, which is the original callback
   // that was passed to QueryWebAndAppActivity().
   void QueryWebAndAppActivityCompletionCallback(
       WebHistoryService::QueryWebAndAppActivityCallback callback,
       WebHistoryService::Request* request,
       bool success);
 
-  // Called by |request| when a query for other forms of browsing history has
-  // completed. Unpacks the response and calls |callback|, which is the original
+  // Called by `request` when a query for other forms of browsing history has
+  // completed. Unpacks the response and calls `callback`, which is the original
   // callback that was passed to QueryOtherFormsOfBrowsingHistory().
   void QueryOtherFormsOfBrowsingHistoryCompletionCallback(
       WebHistoryService::QueryWebAndAppActivityCallback callback,
diff --git a/components/history/core/browser/web_history_service_unittest.cc b/components/history/core/browser/web_history_service_unittest.cc
index d7cae239..1e1caae6 100644
--- a/components/history/core/browser/web_history_service_unittest.cc
+++ b/components/history/core/browser/web_history_service_unittest.cc
@@ -179,7 +179,7 @@
 void TestingWebHistoryService::SetAudioHistoryCallback(
     bool success, bool new_enabled_value) {
   EXPECT_TRUE(success);
-  // |new_enabled_value| should be equal to whatever the audio history value
+  // `new_enabled_value` should be equal to whatever the audio history value
   // was just set to.
   EXPECT_EQ(expected_audio_history_value_, new_enabled_value);
 }
diff --git a/components/history/core/common/thumbnail_score.h b/components/history/core/common/thumbnail_score.h
index 7ab7750..ba62d42 100644
--- a/components/history/core/common/thumbnail_score.h
+++ b/components/history/core/common/thumbnail_score.h
@@ -48,7 +48,7 @@
 
   // Whether the thumbnail was taken with height greater than
   // width or width greater than height and the aspect ratio less than
-  // kTooWideAspectRatio. In cases where we don't have |good_clipping|,
+  // kTooWideAspectRatio. In cases where we don't have `good_clipping`,
   // the thumbnails are either clipped from the horizontal center of the
   // window, or are otherwise weirdly stretched.
   bool good_clipping;
@@ -57,7 +57,7 @@
   // displaying the top of the page. Most pages are more recognizable
   // by their headers then by a set of random text half way down the
   // page; i.e. most MediaWiki sites would be indistinguishable by
-  // thumbnails with |at_top| set to false.
+  // thumbnails with `at_top` set to false.
   bool at_top;
 
   // Whether this thumbnail was taken after load was completed.
@@ -95,7 +95,7 @@
   static const double kThumbnailDegradePerHour;
 
   // If a thumbnail is taken with the aspect ratio greater than or equal to
-  // this value, |good_clipping| is to false.
+  // this value, `good_clipping` is to false.
   static const double kTooWideAspectRatio;
 
   // Checks whether we should consider updating a new thumbnail based on
diff --git a/components/history/core/test/database_test_utils.h b/components/history/core/test/database_test_utils.h
index 72e55d7..b5e1e08 100644
--- a/components/history/core/test/database_test_utils.h
+++ b/components/history/core/test/database_test_utils.h
@@ -13,11 +13,11 @@
 
 namespace history {
 
-// Sets |dir| to the path of the history data directory. Returns true on success
-// or false, in which case |dir| is undefined.
+// Sets `dir` to the path of the history data directory. Returns true on success
+// or false, in which case `dir` is undefined.
 WARN_UNUSED_RESULT bool GetTestDataHistoryDir(base::FilePath* dir);
 
-// Create the test database at |db_path| from the golden file at |ascii_path| in
+// Create the test database at `db_path` from the golden file at `ascii_path` in
 // the "history" subdir of the components test data dir.
 WARN_UNUSED_RESULT bool CreateDatabaseFromSQL(const base::FilePath& db_path,
                                               const char* ascii_path);
diff --git a/components/history/core/test/fake_web_history_service.cc b/components/history/core/test/fake_web_history_service.cc
index 99f9c67c..561098a 100644
--- a/components/history/core/test/fake_web_history_service.cc
+++ b/components/history/core/test/fake_web_history_service.cc
@@ -212,7 +212,7 @@
                                         base::Time end,
                                         size_t count,
                                         bool* more_results_left) {
-  // Make sure that |visits_| is sorted in reverse chronological order before we
+  // Make sure that `visits_` is sorted in reverse chronological order before we
   // return anything. This means that the most recent results are returned
   // first.
   std::sort(visits_.begin(), visits_.end(),
@@ -222,7 +222,7 @@
   *more_results_left = false;
   std::vector<Visit> result;
   for (const Visit& visit : visits_) {
-    // |begin| is inclusive, |end| is exclusive.
+    // `begin` is inclusive, `end` is exclusive.
     if (visit.timestamp >= begin && visit.timestamp < end) {
       // We found another valid result, but cannot return it because we've
       // reached max count.
diff --git a/components/history/core/test/fake_web_history_service.h b/components/history/core/test/fake_web_history_service.h
index b49588a4..d9478f3 100644
--- a/components/history/core/test/fake_web_history_service.h
+++ b/components/history/core/test/fake_web_history_service.h
@@ -18,8 +18,8 @@
 
 // A fake WebHistoryService for testing.
 //
-// Use |AddSyncedVisit| to fill the fake server-side database of synced visits.
-// Use |SetupFakeResponse| to influence whether the requests should succeed
+// Use `AddSyncedVisit` to fill the fake server-side database of synced visits.
+// Use `SetupFakeResponse` to influence whether the requests should succeed
 // or fail, and with which error code.
 //
 // Note: The behavior of this class is only defined for some WebHistoryService
@@ -33,7 +33,7 @@
   ~FakeWebHistoryService() override;
 
   // Sets up the behavior of the fake response returned when calling
-  // |WebHistoryService::QueryHistory|; whether it will succeed, and with
+  // `WebHistoryService::QueryHistory`; whether it will succeed, and with
   // which response code.
   void SetupFakeResponse(bool emulate_success, int emulate_response_code);
 
@@ -63,11 +63,11 @@
     std::string icon_url;
   };
 
-  // Returns up to |count| results from |visits_| between |begin| and |end.
+  // Returns up to `count` results from `visits_` between `begin` and `end`.
   // Results are sorted from most recent to least recent, prioritizing more
-  // recent results when some need to be omitted. |more_results_left| will be
-  // set to true only if there are results from |visits_| that were not included
-  // because of |count| limitations, but were also within time range. Virtual to
+  // recent results when some need to be omitted. `more_results_left` will be
+  // set to true only if there are results from `visits_` that were not included
+  // because of `count` limitations, but were also within time range. Virtual to
   // allow subclasses to modify.
   virtual std::vector<FakeWebHistoryService::Visit> GetVisitsBetween(
       base::Time begin,
diff --git a/components/history/core/test/history_service_test_util.h b/components/history/core/test/history_service_test_util.h
index 971ae4e..d3f94c3 100644
--- a/components/history/core/test/history_service_test_util.h
+++ b/components/history/core/test/history_service_test_util.h
@@ -17,8 +17,8 @@
 namespace history {
 class HistoryService;
 
-// Creates a new HistoryService that stores its data in |history_dir|.  If
-// |create_db| is false, the HistoryService will fail to initialize its
+// Creates a new HistoryService that stores its data in `history_dir`.  If
+// `create_db` is false, the HistoryService will fail to initialize its
 // database; this is useful for testing error conditions.  This method spins the
 // runloop before returning to ensure that any initialization-related tasks are
 // run.
diff --git a/components/history/core/test/history_unittest_base.h b/components/history/core/test/history_unittest_base.h
index b3e0968..26ae0d9 100644
--- a/components/history/core/test/history_unittest_base.h
+++ b/components/history/core/test/history_unittest_base.h
@@ -19,9 +19,9 @@
  public:
   ~HistoryUnitTestBase() override;
 
-  // Executes the sql from the file |sql_path| in the database at |db_path|.
-  // |sql_path| is the SQL script file name with full path.
-  // |db_path| is the db file name with full path.
+  // Executes the sql from the file `sql_path` in the database at `db_path`.
+  // `sql_path` is the SQL script file name with full path.
+  // `db_path` is the db file name with full path.
   static void ExecuteSQLScript(const base::FilePath& sql_path,
                                const base::FilePath& db_path);
 
diff --git a/components/history/ios/browser/history_database_helper.h b/components/history/ios/browser/history_database_helper.h
index 3093efe3..1f5df5e9 100644
--- a/components/history/ios/browser/history_database_helper.h
+++ b/components/history/ios/browser/history_database_helper.h
@@ -13,7 +13,7 @@
 
 struct HistoryDatabaseParams;
 
-// Returns a HistoryDatabaseParams for |history_dir|.
+// Returns a HistoryDatabaseParams for `history_dir`.
 HistoryDatabaseParams HistoryDatabaseParamsForPath(
     const base::FilePath& history_dir);
 
diff --git a/components/history/metrics/domain_diversity_reporter.cc b/components/history/metrics/domain_diversity_reporter.cc
index 244c69d3..b5c7dd4e 100644
--- a/components/history/metrics/domain_diversity_reporter.cc
+++ b/components/history/metrics/domain_diversity_reporter.cc
@@ -84,7 +84,7 @@
     int number_of_days_to_report = 7;
 
     // If the last report time is too far back in the past, simply use the
-    // highest possible value for |number_of_days_to_report| and skip its
+    // highest possible value for `number_of_days_to_report` and skip its
     // computation. This avoids calling LocalMidnight() on some very old
     // timestamp that may cause unexpected behaviors on certain
     // platforms/timezones (see https://crbug.com/1048145).
@@ -98,9 +98,9 @@
           time_current_report_triggered.LocalMidnight() -
           time_last_report_triggered.LocalMidnight();
 
-      // Due to daylight saving time, |report_time_range| may not be a multiple
+      // Due to daylight saving time, `report_time_range` may not be a multiple
       // of 24 hours. A small time offset is therefore added to
-      // |report_time_range| so that the resulting time range is guaranteed to
+      // `report_time_range` so that the resulting time range is guaranteed to
       // be at least the correct number of days times 24. The number of days to
       // report is capped at 7 days.
       number_of_days_to_report = std::min(
@@ -134,7 +134,7 @@
     history::DomainDiversityResults result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  // An empty DomainDiversityResults indicates that |db_| is null in
+  // An empty DomainDiversityResults indicates that `db_` is null in
   // HistoryBackend.
   if (result.empty())
     return;
diff --git a/components/history/metrics/domain_diversity_reporter.h b/components/history/metrics/domain_diversity_reporter.h
index 8fe0ba3..0316c7f 100644
--- a/components/history/metrics/domain_diversity_reporter.h
+++ b/components/history/metrics/domain_diversity_reporter.h
@@ -29,7 +29,7 @@
                           base::Clock* clock);
   ~DomainDiversityReporter() override;
 
-  // Registers Profile preferences in |registry|.
+  // Registers Profile preferences in `registry`.
   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
 
   // Invokes ComputeDomainMetrics() if history backend is already loaded.
diff --git a/components/history/metrics/domain_diversity_reporter_unittest.cc b/components/history/metrics/domain_diversity_reporter_unittest.cc
index 299c99b..bd0dd1a 100644
--- a/components/history/metrics/domain_diversity_reporter_unittest.cc
+++ b/components/history/metrics/domain_diversity_reporter_unittest.cc
@@ -103,10 +103,10 @@
   TestClock& test_clock() { return test_clock_; }
 
  protected:
-  // A |task_environment_| configured to MOCK_TIME so tests can
+  // A `task_environment_` configured to MOCK_TIME so tests can
   // FastForwardAndWait() when waiting for a specific timeout (delayed task)
-  // to fire. DomainDiversityReporter internally uses a |test_clock_| instead of
-  // |task_environment_|'s clock because it needs to test very specific times
+  // to fire. DomainDiversityReporter internally uses a `test_clock_` instead of
+  // `task_environment_`'s clock because it needs to test very specific times
   // rather than just advance in deltas from Now().
   base::test::TaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
diff --git a/components/history_clusters/core/memories_features.cc b/components/history_clusters/core/memories_features.cc
index 32b12a4..044a5633 100644
--- a/components/history_clusters/core/memories_features.cc
+++ b/components/history_clusters/core/memories_features.cc
@@ -18,6 +18,13 @@
       kRemoteModelForDebugging, "MemoriesRemoteModelEndpointExperimentName");
 }
 
+bool DebugLoggingEnabled() {
+  // Do debug logging if the kDebug feature is enabled. Additionally, remote
+  // endpoint for debugging users are implied to be in debug mode.
+  return base::FeatureList::IsEnabled(kDebug) ||
+         RemoteModelEndpointForDebugging().is_valid();
+}
+
 bool StoreVisitsInHistoryDb() {
   return base::GetFieldTrialParamByFeatureAsBool(
       kMemories, "MemoriesStoreVisitsInHistoryDb", false);
diff --git a/components/history_clusters/core/memories_features.h b/components/history_clusters/core/memories_features.h
index b4ee73a..4f2f0ba99 100644
--- a/components/history_clusters/core/memories_features.h
+++ b/components/history_clusters/core/memories_features.h
@@ -20,6 +20,9 @@
 // remote model debug endpoint is disabled.
 std::string ExperimentNameForRemoteModelEndpoint();
 
+// Returns true if debug logs should be generated and shown in WebUI inspector.
+bool DebugLoggingEnabled();
+
 // If enabled, completed visits are persisted to the history DB and read back
 // when clustering. If disabled, completed visits are kept in-memory and used
 // these in-memory visits are used when clustering.
diff --git a/components/history_clusters/core/memories_remote_model_helper.cc b/components/history_clusters/core/memories_remote_model_helper.cc
index 2e4f206d41..9b098c20 100644
--- a/components/history_clusters/core/memories_remote_model_helper.cc
+++ b/components/history_clusters/core/memories_remote_model_helper.cc
@@ -10,8 +10,7 @@
 #include "base/bind.h"
 #include "base/json/json_writer.h"
 #include "base/ranges/algorithm.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "components/history_clusters/core/memories_features.h"
@@ -23,19 +22,15 @@
 
 const size_t kMaxExpectedResponseSize = 1024 * 1024;
 
-// Best effort attempt to clean a serialized protobuff for debug prints.
-std::string CleanSerializedProto(const std::string& serialized) {
-  auto copy = serialized;
-  base::ranges::replace_if(
-      copy, [](char c) { return !std::isalnum(c); }, ' ');
-  copy = base::CollapseWhitespaceASCII(copy, true);
-  return copy;
-}
-
+// Also writes one line of debug information per visit to `debug_string`, if
+// the parameter is non-nullptr.
 proto::GetClustersRequest CreateRequestProto(
-    const std::vector<history::ClusterVisit>& visits) {
+    const std::vector<history::ClusterVisit>& visits,
+    base::Optional<DebugLoggerCallback> debug_logger) {
   proto::GetClustersRequest request;
   request.set_experiment_name(ExperimentNameForRemoteModelEndpoint());
+
+  base::ListValue debug_visits_list;
   for (auto& visit : visits) {
     proto::Visit* request_visit = request.add_visits();
     request_visit->set_visit_id(visit.visit_row.visit_id);
@@ -51,6 +46,38 @@
     //  |foreground_time_secs|
     //  |site_engagement_score|
     //  |is_from_google_search|
+
+    if (debug_logger) {
+      base::DictionaryValue debug_visit;
+      debug_visit.SetStringKey("visitId",
+                               base::NumberToString(request_visit->visit_id()));
+      debug_visit.SetStringKey("url", request_visit->url());
+      debug_visit.SetStringKey(
+          "navigationTimeMs",
+          base::NumberToString(request_visit->navigation_time_ms()));
+      debug_visit.SetStringKey(
+          "pageEndReason",
+          base::NumberToString(request_visit->page_end_reason()));
+      debug_visit.SetStringKey(
+          "pageTransition",
+          base::NumberToString(request_visit->page_transition()));
+      debug_visits_list.Append(std::move(debug_visit));
+    }
+  }
+
+  if (debug_logger) {
+    debug_logger->Run("MemoriesRemoteModelHelper CreateRequestProto:");
+
+    base::DictionaryValue debug_value;
+    debug_value.SetStringKey("experiment_name", request.experiment_name());
+    debug_value.SetKey("visits", std::move(debug_visits_list));
+
+    std::string debug_string;
+    if (base::JSONWriter::WriteWithOptions(
+            debug_value, base::JSONWriter::OPTIONS_PRETTY_PRINT,
+            &debug_string)) {
+      debug_logger->Run(debug_string);
+    }
   }
   return request;
 }
@@ -80,8 +107,10 @@
 }
 
 Memories ParseResponseProto(const std::vector<history::ClusterVisit>& visits,
-                            const proto::GetClustersResponse& response_proto) {
+                            const proto::GetClustersResponse& response_proto,
+                            base::Optional<DebugLoggerCallback> debug_logger) {
   Memories result;
+  base::ListValue debug_clusters_list;
   for (const proto::Cluster& cluster : response_proto.clusters()) {
     auto memory = mojom::Memory::New();
     memory->id = base::UnguessableToken::Create();
@@ -93,6 +122,25 @@
       memory->top_visits.push_back(CreateVisitMojom(visits, visit_id));
     }
 
+    if (debug_logger) {
+      base::DictionaryValue debug_cluster;
+      debug_cluster.SetStringKey("id", memory->id.ToString());
+
+      base::ListValue debug_keywords;
+      for (const std::string& keyword : cluster.keywords()) {
+        debug_keywords.Append(keyword);
+      }
+      debug_cluster.SetKey("keywords", std::move(debug_keywords));
+
+      base::ListValue debug_visit_ids;
+      for (int64_t visit_id : cluster.visit_ids()) {
+        debug_visit_ids.Append(base::NumberToString(visit_id));
+      }
+      debug_cluster.SetKey("visit_ids", std::move(debug_visit_ids));
+
+      debug_clusters_list.Append(std::move(debug_cluster));
+    }
+
     // TODO(manukh) fill out:
     //  |related_searches|
     //  |related_tab_groups|
@@ -102,6 +150,18 @@
 
     result.emplace_back(std::move(memory));
   }
+
+  if (debug_logger) {
+    debug_logger->Run("MemoriesRemoteModelHelper ParseResponseProto Clusters:");
+
+    std::string debug_string;
+    if (base::JSONWriter::WriteWithOptions(
+            debug_clusters_list, base::JSONWriter::OPTIONS_PRETTY_PRINT,
+            &debug_string)) {
+      debug_logger->Run(debug_string);
+    }
+  }
+
   return result;
 }
 
@@ -109,7 +169,7 @@
 
 MemoriesRemoteModelHelper::MemoriesRemoteModelHelper(
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-    base::RepeatingCallback<void(const std::string&)> debug_logger)
+    base::Optional<DebugLoggerCallback> debug_logger)
     : url_loader_(nullptr),
       url_loader_factory_(url_loader_factory),
       debug_logger_(debug_logger) {}
@@ -128,16 +188,13 @@
 
   // It's weird but the endpoint only accepts JSON, so wrap our serialized proto
   // like this: {"data":"<base64-encoded-proto-serialization>"}
-  proto::GetClustersRequest request_proto = CreateRequestProto(visits);
+  proto::GetClustersRequest request_proto =
+      CreateRequestProto(visits, debug_logger_);
   const std::string serialized_request_proto =
       request_proto.SerializeAsString();
   std::string request_proto_base64;
   base::Base64Encode(serialized_request_proto, &request_proto_base64);
 
-  debug_logger_.Run(base::StringPrintf(
-      "MemoriesRemoteModelHelper::GetMemories request = %s",
-      CleanSerializedProto(serialized_request_proto).c_str()));
-
   base::DictionaryValue container_value;
   container_value.SetStringPath("data", request_proto_base64);
 
@@ -150,19 +207,18 @@
   url_loader_->DownloadToString(
       url_loader_factory_.get(),
       base::BindOnce(
-          [](base::RepeatingCallback<void(const std::string&)> debug_logger,
+          [](base::Optional<DebugLoggerCallback> debug_logger,
              const std::vector<history::ClusterVisit>& visits,
              std::unique_ptr<std::string> response) {
-            debug_logger.Run(base::StringPrintf(
-                "MemoriesRemoteModelHelper::GetMemories response = %s",
-                response ? CleanSerializedProto(*response).c_str()
-                         : "nullptr"));
             if (!response) {
+              if (debug_logger) {
+                debug_logger->Run("MemoriesRemoteModelHelper response nullptr");
+              }
               return history_clusters::Memories();
             }
             proto::GetClustersResponse response_proto;
             response_proto.ParseFromString(*response);
-            return ParseResponseProto(visits, response_proto);
+            return ParseResponseProto(visits, response_proto, debug_logger);
           },
           debug_logger_, visits)
           .Then(std::move(callback)),
diff --git a/components/history_clusters/core/memories_remote_model_helper.h b/components/history_clusters/core/memories_remote_model_helper.h
index 2a66570..79b1123 100644
--- a/components/history_clusters/core/memories_remote_model_helper.h
+++ b/components/history_clusters/core/memories_remote_model_helper.h
@@ -11,6 +11,7 @@
 
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/optional.h"
 #include "components/history/core/browser/history_types.h"
 #include "components/history_clusters/core/memories.mojom.h"
 #include "services/network/public/cpp/resource_request.h"
@@ -22,14 +23,16 @@
 
 using Memories = std::vector<mojom::MemoryPtr>;
 using MemoriesCallback = base::OnceCallback<void(Memories)>;
+using DebugLoggerCallback = base::RepeatingCallback<void(const std::string&)>;
 
 // A helper class to communicate with the remote model. Forms requests from
 // |ClusterVisit|s and parses the response into |mojom::MemoryPtr|s.
 class MemoriesRemoteModelHelper {
  public:
+  // Pass in a defined `debug_logger` to enable debug logging from this class.
   MemoriesRemoteModelHelper(
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-      base::RepeatingCallback<void(const std::string&)> debug_logger);
+      base::Optional<DebugLoggerCallback> debug_logger);
   ~MemoriesRemoteModelHelper();
 
   // POSTs |visits| to |endpoint_| and invokes |callback| with the retrieved
@@ -54,8 +57,10 @@
   // Used to make requests.
   const scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
 
-  // Used to log debug messages.
-  base::RepeatingCallback<void(const std::string&)> debug_logger_;
+  // This should be set to base::nullopt if debug logging is disabled.
+  // This is base::Optional, so we can skip the expense of constructing the log
+  // messages if the logger is disabled.
+  base::Optional<DebugLoggerCallback> debug_logger_;
 };
 
 }  // namespace history_clusters
diff --git a/components/history_clusters/core/memories_service.cc b/components/history_clusters/core/memories_service.cc
index aa30729c..a64df48 100644
--- a/components/history_clusters/core/memories_service.cc
+++ b/components/history_clusters/core/memories_service.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/feature_list.h"
+#include "base/optional.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/history_clusters/core/memories_features.h"
 #include "components/query_parser/query_parser.h"
@@ -61,13 +62,14 @@
     history::HistoryService* history_service,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory)
     : history_service_(history_service) {
-  // Can't do this in initialization list, because |weak_ptr_factory_| usage.
-  // TODO(tommycli): Investigate if we can simplify some lifetime issues with
-  // using free-lambdas within |remote_model_helper_|.
+  base::Optional<DebugLoggerCallback> debug_logger;
+  if (DebugLoggingEnabled()) {
+    debug_logger = base::BindRepeating(&MemoriesService::NotifyDebugMessage,
+                                       weak_ptr_factory_.GetWeakPtr());
+  }
+
   remote_model_helper_ = std::make_unique<MemoriesRemoteModelHelper>(
-      url_loader_factory,
-      base::BindRepeating(&MemoriesService::NotifyDebugMessage,
-                          weak_ptr_factory_.GetWeakPtr()));
+      url_loader_factory, debug_logger);
   remote_model_helper_weak_factory_ =
       std::make_unique<base::WeakPtrFactory<MemoriesRemoteModelHelper>>(
           remote_model_helper_.get());
@@ -86,6 +88,8 @@
 }
 
 void MemoriesService::NotifyDebugMessage(const std::string& message) const {
+  DCHECK(DebugLoggingEnabled()) << "Callers must ensure logging is enabled.";
+
   for (Observer& obs : observers_) {
     obs.OnMemoriesDebugMessage(message);
   }
diff --git a/components/history_clusters/core/memories_service.h b/components/history_clusters/core/memories_service.h
index 3eb07af..ff054535 100644
--- a/components/history_clusters/core/memories_service.h
+++ b/components/history_clusters/core/memories_service.h
@@ -47,7 +47,8 @@
   void AddObserver(Observer* obs);
   void RemoveObserver(Observer* obs);
 
-  // Notifies the observers of a debug message being available.
+  // Notifies the observers of a debug message being available. Caller is
+  // responsible for checking that logging is enabled before calling this.
   void NotifyDebugMessage(const std::string& message) const;
 
   // TODO(manukh) |MemoriesService| should be responsible for constructing the
diff --git a/components/management_strings.grdp b/components/management_strings.grdp
index 81e44b7..d0b6d04 100644
--- a/components/management_strings.grdp
+++ b/components/management_strings.grdp
@@ -116,6 +116,9 @@
     <message name="IDS_MANAGEMENT_REPORT_PRINT_JOBS" desc="Message stating that administrators can see printing history associated with user, device, and printer.">
       Printing history
     </message>
+    <message name="IDS_MANAGEMENT_REPORT_DLP_EVENTS" desc="Message show the users of DLP reporting enabled devices that events are being reported.">
+      Actions taken with data flagged as confidential
+    </message>
     <message name="IDS_MANAGEMENT_CROSTINI" desc="Message stating that administrators can see Crostini usage">
       Linux apps installed and when they were last used
     </message>
diff --git a/components/management_strings_grdp/IDS_MANAGEMENT_REPORT_DLP_EVENTS.png.sha1 b/components/management_strings_grdp/IDS_MANAGEMENT_REPORT_DLP_EVENTS.png.sha1
new file mode 100644
index 0000000..f1a38802
--- /dev/null
+++ b/components/management_strings_grdp/IDS_MANAGEMENT_REPORT_DLP_EVENTS.png.sha1
@@ -0,0 +1 @@
+e1f529576660b4167f1bbc0e9942313a5a8d87cb
\ No newline at end of file
diff --git a/components/media_message_center/media_notification_view_modern_impl.cc b/components/media_message_center/media_notification_view_modern_impl.cc
index a05ab1c..60575da8 100644
--- a/components/media_message_center/media_notification_view_modern_impl.cc
+++ b/components/media_message_center/media_notification_view_modern_impl.cc
@@ -67,7 +67,9 @@
 constexpr int kTitleArtistLineHeight = 20;
 constexpr gfx::Size kMediaButtonSize = {24, 24};
 constexpr gfx::Size kPlayPauseButtonSize = {32, 32};
-constexpr int kMediaButtonIconSize = 18;
+constexpr int kMediaButtonIconSize = 14;
+constexpr int kPlayPauseIconSize = 20;
+constexpr int kMediaButtonBorderThickness = 1;
 
 // An image view with a rounded rectangle vignette
 class MediaArtworkView : public views::ImageView {
@@ -147,6 +149,104 @@
   return nullptr;
 }
 
+const std::u16string GetAccessibleNameForMediaAction(
+    MediaSessionAction action) {
+  switch (action) {
+    case MediaSessionAction::kPreviousTrack:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PREVIOUS_TRACK);
+    case MediaSessionAction::kSeekBackward:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_SEEK_BACKWARD);
+    case MediaSessionAction::kPlay:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PLAY);
+    case MediaSessionAction::kPause:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PAUSE);
+    case MediaSessionAction::kSeekForward:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_SEEK_FORWARD);
+    case MediaSessionAction::kNextTrack:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_NEXT_TRACK);
+    case MediaSessionAction::kEnterPictureInPicture:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_ENTER_PIP);
+    case MediaSessionAction::kExitPictureInPicture:
+      return l10n_util::GetStringUTF16(
+          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_EXIT_PIP);
+    case MediaSessionAction::kStop:
+    case MediaSessionAction::kSkipAd:
+    case MediaSessionAction::kSeekTo:
+    case MediaSessionAction::kScrubTo:
+    case MediaSessionAction::kSwitchAudioDevice:
+    case MediaSessionAction::kToggleMicrophone:
+    case MediaSessionAction::kToggleCamera:
+    case MediaSessionAction::kHangUp:
+      NOTREACHED();
+      break;
+  }
+
+  return std::u16string();
+}
+
+class MediaButton : public views::ImageButton {
+ public:
+  MediaButton(PressedCallback callback, int icon_size, gfx::Size button_size)
+      : ImageButton(callback), icon_size_(icon_size) {
+    SetImageHorizontalAlignment(views::ImageButton::ALIGN_CENTER);
+    SetImageVerticalAlignment(views::ImageButton::ALIGN_MIDDLE);
+    SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
+    SetFlipCanvasOnPaintForRTLUI(false);
+    SetPreferredSize(button_size);
+    SetBorder(views::CreateRoundedRectBorder(
+        kMediaButtonBorderThickness,
+        std::min(button_size.width(), button_size.height()) / 2,
+        SK_ColorWHITE));
+  }
+
+  void SetButtonColor(SkColor foreground_color, SkColor disabled_color) {
+    foreground_color_ = foreground_color;
+    disabled_color_ = disabled_color;
+
+    GetBorder()->set_color(IsMouseHovered() ? foreground_color
+                                            : disabled_color_);
+    views::SetImageFromVectorIconWithColor(
+        this, *GetVectorIconForMediaAction(GetActionFromButtonTag(*this)),
+        icon_size_, foreground_color_);
+
+    SchedulePaint();
+  }
+
+  void set_tag(int tag) {
+    views::ImageButton::set_tag(tag);
+
+    SetTooltipText(
+        GetAccessibleNameForMediaAction(GetActionFromButtonTag(*this)));
+    SetAccessibleName(
+        GetAccessibleNameForMediaAction(GetActionFromButtonTag(*this)));
+    views::SetImageFromVectorIconWithColor(
+        this, *GetVectorIconForMediaAction(GetActionFromButtonTag(*this)),
+        icon_size_, foreground_color_);
+  }
+
+  void OnMouseEntered(const ui::MouseEvent& event) override {
+    GetBorder()->set_color(foreground_color_);
+    SchedulePaint();
+  }
+
+  void OnMouseExited(const ui::MouseEvent& event) override {
+    GetBorder()->set_color(disabled_color_);
+    SchedulePaint();
+  }
+
+ private:
+  SkColor foreground_color_ = gfx::kPlaceholderColor;
+  SkColor disabled_color_ = gfx::kPlaceholderColor;
+  int icon_size_;
+};
+
 }  // anonymous namespace
 
 // static
@@ -212,41 +312,27 @@
     // regardless of the local UI direction.
     media_controls_container->SetMirrored(false);
 
-    CreateMediaButton(
-        media_controls_container.get(), MediaSessionAction::kPreviousTrack,
-        l10n_util::GetStringUTF16(
-            IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PREVIOUS_TRACK));
-    CreateMediaButton(
-        media_controls_container.get(), MediaSessionAction::kSeekBackward,
-        l10n_util::GetStringUTF16(
-            IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_SEEK_BACKWARD));
+    CreateMediaButton(media_controls_container.get(),
+                      MediaSessionAction::kPreviousTrack);
+    CreateMediaButton(media_controls_container.get(),
+                      MediaSessionAction::kSeekBackward);
 
     {
-      auto play_pause_button = views::CreateVectorToggleImageButton(
-          views::Button::PressedCallback());
+      auto play_pause_button = std::make_unique<MediaButton>(
+          views::Button::PressedCallback(), kPlayPauseIconSize,
+          kPlayPauseButtonSize);
       play_pause_button->SetCallback(
           base::BindRepeating(&MediaNotificationViewModernImpl::ButtonPressed,
                               base::Unretained(this), play_pause_button.get()));
       play_pause_button->set_tag(static_cast<int>(MediaSessionAction::kPlay));
-      play_pause_button->SetPreferredSize(kPlayPauseButtonSize);
-      play_pause_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
-      play_pause_button->SetTooltipText(l10n_util::GetStringUTF16(
-          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PLAY));
-      play_pause_button->SetToggledTooltipText(l10n_util::GetStringUTF16(
-          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_PAUSE));
-      play_pause_button->SetFlipCanvasOnPaintForRTLUI(false);
       play_pause_button_ =
           media_controls_container->AddChildView(std::move(play_pause_button));
     }
 
-    CreateMediaButton(
-        media_controls_container.get(), MediaSessionAction::kSeekForward,
-        l10n_util::GetStringUTF16(
-            IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_SEEK_FORWARD));
-    CreateMediaButton(
-        media_controls_container.get(), MediaSessionAction::kNextTrack,
-        l10n_util::GetStringUTF16(
-            IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_NEXT_TRACK));
+    CreateMediaButton(media_controls_container.get(),
+                      MediaSessionAction::kSeekForward);
+    CreateMediaButton(media_controls_container.get(),
+                      MediaSessionAction::kNextTrack);
 
     media_controls_container_ =
         buttons_container->AddChildView(std::move(media_controls_container));
@@ -364,27 +450,13 @@
     {
       // The picture-in-picture button appears directly under the media
       // labels.
-      auto picture_in_picture_button = views::CreateVectorToggleImageButton(
-          views::Button::PressedCallback());
+      auto picture_in_picture_button = std::make_unique<MediaButton>(
+          views::Button::PressedCallback(), kPipButtonIconSize, kPipButtonSize);
       picture_in_picture_button->SetCallback(base::BindRepeating(
           &MediaNotificationViewModernImpl::ButtonPressed,
           base::Unretained(this), picture_in_picture_button.get()));
       picture_in_picture_button->set_tag(
           static_cast<int>(MediaSessionAction::kEnterPictureInPicture));
-      picture_in_picture_button->SetPreferredSize(kPipButtonSize);
-      picture_in_picture_button->SetFocusBehavior(
-          views::View::FocusBehavior::ALWAYS);
-      picture_in_picture_button->SetTooltipText(l10n_util::GetStringUTF16(
-          IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_ENTER_PIP));
-      picture_in_picture_button->SetToggledTooltipText(
-          l10n_util::GetStringUTF16(
-              IDS_MEDIA_MESSAGE_CENTER_MEDIA_NOTIFICATION_ACTION_EXIT_PIP));
-      picture_in_picture_button->SetFlipCanvasOnPaintForRTLUI(false);
-      views::SetImageFromVectorIconWithColor(
-          picture_in_picture_button.get(),
-          *GetVectorIconForMediaAction(
-              MediaSessionAction::kEnterPictureInPicture),
-          kPipButtonIconSize, SK_ColorBLACK);
       picture_in_picture_button_ = util_buttons_container->AddChildView(
           std::move(picture_in_picture_button));
     }
@@ -426,7 +498,6 @@
   bool playing =
       session_info && session_info->playback_state ==
                           media_session::mojom::MediaPlaybackState::kPlaying;
-  play_pause_button_->SetToggled(playing);
 
   MediaSessionAction action =
       playing ? MediaSessionAction::kPause : MediaSessionAction::kPlay;
@@ -436,7 +507,6 @@
       session_info &&
       session_info->picture_in_picture_state ==
           media_session::mojom::MediaPictureInPictureState::kInPictureInPicture;
-  picture_in_picture_button_->SetToggled(in_picture_in_picture);
 
   action = in_picture_in_picture ? MediaSessionAction::kExitPictureInPicture
                                  : MediaSessionAction::kEnterPictureInPicture;
@@ -562,19 +632,13 @@
 
 void MediaNotificationViewModernImpl::CreateMediaButton(
     views::View* parent_view,
-    MediaSessionAction action,
-    const std::u16string& accessible_name) {
-  auto button =
-      views::CreateVectorImageButton(views::Button::PressedCallback());
+    MediaSessionAction action) {
+  auto button = std::make_unique<MediaButton>(
+      views::Button::PressedCallback(), kMediaButtonIconSize, kMediaButtonSize);
   button->SetCallback(
       base::BindRepeating(&MediaNotificationViewModernImpl::ButtonPressed,
                           base::Unretained(this), button.get()));
   button->set_tag(static_cast<int>(action));
-  button->SetPreferredSize(kMediaButtonSize);
-  button->SetAccessibleName(accessible_name);
-  button->SetTooltipText(accessible_name);
-  button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
-  button->SetFlipCanvasOnPaintForRTLUI(false);
   parent_view->AddChildView(std::move(button));
 }
 
@@ -604,23 +668,8 @@
 
   // Update the colors for the toggle buttons (play/pause and
   // picture-in-picture)
-  views::SetImageFromVectorIconWithColor(
-      play_pause_button_,
-      *GetVectorIconForMediaAction(MediaSessionAction::kPlay),
-      kMediaButtonIconSize, foreground);
-  views::SetToggledImageFromVectorIconWithColor(
-      play_pause_button_,
-      *GetVectorIconForMediaAction(MediaSessionAction::kPause),
-      kMediaButtonIconSize, foreground, disabled_icon_color);
-
-  views::SetImageFromVectorIconWithColor(
-      picture_in_picture_button_,
-      *GetVectorIconForMediaAction(MediaSessionAction::kEnterPictureInPicture),
-      kPipButtonIconSize, foreground);
-  views::SetToggledImageFromVectorIconWithColor(
-      picture_in_picture_button_,
-      *GetVectorIconForMediaAction(MediaSessionAction::kExitPictureInPicture),
-      kPipButtonIconSize, foreground, disabled_icon_color);
+  play_pause_button_->SetButtonColor(foreground, disabled_icon_color);
+  picture_in_picture_button_->SetButtonColor(foreground, disabled_icon_color);
 
   // Update the colors for the media control buttons.
   for (views::View* child : media_controls_container_->children()) {
@@ -628,13 +677,9 @@
     if (child == play_pause_button_)
       continue;
 
-    views::ImageButton* button = static_cast<views::ImageButton*>(child);
+    MediaButton* button = static_cast<MediaButton*>(child);
 
-    views::SetImageFromVectorIconWithColor(
-        button, *GetVectorIconForMediaAction(GetActionFromButtonTag(*button)),
-        kMediaButtonIconSize, foreground);
-
-    button->SchedulePaint();
+    button->SetButtonColor(foreground, disabled_icon_color);
   }
 
   SchedulePaint();
@@ -650,6 +695,11 @@
   item_->SeekTo(seek_progress * position_.duration());
 }
 
+views::Button*
+MediaNotificationViewModernImpl::picture_in_picture_button_for_testing() const {
+  return picture_in_picture_button_;
+}
+
 BEGIN_METADATA(MediaNotificationViewModernImpl, views::View)
 END_METADATA
 
diff --git a/components/media_message_center/media_notification_view_modern_impl.h b/components/media_message_center/media_notification_view_modern_impl.h
index 8eae911..7f00509 100644
--- a/components/media_message_center/media_notification_view_modern_impl.h
+++ b/components/media_message_center/media_notification_view_modern_impl.h
@@ -19,13 +19,13 @@
 
 namespace views {
 class Button;
-class ToggleImageButton;
 }  // namespace views
 
 namespace media_message_center {
 
 namespace {
 class MediaArtworkView;
+class MediaButton;
 }  // anonymous namespace
 
 class MediaControlsProgressView;
@@ -97,9 +97,7 @@
     return subtitle_label_;
   }
 
-  const views::Button* picture_in_picture_button_for_testing() const {
-    return picture_in_picture_button_;
-  }
+  views::Button* picture_in_picture_button_for_testing() const;
 
   const views::View* media_controls_container_for_testing() const {
     return media_controls_container_;
@@ -113,8 +111,7 @@
   // |accessible_name| is the text used for screen readers and the
   // button's tooltip.
   void CreateMediaButton(views::View* parent_view,
-                         media_session::mojom::MediaSessionAction action,
-                         const std::u16string& accessible_name);
+                         media_session::mojom::MediaSessionAction action);
 
   void UpdateActionButtonsVisibility();
 
@@ -151,10 +148,10 @@
   MediaArtworkView* artwork_ = nullptr;
   views::Label* title_label_ = nullptr;
   views::Label* subtitle_label_ = nullptr;
-  views::ToggleImageButton* picture_in_picture_button_ = nullptr;
+  MediaButton* picture_in_picture_button_ = nullptr;
   views::View* notification_controls_spacer_ = nullptr;
   views::View* media_controls_container_ = nullptr;
-  views::ToggleImageButton* play_pause_button_ = nullptr;
+  MediaButton* play_pause_button_ = nullptr;
   MediaControlsProgressView* progress_ = nullptr;
 };
 
diff --git a/components/media_message_center/media_notification_view_modern_impl_unittest.cc b/components/media_message_center/media_notification_view_modern_impl_unittest.cc
index 54ff7aa..aac3d633 100644
--- a/components/media_message_center/media_notification_view_modern_impl_unittest.cc
+++ b/components/media_message_center/media_notification_view_modern_impl_unittest.cc
@@ -216,21 +216,20 @@
     return view()->media_controls_container_;
   }
 
+  views::Button* picture_in_picture_button() const {
+    return view()->picture_in_picture_button_for_testing();
+  }
+
   std::vector<views::Button*> media_control_buttons() const {
     std::vector<views::Button*> buttons;
     auto children = view()->media_controls_container_->children();
     std::transform(
         children.begin(), children.end(), std::back_inserter(buttons),
         [](views::View* child) { return views::Button::AsButton(child); });
-    buttons.push_back(
-        views::Button::AsButton(view()->picture_in_picture_button_));
+    buttons.push_back(views::Button::AsButton(picture_in_picture_button()));
     return buttons;
   }
 
-  views::Button* picture_in_picture_button() const {
-    return view()->picture_in_picture_button_;
-  }
-
   MediaControlsProgressView* progress_view() const { return view()->progress_; }
 
   views::Button* GetButtonForAction(MediaSessionAction action) const {
@@ -525,20 +524,18 @@
   EnableAction(MediaSessionAction::kPlay);
 
   {
-    views::ToggleImageButton* button = static_cast<views::ToggleImageButton*>(
-        GetButtonForAction(MediaSessionAction::kPlay));
-    ASSERT_EQ(views::ToggleImageButton::kViewClassName, button->GetClassName());
-    EXPECT_FALSE(button->GetToggled());
+    views::Button* button = GetButtonForAction(MediaSessionAction::kPlay);
+    EXPECT_NE(button, nullptr);
+    EXPECT_EQ(button->tag(), static_cast<int>(MediaSessionAction::kPlay));
   }
 
   view()->UpdateWithMediaSessionInfo(
       media_session::mojom::MediaSessionInfo::New());
 
   {
-    views::ToggleImageButton* button = static_cast<views::ToggleImageButton*>(
-        GetButtonForAction(MediaSessionAction::kPlay));
-    ASSERT_EQ(views::ToggleImageButton::kViewClassName, button->GetClassName());
-    EXPECT_FALSE(button->GetToggled());
+    views::Button* button = GetButtonForAction(MediaSessionAction::kPlay);
+    EXPECT_NE(button, nullptr);
+    EXPECT_EQ(button->tag(), static_cast<int>(MediaSessionAction::kPlay));
   }
 }
 
@@ -548,10 +545,9 @@
   EnableAction(MediaSessionAction::kPause);
 
   {
-    views::ToggleImageButton* button = static_cast<views::ToggleImageButton*>(
-        GetButtonForAction(MediaSessionAction::kPlay));
-    ASSERT_EQ(views::ToggleImageButton::kViewClassName, button->GetClassName());
-    EXPECT_FALSE(button->GetToggled());
+    views::Button* button = GetButtonForAction(MediaSessionAction::kPlay);
+    EXPECT_NE(button, nullptr);
+    EXPECT_EQ(button->tag(), static_cast<int>(MediaSessionAction::kPlay));
   }
 
   media_session::mojom::MediaSessionInfoPtr session_info(
@@ -562,10 +558,9 @@
   view()->UpdateWithMediaSessionInfo(session_info.Clone());
 
   {
-    views::ToggleImageButton* button = static_cast<views::ToggleImageButton*>(
-        GetButtonForAction(MediaSessionAction::kPause));
-    ASSERT_EQ(views::ToggleImageButton::kViewClassName, button->GetClassName());
-    EXPECT_TRUE(button->GetToggled());
+    views::Button* button = GetButtonForAction(MediaSessionAction::kPause);
+    EXPECT_NE(button, nullptr);
+    EXPECT_EQ(button->tag(), static_cast<int>(MediaSessionAction::kPause));
   }
 
   session_info->playback_state =
@@ -573,10 +568,9 @@
   view()->UpdateWithMediaSessionInfo(session_info.Clone());
 
   {
-    views::ToggleImageButton* button = static_cast<views::ToggleImageButton*>(
-        GetButtonForAction(MediaSessionAction::kPlay));
-    ASSERT_EQ(views::ToggleImageButton::kViewClassName, button->GetClassName());
-    EXPECT_FALSE(button->GetToggled());
+    views::Button* button = GetButtonForAction(MediaSessionAction::kPlay);
+    EXPECT_NE(button, nullptr);
+    EXPECT_EQ(button->tag(), static_cast<int>(MediaSessionAction::kPlay));
   }
 }
 
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
index 86ba123e..b6846e1e 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
@@ -298,6 +298,15 @@
         }
 
         /**
+         * Creates an instance of Android payment app factory.
+         * @return The instance, can be null for testing.
+         */
+        @Nullable
+        default PaymentAppFactoryInterface createAndroidPaymentAppFactory() {
+            return new AndroidPaymentAppFactory();
+        }
+
+        /**
          * @return The context of the current activity, can be null when WebContents has been
          *         destroyed, the activity is gone, the window is closed, etc.
          */
@@ -543,6 +552,12 @@
     private void startPaymentAppService() {
         PaymentAppService service = mDelegate.getPaymentAppService();
         mBrowserPaymentRequest.addPaymentAppFactories(service, /*delegate=*/this);
+
+        String androidFactoryId = AndroidPaymentAppFactory.class.getName();
+        if (!service.containsFactory(androidFactoryId)) {
+            service.addUniqueFactory(mDelegate.createAndroidPaymentAppFactory(), androidFactoryId);
+        }
+
         service.create(/*delegate=*/this);
     }
 
@@ -658,6 +673,11 @@
      */
     public void invokePaymentApp(
             PaymentApp paymentApp, PaymentResponseHelperInterface paymentResponseHelper) {
+        if (paymentApp.getPaymentAppType() == PaymentAppType.NATIVE_MOBILE_APP) {
+            PaymentDetailsUpdateServiceHelper.getInstance().initialize(new PackageManagerDelegate(),
+                    ((AndroidPaymentApp) paymentApp).packageName(),
+                    this /* PaymentApp.PaymentRequestUpdateEventListener */);
+        }
         mPaymentResponseHelper = paymentResponseHelper;
         mJourneyLogger.recordCheckoutStep(CheckoutFunnelStep.PAYMENT_HANDLER_INVOKED);
         // Create maps that are subsets of mMethodData and mModifiers, that contain the payment
@@ -1299,6 +1319,7 @@
         assert !mSpec.isDestroyed() : "mSpec should not be used after being destroyed.";
         mSpec.retry(errors);
         mBrowserPaymentRequest.onRetry(errors);
+        PaymentDetailsUpdateServiceHelper.getInstance().reset();
     }
 
     /** The component part of the {@link PaymentRequest#canMakePayment} implementation. */
@@ -1406,6 +1427,8 @@
         if (sNativeObserverForTest != null) {
             sNativeObserverForTest.onClosed();
         }
+
+        PaymentDetailsUpdateServiceHelper.getInstance().reset();
     }
 
     /** @return An observer for the payment request service, if any; otherwise, null. */
@@ -1674,5 +1697,6 @@
         mInvokedPaymentApp = null;
         if (mBrowserPaymentRequest == null) return;
         mBrowserPaymentRequest.onInstrumentDetailsError(errorMessage);
+        PaymentDetailsUpdateServiceHelper.getInstance().reset();
     }
 }
diff --git a/components/plugins/renderer/webview_plugin.cc b/components/plugins/renderer/webview_plugin.cc
index 747bd27a..5612e0b4 100644
--- a/components/plugins/renderer/webview_plugin.cc
+++ b/components/plugins/renderer/webview_plugin.cc
@@ -361,6 +361,8 @@
 
   v8::Isolate* isolate = blink::MainThreadIsolate();
   v8::HandleScope handle_scope(isolate);
+  v8::MicrotasksScope microtasks_scope(
+      isolate, v8::MicrotasksScope::kDoNotRunMicrotasks);
   v8::Local<v8::Context> context = frame_->MainWorldScriptContext();
   DCHECK(!context.IsEmpty());
 
diff --git a/components/services/storage/service_worker/service_worker_database.cc b/components/services/storage/service_worker/service_worker_database.cc
index d9e116c..5e118eb 100644
--- a/components/services/storage/service_worker/service_worker_database.cc
+++ b/components/services/storage/service_worker/service_worker_database.cc
@@ -45,13 +45,19 @@
 //   key: "INITDATA_NEXT_VERSION_ID"
 //   value: <int64_t 'next_available_version_id'>
 //
-//   key: "INITDATA_UNIQUE_ORIGIN:" + <GURL 'origin'>
+//   Note: This has changed from `GURL origin` to StorageKey but the name will
+//   be updated in the future to avoid a migration.
+//   TODO(crbug.com/1199077): Update name during a migration to Version 3.
+//   key: "INITDATA_UNIQUE_ORIGIN:" + <StorageKey 'key'>
 //   value: <empty>
 //
 //   key: "PRES:" + <int64_t 'purgeable_resource_id'>
 //   value: <empty>
 //
-//   key: "REG:" + <GURL 'origin'> + '\x00' + <int64_t 'registration_id'>
+//   Note: This has changed from `GURL origin` to StorageKey but the name will
+//   be updated in the future to avoid a migration.
+//   TODO(crbug.com/1199077): Update name during a migration to Version 3.
+//   key: "REG:" + <StorageKey 'key'> + '\x00' + <int64_t 'registration_id'>
 //     (ex. "REG:http://example.com\x00123456")
 //   value: <ServiceWorkerRegistrationData serialized as a string>
 //
@@ -73,6 +79,9 @@
 //
 // Version 2
 //
+//   Note: This has changed from `GURL origin` to StorageKey but the name will
+//   be updated in the future to avoid a migration.
+//   TODO(crbug.com/1199077): Update name during a migration to Version 3.
 //   key: "REGID_TO_ORIGIN:" + <int64_t 'registration_id'>
 //   value: <GURL 'origin'>
 //
@@ -144,15 +153,15 @@
   return true;
 }
 
-std::string CreateRegistrationKeyPrefix(const url::Origin& origin) {
+std::string CreateRegistrationKeyPrefix(const StorageKey& key) {
   return base::StringPrintf("%s%s%c", service_worker_internals::kRegKeyPrefix,
-                            origin.GetURL().spec().c_str(),
+                            key.Serialize().c_str(),
                             service_worker_internals::kKeySeparator);
 }
 
 std::string CreateRegistrationKey(int64_t registration_id,
-                                  const url::Origin& origin) {
-  return CreateRegistrationKeyPrefix(origin).append(
+                                  const StorageKey& key) {
+  return CreateRegistrationKeyPrefix(key).append(
       base::NumberToString(registration_id));
 }
 
@@ -167,9 +176,9 @@
       .append(base::NumberToString(resource_id));
 }
 
-std::string CreateUniqueOriginKey(const GURL& origin) {
+std::string CreateUniqueOriginKey(const StorageKey& key) {
   return base::StringPrintf("%s%s", service_worker_internals::kUniqueOriginKey,
-                            origin.GetOrigin().spec().c_str());
+                            key.Serialize().c_str());
 }
 
 std::string CreateResourceIdKey(const char* key_prefix, int64_t resource_id) {
@@ -201,15 +210,15 @@
       .append(base::NumberToString(registration_id));
 }
 
-std::string CreateRegistrationIdToOriginKey(int64_t registration_id) {
+std::string CreateRegistrationIdToStorageKey(int64_t registration_id) {
   return base::StringPrintf("%s%s",
                             service_worker_internals::kRegIdToOriginKeyPrefix,
                             base::NumberToString(registration_id).c_str());
 }
 
-void PutUniqueOriginToBatch(const GURL& origin, leveldb::WriteBatch* batch) {
+void PutUniqueOriginToBatch(const StorageKey& key, leveldb::WriteBatch* batch) {
   // Value should be empty.
-  batch->Put(CreateUniqueOriginKey(origin), "");
+  batch->Put(CreateUniqueOriginKey(key), "");
 }
 
 void PutPurgeableResourceIdToBatch(int64_t resource_id,
@@ -339,10 +348,10 @@
 }
 
 ServiceWorkerDatabase::Status
-ServiceWorkerDatabase::GetOriginsWithRegistrations(
-    std::set<url::Origin>* origins) {
+ServiceWorkerDatabase::GetStorageKeysWithRegistrations(
+    std::set<StorageKey>* keys) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(origins->empty());
+  DCHECK(keys->empty());
 
   Status status = LazyOpen(false);
   if (IsNewOrNonexistentDatabase(status))
@@ -357,24 +366,23 @@
          itr->Next()) {
       status = LevelDBStatusToServiceWorkerDBStatus(itr->status());
       if (status != Status::kOk) {
-        origins->clear();
+        keys->clear();
         break;
       }
 
-      std::string origin_str;
+      std::string key_str;
       if (!RemovePrefix(itr->key().ToString(),
-                        service_worker_internals::kUniqueOriginKey,
-                        &origin_str))
+                        service_worker_internals::kUniqueOriginKey, &key_str))
         break;
 
-      GURL origin(origin_str);
-      if (!origin.is_valid()) {
+      StorageKey key = StorageKey::Deserialize(key_str);
+      if (key.opaque()) {
         status = Status::kErrorCorrupted;
-        origins->clear();
+        keys->clear();
         break;
       }
 
-      origins->insert(url::Origin::Create(origin));
+      keys->insert(key);
     }
   }
 
@@ -382,8 +390,9 @@
   return status;
 }
 
-ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetRegistrationsForOrigin(
-    const url::Origin& origin,
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::GetRegistrationsForStorageKey(
+    const StorageKey& key,
     std::vector<mojom::ServiceWorkerRegistrationDataPtr>* registrations,
     std::vector<std::vector<mojom::ServiceWorkerResourceRecordPtr>>*
         opt_resources_list) {
@@ -396,7 +405,7 @@
   if (status != Status::kOk)
     return status;
 
-  std::string prefix = CreateRegistrationKeyPrefix(origin);
+  std::string prefix = CreateRegistrationKeyPrefix(key);
 
   // Read all registrations.
   {
@@ -454,8 +463,8 @@
   return status;
 }
 
-ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetUsageForOrigin(
-    const url::Origin& origin,
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetUsageForStorageKey(
+    const StorageKey& key,
     int64_t& out_usage) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
@@ -467,7 +476,7 @@
   if (status != Status::kOk)
     return status;
 
-  std::string prefix = CreateRegistrationKeyPrefix(origin);
+  std::string prefix = CreateRegistrationKeyPrefix(key);
 
   // Read all registrations.
   {
@@ -548,7 +557,7 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistration(
     int64_t registration_id,
-    const GURL& origin,
+    const StorageKey& key,
     mojom::ServiceWorkerRegistrationDataPtr* registration,
     std::vector<mojom::ServiceWorkerResourceRecordPtr>* resources) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -561,8 +570,7 @@
   if (status != Status::kOk)
     return status;
 
-  status = ReadRegistrationData(registration_id, url::Origin::Create(origin),
-                                registration);
+  status = ReadRegistrationData(registration_id, key, registration);
   if (status != Status::kOk)
     return status;
 
@@ -577,11 +585,11 @@
   return Status::kOk;
 }
 
-ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationOrigin(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationStorageKey(
     int64_t registration_id,
-    GURL* origin) {
+    StorageKey* key) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(origin);
+  DCHECK(key);
 
   Status status = LazyOpen(true);
   if (IsNewOrNonexistentDatabase(status))
@@ -592,21 +600,21 @@
   std::string value;
   status = LevelDBStatusToServiceWorkerDBStatus(
       db_->Get(leveldb::ReadOptions(),
-               CreateRegistrationIdToOriginKey(registration_id), &value));
+               CreateRegistrationIdToStorageKey(registration_id), &value));
   if (status != Status::kOk) {
     HandleReadResult(FROM_HERE,
                      status == Status::kErrorNotFound ? Status::kOk : status);
     return status;
   }
 
-  GURL parsed(value);
-  if (!parsed.is_valid()) {
+  StorageKey parsed = StorageKey::Deserialize(value);
+  if (parsed.opaque()) {
     status = Status::kErrorCorrupted;
     HandleReadResult(FROM_HERE, status);
     return status;
   }
 
-  *origin = parsed;
+  *key = std::move(parsed);
   HandleReadResult(FROM_HERE, Status::kOk);
   return Status::kOk;
 }
@@ -627,7 +635,8 @@
   BumpNextRegistrationIdIfNeeded(registration.registration_id, &batch);
   BumpNextVersionIdIfNeeded(registration.version_id, &batch);
 
-  PutUniqueOriginToBatch(registration.scope.GetOrigin(), &batch);
+  PutUniqueOriginToBatch(
+      StorageKey(url::Origin::Create(registration.scope.GetOrigin())), &batch);
 
   DCHECK_EQ(AccumulateResourceSizeInBytes(resources),
             registration.resources_total_size_bytes)
@@ -635,8 +644,11 @@
       << "sizes of the resources.";
 
   WriteRegistrationDataInBatch(registration, &batch);
-  batch.Put(CreateRegistrationIdToOriginKey(registration.registration_id),
-            registration.scope.GetOrigin().spec());
+  // TODO(crbug.com/1199077): Update when RegistrationData uses StorageKey
+  StorageKey key(url::Origin::Create(registration.scope.GetOrigin()));
+
+  batch.Put(CreateRegistrationIdToStorageKey(registration.registration_id),
+            key.Serialize());
 
   // Used for avoiding multiple writes for the same resource id or url.
   std::set<int64_t> pushed_resources;
@@ -663,9 +675,9 @@
 
   // Retrieve a previous version to sweep purgeable resources.
   mojom::ServiceWorkerRegistrationDataPtr old_registration;
-  status = ReadRegistrationData(registration.registration_id,
-                                url::Origin::Create(registration.scope),
-                                &old_registration);
+  status = ReadRegistrationData(
+      registration.registration_id,
+      StorageKey(url::Origin::Create(registration.scope)), &old_registration);
   if (status != Status::kOk && status != Status::kErrorNotFound)
     return status;
   if (status == Status::kOk) {
@@ -696,19 +708,18 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::UpdateVersionToActive(
     int64_t registration_id,
-    const GURL& origin) {
+    const StorageKey& key) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Status status = LazyOpen(false);
   if (IsNewOrNonexistentDatabase(status))
     return Status::kErrorNotFound;
   if (status != Status::kOk)
     return status;
-  if (!origin.is_valid())
+  if (key.opaque())
     return Status::kErrorFailed;
 
   mojom::ServiceWorkerRegistrationDataPtr registration;
-  status = ReadRegistrationData(registration_id, url::Origin::Create(origin),
-                                &registration);
+  status = ReadRegistrationData(registration_id, key, &registration);
   if (status != Status::kOk)
     return status;
 
@@ -721,7 +732,7 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::UpdateLastCheckTime(
     int64_t registration_id,
-    const GURL& origin,
+    const StorageKey& key,
     const base::Time& time) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Status status = LazyOpen(false);
@@ -729,12 +740,11 @@
     return Status::kErrorNotFound;
   if (status != Status::kOk)
     return status;
-  if (!origin.is_valid())
+  if (key.opaque())
     return Status::kErrorFailed;
 
   mojom::ServiceWorkerRegistrationDataPtr registration;
-  status = ReadRegistrationData(registration_id, url::Origin::Create(origin),
-                                &registration);
+  status = ReadRegistrationData(registration_id, key, &registration);
   if (status != Status::kOk)
     return status;
 
@@ -747,7 +757,7 @@
 
 ServiceWorkerDatabase::Status
 ServiceWorkerDatabase::UpdateNavigationPreloadEnabled(int64_t registration_id,
-                                                      const GURL& origin,
+                                                      const StorageKey& key,
                                                       bool enable) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Status status = LazyOpen(false);
@@ -755,12 +765,11 @@
     return Status::kErrorNotFound;
   if (status != Status::kOk)
     return status;
-  if (!origin.is_valid())
+  if (key.opaque())
     return Status::kErrorFailed;
 
   mojom::ServiceWorkerRegistrationDataPtr registration;
-  status = ReadRegistrationData(registration_id, url::Origin::Create(origin),
-                                &registration);
+  status = ReadRegistrationData(registration_id, key, &registration);
   if (status != Status::kOk)
     return status;
 
@@ -773,7 +782,7 @@
 
 ServiceWorkerDatabase::Status
 ServiceWorkerDatabase::UpdateNavigationPreloadHeader(int64_t registration_id,
-                                                     const GURL& origin,
+                                                     const StorageKey& key,
                                                      const std::string& value) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Status status = LazyOpen(false);
@@ -781,12 +790,11 @@
     return Status::kErrorNotFound;
   if (status != Status::kOk)
     return status;
-  if (!origin.is_valid())
+  if (key.opaque())
     return Status::kErrorFailed;
 
   mojom::ServiceWorkerRegistrationDataPtr registration;
-  status = ReadRegistrationData(registration_id, url::Origin::Create(origin),
-                                &registration);
+  status = ReadRegistrationData(registration_id, key, &registration);
   if (status != Status::kOk)
     return status;
 
@@ -799,7 +807,7 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteRegistration(
     int64_t registration_id,
-    const GURL& origin,
+    const StorageKey& key,
     DeletedVersion* deleted_version) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(deleted_version);
@@ -809,29 +817,27 @@
     return Status::kOk;
   if (status != Status::kOk)
     return status;
-  if (!origin.is_valid())
+  if (key.opaque())
     return Status::kErrorFailed;
 
   leveldb::WriteBatch batch;
 
-  // Remove |origin| from unique origins if a registration specified by
-  // |registration_id| is the only one for |origin|.
+  // Remove |key| from unique origins if a registration specified by
+  // |registration_id| is the only one for |key|.
   // TODO(nhiroki): Check the uniqueness by more efficient way.
   std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
-  status = GetRegistrationsForOrigin(url::Origin::Create(origin),
-                                     &registrations, nullptr);
+  status = GetRegistrationsForStorageKey(key, &registrations, nullptr);
   if (status != Status::kOk)
     return status;
 
   if (registrations.size() == 1 &&
       registrations[0]->registration_id == registration_id) {
-    batch.Delete(CreateUniqueOriginKey(origin));
+    batch.Delete(CreateUniqueOriginKey(key));
   }
 
   // Delete a registration specified by |registration_id|.
-  batch.Delete(
-      CreateRegistrationKey(registration_id, url::Origin::Create(origin)));
-  batch.Delete(CreateRegistrationIdToOriginKey(registration_id));
+  batch.Delete(CreateRegistrationKey(registration_id, key));
+  batch.Delete(CreateRegistrationIdToStorageKey(registration_id));
 
   // Delete resource records and user data associated with the registration.
   for (const auto& registration : registrations) {
@@ -985,7 +991,7 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData(
     int64_t registration_id,
-    const url::Origin& origin,
+    const StorageKey& key,
     const std::vector<mojom::ServiceWorkerUserDataPtr>& user_data) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id);
@@ -999,7 +1005,7 @@
 
   // There should be the registration specified by |registration_id|.
   mojom::ServiceWorkerRegistrationDataPtr registration;
-  status = ReadRegistrationData(registration_id, origin, &registration);
+  status = ReadRegistrationData(registration_id, key, &registration);
   if (status != Status::kOk)
     return status;
 
@@ -1346,8 +1352,9 @@
   return WriteBatch(&batch);
 }
 
-ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteAllDataForOrigins(
-    const std::set<GURL>& origins,
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::DeleteAllDataForStorageKeys(
+    const std::set<StorageKey>& keys,
     std::vector<int64_t>* newly_purgeable_resources) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   Status status = LazyOpen(false);
@@ -1357,24 +1364,22 @@
     return status;
   leveldb::WriteBatch batch;
 
-  for (const GURL& origin : origins) {
-    if (!origin.is_valid())
+  for (const StorageKey& key : keys) {
+    if (key.opaque())
       return Status::kErrorFailed;
 
     // Delete from the unique origin list.
-    batch.Delete(CreateUniqueOriginKey(origin));
+    batch.Delete(CreateUniqueOriginKey(key));
 
     std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
-    status = GetRegistrationsForOrigin(url::Origin::Create(origin),
-                                       &registrations, nullptr);
+    status = GetRegistrationsForStorageKey(key, &registrations, nullptr);
     if (status != Status::kOk)
       return status;
 
     // Delete registrations, resource records and user data.
     for (const auto& data : registrations) {
-      batch.Delete(CreateRegistrationKey(data->registration_id,
-                                         url::Origin::Create(origin)));
-      batch.Delete(CreateRegistrationIdToOriginKey(data->registration_id));
+      batch.Delete(CreateRegistrationKey(data->registration_id, key));
+      batch.Delete(CreateRegistrationIdToStorageKey(data->registration_id));
 
       status = DeleteResourceRecords(data->version_id,
                                      newly_purgeable_resources, &batch);
@@ -1507,15 +1512,16 @@
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData(
     int64_t registration_id,
-    const url::Origin& origin,
+    const StorageKey& key,
     mojom::ServiceWorkerRegistrationDataPtr* registration) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(registration);
 
-  const std::string key = CreateRegistrationKey(registration_id, origin);
+  const std::string registration_key =
+      CreateRegistrationKey(registration_id, key);
   std::string value;
   Status status = LevelDBStatusToServiceWorkerDBStatus(
-      db_->Get(leveldb::ReadOptions(), key, &value));
+      db_->Get(leveldb::ReadOptions(), registration_key, &value));
   if (status != Status::kOk) {
     HandleReadResult(FROM_HERE,
                      status == Status::kErrorNotFound ? Status::kOk : status);
@@ -1730,8 +1736,8 @@
   std::string value;
   bool success = data.SerializeToString(&value);
   DCHECK(success);
-  url::Origin origin = url::Origin::Create(registration.scope);
-  batch->Put(CreateRegistrationKey(data.registration_id(), origin), value);
+  StorageKey key(url::Origin::Create(registration.scope));
+  batch->Put(CreateRegistrationKey(data.registration_id(), key), value);
 }
 
 ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadResourceRecords(
diff --git a/components/services/storage/service_worker/service_worker_database.h b/components/services/storage/service_worker/service_worker_database.h
index 2d0611f..46d5e66 100644
--- a/components/services/storage/service_worker/service_worker_database.h
+++ b/components/services/storage/service_worker/service_worker_database.h
@@ -20,6 +20,7 @@
 #include "base/optional.h"
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
+#include "components/services/storage/public/cpp/storage_key.h"
 #include "components/services/storage/public/mojom/service_worker_database.mojom.h"
 #include "components/services/storage/public/mojom/service_worker_storage_control.mojom.h"
 #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
@@ -83,21 +84,21 @@
                              int64_t* next_avail_version_id,
                              int64_t* next_avail_resource_id);
 
-  // Reads origins that have one or more than one registration from the
+  // Reads keys that have one or more registration from the
   // database. Returns OK if they are successfully read or not found.
   // Otherwise, returns an error.
-  Status GetOriginsWithRegistrations(std::set<url::Origin>* origins);
+  Status GetStorageKeysWithRegistrations(std::set<StorageKey>* key);
 
-  // Reads registrations for |origin| from the database. Returns OK if they are
+  // Reads registrations for |key| from the database. Returns OK if they are
   // successfully read or not found. Otherwise, returns an error.
-  Status GetRegistrationsForOrigin(
-      const url::Origin& origin,
+  Status GetRegistrationsForStorageKey(
+      const StorageKey& key,
       std::vector<mojom::ServiceWorkerRegistrationDataPtr>* registrations,
       std::vector<std::vector<mojom::ServiceWorkerResourceRecordPtr>>*
           opt_resources_list);
 
-  // Reads the total resource size stored in the database for |origin|.
-  Status GetUsageForOrigin(const url::Origin& origin, int64_t& out_usage);
+  // Reads the total resource size stored in the database for |key|.
+  Status GetUsageForStorageKey(const StorageKey& key, int64_t& out_usage);
 
   // Reads all registrations from the database. Returns OK if successfully read
   // or not found. Otherwise, returns an error.
@@ -114,14 +115,14 @@
   // Otherwise, returns an error.
   Status ReadRegistration(
       int64_t registration_id,
-      const GURL& origin,
+      const StorageKey& key,
       mojom::ServiceWorkerRegistrationDataPtr* registration,
       std::vector<mojom::ServiceWorkerResourceRecordPtr>* resources);
 
-  // Looks up the origin for the registration with |registration_id|. Returns OK
+  // Looks up the key for the registration with |registration_id|. Returns OK
   // if a registration was found and read successfully. Otherwise, returns an
   // error.
-  Status ReadRegistrationOrigin(int64_t registration_id, GURL* origin);
+  Status ReadRegistrationStorageKey(int64_t registration_id, StorageKey* key);
 
   // Writes |registration| and |resources| into the database and does following
   // things:
@@ -138,21 +139,21 @@
 
   // Updates a registration for |registration_id| to an active state. Returns OK
   // if it's successfully updated. Otherwise, returns an error.
-  Status UpdateVersionToActive(int64_t registration_id, const GURL& origin);
+  Status UpdateVersionToActive(int64_t registration_id, const StorageKey& key);
 
   // Updates last check time of a registration for |registration_id| by |time|.
   // Returns OK if it's successfully updated. Otherwise, returns an error.
   Status UpdateLastCheckTime(int64_t registration_id,
-                             const GURL& origin,
+                             const StorageKey& key,
                              const base::Time& time);
 
   // Updates the navigation preload state for the specified registration.
   // Returns OK if it's successfully updated. Otherwise, returns an error.
   Status UpdateNavigationPreloadEnabled(int64_t registration_id,
-                                        const GURL& origin,
+                                        const StorageKey& key,
                                         bool enable);
   Status UpdateNavigationPreloadHeader(int64_t registration_id,
-                                       const GURL& origin,
+                                       const StorageKey& key,
                                        const std::string& value);
 
   // Deletes a registration for |registration_id| and moves resource records
@@ -162,7 +163,7 @@
   // Returns OK if it's successfully deleted or not found in the database.
   // Otherwise, returns an error.
   Status DeleteRegistration(int64_t registration_id,
-                            const GURL& origin,
+                            const StorageKey& key,
                             DeletedVersion* deleted_version);
 
   // Reads user data for |registration_id| and |user_data_names| from the
@@ -192,7 +193,7 @@
   // registration specified by |registration_id| does not exist in the database.
   Status WriteUserData(
       int64_t registration_id,
-      const url::Origin& origin,
+      const StorageKey& key,
       const std::vector<mojom::ServiceWorkerUserDataPtr>& user_data);
 
   // Deletes user data for |registration_id| and |user_data_names| from the
@@ -260,12 +261,12 @@
   // returns an error.
   Status PurgeUncommittedResourceIds(const std::vector<int64_t>& ids);
 
-  // Deletes all data for |origins|, namely, unique origin, registrations and
+  // Deletes all data for |keys|, namely, unique origin, registrations and
   // resource records. Resources are moved to the purgeable list. Returns OK if
   // they are successfully deleted or not found in the database. Otherwise,
   // returns an error.
-  Status DeleteAllDataForOrigins(
-      const std::set<GURL>& origins,
+  Status DeleteAllDataForStorageKeys(
+      const std::set<StorageKey>& keys,
       std::vector<int64_t>* newly_purgeable_resources);
 
   // Completely deletes the contents of the database.
@@ -293,7 +294,7 @@
   // if successfully reads. Otherwise, returns an error.
   Status ReadRegistrationData(
       int64_t registration_id,
-      const url::Origin& origin,
+      const StorageKey& key,
       mojom::ServiceWorkerRegistrationDataPtr* registration);
 
   // Parses |serialized| as a RegistrationData object and pushes it into |out|.
diff --git a/components/services/storage/service_worker/service_worker_database_unittest.cc b/components/services/storage/service_worker/service_worker_database_unittest.cc
index 16707c8..da1ecec5 100644
--- a/components/services/storage/service_worker/service_worker_database_unittest.cc
+++ b/components/services/storage/service_worker/service_worker_database_unittest.cc
@@ -9,9 +9,10 @@
 
 #include <string>
 
+#include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/stl_util.h"
+#include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "components/services/storage/service_worker/service_worker_database.pb.h"
@@ -166,6 +167,7 @@
   resources.push_back(CreateResource(1, URL(origin, "/resource"), 10));
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   RegistrationData data;
+  data.scope = origin;
   data.resources_total_size_bytes = 10;
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data, resources, &deleted_version));
@@ -189,6 +191,7 @@
   resources.push_back(CreateResource(1, URL(origin, "/resource"), 10));
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   RegistrationData data;
+  data.scope = origin;
   data.resources_total_size_bytes = 10;
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data, resources, &deleted_version));
@@ -227,6 +230,7 @@
   resources.push_back(CreateResource(1, URL(origin, "/resource"), 10));
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   RegistrationData data;
+  data.scope = origin;
   data.resources_total_size_bytes = 10;
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data, resources, &deleted_version));
@@ -348,21 +352,22 @@
   EXPECT_EQ(21, ids.res_id);
 }
 
-TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
+TEST(ServiceWorkerDatabaseTest, GetStorageKeysWithRegistrations) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
 
-  std::set<url::Origin> origins;
+  std::set<StorageKey> keys;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetOriginsWithRegistrations(&origins));
-  EXPECT_TRUE(origins.empty());
+            database->GetStorageKeysWithRegistrations(&keys));
+  EXPECT_TRUE(keys.empty());
 
   ServiceWorkerDatabase::DeletedVersion deleted_version;
 
-  url::Origin origin1 = url::Origin::Create(GURL("https://example.com"));
+  GURL origin1 = GURL("https://example.com");
+  StorageKey key1(url::Origin::Create(origin1));
   RegistrationData data1;
   data1.registration_id = 123;
-  data1.scope = URL(origin1.GetURL(), "/foo");
-  data1.script = URL(origin1.GetURL(), "/script1.js");
+  data1.scope = URL(origin1, "/foo");
+  data1.script = URL(origin1, "/script1.js");
   data1.version_id = 456;
   data1.resources_total_size_bytes = 100;
   std::vector<ResourceRecordPtr> resources1;
@@ -370,11 +375,12 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data1, resources1, &deleted_version));
 
-  url::Origin origin2 = url::Origin::Create(GURL("https://www.example.com"));
+  GURL origin2 = GURL("https://www.example.com");
+  StorageKey key2(url::Origin::Create(origin2));
   RegistrationData data2;
   data2.registration_id = 234;
-  data2.scope = URL(origin2.GetURL(), "/bar");
-  data2.script = URL(origin2.GetURL(), "/script2.js");
+  data2.scope = URL(origin2, "/bar");
+  data2.script = URL(origin2, "/script2.js");
   data2.version_id = 567;
   data2.resources_total_size_bytes = 200;
   std::vector<ResourceRecordPtr> resources2;
@@ -382,11 +388,12 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data2, resources2, &deleted_version));
 
-  url::Origin origin3 = url::Origin::Create(GURL("https://example.org"));
+  GURL origin3 = GURL("https://example.org");
+  StorageKey key3(url::Origin::Create(origin3));
   RegistrationData data3;
   data3.registration_id = 345;
-  data3.scope = URL(origin3.GetURL(), "/hoge");
-  data3.script = URL(origin3.GetURL(), "/script3.js");
+  data3.scope = URL(origin3, "/hoge");
+  data3.script = URL(origin3, "/script3.js");
   data3.version_id = 678;
   data3.resources_total_size_bytes = 300;
   std::vector<ResourceRecordPtr> resources3;
@@ -394,11 +401,11 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data3, resources3, &deleted_version));
 
-  // |origin3| has two registrations.
+  // |key3| has two registrations.
   RegistrationData data4;
   data4.registration_id = 456;
-  data4.scope = URL(origin3.GetURL(), "/fuga");
-  data4.script = URL(origin3.GetURL(), "/script4.js");
+  data4.scope = URL(origin3, "/fuga");
+  data4.script = URL(origin3, "/script4.js");
   data4.version_id = 789;
   data4.resources_total_size_bytes = 400;
   std::vector<ResourceRecordPtr> resources4;
@@ -406,55 +413,59 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data4, resources4, &deleted_version));
 
-  origins.clear();
+  keys.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetOriginsWithRegistrations(&origins));
-  EXPECT_EQ(3U, origins.size());
-  EXPECT_TRUE(base::Contains(origins, origin1));
-  EXPECT_TRUE(base::Contains(origins, origin2));
-  EXPECT_TRUE(base::Contains(origins, origin3));
+            database->GetStorageKeysWithRegistrations(&keys));
+  EXPECT_EQ(3U, keys.size());
+  EXPECT_TRUE(base::Contains(keys, key1));
+  EXPECT_TRUE(base::Contains(keys, key2));
+  EXPECT_TRUE(base::Contains(keys, key3));
 
-  // |origin3| has another registration, so should not remove it from the
+  // |key3| has another registration, so should not remove it from the
   // unique origin list.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data4.registration_id,
-                                         origin3.GetURL(), &deleted_version));
+            database->DeleteRegistration(data4.registration_id, key3,
+                                         &deleted_version));
   EXPECT_EQ(data4.registration_id, deleted_version.registration_id);
 
-  origins.clear();
+  keys.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetOriginsWithRegistrations(&origins));
-  EXPECT_EQ(3U, origins.size());
-  EXPECT_TRUE(base::Contains(origins, origin1));
-  EXPECT_TRUE(base::Contains(origins, origin2));
-  EXPECT_TRUE(base::Contains(origins, origin3));
+            database->GetStorageKeysWithRegistrations(&keys));
+  EXPECT_EQ(3U, keys.size());
+  EXPECT_TRUE(base::Contains(keys, key1));
+  EXPECT_TRUE(base::Contains(keys, key2));
+  EXPECT_TRUE(base::Contains(keys, key3));
 
-  // |origin3| should be removed from the unique origin list.
+  // |key3| should be removed from the unique origin list.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data3.registration_id,
-                                         origin3.GetURL(), &deleted_version));
+            database->DeleteRegistration(data3.registration_id, key3,
+                                         &deleted_version));
   EXPECT_EQ(data3.registration_id, deleted_version.registration_id);
 
-  origins.clear();
+  keys.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetOriginsWithRegistrations(&origins));
-  EXPECT_EQ(2U, origins.size());
-  EXPECT_TRUE(base::Contains(origins, origin1));
-  EXPECT_TRUE(base::Contains(origins, origin2));
+            database->GetStorageKeysWithRegistrations(&keys));
+  EXPECT_EQ(2U, keys.size());
+  EXPECT_TRUE(base::Contains(keys, key1));
+  EXPECT_TRUE(base::Contains(keys, key2));
 }
 
-TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
+TEST(ServiceWorkerDatabaseTest, GetRegistrationsForStorageKey) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
 
   GURL origin1("https://example.com");
   GURL origin2("https://www.example.com");
   GURL origin3("https://example.org");
 
+  StorageKey key1(url::Origin::Create(origin1));
+  StorageKey key2(url::Origin::Create(origin2));
+  StorageKey key3(url::Origin::Create(origin3));
+
   std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
   std::vector<std::vector<ResourceRecordPtr>> resources_list;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetRegistrationsForOrigin(
-                url::Origin::Create(origin1), &registrations, &resources_list));
+            database->GetRegistrationsForStorageKey(key1, &registrations,
+                                                    &resources_list));
   EXPECT_TRUE(registrations.empty());
   EXPECT_TRUE(resources_list.empty());
 
@@ -476,8 +487,8 @@
   registrations.clear();
   resources_list.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetRegistrationsForOrigin(
-                url::Origin::Create(origin1), &registrations, &resources_list));
+            database->GetRegistrationsForStorageKey(key1, &registrations,
+                                                    &resources_list));
   EXPECT_EQ(1U, registrations.size());
   VerifyRegistrationData(data1, *registrations[0]);
   EXPECT_EQ(1U, resources_list.size());
@@ -499,8 +510,8 @@
   registrations.clear();
   resources_list.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetRegistrationsForOrigin(
-                url::Origin::Create(origin2), &registrations, &resources_list));
+            database->GetRegistrationsForStorageKey(key2, &registrations,
+                                                    &resources_list));
   EXPECT_EQ(1U, registrations.size());
   VerifyRegistrationData(data2, *registrations[0]);
   EXPECT_EQ(1U, resources_list.size());
@@ -519,7 +530,7 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data3, resources3, &deleted_version));
 
-  // |origin3| has two registrations.
+  // |key3| has two registrations.
   RegistrationData data4;
   data4.registration_id = 400;
   data4.scope = URL(origin3, "/fuga");
@@ -536,8 +547,8 @@
   registrations.clear();
   resources_list.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetRegistrationsForOrigin(
-                url::Origin::Create(origin3), &registrations, &resources_list));
+            database->GetRegistrationsForStorageKey(key3, &registrations,
+                                                    &resources_list));
   EXPECT_EQ(2U, registrations.size());
   VerifyRegistrationData(data3, *registrations[0]);
   VerifyRegistrationData(data4, *registrations[1]);
@@ -545,12 +556,12 @@
   VerifyResourceRecords(resources3, resources_list[0]);
   VerifyResourceRecords(resources4, resources_list[1]);
 
-  // The third parameter |opt_resources_list| to GetRegistrationsForOrigin()
+  // The third parameter |opt_resources_list| to GetRegistrationsForStorageKey()
   // is optional. So, nullptr should be acceptable.
   registrations.clear();
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetRegistrationsForOrigin(url::Origin::Create(origin1),
-                                                &registrations, nullptr));
+  EXPECT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
+      database->GetRegistrationsForStorageKey(key1, &registrations, nullptr));
   EXPECT_EQ(1U, registrations.size());
   VerifyRegistrationData(data1, *registrations[0]);
 }
@@ -631,6 +642,7 @@
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
 
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
   RegistrationData data;
   data.registration_id = 100;
   data.scope = URL(origin, "/foo");
@@ -670,15 +682,15 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data, *data_out);
   VerifyResourceRecords(resources, resources_out);
-  GURL origin_out;
+  StorageKey key_out;
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationOrigin(data.registration_id, &origin_out));
-  EXPECT_EQ(origin, origin_out);
+      database->ReadRegistrationStorageKey(data.registration_id, &key_out));
+  EXPECT_EQ(key, key_out);
 
   // Make sure that the resource is removed from the uncommitted list.
   uncommitted_ids_out.clear();
@@ -687,7 +699,7 @@
   EXPECT_TRUE(uncommitted_ids_out.empty());
 
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data.registration_id, origin,
+            database->DeleteRegistration(data.registration_id, key,
                                          &deleted_version));
   EXPECT_EQ(data.version_id, deleted_version.version_id);
   ASSERT_EQ(resources.size(), deleted_version.newly_purgeable_resources.size());
@@ -698,12 +710,12 @@
   // Make sure that the registration and resource records are gone.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   EXPECT_TRUE(resources_out.empty());
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kErrorNotFound,
-      database->ReadRegistrationOrigin(data.registration_id, &origin_out));
+      database->ReadRegistrationStorageKey(data.registration_id, &key_out));
 
   // Resources should be purgeable because these are no longer referred.
   std::vector<int64_t> purgeable_ids_out;
@@ -744,8 +756,9 @@
   deleted_version.version_id = kArbitraryVersionId;
   deleted_version.newly_purgeable_resources.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(kNonExistentRegistrationId, origin,
-                                         &deleted_version));
+            database->DeleteRegistration(
+                kNonExistentRegistrationId,
+                StorageKey(url::Origin::Create(origin)), &deleted_version));
   EXPECT_EQ(blink::mojom::kInvalidServiceWorkerVersionId,
             deleted_version.version_id);
   EXPECT_TRUE(deleted_version.newly_purgeable_resources.empty());
@@ -754,9 +767,10 @@
   deleted_version.version_id = kArbitraryVersionId;
   deleted_version.newly_purgeable_resources.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(kNonExistentRegistrationId,
-                                         GURL("https://example.net"),
-                                         &deleted_version));
+            database->DeleteRegistration(
+                kNonExistentRegistrationId,
+                StorageKey(url::Origin::Create(GURL("https://example.net"))),
+                &deleted_version));
   EXPECT_EQ(blink::mojom::kInvalidServiceWorkerVersionId,
             deleted_version.version_id);
   EXPECT_TRUE(deleted_version.newly_purgeable_resources.empty());
@@ -766,6 +780,7 @@
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
 
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
   RegistrationData data;
   data.registration_id = 100;
   data.scope = URL(origin, "/foo");
@@ -793,7 +808,7 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data, *data_out);
   VerifyResourceRecords(resources1, resources_out);
@@ -828,7 +843,7 @@
   // is moved to the purgeable list.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(updated_data->registration_id, origin,
+            database->ReadRegistration(updated_data->registration_id, key,
                                        &data_out, &resources_out));
   VerifyRegistrationData(*updated_data, *data_out);
   VerifyResourceRecords(resources2, resources_out);
@@ -844,6 +859,7 @@
 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
 
   ServiceWorkerDatabase::DeletedVersion deleted_version;
 
@@ -879,27 +895,27 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data1.registration_id, origin, &data_out,
+            database->ReadRegistration(data1.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data1, *data_out);
   VerifyResourceRecords(resources1, resources_out);
-  GURL origin_out;
+  StorageKey key_out;
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationOrigin(data1.registration_id, &origin_out));
-  EXPECT_EQ(origin, origin_out);
+      database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
+  EXPECT_EQ(key, key_out);
 
   // Make sure that registration2 is also stored.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data2.registration_id, origin, &data_out,
+            database->ReadRegistration(data2.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data2, *data_out);
   VerifyResourceRecords(resources2, resources_out);
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationOrigin(data2.registration_id, &origin_out));
-  EXPECT_EQ(origin, origin_out);
+      database->ReadRegistrationStorageKey(data2.registration_id, &key_out));
+  EXPECT_EQ(key, key_out);
 
   std::vector<int64_t> purgeable_ids_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
@@ -908,19 +924,19 @@
 
   // Delete registration1.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data1.registration_id, origin,
+            database->DeleteRegistration(data1.registration_id, key,
                                          &deleted_version));
   EXPECT_EQ(data1.registration_id, deleted_version.registration_id);
 
   // Make sure that registration1 is gone.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistration(data1.registration_id, origin, &data_out,
+            database->ReadRegistration(data1.registration_id, key, &data_out,
                                        &resources_out));
   EXPECT_TRUE(resources_out.empty());
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kErrorNotFound,
-      database->ReadRegistrationOrigin(data1.registration_id, &origin_out));
+      database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
 
   purgeable_ids_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
@@ -932,35 +948,36 @@
   // Make sure that registration2 is still alive.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data2.registration_id, origin, &data_out,
+            database->ReadRegistration(data2.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data2, *data_out);
   VerifyResourceRecords(resources2, resources_out);
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationOrigin(data2.registration_id, &origin_out));
-  EXPECT_EQ(origin, origin_out);
+      database->ReadRegistrationStorageKey(data2.registration_id, &key_out));
+  EXPECT_EQ(key, key_out);
 }
 
 TEST(ServiceWorkerDatabaseTest, Registration_UninitializedDatabase) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
 
   // Should be failed because the database does not exist.
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistration(100, origin, &data_out, &resources_out));
+            database->ReadRegistration(100, key, &data_out, &resources_out));
   EXPECT_TRUE(data_out.is_null());
   EXPECT_TRUE(resources_out.empty());
-  GURL origin_out;
+  StorageKey key_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistrationOrigin(100, &origin_out));
+            database->ReadRegistrationStorageKey(100, &key_out));
 
   // Deleting non-existent registration should succeed.
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(100, origin, &deleted_version));
+            database->DeleteRegistration(100, key, &deleted_version));
   EXPECT_EQ(blink::mojom::kInvalidServiceWorkerVersionId,
             deleted_version.version_id);
   EXPECT_TRUE(deleted_version.newly_purgeable_resources.empty());
@@ -972,15 +989,15 @@
   ASSERT_EQ(ServiceWorkerDatabase::DATABASE_STATE_UNINITIALIZED,
             database->state_);
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistration(100, origin, &data_out, &resources_out));
+            database->ReadRegistration(100, key, &data_out, &resources_out));
   EXPECT_TRUE(data_out.is_null());
   EXPECT_TRUE(resources_out.empty());
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->ReadRegistrationOrigin(100, &origin_out));
+            database->ReadRegistrationStorageKey(100, &key_out));
 
   // Deleting non-existent registration should succeed.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(100, origin, &deleted_version));
+            database->DeleteRegistration(100, key, &deleted_version));
   EXPECT_EQ(blink::mojom::kInvalidServiceWorkerVersionId,
             deleted_version.version_id);
   EXPECT_TRUE(deleted_version.newly_purgeable_resources.empty());
@@ -1039,24 +1056,27 @@
   RegistrationDataPtr data;
   std::vector<ResourceRecordPtr> resources;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data1.registration_id, origin1, &data,
-                                       &resources));
+            database->ReadRegistration(data1.registration_id,
+                                       StorageKey(url::Origin::Create(origin1)),
+                                       &data, &resources));
   VerifyRegistrationData(data1, *data);
   VerifyResourceRecords(resources1, resources);
   EXPECT_EQ(2U, resources.size());
   resources.clear();
 
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data2.registration_id, origin2, &data,
-                                       &resources));
+            database->ReadRegistration(data2.registration_id,
+                                       StorageKey(url::Origin::Create(origin2)),
+                                       &data, &resources));
   VerifyRegistrationData(data2, *data);
   VerifyResourceRecords(resources2, resources);
   EXPECT_EQ(2U, resources.size());
   resources.clear();
 
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data3.registration_id, origin3, &data,
-                                       &resources));
+            database->ReadRegistration(data3.registration_id,
+                                       StorageKey(url::Origin::Create(origin3)),
+                                       &data, &resources));
   VerifyRegistrationData(data3, *data);
   VerifyResourceRecords(resources3, resources);
   EXPECT_EQ(2U, resources.size());
@@ -1066,6 +1086,7 @@
 TEST(ServiceWorkerDatabaseTest, UserData_Basic) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add a registration.
   RegistrationData data;
@@ -1084,7 +1105,7 @@
   std::vector<std::string> user_data_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data.registration_id, kOrigin,
+                data.registration_id, key,
                 CreateUserData(data.registration_id, {{"key1", "data"}})));
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1094,14 +1115,14 @@
 
   // Writing user data not associated with the stored registration should be
   // failed.
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->WriteUserData(
-                300, kOrigin,
-                CreateUserData(data.registration_id, {{"key1", "data"}})));
+  EXPECT_EQ(
+      ServiceWorkerDatabase::Status::kErrorNotFound,
+      database->WriteUserData(
+          300, key, CreateUserData(data.registration_id, {{"key1", "data"}})));
 
   // Write empty user data for a different key.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->WriteUserData(data.registration_id, kOrigin,
+            database->WriteUserData(data.registration_id, key,
                                     CreateUserData(data.registration_id,
                                                    {{"key2", std::string()}})));
   EXPECT_EQ(
@@ -1118,7 +1139,7 @@
   // Overwrite the existing user data.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data.registration_id, kOrigin,
+                data.registration_id, key,
                 CreateUserData(data.registration_id, {{"key1", "overwrite"}})));
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1142,7 +1163,7 @@
   // Write/overwrite multiple user data keys.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data.registration_id, kOrigin,
+                data.registration_id, key,
                 CreateUserData(data.registration_id, {{"key2", "overwrite2"},
                                                       {"key3", "data3"},
                                                       {"key4", "data4"}})));
@@ -1186,6 +1207,7 @@
      UserData_ReadUserDataForAllRegistrationsByKeyPrefix) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add registration 1.
   RegistrationData data1;
@@ -1216,39 +1238,39 @@
   // Write user data associated with the registration1.
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->WriteUserData(data1.registration_id, kOrigin,
+      database->WriteUserData(data1.registration_id, key,
                               CreateUserData(data1.registration_id,
                                              {{"key_prefix:key1", "value1"}})));
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->WriteUserData(data1.registration_id, kOrigin,
+      database->WriteUserData(data1.registration_id, key,
                               CreateUserData(data1.registration_id,
                                              {{"key_prefix:key2", "value2"}})));
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->WriteUserData(data1.registration_id, kOrigin,
+      database->WriteUserData(data1.registration_id, key,
                               CreateUserData(data1.registration_id,
                                              {{"key_prefix:key3", "value3"}})));
 
   // Write user data associated with the registration2.
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->WriteUserData(data2.registration_id, kOrigin,
+      database->WriteUserData(data2.registration_id, key,
                               CreateUserData(data2.registration_id,
                                              {{"key_prefix:key1", "value1"}})));
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->WriteUserData(data2.registration_id, kOrigin,
+      database->WriteUserData(data2.registration_id, key,
                               CreateUserData(data2.registration_id,
                                              {{"key_prefix:key2", "value2"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id,
                                {{"another_key_prefix:key1", "value1"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id,
                                {{"another_key_prefix:key2", "value2"}})));
 
@@ -1296,7 +1318,7 @@
   // Write user data associated with the registration.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data.registration_id, kOrigin,
+                data.registration_id, StorageKey(kOrigin),
                 CreateUserData(data.registration_id,
                                {{"key_prefix:key1", "value_c1"},
                                 {"key_prefix:key2", "value_c2"},
@@ -1342,7 +1364,7 @@
   // Write user data associated with the registration.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data.registration_id, kOrigin,
+                data.registration_id, StorageKey(kOrigin),
                 CreateUserData(data.registration_id,
                                {{"key_prefix:key1", "value_c1"},
                                 {"key_prefix:key2", "value_c2"},
@@ -1375,6 +1397,7 @@
 TEST(ServiceWorkerDatabaseTest, UserData_DeleteUserDataByKeyPrefixes) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add registration 1.
   RegistrationData data1;
@@ -1405,7 +1428,7 @@
   // Write user data associated with registration 1.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, kOrigin,
+                data1.registration_id, key,
                 CreateUserData(data1.registration_id,
                                {{"key_prefix:key1", "value_a1"},
                                 {"key_prefix:key2", "value_a2"},
@@ -1415,7 +1438,7 @@
   // Write user data associated with registration 2.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id,
                                {{"key_prefix:key1", "value_c1"},
                                 {"key_prefix:key2", "value_c2"},
@@ -1483,6 +1506,7 @@
      UserData_DeleteUserDataForAllRegistrationsByKeyPrefix) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add registration 1.
   RegistrationData data1;
@@ -1513,7 +1537,7 @@
   // Write user data associated with registration 1.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, kOrigin,
+                data1.registration_id, key,
                 CreateUserData(data1.registration_id,
                                {{"key_prefix:key1", "value_a1"},
                                 {"key_prefix:key2", "value_a2"},
@@ -1523,7 +1547,7 @@
   // Write user data associated with registration 2.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id,
                                {{"key_prefix:key1", "value_c1"},
                                 {"key_prefix:key2", "value_c2"},
@@ -1570,6 +1594,7 @@
 TEST(ServiceWorkerDatabaseTest, UserData_DataIsolation) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add registration 1.
   RegistrationData data1;
@@ -1602,7 +1627,7 @@
   std::vector<std::string> user_data_out;
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, kOrigin,
+                data1.registration_id, key,
                 CreateUserData(data1.registration_id, {{"key", "value1"}})));
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1617,7 +1642,7 @@
   // the data associated with registration1.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id, {{"key", "value2"}})));
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1668,6 +1693,7 @@
 TEST(ServiceWorkerDatabaseTest, UserData_DeleteRegistration) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Add registration 1.
   RegistrationData data1;
@@ -1699,11 +1725,11 @@
   std::vector<std::string> user_data_out;
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, kOrigin,
+                data1.registration_id, key,
                 CreateUserData(data1.registration_id, {{"key1", "value1"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, kOrigin,
+                data1.registration_id, key,
                 CreateUserData(data1.registration_id, {{"key2", "value2"}})));
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1719,7 +1745,7 @@
   // Write user data associated with the registration2.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, kOrigin,
+                data2.registration_id, key,
                 CreateUserData(data2.registration_id, {{"key3", "value3"}})));
   ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
@@ -1730,8 +1756,8 @@
   // Delete all data associated with the registration1. This shouldn't delete
   // the data associated with registration2.
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data1.registration_id,
-                                         kOrigin.GetURL(), &deleted_version));
+            database->DeleteRegistration(data1.registration_id, key,
+                                         &deleted_version));
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kErrorNotFound,
       database->ReadUserData(data1.registration_id, {"key1"}, &user_data_out));
@@ -1748,6 +1774,7 @@
 TEST(ServiceWorkerDatabaseTest, UserData_UninitializedDatabase) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   const url::Origin kOrigin = url::Origin::Create(GURL("https://example.com"));
+  StorageKey key(kOrigin);
 
   // Should be failed because the database does not exist.
   std::vector<std::string> user_data_out;
@@ -1756,7 +1783,7 @@
 
   // Should be failed because the associated registration does not exist.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->WriteUserData(100, kOrigin,
+            database->WriteUserData(100, key,
                                     CreateUserData(100, {{"key", "value"}})));
 
   // Deleting non-existent entry should succeed.
@@ -1772,7 +1799,7 @@
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
             database->ReadUserData(100, {"key"}, &user_data_out));
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->WriteUserData(100, kOrigin,
+            database->WriteUserData(100, key,
                                     CreateUserData(100, {{"key", "value"}})));
 
   // Deleting non-existent entry should succeed.
@@ -1783,12 +1810,13 @@
 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
 
   ServiceWorkerDatabase::DeletedVersion deleted_version;
 
   // Should be false because a registration does not exist.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->UpdateVersionToActive(0, origin));
+            database->UpdateVersionToActive(0, key));
 
   // Add a registration.
   RegistrationData data;
@@ -1807,19 +1835,19 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data, *data_out);
   EXPECT_EQ(1u, resources_out.size());
 
   // Activate the registration.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->UpdateVersionToActive(data.registration_id, origin));
+            database->UpdateVersionToActive(data.registration_id, key));
 
   // Make sure that the registration is activated.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   mojom::ServiceWorkerRegistrationDataPtr expected_data = data.Clone();
   expected_data->is_active = true;
@@ -1828,23 +1856,24 @@
 
   // Delete the registration.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data.registration_id, origin,
+            database->DeleteRegistration(data.registration_id, key,
                                          &deleted_version));
   EXPECT_EQ(data.registration_id, deleted_version.registration_id);
 
   // Should be false because the registration is gone.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->UpdateVersionToActive(data.registration_id, origin));
+            database->UpdateVersionToActive(data.registration_id, key));
 }
 
 TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
   ServiceWorkerDatabase::DeletedVersion deleted_version;
 
   // Should be false because a registration does not exist.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->UpdateLastCheckTime(0, origin, base::Time::Now()));
+            database->UpdateLastCheckTime(0, key, base::Time::Now()));
 
   // Add a registration.
   RegistrationData data;
@@ -1863,21 +1892,21 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data, *data_out);
   EXPECT_EQ(1u, resources_out.size());
 
   // Update the last check time.
   base::Time updated_time = base::Time::Now();
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->UpdateLastCheckTime(data.registration_id, origin,
-                                          updated_time));
+  EXPECT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
+      database->UpdateLastCheckTime(data.registration_id, key, updated_time));
 
   // Make sure that the registration is updated.
   resources_out.clear();
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
+            database->ReadRegistration(data.registration_id, key, &data_out,
                                        &resources_out));
   mojom::ServiceWorkerRegistrationDataPtr expected_data = data.Clone();
   expected_data->last_update_check = updated_time;
@@ -1886,13 +1915,13 @@
 
   // Delete the registration.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteRegistration(data.registration_id, origin,
+            database->DeleteRegistration(data.registration_id, key,
                                          &deleted_version));
   EXPECT_EQ(data.registration_id, deleted_version.registration_id);
 
   // Should be false because the registration is gone.
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
-            database->UpdateLastCheckTime(data.registration_id, origin,
+            database->UpdateLastCheckTime(data.registration_id, key,
                                           base::Time::Now()));
 }
 
@@ -1944,17 +1973,19 @@
   EXPECT_EQ(expected, ids_out);
 }
 
-TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
+TEST(ServiceWorkerDatabaseTest, DeleteAllDataForStorageKey) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   ServiceWorkerDatabase::DeletedVersion deleted_version;
 
-  // Data associated with |origin1| will be removed.
+  // Data associated with |key1| will be removed.
   GURL url1("https://example.com");
   GURL url2("https://example.org");
   url::Origin origin1 = url::Origin::Create(url1);
   url::Origin origin2 = url::Origin::Create(url2);
+  StorageKey key1(origin1);
+  StorageKey key2(origin2);
 
-  // |origin1| has two registrations (registration1 and registration2).
+  // |key1| has two registrations (registration1 and registration2).
   RegistrationData data1;
   data1.registration_id = 10;
   data1.scope = URL(url1, "/foo");
@@ -1969,11 +2000,11 @@
             database->WriteRegistration(data1, resources1, &deleted_version));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, origin1,
+                data1.registration_id, key1,
                 CreateUserData(data1.registration_id, {{"key1", "value1"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, origin1,
+                data1.registration_id, key1,
                 CreateUserData(data1.registration_id, {{"key2", "value2"}})));
 
   RegistrationData data2;
@@ -1990,14 +2021,14 @@
             database->WriteRegistration(data2, resources2, &deleted_version));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, origin1,
+                data2.registration_id, key1,
                 CreateUserData(data2.registration_id, {{"key3", "value3"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, origin1,
+                data2.registration_id, key1,
                 CreateUserData(data2.registration_id, {{"key4", "value4"}})));
 
-  // |origin2| has one registration (registration3).
+  // |key2| has one registration (registration3).
   RegistrationData data3;
   data3.registration_id = 12;
   data3.scope = URL(url2, "/hoge");
@@ -2012,52 +2043,52 @@
             database->WriteRegistration(data3, resources3, &deleted_version));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data3.registration_id, origin2,
+                data3.registration_id, key2,
                 CreateUserData(data3.registration_id, {{"key5", "value5"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data3.registration_id, origin2,
+                data3.registration_id, key2,
                 CreateUserData(data3.registration_id, {{"key6", "value6"}})));
 
-  std::set<GURL> origins_to_delete;
+  std::set<StorageKey> keys_to_delete;
   std::vector<int64_t> newly_purgeable_resources;
-  origins_to_delete.insert(url1);
+  keys_to_delete.insert(key1);
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteAllDataForOrigins(origins_to_delete,
-                                              &newly_purgeable_resources));
+            database->DeleteAllDataForStorageKeys(keys_to_delete,
+                                                  &newly_purgeable_resources));
 
-  // |origin1| should be removed from the unique origin list.
-  std::set<url::Origin> unique_origins;
+  // |key1| should be removed from the unique origin list.
+  std::set<StorageKey> unique_keys;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetOriginsWithRegistrations(&unique_origins));
-  EXPECT_EQ(1u, unique_origins.size());
-  EXPECT_TRUE(base::Contains(unique_origins, origin2));
+            database->GetStorageKeysWithRegistrations(&unique_keys));
+  EXPECT_EQ(1u, unique_keys.size());
+  EXPECT_TRUE(base::Contains(unique_keys, key2));
 
-  // The registrations for |origin1| should be removed.
+  // The registrations for |key1| should be removed.
   std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->GetRegistrationsForOrigin(origin1, &registrations, nullptr));
+      database->GetRegistrationsForStorageKey(key1, &registrations, nullptr));
   EXPECT_TRUE(registrations.empty());
-  GURL origin_out;
+  StorageKey key_out;
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kErrorNotFound,
-      database->ReadRegistrationOrigin(data1.registration_id, &origin_out));
+      database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
 
-  // The registration for |origin2| should not be removed.
+  // The registration for |key2| should not be removed.
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data3.registration_id, url2, &data_out,
+            database->ReadRegistration(data3.registration_id, key2, &data_out,
                                        &resources_out));
   VerifyRegistrationData(data3, *data_out);
   VerifyResourceRecords(resources3, resources_out);
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationOrigin(data3.registration_id, &origin_out));
-  EXPECT_EQ(url2, origin_out);
+      database->ReadRegistrationStorageKey(data3.registration_id, &key_out));
+  EXPECT_EQ(key2, key_out);
 
-  // The resources associated with |origin1| should be purgeable.
+  // The resources associated with |key1| should be purgeable.
   std::vector<int64_t> purgeable_ids_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->GetPurgeableResourceIds(&purgeable_ids_out));
@@ -2067,7 +2098,7 @@
   EXPECT_TRUE(base::Contains(purgeable_ids_out, 3));
   EXPECT_TRUE(base::Contains(purgeable_ids_out, 4));
 
-  // The user data associated with |origin1| should be removed.
+  // The user data associated with |key1| should be removed.
   std::vector<std::string> user_data_out;
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kErrorNotFound,
@@ -2082,7 +2113,7 @@
       ServiceWorkerDatabase::Status::kErrorNotFound,
       database->ReadUserData(data2.registration_id, {"key4"}, &user_data_out));
 
-  // The user data associated with |origin2| should not be removed.
+  // The user data associated with |key2| should not be removed.
   EXPECT_EQ(
       ServiceWorkerDatabase::Status::kOk,
       database->ReadUserData(data3.registration_id, {"key5"}, &user_data_out));
@@ -2133,19 +2164,21 @@
   RegistrationDataPtr data_out;
   std::vector<ResourceRecordPtr> resources_out;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorCorrupted,
-            database->ReadRegistration(data.registration_id, origin, &data_out,
-                                       &resources_out));
+            database->ReadRegistration(data.registration_id,
+                                       StorageKey(url::Origin::Create(origin)),
+                                       &data_out, &resources_out));
   EXPECT_TRUE(resources_out.empty());
 }
 
-// Tests that GetRegistrationsForOrigin() detects corruption without crashing.
-// It must delete the database after freeing the iterator it uses to read all
-// registrations. Regression test for https://crbug.com/909024.
-TEST(ServiceWorkerDatabaseTest, Corruption_GetRegistrationsForOrigin) {
+// Tests that GetRegistrationsForStorageKey() detects corruption without
+// crashing. It must delete the database after freeing the iterator it uses to
+// read all registrations. Regression test for https://crbug.com/909024.
+TEST(ServiceWorkerDatabaseTest, Corruption_GetRegistrationsForStorageKey) {
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   std::vector<ResourceRecordPtr> resources;
   GURL origin("https://example.com");
+  StorageKey key(url::Origin::Create(origin));
 
   // Write a normal registration.
   RegistrationData data1;
@@ -2172,14 +2205,14 @@
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data2, resources, &deleted_version));
 
-  // Call GetRegistrationsForOrigin(). It should detect corruption, and not
+  // Call GetRegistrationsForStorageKey(). It should detect corruption, and not
   // crash.
   base::HistogramTester histogram_tester;
   std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
   std::vector<std::vector<ResourceRecordPtr>> resources_list;
   EXPECT_EQ(ServiceWorkerDatabase::Status::kErrorCorrupted,
-            database->GetRegistrationsForOrigin(
-                url::Origin::Create(origin), &registrations, &resources_list));
+            database->GetRegistrationsForStorageKey(key, &registrations,
+                                                    &resources_list));
   EXPECT_TRUE(registrations.empty());
   EXPECT_TRUE(resources_list.empty());
 
@@ -2266,10 +2299,10 @@
     // Restore.
     std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
     std::vector<std::vector<ResourceRecordPtr>> resources_list;
-    EXPECT_EQ(
-        ServiceWorkerDatabase::Status::kOk,
-        database->GetRegistrationsForOrigin(url::Origin::Create(origin),
-                                            &registrations, &resources_list));
+    EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
+              database->GetRegistrationsForStorageKey(
+                  StorageKey(url::Origin::Create(origin)), &registrations,
+                  &resources_list));
 
     // The data must not have been altered.
     VerifyRegistrationData(data, *registrations[0]);
@@ -2336,4 +2369,52 @@
             registration->cross_origin_embedder_policy.value);
 }
 
+// As part of crbug.com/1199077 ServiceWorkerDataBase was refactored to use
+// StorageKey instead of url::Origin/GURL. The refactor is/should be a no-op but
+// this test exists to confirms that a DB created with the Origin/GURL impl can
+// still be correctly read by the StorageKey impl.
+TEST(ServiceWorkerDatabaseTest, StorageKeyImplCanReadPreviousOriginImplDB) {
+  base::FilePath root_path;
+  base::PathService::Get(base::DIR_SOURCE_ROOT, &root_path);
+  base::FilePath database_dir = root_path.AppendASCII(
+      "components/test/data/service_worker/created_by_origin_impl/Database/");
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  ASSERT_TRUE(base::CopyDirectory(database_dir, temp_dir.GetPath(),
+                                  /*recursive=*/true));
+
+  base::FilePath temp_database_dir = temp_dir.GetPath();
+  temp_database_dir = temp_database_dir.AppendASCII("Database");
+
+  std::unique_ptr<ServiceWorkerDatabase> database(
+      CreateDatabase(temp_database_dir));
+
+  int64_t next_registration_id;
+  int64_t next_version_id;
+  int64_t next_resource_id;
+  // Make sure to read in the IDs first, otherwise the
+  // GetRegistrationsForStorageKey will return as corrupted.
+  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->GetNextAvailableIds(&next_registration_id,
+                                          &next_version_id, &next_resource_id));
+  EXPECT_EQ(next_registration_id, 1);
+  EXPECT_EQ(next_version_id, 1);
+  EXPECT_EQ(next_resource_id, 1);
+
+  // https://googlechrome.github.io/samples/service-worker/basic/ provided the
+  // service worker for this test.
+  StorageKey key(url::Origin::Create(GURL("https://googlechrome.github.io/")));
+
+  std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
+  std::vector<std::vector<ResourceRecordPtr>> resources_list;
+  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->GetRegistrationsForStorageKey(key, &registrations,
+                                                    &resources_list));
+
+  EXPECT_FALSE(registrations.empty());
+  EXPECT_FALSE(resources_list.empty());
+}
+
 }  // namespace storage
diff --git a/components/services/storage/service_worker/service_worker_disk_cache.cc b/components/services/storage/service_worker/service_worker_disk_cache.cc
index cbe9089..c8491a86 100644
--- a/components/services/storage/service_worker/service_worker_disk_cache.cc
+++ b/components/services/storage/service_worker/service_worker_disk_cache.cc
@@ -11,10 +11,10 @@
 #include "base/callback.h"
 #include "base/callback_helpers.h"
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "net/base/cache_type.h"
 #include "net/base/completion_once_callback.h"
diff --git a/components/services/storage/service_worker/service_worker_storage.cc b/components/services/storage/service_worker/service_worker_storage.cc
index ce3b147..a859dc56 100644
--- a/components/services/storage/service_worker/service_worker_storage.cc
+++ b/components/services/storage/service_worker/service_worker_storage.cc
@@ -6,21 +6,23 @@
 
 #include <stddef.h>
 
+#include <algorithm>
 #include <memory>
 #include <utility>
 
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/trace_event/trace_event.h"
 #include "components/services/storage/public/cpp/constants.h"
+#include "components/services/storage/public/cpp/storage_key.h"
 #include "components/services/storage/service_worker/service_worker_disk_cache.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "net/base/completion_once_callback.h"
@@ -277,8 +279,8 @@
 
   base::PostTaskAndReplyWithResult(
       database_task_runner_.get(), FROM_HERE,
-      base::BindOnce(&ServiceWorkerDatabase::GetRegistrationsForOrigin,
-                     base::Unretained(database_.get()), origin,
+      base::BindOnce(&ServiceWorkerDatabase::GetRegistrationsForStorageKey,
+                     base::Unretained(database_.get()), StorageKey(origin),
                      registrations_ptr, resource_lists_ptr),
       base::BindOnce(&ServiceWorkerStorage::DidGetRegistrationsForOrigin,
                      weak_factory_.GetWeakPtr(), std::move(callback),
@@ -408,7 +410,7 @@
       database_task_runner_.get(), FROM_HERE,
       base::BindOnce(&ServiceWorkerDatabase::UpdateVersionToActive,
                      base::Unretained(database_.get()), registration_id,
-                     origin),
+                     StorageKey(url::Origin::Create(origin))),
       std::move(callback));
 }
 
@@ -436,7 +438,8 @@
   base::PostTaskAndReplyWithResult(
       database_task_runner_.get(), FROM_HERE,
       base::BindOnce(&ServiceWorkerDatabase::UpdateLastCheckTime,
-                     base::Unretained(database_.get()), registration_id, origin,
+                     base::Unretained(database_.get()), registration_id,
+                     StorageKey(url::Origin::Create(origin)),
                      last_update_check_time),
       std::move(callback));
 }
@@ -465,8 +468,8 @@
   base::PostTaskAndReplyWithResult(
       database_task_runner_.get(), FROM_HERE,
       base::BindOnce(&ServiceWorkerDatabase::UpdateNavigationPreloadEnabled,
-                     base::Unretained(database_.get()), registration_id, origin,
-                     enable),
+                     base::Unretained(database_.get()), registration_id,
+                     StorageKey(url::Origin::Create(origin)), enable),
       std::move(callback));
 }
 
@@ -494,8 +497,8 @@
   base::PostTaskAndReplyWithResult(
       database_task_runner_.get(), FROM_HERE,
       base::BindOnce(&ServiceWorkerDatabase::UpdateNavigationPreloadHeader,
-                     base::Unretained(database_.get()), registration_id, origin,
-                     value),
+                     base::Unretained(database_.get()), registration_id,
+                     StorageKey(url::Origin::Create(origin)), value),
       std::move(callback));
 }
 
@@ -741,8 +744,8 @@
   base::PostTaskAndReplyWithResult(
       database_task_runner_.get(), FROM_HERE,
       base::BindOnce(&ServiceWorkerDatabase::WriteUserData,
-                     base::Unretained(database_.get()), registration_id, origin,
-                     std::move(user_data)),
+                     base::Unretained(database_.get()), registration_id,
+                     StorageKey(origin), std::move(user_data)),
       std::move(callback));
 }
 
@@ -1593,7 +1596,13 @@
     return;
   }
 
-  status = database->GetOriginsWithRegistrations(&data->origins);
+  std::set<StorageKey> keys;
+  status = database->GetStorageKeysWithRegistrations(&keys);
+  // TODO(crbug.com/1199077) Remove adaptor once upstream code uses StorageKey.
+  std::transform(keys.begin(), keys.end(),
+                 std::inserter(data->origins, data->origins.begin()),
+                 [](const StorageKey& key) { return key.origin(); });
+
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE,
@@ -1613,9 +1622,11 @@
     DeleteRegistrationInDBCallback callback) {
   DCHECK(database);
 
+  const StorageKey key(url::Origin::Create(origin));
+
   ServiceWorkerDatabase::DeletedVersion deleted_version;
   ServiceWorkerDatabase::Status status =
-      database->DeleteRegistration(registration_id, origin, &deleted_version);
+      database->DeleteRegistration(registration_id, key, &deleted_version);
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback), OriginState::kKeep,
@@ -1626,8 +1637,8 @@
   // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the
   // unique origin list.
   RegistrationList registrations;
-  status = database->GetRegistrationsForOrigin(url::Origin::Create(origin),
-                                               &registrations, nullptr);
+  status =
+      database->GetRegistrationsForStorageKey(key, &registrations, nullptr);
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback), OriginState::kKeep,
@@ -1664,10 +1675,11 @@
     scoped_refptr<base::SequencedTaskRunner> original_task_runner,
     const GURL& client_url,
     FindInDBCallback callback) {
-  GURL origin = client_url.GetOrigin();
+  StorageKey key(url::Origin::Create(client_url.GetOrigin()));
   RegistrationList registration_data_list;
-  ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin(
-      url::Origin::Create(origin), &registration_data_list, nullptr);
+  ServiceWorkerDatabase::Status status =
+      database->GetRegistrationsForStorageKey(key, &registration_data_list,
+                                              nullptr);
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback),
@@ -1687,7 +1699,7 @@
     if (matcher.MatchLongest(registration_data->scope))
       match = registration_data->registration_id;
   if (match != blink::mojom::kInvalidServiceWorkerRegistrationId)
-    status = database->ReadRegistration(match, origin, &data, resources.get());
+    status = database->ReadRegistration(match, key, &data, resources.get());
 
   original_task_runner->PostTask(
       FROM_HERE, base::BindOnce(std::move(callback), std::move(data),
@@ -1700,10 +1712,11 @@
     scoped_refptr<base::SequencedTaskRunner> original_task_runner,
     const GURL& scope,
     FindInDBCallback callback) {
-  GURL origin = scope.GetOrigin();
+  StorageKey key(url::Origin::Create(scope.GetOrigin()));
   RegistrationList registration_data_list;
-  ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin(
-      url::Origin::Create(origin), &registration_data_list, nullptr);
+  ServiceWorkerDatabase::Status status =
+      database->GetRegistrationsForStorageKey(key, &registration_data_list,
+                                              nullptr);
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback),
@@ -1719,8 +1732,8 @@
   for (const auto& registration_data : registration_data_list) {
     if (scope != registration_data->scope)
       continue;
-    status = database->ReadRegistration(registration_data->registration_id,
-                                        origin, &data, resources.get());
+    status = database->ReadRegistration(registration_data->registration_id, key,
+                                        &data, resources.get());
     break;  // We're done looping.
   }
 
@@ -1739,7 +1752,7 @@
   mojom::ServiceWorkerRegistrationDataPtr data;
   auto resources = std::make_unique<ResourceList>();
   ServiceWorkerDatabase::Status status = database->ReadRegistration(
-      registration_id, origin.GetURL(), &data, resources.get());
+      registration_id, StorageKey(origin), &data, resources.get());
   original_task_runner->PostTask(
       FROM_HERE, base::BindOnce(std::move(callback), std::move(data),
                                 std::move(resources), status));
@@ -1751,9 +1764,9 @@
     scoped_refptr<base::SequencedTaskRunner> original_task_runner,
     int64_t registration_id,
     FindInDBCallback callback) {
-  GURL origin;
+  StorageKey key;
   ServiceWorkerDatabase::Status status =
-      database->ReadRegistrationOrigin(registration_id, &origin);
+      database->ReadRegistrationStorageKey(registration_id, &key);
   if (status != ServiceWorkerDatabase::Status::kOk) {
     original_task_runner->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback),
@@ -1761,8 +1774,8 @@
                                   /*resources=*/nullptr, status));
     return;
   }
-  FindForIdInDB(database, original_task_runner, registration_id,
-                url::Origin::Create(origin), std::move(callback));
+  FindForIdInDB(database, original_task_runner, registration_id, key.origin(),
+                std::move(callback));
 }
 
 // static
@@ -1773,7 +1786,7 @@
     GetUsageForOriginCallback callback) {
   int64_t usage = 0;
   ServiceWorkerDatabase::Status status =
-      database->GetUsageForOrigin(origin, usage);
+      database->GetUsageForStorageKey(StorageKey(origin), usage);
   original_task_runner->PostTask(
       FROM_HERE, base::BindOnce(std::move(callback), status, usage));
 }
@@ -1851,7 +1864,13 @@
   DCHECK(database);
 
   std::vector<int64_t> newly_purgeable_resources;
-  database->DeleteAllDataForOrigins(origins, &newly_purgeable_resources);
+  // TODO(crbug.com/1199077) Remove adaptor once upstream code uses StorageKey.
+  std::set<StorageKey> keys;
+  std::transform(origins.begin(), origins.end(),
+                 std::inserter(keys, keys.begin()), [](const GURL& origin) {
+                   return StorageKey(url::Origin::Create(origin));
+                 });
+  database->DeleteAllDataForStorageKeys(keys, &newly_purgeable_resources);
 }
 
 void ServiceWorkerStorage::PerformStorageCleanupInDB(
diff --git a/components/subresource_filter/content/browser/BUILD.gn b/components/subresource_filter/content/browser/BUILD.gn
index f37ece8..5a3f31e 100644
--- a/components/subresource_filter/content/browser/BUILD.gn
+++ b/components/subresource_filter/content/browser/BUILD.gn
@@ -31,7 +31,6 @@
     "ruleset_version.h",
     "subframe_navigation_filtering_throttle.cc",
     "subframe_navigation_filtering_throttle.h",
-    "subresource_filter_client.h",
     "subresource_filter_content_settings_manager.cc",
     "subresource_filter_content_settings_manager.h",
     "subresource_filter_observer.h",
@@ -110,8 +109,8 @@
     "subresource_filter_test_harness.h",
     "test_ruleset_publisher.cc",
     "test_ruleset_publisher.h",
-    "test_subresource_filter_client.cc",
-    "test_subresource_filter_client.h",
+    "throttle_manager_test_support.cc",
+    "throttle_manager_test_support.h",
   ]
   deps = [
     ":browser",
@@ -165,6 +164,7 @@
     ":browser",
     ":test_support",
     "//base/test:test_support",
+    "//components/content_settings/browser",
     "//components/content_settings/core/browser",
     "//components/content_settings/core/common",
     "//components/infobars/content",
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
index 2baad959..d39a88a 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
+++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
@@ -19,7 +19,6 @@
 #include "components/subresource_filter/content/browser/async_document_subresource_filter.h"
 #include "components/subresource_filter/content/browser/page_load_statistics.h"
 #include "components/subresource_filter/content/browser/profile_interaction_manager.h"
-#include "components/subresource_filter/content/browser/subresource_filter_client.h"
 #include "components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.h"
 #include "components/subresource_filter/content/mojom/subresource_filter_agent.mojom.h"
 #include "components/subresource_filter/core/browser/subresource_filter_constants.h"
@@ -89,7 +88,6 @@
 // static
 void ContentSubresourceFilterThrottleManager::CreateForWebContents(
     content::WebContents* web_contents,
-    std::unique_ptr<SubresourceFilterClient> client,
     SubresourceFilterProfileContext* profile_context,
     infobars::ContentInfoBarManager* infobar_manager,
     scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager,
@@ -103,8 +101,8 @@
   web_contents->SetUserData(
       kContentSubresourceFilterThrottleManagerWebContentsUserDataKey,
       std::make_unique<ContentSubresourceFilterThrottleManager>(
-          std::move(client), profile_context, infobar_manager, database_manager,
-          dealer_handle, web_contents));
+          profile_context, infobar_manager, database_manager, dealer_handle,
+          web_contents));
 }
 
 // static
@@ -118,7 +116,6 @@
 
 ContentSubresourceFilterThrottleManager::
     ContentSubresourceFilterThrottleManager(
-        std::unique_ptr<SubresourceFilterClient> client,
         SubresourceFilterProfileContext* profile_context,
         infobars::ContentInfoBarManager* infobar_manager,
         scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
@@ -128,7 +125,6 @@
     : content::WebContentsObserver(web_contents),
       receiver_(web_contents, this),
       dealer_handle_(dealer_handle),
-      client_(std::move(client)),
       database_manager_(std::move(database_manager)),
       profile_interaction_manager_(
           std::make_unique<subresource_filter::ProfileInteractionManager>(
@@ -622,7 +618,7 @@
     return;
   }
 
-  profile_interaction_manager_->MaybeShowNotification(client_.get());
+  profile_interaction_manager_->MaybeShowNotification();
 
   current_committed_load_has_notified_disallowed_load_ = true;
 }
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h
index 849adae1..ccf1d3d 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h
+++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h
@@ -45,7 +45,6 @@
 class PageLoadStatistics;
 class ProfileInteractionManager;
 class SubresourceFilterProfileContext;
-class SubresourceFilterClient;
 
 // This enum backs a histogram. Make sure new elements are only added to the
 // end. Keep histograms.xml up to date with any changes.
@@ -81,10 +80,7 @@
 // RenderFrameHosts, along with their associated DocumentSubresourceFilters.
 //
 // The class is designed to be attached to a WebContents instance by an embedder
-// via CreateForWebContents(), with the embedder passing a
-// SubresourceFilterClient instance customized for that embedder. The client
-// will be notified of the first disallowed subresource load for a top level
-// navgation, and has veto power for frame activation.
+// via CreateForWebContents().
 class ContentSubresourceFilterThrottleManager
     : public base::SupportsUserData::Data,
       public content::WebContentsObserver,
@@ -100,7 +96,6 @@
   // not enabled.
   static void CreateForWebContents(
       content::WebContents* web_contents,
-      std::unique_ptr<SubresourceFilterClient> client,
       SubresourceFilterProfileContext* profile_context,
       infobars::ContentInfoBarManager* infobar_manager,
       scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
@@ -111,7 +106,6 @@
       content::WebContents* web_contents);
 
   ContentSubresourceFilterThrottleManager(
-      std::unique_ptr<SubresourceFilterClient> client,
       SubresourceFilterProfileContext* profile_context,
       infobars::ContentInfoBarManager* infobar_manager,
       scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
@@ -135,8 +129,6 @@
 
   PageLoadStatistics* page_load_statistics() const { return statistics_.get(); }
 
-  SubresourceFilterClient* client() { return client_.get(); }
-
   VerifiedRuleset::Handle* ruleset_handle_for_testing() {
     return ruleset_handle_.get();
   }
@@ -152,7 +144,7 @@
   base::Optional<LoadPolicy> LoadPolicyForLastCommittedNavigation(
       content::RenderFrameHost* frame_host) const;
 
-  // Notifies the client that the user has requested a reload of a page with
+  // Called when the user has requested a reload of a page with
   // blocked ads (e.g., via an infobar).
   void OnReloadRequested();
 
@@ -230,8 +222,8 @@
   const base::Optional<subresource_filter::mojom::ActivationState>
   GetFrameActivationState(content::RenderFrameHost* frame_host);
 
-  // Calls ShowNotification on |client_| at most once per committed,
-  // non-same-page navigation in the main frame.
+  // Calls MaybeShowNotification on |profile_interaction_manager_| at most once
+  // per committed, non-same-page navigation in the main frame.
   void MaybeShowNotification();
 
   VerifiedRuleset::Handle* EnsureRulesetHandle();
@@ -334,7 +326,6 @@
   // This member outlives this class.
   VerifiedRulesetDealer::Handle* dealer_handle_;
 
-  std::unique_ptr<SubresourceFilterClient> client_;
   scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager_;
 
   std::unique_ptr<ProfileInteractionManager> profile_interaction_manager_;
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
index 2aafd14..704e18d 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
+++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
@@ -21,6 +21,8 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "components/content_settings/browser/page_specific_content_settings.h"
+#include "components/content_settings/core/common/content_settings_types.h"
 #include "components/infobars/content/content_infobar_manager.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
 #include "components/infobars/core/infobar.h"
@@ -28,7 +30,7 @@
 #include "components/subresource_filter/content/browser/fake_safe_browsing_database_manager.h"
 #include "components/subresource_filter/content/browser/subframe_navigation_test_utils.h"
 #include "components/subresource_filter/content/browser/subresource_filter_observer_manager.h"
-#include "components/subresource_filter/content/browser/test_subresource_filter_client.h"
+#include "components/subresource_filter/content/browser/throttle_manager_test_support.h"
 #include "components/subresource_filter/content/mojom/subresource_filter_agent.mojom.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
 #include "components/subresource_filter/core/common/common_features.h"
@@ -202,19 +204,18 @@
                                              /*expected_checksum=*/0,
                                              base::DoNothing());
 
-    auto subresource_filter_client =
-        std::make_unique<TestSubresourceFilterClient>(web_contents);
-    client_ = subresource_filter_client.get();
+    throttle_manager_test_support_ =
+        std::make_unique<ThrottleManagerTestSupport>(web_contents);
 
     // Turn off smart UI to make it easier to reason about expectations on
     // ShowNotification() being invoked.
-    client_->SetShouldUseSmartUI(false);
+    throttle_manager_test_support_->SetShouldUseSmartUI(false);
 
     infobar_manager_ =
         std::make_unique<infobars::ContentInfoBarManager>(web_contents);
     throttle_manager_ =
         std::make_unique<ContentSubresourceFilterThrottleManager>(
-            std::move(subresource_filter_client), client_->profile_context(),
+            throttle_manager_test_support_->profile_context(),
             infobar_manager_.get(), /*database_manager=*/nullptr,
             dealer_handle_.get(), web_contents);
 
@@ -222,8 +223,8 @@
   }
 
   void TearDown() override {
-    client_ = nullptr;
     throttle_manager_.reset();
+    throttle_manager_test_support_.reset();
     dealer_handle_.reset();
     base::RunLoop().RunUntilIdle();
     content::RenderViewHostTestHarness::TearDown();
@@ -277,8 +278,26 @@
     return throttle_manager_->ruleset_handle_for_testing();
   }
 
-  int disallowed_notification_count() const {
-    return client_->disallowed_notification_count();
+  bool ads_blocked_in_content_settings() {
+    auto* content_settings =
+        content_settings::PageSpecificContentSettings::GetForFrame(
+            content::RenderViewHostTestHarness::web_contents()->GetMainFrame());
+
+    return content_settings->IsContentBlocked(ContentSettingsType::ADS);
+  }
+
+  bool presenting_ads_blocked_infobar() const {
+    if (infobar_manager_->infobar_count() == 0)
+      return false;
+
+    // No infobars other than the ads blocked infobar should be displayed in the
+    // context of these tests.
+    EXPECT_EQ(infobar_manager_->infobar_count(), 1u);
+    auto* infobar = infobar_manager_->infobar_at(0);
+    EXPECT_EQ(infobar->delegate()->GetIdentifier(),
+              infobars::InfoBarDelegate::ADS_BLOCKED_INFOBAR_DELEGATE_ANDROID);
+
+    return true;
   }
 
  protected:
@@ -351,7 +370,7 @@
  private:
   testing::TestRulesetCreator test_ruleset_creator_;
   testing::TestRulesetPair test_ruleset_pair_;
-  TestSubresourceFilterClient* client_;
+  std::unique_ptr<ThrottleManagerTestSupport> throttle_manager_test_support_;
   std::unique_ptr<infobars::ContentInfoBarManager> infobar_manager_;
 
   std::unique_ptr<VerifiedRulesetDealer::Handle> dealer_handle_;
@@ -386,7 +405,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest, NoPageActivation) {
@@ -404,7 +426,10 @@
       GURL("https://www.example.com/disallowed.html"), main_rfh());
   EXPECT_EQ(content::NavigationThrottle::PROCEED,
             SimulateCommitAndGetResult(navigation_simulator()));
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -426,7 +451,10 @@
   ExpectActivationSignalForFrame(child, true /* expect_activation */,
                                  true /* is_ad_subframe */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -445,7 +473,10 @@
             SimulateRedirectAndGetResult(
                 navigation_simulator(),
                 GURL("https://www.example.com/disallowed.html")));
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -469,7 +500,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(child, true /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // This should fail if the throttle manager notifies the delegate twice of a
@@ -486,14 +520,20 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 
   CreateSubframeWithTestNavigation(
       GURL("https://www.example.com/2/disallowed.html"), main_rfh());
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -508,24 +548,35 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 
   // Commit another navigation that triggers page level activation.
   NavigateAndCommitMainFrame(GURL(kTestURLWithActivation2));
   ExpectActivationSignalForFrame(main_rfh(), true /* expect_activation */);
 
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
+
   CreateSubframeWithTestNavigation(
       GURL("https://www.example.com/2/disallowed.html"), main_rfh());
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(2, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
-// Test that the disallow load notification will not be repeated for the first
-// disallowed load that follows a same-document navigation.
+// Test that once presented, the ads blocked infobar will remain present after a
+// same-document navigation.
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
-       ActivateMainFrameDoNotNotifyAfterSameDocumentNav) {
+       InfoBarStaysPresentAfterSameDocumentNav) {
   // Commit a navigation that triggers page level activation.
   NavigateAndCommitMainFrame(GURL(kTestURLWithActivation));
   ExpectActivationSignalForFrame(main_rfh(), true /* expect_activation */);
@@ -536,7 +587,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 
   // Commit another navigation that triggers page level activation.
   GURL url2 = GURL(base::StringPrintf("%s#ref", kTestURLWithActivation));
@@ -544,12 +598,20 @@
   navigation_simulator()->CommitSameDocument();
   ExpectActivationSignalForFrame(main_rfh(), false /* expect_activation */);
 
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
+
   CreateSubframeWithTestNavigation(
       GURL("https://www.example.com/2/disallowed.html"), main_rfh());
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -572,7 +634,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(child, false /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // Once there are no activated frames, the manager drops its ruleset handle. If
@@ -586,7 +651,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 
   // Simulate a renderer crash which should delete the frame.
   EXPECT_TRUE(ManagerHasRulesetHandle());
@@ -597,12 +665,20 @@
   NavigateAndCommitMainFrame(GURL(kTestURLWithActivation));
   ExpectActivationSignalForFrame(main_rfh(), true /* expect_activation */);
 
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
+
   CreateSubframeWithTestNavigation(
       GURL("https://www.example.com/disallowed.html"), main_rfh());
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(2, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -633,7 +709,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(child, false /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -656,7 +735,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -683,7 +765,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(child, false /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // Ensure activation propagates into great-grandchild frames, including cross
@@ -722,7 +807,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // Ensure activation propagates through allowlisted documents.
@@ -758,7 +846,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(subframe2, true /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 
   // An identical series of events that don't match allowlist rules cause
   // filtering.
@@ -777,7 +868,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // Same-site navigations within a single RFH do not persist activation.
@@ -806,7 +900,10 @@
       navigation_simulator()->GetFinalRenderFrameHost();
   ExpectActivationSignalForFrame(child, false /* expect_activation */);
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_F(ContentSubresourceFilterThrottleManagerTest, CreateForWebContents) {
@@ -816,9 +913,9 @@
                 web_contents.get()),
             nullptr);
 
-  auto client =
-      std::make_unique<TestSubresourceFilterClient>(web_contents.get());
-  SubresourceFilterProfileContext* profile_context = client->profile_context();
+  ThrottleManagerTestSupport throttle_manager_test_support(web_contents.get());
+  SubresourceFilterProfileContext* profile_context =
+      throttle_manager_test_support.profile_context();
   auto infobar_manager =
       std::make_unique<infobars::ContentInfoBarManager>(web_contents.get());
 
@@ -829,8 +926,8 @@
     // CreateForWebContents() should not do anything if the subresource filter
     // feature is not enabled.
     ContentSubresourceFilterThrottleManager::CreateForWebContents(
-        web_contents.get(), std::move(client), profile_context,
-        infobar_manager.get(), /*database_manager=*/nullptr, dealer_handle());
+        web_contents.get(), profile_context, infobar_manager.get(),
+        /*database_manager=*/nullptr, dealer_handle());
     EXPECT_EQ(ContentSubresourceFilterThrottleManager::FromWebContents(
                   web_contents.get()),
               nullptr);
@@ -838,22 +935,18 @@
 
   // If the subresource filter feature is enabled (as it is by default),
   // CreateForWebContents() should create and attach an instance.
-  client = std::make_unique<TestSubresourceFilterClient>(web_contents.get());
-  profile_context = client->profile_context();
   ContentSubresourceFilterThrottleManager::CreateForWebContents(
-      web_contents.get(), std::move(client), profile_context,
-      infobar_manager.get(), /*database_manager=*/nullptr, dealer_handle());
+      web_contents.get(), profile_context, infobar_manager.get(),
+      /*database_manager=*/nullptr, dealer_handle());
   auto* throttle_manager =
       ContentSubresourceFilterThrottleManager::FromWebContents(
           web_contents.get());
   EXPECT_NE(throttle_manager, nullptr);
 
   // A second call should not attach a different instance.
-  client = std::make_unique<TestSubresourceFilterClient>(web_contents.get());
-  profile_context = client->profile_context();
   ContentSubresourceFilterThrottleManager::CreateForWebContents(
-      web_contents.get(), std::move(client), profile_context,
-      infobar_manager.get(), /*database_manager=*/nullptr, dealer_handle());
+      web_contents.get(), profile_context, infobar_manager.get(),
+      /*database_manager=*/nullptr, dealer_handle());
   EXPECT_EQ(ContentSubresourceFilterThrottleManager::FromWebContents(
                 web_contents.get()),
             throttle_manager);
@@ -933,7 +1026,10 @@
   EXPECT_EQ(content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE,
             SimulateStartAndGetResult(navigation_simulator()));
 
-  EXPECT_EQ(1, disallowed_notification_count());
+  EXPECT_TRUE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // If the RenderFrame determines that the frame is an ad due to creation by ad
@@ -1102,7 +1198,10 @@
                                  true /* is_ad_subframe */);
   EXPECT_TRUE(throttle_manager()->IsFrameTaggedAsAd(greatGrandchild));
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -1138,7 +1237,10 @@
                                  false /* is_ad_subframe */);
   EXPECT_FALSE(throttle_manager()->IsFrameTaggedAsAd(grandchild));
 
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(ContentSubresourceFilterThrottleManagerTest,
@@ -1150,7 +1252,10 @@
   // This could happen e.g. for cross-process navigations, which have no
   // ordering guarantees.
   throttle_manager()->DidDisallowFirstSubresource();
-  EXPECT_EQ(0, disallowed_notification_count());
+  EXPECT_FALSE(ads_blocked_in_content_settings());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 }
 
 // TODO(csharrison): Make sure the following conditions are exercised in tests:
diff --git a/components/subresource_filter/content/browser/profile_interaction_manager.cc b/components/subresource_filter/content/browser/profile_interaction_manager.cc
index b688088..6b8321109 100644
--- a/components/subresource_filter/content/browser/profile_interaction_manager.cc
+++ b/components/subresource_filter/content/browser/profile_interaction_manager.cc
@@ -9,7 +9,6 @@
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/subresource_filter/content/browser/ads_intervention_manager.h"
 #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
-#include "components/subresource_filter/content/browser/subresource_filter_client.h"
 #include "components/subresource_filter/content/browser/subresource_filter_content_settings_manager.h"
 #include "components/subresource_filter/content/browser/subresource_filter_profile_context.h"
 #include "content/public/browser/navigation_controller.h"
@@ -129,8 +128,7 @@
   return effective_activation_level;
 }
 
-void ProfileInteractionManager::MaybeShowNotification(
-    SubresourceFilterClient* client) {
+void ProfileInteractionManager::MaybeShowNotification() {
   const GURL& top_level_url = web_contents()->GetLastCommittedURL();
   if (profile_context_->settings_manager()->ShouldShowUIForSite(
           top_level_url)) {
@@ -138,8 +136,6 @@
     subresource_filter::AdsBlockedInfobarDelegate::Create(infobar_manager_);
 #endif
 
-    client->OnNotificationShown();
-
     // TODO(https://crbug.com/1103176): Plumb the actual frame reference here
     // (it comes from
     // ContentSubresourceFilterThrottleManager::DidDisallowFirstSubresource,
diff --git a/components/subresource_filter/content/browser/profile_interaction_manager.h b/components/subresource_filter/content/browser/profile_interaction_manager.h
index 3724d37..2724fec 100644
--- a/components/subresource_filter/content/browser/profile_interaction_manager.h
+++ b/components/subresource_filter/content/browser/profile_interaction_manager.h
@@ -22,7 +22,6 @@
 
 namespace subresource_filter {
 
-class SubresourceFilterClient;
 class SubresourceFilterProfileContext;
 
 // Class that manages interaction between interaction between the
@@ -55,9 +54,8 @@
 
   // Invoked when a notification should potentially be shown to the user that
   // ads are being blocked on this page. Will make the final determination as to
-  // whether the notification should be shown and call out to |client| to show
-  // the notification if so.
-  void MaybeShowNotification(SubresourceFilterClient* client);
+  // whether the notification should be shown.
+  void MaybeShowNotification();
 
   // SubresourceFilterSafeBrowsingActivationThrottle::Delegate:
   mojom::ActivationLevel OnPageActivationComputed(
diff --git a/components/subresource_filter/content/browser/subresource_filter_client.h b/components/subresource_filter/content/browser/subresource_filter_client.h
deleted file mode 100644
index ea1f022..0000000
--- a/components/subresource_filter/content/browser/subresource_filter_client.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_SUBRESOURCE_FILTER_CLIENT_H_
-#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_SUBRESOURCE_FILTER_CLIENT_H_
-
-#include "base/memory/scoped_refptr.h"
-
-namespace subresource_filter {
-
-class SubresourceFilterClient {
- public:
-  virtual ~SubresourceFilterClient() = default;
-
-  // Informs the embedder that UI has been shown indicating that resources are
-  // being blocked. This method will be called at most once per main-frame
-  // navigation.
-  // TODO(crbug.com/1196187): Eliminate tests' use of this method and remove
-  // SubresourceFilterClient altogether.
-  virtual void OnNotificationShown() = 0;
-};
-
-}  // namespace subresource_filter
-
-#endif  // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_SUBRESOURCE_FILTER_CLIENT_H_
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
index 8fd19f4d..77be7de 100644
--- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
+++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
@@ -28,7 +28,7 @@
 #include "components/subresource_filter/content/browser/subresource_filter_observer_test_utils.h"
 #include "components/subresource_filter/content/browser/subresource_filter_safe_browsing_client.h"
 #include "components/subresource_filter/content/browser/subresource_filter_safe_browsing_client_request.h"
-#include "components/subresource_filter/content/browser/test_subresource_filter_client.h"
+#include "components/subresource_filter/content/browser/throttle_manager_test_support.h"
 #include "components/subresource_filter/content/browser/verified_ruleset_dealer.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features_test_support.h"
@@ -164,14 +164,13 @@
                                               base::DoNothing());
 
     auto* contents = RenderViewHostTestHarness::web_contents();
-    auto subresource_filter_client =
-        std::make_unique<TestSubresourceFilterClient>(contents);
-    client_ = subresource_filter_client.get();
+    throttle_manager_test_support_ =
+        std::make_unique<ThrottleManagerTestSupport>(contents);
     infobar_manager_ =
         std::make_unique<infobars::ContentInfoBarManager>(contents);
     throttle_manager_ =
         std::make_unique<ContentSubresourceFilterThrottleManager>(
-            std::move(subresource_filter_client), client_->profile_context(),
+            throttle_manager_test_support_->profile_context(),
             infobar_manager_.get(), /*database_manager=*/nullptr,
             ruleset_dealer_.get(), contents);
     fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager();
@@ -333,8 +332,6 @@
 
   const base::HistogramTester& tester() const { return tester_; }
 
-  TestSubresourceFilterClient* client() { return client_; }
-
   TestSafeBrowsingActivationThrottleDelegate* delegate() { return &delegate_; }
   base::TestMockTimeTaskRunner* test_io_task_runner() const {
     return test_io_task_runner_.get();
@@ -344,6 +341,20 @@
     return &scoped_configuration_;
   }
 
+  bool presenting_ads_blocked_infobar() const {
+    if (infobar_manager_->infobar_count() == 0)
+      return false;
+
+    // No infobars other than the ads blocked infobar should be displayed in the
+    // context of these tests.
+    EXPECT_EQ(infobar_manager_->infobar_count(), 1u);
+    auto* infobar = infobar_manager_->infobar_at(0);
+    EXPECT_EQ(infobar->delegate()->GetIdentifier(),
+              infobars::InfoBarDelegate::ADS_BLOCKED_INFOBAR_DELEGATE_ANDROID);
+
+    return true;
+  }
+
  private:
   testing::ScopedSubresourceFilterConfigurator scoped_configuration_;
   scoped_refptr<base::TestMockTimeTaskRunner> test_io_task_runner_;
@@ -357,7 +368,7 @@
   std::unique_ptr<ContentSubresourceFilterThrottleManager> throttle_manager_;
 
   std::unique_ptr<content::NavigationSimulator> navigation_simulator_;
-  TestSubresourceFilterClient* client_;
+  std::unique_ptr<ThrottleManagerTestSupport> throttle_manager_test_support_;
   std::unique_ptr<infobars::ContentInfoBarManager> infobar_manager_;
   std::unique_ptr<TestSubresourceFilterObserver> observer_;
   scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_;
@@ -567,7 +578,9 @@
   content::RenderFrameHost* rfh = SimulateNavigateAndCommit({url}, main_rfh());
 
   EXPECT_FALSE(CreateAndNavigateDisallowedSubframe(rfh));
-  EXPECT_EQ(1, client()->disallowed_notification_count());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, ActivationList) {
@@ -735,7 +748,9 @@
   // Navigate initially, should be no activation.
   SimulateNavigateAndCommit({url}, main_rfh());
   EXPECT_TRUE(CreateAndNavigateDisallowedSubframe(main_rfh()));
-  EXPECT_EQ(0, client()->disallowed_notification_count());
+#if defined(OS_ANDROID)
+  EXPECT_FALSE(presenting_ads_blocked_infobar());
+#endif
 
   // Simulate opening devtools and forcing activation.
   devtools_interaction_tracker->ToggleForceActivation(true);
@@ -745,7 +760,9 @@
 
   SimulateNavigateAndCommit({url}, main_rfh());
   EXPECT_FALSE(CreateAndNavigateDisallowedSubframe(main_rfh()));
-  EXPECT_EQ(1, client()->disallowed_notification_count());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 
   histogram_tester.ExpectBucketCount(
       "SubresourceFilter.PageLoad.ActivationDecision",
@@ -776,7 +793,9 @@
 
   // Resource should be disallowed, since navigation commit had activation.
   EXPECT_FALSE(CreateAndNavigateDisallowedSubframe(main_rfh()));
-  EXPECT_EQ(1, client()->disallowed_notification_count());
+#if defined(OS_ANDROID)
+  EXPECT_TRUE(presenting_ads_blocked_infobar());
+#endif
 }
 
 TEST_P(SubresourceFilterSafeBrowsingActivationThrottleScopeTest,
diff --git a/components/subresource_filter/content/browser/subresource_filter_test_harness.cc b/components/subresource_filter/content/browser/subresource_filter_test_harness.cc
index db3e8c5a..ce55742 100644
--- a/components/subresource_filter/content/browser/subresource_filter_test_harness.cc
+++ b/components/subresource_filter/content/browser/subresource_filter_test_harness.cc
@@ -89,13 +89,13 @@
 
   VerifiedRulesetDealer::Handle* dealer =
       ruleset_service_.get()->GetRulesetDealer();
-  auto client = std::make_unique<TestSubresourceFilterClient>(web_contents());
-  client_ = client.get();
+  throttle_manager_test_support_ =
+      std::make_unique<ThrottleManagerTestSupport>(web_contents());
   database_manager_ = base::MakeRefCounted<FakeSafeBrowsingDatabaseManager>();
   infobar_manager_ =
       std::make_unique<infobars::ContentInfoBarManager>(web_contents());
   ContentSubresourceFilterThrottleManager::CreateForWebContents(
-      web_contents(), std::move(client), client_->profile_context(),
+      web_contents(), throttle_manager_test_support_->profile_context(),
       infobar_manager_.get(), database_manager_, dealer);
 
   // Observe web_contents() to add subresource filter navigation throttles at
@@ -164,7 +164,7 @@
 
 SubresourceFilterContentSettingsManager*
 SubresourceFilterTestHarness::GetSettingsManager() {
-  return client_->profile_context()->settings_manager();
+  return throttle_manager_test_support_->profile_context()->settings_manager();
 }
 
 void SubresourceFilterTestHarness::SetIsAdSubframe(
diff --git a/components/subresource_filter/content/browser/subresource_filter_test_harness.h b/components/subresource_filter/content/browser/subresource_filter_test_harness.h
index 7277e47..6cb77f7f 100644
--- a/components/subresource_filter/content/browser/subresource_filter_test_harness.h
+++ b/components/subresource_filter/content/browser/subresource_filter_test_harness.h
@@ -9,7 +9,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "components/subresource_filter/content/browser/fake_safe_browsing_database_manager.h"
-#include "components/subresource_filter/content/browser/test_subresource_filter_client.h"
+#include "components/subresource_filter/content/browser/throttle_manager_test_support.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features_test_support.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
@@ -105,7 +105,7 @@
   sync_preferences::TestingPrefServiceSyncable pref_service_;
   testing::ScopedSubresourceFilterConfigurator scoped_configuration_;
   scoped_refptr<FakeSafeBrowsingDatabaseManager> database_manager_;
-  TestSubresourceFilterClient* client_;
+  std::unique_ptr<ThrottleManagerTestSupport> throttle_manager_test_support_;
   std::unique_ptr<infobars::ContentInfoBarManager> infobar_manager_;
   std::unique_ptr<RulesetService> ruleset_service_;
 };
diff --git a/components/subresource_filter/content/browser/test_subresource_filter_client.h b/components/subresource_filter/content/browser/test_subresource_filter_client.h
deleted file mode 100644
index fb529f8..0000000
--- a/components/subresource_filter/content/browser/test_subresource_filter_client.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_TEST_SUBRESOURCE_FILTER_CLIENT_H_
-#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_TEST_SUBRESOURCE_FILTER_CLIENT_H_
-
-#include <memory>
-
-#include "base/memory/scoped_refptr.h"
-#include "components/subresource_filter/content/browser/subresource_filter_client.h"
-#include "components/sync_preferences/testing_pref_service_syncable.h"
-
-class HostContentSettingsMap;
-
-namespace content {
-class WebContents;
-}
-
-namespace subresource_filter {
-
-class SubresourceFilterProfileContext;
-
-// An implementation of SubresourceFilterClient suitable for use in unittests.
-class TestSubresourceFilterClient : public SubresourceFilterClient {
- public:
-  explicit TestSubresourceFilterClient(content::WebContents* web_contents);
-  ~TestSubresourceFilterClient() override;
-
-  // SubresourceFilterClient:
-  void OnNotificationShown() override;
-
-  SubresourceFilterProfileContext* profile_context() {
-    return profile_context_.get();
-  }
-
-  // Turns on/off the smart UI feature (currently enabled in production on
-  // some platforms only).
-  void SetShouldUseSmartUI(bool enabled);
-
-  // Returns the number of times that ShowNotification() was invoked.
-  int disallowed_notification_count() const {
-    return disallowed_notification_count_;
-  }
-
- private:
-  sync_preferences::TestingPrefServiceSyncable prefs_;
-  scoped_refptr<HostContentSettingsMap> settings_map_;
-  std::unique_ptr<SubresourceFilterProfileContext> profile_context_;
-
-  int disallowed_notification_count_ = 0;
-};
-
-}  // namespace subresource_filter
-
-#endif  // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_TEST_SUBRESOURCE_FILTER_CLIENT_H_
diff --git a/components/subresource_filter/content/browser/test_subresource_filter_client.cc b/components/subresource_filter/content/browser/throttle_manager_test_support.cc
similarity index 81%
rename from components/subresource_filter/content/browser/test_subresource_filter_client.cc
rename to components/subresource_filter/content/browser/throttle_manager_test_support.cc
index 52ba047..d4ab654 100644
--- a/components/subresource_filter/content/browser/test_subresource_filter_client.cc
+++ b/components/subresource_filter/content/browser/throttle_manager_test_support.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/subresource_filter/content/browser/test_subresource_filter_client.h"
+#include "components/subresource_filter/content/browser/throttle_manager_test_support.h"
 
 #include "components/content_settings/browser/page_specific_content_settings.h"
 #include "components/content_settings/browser/test_page_specific_content_settings_delegate.h"
@@ -13,7 +13,7 @@
 
 namespace subresource_filter {
 
-TestSubresourceFilterClient::TestSubresourceFilterClient(
+ThrottleManagerTestSupport::ThrottleManagerTestSupport(
     content::WebContents* web_contents) {
   // Set up the state that's required by ProfileInteractionManager.
   HostContentSettingsMap::RegisterProfilePrefs(prefs_.registry());
@@ -32,15 +32,11 @@
           /*prefs=*/nullptr, settings_map_.get()));
 }
 
-TestSubresourceFilterClient::~TestSubresourceFilterClient() {
+ThrottleManagerTestSupport::~ThrottleManagerTestSupport() {
   settings_map_->ShutdownOnUIThread();
 }
 
-void TestSubresourceFilterClient::OnNotificationShown() {
-  ++disallowed_notification_count_;
-}
-
-void TestSubresourceFilterClient::SetShouldUseSmartUI(bool enabled) {
+void ThrottleManagerTestSupport::SetShouldUseSmartUI(bool enabled) {
   profile_context_->settings_manager()->set_should_use_smart_ui_for_testing(
       enabled);
 }
diff --git a/components/subresource_filter/content/browser/throttle_manager_test_support.h b/components/subresource_filter/content/browser/throttle_manager_test_support.h
new file mode 100644
index 0000000..4ee4fd5
--- /dev/null
+++ b/components/subresource_filter/content/browser/throttle_manager_test_support.h
@@ -0,0 +1,50 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_THROTTLE_MANAGER_TEST_SUPPORT_H_
+#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_THROTTLE_MANAGER_TEST_SUPPORT_H_
+
+#include <memory>
+
+#include "base/memory/scoped_refptr.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+
+class HostContentSettingsMap;
+
+namespace content {
+class WebContents;
+}
+
+namespace subresource_filter {
+
+class SubresourceFilterProfileContext;
+
+// Sets up necessary dependencies of ContentSubresourceFilterThrottleManager for
+// convenience in unittests.
+class ThrottleManagerTestSupport {
+ public:
+  explicit ThrottleManagerTestSupport(content::WebContents* web_contents);
+  ~ThrottleManagerTestSupport();
+
+  ThrottleManagerTestSupport(const ThrottleManagerTestSupport&) = delete;
+  ThrottleManagerTestSupport& operator=(const ThrottleManagerTestSupport&) =
+      delete;
+
+  SubresourceFilterProfileContext* profile_context() {
+    return profile_context_.get();
+  }
+
+  // Turns on/off the smart UI feature (currently enabled in production on
+  // some platforms only).
+  void SetShouldUseSmartUI(bool enabled);
+
+ private:
+  sync_preferences::TestingPrefServiceSyncable prefs_;
+  scoped_refptr<HostContentSettingsMap> settings_map_;
+  std::unique_ptr<SubresourceFilterProfileContext> profile_context_;
+};
+
+}  // namespace subresource_filter
+
+#endif  // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_THROTTLE_MANAGER_TEST_SUPPORT_H_
diff --git a/components/sync/protocol/autofill_specifics.proto b/components/sync/protocol/autofill_specifics.proto
index 88b4fad..8322326 100644
--- a/components/sync/protocol/autofill_specifics.proto
+++ b/components/sync/protocol/autofill_specifics.proto
@@ -150,6 +150,12 @@
   // changes in the autofill profile values.
   optional bool is_client_validity_states_updated = 25;
 
+  // The state indicates if the profile qualifies to get merged with a
+  // profile observed in a form submission. If true, the profile can still be
+  // updated silently, but it should not be considered for merges that need to
+  // involve user interactions.
+  optional bool disallow_settings_visible_updates = 63;
+
   // Deprecated.
   optional string deprecated_label = 1 [deprecated = true];
   optional string phone_fax_whole_number = 14 [deprecated = true];
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h
index 2f3d100c..113737a6 100644
--- a/components/sync/protocol/proto_visitors.h
+++ b/components/sync/protocol/proto_visitors.h
@@ -232,6 +232,7 @@
   VISIT(address_home_language_code);
   VISIT_REP(phone_home_whole_number);
   VISIT(validity_state_bitfield);
+  VISIT(disallow_settings_visible_updates);
 }
 
 VISIT_PROTO_FIELDS(const sync_pb::AutofillSpecifics& proto) {
diff --git a/components/sync/test/engine/fake_cryptographer.cc b/components/sync/test/engine/fake_cryptographer.cc
index e86a3b6..5abc4ec 100644
--- a/components/sync/test/engine/fake_cryptographer.cc
+++ b/components/sync/test/engine/fake_cryptographer.cc
@@ -4,7 +4,7 @@
 
 #include "components/sync/test/engine/fake_cryptographer.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 
diff --git a/components/test/data/service_worker/created_by_origin_impl/Database/000003.log b/components/test/data/service_worker/created_by_origin_impl/Database/000003.log
new file mode 100644
index 0000000..401a7ae
--- /dev/null
+++ b/components/test/data/service_worker/created_by_origin_impl/Database/000003.log
Binary files differ
diff --git a/components/test/data/service_worker/created_by_origin_impl/Database/CURRENT b/components/test/data/service_worker/created_by_origin_impl/Database/CURRENT
new file mode 100644
index 0000000..7ed683d
--- /dev/null
+++ b/components/test/data/service_worker/created_by_origin_impl/Database/CURRENT
@@ -0,0 +1 @@
+MANIFEST-000001
diff --git a/components/test/data/service_worker/created_by_origin_impl/Database/LOCK b/components/test/data/service_worker/created_by_origin_impl/Database/LOCK
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/components/test/data/service_worker/created_by_origin_impl/Database/LOCK
diff --git a/components/test/data/service_worker/created_by_origin_impl/Database/LOG b/components/test/data/service_worker/created_by_origin_impl/Database/LOG
new file mode 100644
index 0000000..70ed59b
--- /dev/null
+++ b/components/test/data/service_worker/created_by_origin_impl/Database/LOG
@@ -0,0 +1,2 @@
+2021/04/27-23:04:48.101 1918 Creating DB /usr/local/google/home/bingler/.config/chrome-remote-desktop/chrome-config/google-chrome/Default/Service Worker/Database since it was missing.
+2021/04/27-23:04:48.154 1918 Reusing MANIFEST /usr/local/google/home/bingler/.config/chrome-remote-desktop/chrome-config/google-chrome/Default/Service Worker/Database/MANIFEST-000001
diff --git a/components/test/data/service_worker/created_by_origin_impl/Database/MANIFEST-000001 b/components/test/data/service_worker/created_by_origin_impl/Database/MANIFEST-000001
new file mode 100644
index 0000000..18e5cab7
--- /dev/null
+++ b/components/test/data/service_worker/created_by_origin_impl/Database/MANIFEST-000001
Binary files differ
diff --git a/components/test/data/web_database/version_95.sql b/components/test/data/web_database/version_95.sql
new file mode 100644
index 0000000..73c8bcc
--- /dev/null
+++ b/components/test/data/web_database/version_95.sql
@@ -0,0 +1,32 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
+INSERT INTO meta VALUES('mmap_status','-1');
+INSERT INTO meta VALUES('version','93');
+INSERT INTO meta VALUES('last_compatible_version','83');
+INSERT INTO meta VALUES('Builtin Keyword Version','117');
+CREATE TABLE token_service (service VARCHAR PRIMARY KEY NOT NULL,encrypted_token BLOB);
+CREATE TABLE keywords (id INTEGER PRIMARY KEY,short_name VARCHAR NOT NULL,keyword VARCHAR NOT NULL,favicon_url VARCHAR NOT NULL,url VARCHAR NOT NULL,safe_for_autoreplace INTEGER,originating_url VARCHAR,date_created INTEGER DEFAULT 0,usage_count INTEGER DEFAULT 0,input_encodings VARCHAR,suggest_url VARCHAR,prepopulate_id INTEGER DEFAULT 0,created_by_policy INTEGER DEFAULT 0,last_modified INTEGER DEFAULT 0,sync_guid VARCHAR,alternate_urls VARCHAR,image_url VARCHAR,search_url_post_params VARCHAR,suggest_url_post_params VARCHAR,image_url_post_params VARCHAR,new_tab_url VARCHAR,last_visited INTEGER DEFAULT 0, created_from_play_api INTEGER DEFAULT 0);
+CREATE TABLE autofill (name VARCHAR, value VARCHAR, value_lower VARCHAR, date_created INTEGER DEFAULT 0, date_last_used INTEGER DEFAULT 0, count INTEGER DEFAULT 1, PRIMARY KEY (name, value));
+CREATE TABLE credit_cards ( guid VARCHAR PRIMARY KEY, name_on_card VARCHAR, expiration_month INTEGER, expiration_year INTEGER, card_number_encrypted BLOB, date_modified INTEGER NOT NULL DEFAULT 0, origin VARCHAR DEFAULT '', use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, billing_address_id VARCHAR, nickname VARCHAR);
+CREATE TABLE autofill_profiles ( guid VARCHAR PRIMARY KEY, company_name VARCHAR, street_address VARCHAR, dependent_locality VARCHAR, city VARCHAR, state VARCHAR, zipcode VARCHAR, sorting_code VARCHAR, country_code VARCHAR, date_modified INTEGER NOT NULL DEFAULT 0, origin VARCHAR DEFAULT '', language_code VARCHAR, use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, validity_bitfield UNSIGNED NOT NULL DEFAULT 0, is_client_validity_states_updated BOOL NOT NULL DEFAULT FALSE, label VARCHAR);
+CREATE TABLE autofill_profile_names ( guid VARCHAR, first_name VARCHAR, middle_name VARCHAR, last_name VARCHAR, full_name VARCHAR, honorific_prefix VARCHAR, first_last_name VARCHAR, conjunction_last_name VARCHAR, second_last_name VARCHAR, honorific_prefix_status INTEGER DEFAULT 0, first_name_status INTEGER DEFAULT 0, middle_name_status INTEGER DEFAULT 0, last_name_status INTEGER DEFAULT 0, first_last_name_status INTEGER DEFAULT 0, conjunction_last_name_status INTEGER DEFAULT 0, second_last_name_status INTEGER DEFAULT 0, full_name_status INTEGER DEFAULT 0, full_name_with_honorific_prefix VARCHAR, full_name_with_honorific_prefix_status INTEGER DEFAULT 0);
+INSERT INTO "autofill_profile_names" VALUES('B41FE6E0-B13E-2A2A-BF0B-29FCE2C3ADBD','Jon','','Smith', 'Jon Smith', 'Sir', 'Smith', 'Notsmith', 'Moresmith', 0, 0, 0, 0, 0, 0, 0, 0, 'Sir Jon Smith', 0);
+CREATE TABLE autofill_profile_addresses ( guid VARCHAR, street_address VARCHAR, street_name VARCHAR, dependent_street_name VARCHAR, house_number VARCHAR, subpremise VARCHAR, premise_name VARCHAR, street_address_status INTEGER DEFAULT 0, street_name_status INTEGER DEFAULT 0, dependent_street_name_status INTEGER DEFAULT 0, house_number_status INTEGER DEFAULT 0, subpremise_status INTEGER DEFAULT 0, premise_name_status INTEGER DEFAULT 0, dependent_locality VARCHAR, city VARCHAR, state VARCHAR, zip_code VARCHAR, sorting_code VARCHAR, country_code VARCHAR, dependent_locality_status INTEGER DEFAULT 0, city_status INTEGER DEFAULT 0, state_status INTEGER DEFAULT 0, zip_code_status INTEGER DEFAULT 0, sorting_code_status INTEGER DEFAULT 0, country_code_status INTEGER DEFAULT 0, apartment_number VARCHAR, floor VARCHAR, apartment_number_status INTEGER DEFAULT 0, floor_status INTEGER DEFAULT 0);
+CREATE TABLE autofill_profile_emails ( guid VARCHAR, email VARCHAR);
+CREATE TABLE autofill_profile_phones ( guid VARCHAR, number VARCHAR);
+CREATE TABLE autofill_profiles_trash ( guid VARCHAR);
+CREATE TABLE masked_credit_cards (id VARCHAR,status VARCHAR,name_on_card VARCHAR,network VARCHAR,last_four VARCHAR,exp_month INTEGER DEFAULT 0,exp_year INTEGER DEFAULT 0, bank_name VARCHAR, nickname VARCHAR, card_issuer INTEGER DEFAULT 0, instrument_id INTEGER DEFAULT 0);
+CREATE TABLE unmasked_credit_cards (id VARCHAR,card_number_encrypted VARCHAR,unmask_date INTEGER NOT NULL DEFAULT 0);
+CREATE TABLE server_card_metadata (id VARCHAR NOT NULL,use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, billing_address_id VARCHAR);
+CREATE TABLE server_addresses (id VARCHAR,company_name VARCHAR,street_address VARCHAR,address_1 VARCHAR,address_2 VARCHAR,address_3 VARCHAR,address_4 VARCHAR,postal_code VARCHAR,sorting_code VARCHAR,country_code VARCHAR,language_code VARCHAR, recipient_name VARCHAR, phone_number VARCHAR);
+CREATE TABLE server_address_metadata (id VARCHAR NOT NULL,use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, has_converted BOOL NOT NULL DEFAULT FALSE);
+CREATE TABLE autofill_sync_metadata (model_type INTEGER NOT NULL, storage_key VARCHAR NOT NULL, value BLOB, PRIMARY KEY (model_type, storage_key));
+CREATE TABLE autofill_model_type_state (model_type INTEGER NOT NULL PRIMARY KEY, value BLOB);
+CREATE TABLE payments_customer_data (customer_id VARCHAR);
+CREATE TABLE payments_upi_vpa (vpa VARCHAR);
+CREATE TABLE server_card_cloud_token_data ( id VARCHAR, suffix VARCHAR, exp_month INTEGER DEFAULT 0, exp_year INTEGER DEFAULT 0, card_art_url VARCHAR, instrument_token VARCHAR);
+CREATE INDEX autofill_name ON autofill (name);
+CREATE INDEX autofill_name_value_lower ON autofill (name, value_lower);
+CREATE TABLE offer_data ( offer_id UNSIGNED LONG, offer_reward_amount VARCHAR, expiry UNSIGNED LONG, offer_details_url VARCHAR, merchant_domain VARCHAR, promo_code VARCHAR, value_prop_text VARCHAR, see_details_text VARCHAR, usage_instructions_text VARCHAR);
+COMMIT;
diff --git a/components/user_manager/fake_user_manager.cc b/components/user_manager/fake_user_manager.cc
index 4e146e4..0ba57ff31 100644
--- a/components/user_manager/fake_user_manager.cc
+++ b/components/user_manager/fake_user_manager.cc
@@ -10,8 +10,8 @@
 #include "ash/constants/ash_switches.h"
 #include "base/callback.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/system/sys_info.h"
 #include "components/user_manager/user_names.h"
 #include "components/user_manager/user_type.h"
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc
index 7d93ed9..3332ef2 100644
--- a/components/variations/service/variations_field_trial_creator.cc
+++ b/components/variations/service/variations_field_trial_creator.cc
@@ -171,64 +171,121 @@
              : local_state()->GetString(prefs::kVariationsCountry);
 }
 
-bool VariationsFieldTrialCreator::CreateTrialsFromSeed(
-    const base::FieldTrial::EntropyProvider* low_entropy_provider,
-    base::FeatureList* feature_list,
-    SafeSeedManager* safe_seed_manager) {
-  TRACE_EVENT0("startup", "VariationsFieldTrialCreator::CreateTrialsFromSeed");
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  CHECK(!create_trials_from_seed_called_);
-  create_trials_from_seed_called_ = true;
-
-  base::TimeTicks start_time = base::TimeTicks::Now();
-
-  const base::Version& current_version = version_info::GetVersion();
-  if (!current_version.IsValid())
-    return false;
-
-  std::unique_ptr<ClientFilterableState> client_filterable_state =
-      GetClientFilterableStateForVersion(current_version);
-  base::UmaHistogramSparse("Variations.UserChannel",
-                           client_filterable_state->channel);
-  base::UmaHistogramEnumeration("Variations.PolicyRestriction",
-                                client_filterable_state->policy_restriction);
-
-  VariationsSeed seed;
-  bool run_in_safe_mode = safe_seed_manager->ShouldRunInSafeMode() &&
-                          LoadSafeSeed(&seed, client_filterable_state.get());
-
-  std::string seed_data;
-  std::string base64_seed_signature;
-  if (!run_in_safe_mode && !LoadSeed(&seed, &seed_data, &base64_seed_signature))
-    return false;
-
-  UMA_HISTOGRAM_BOOLEAN("Variations.SafeMode.FellBackToSafeMode2",
-                        run_in_safe_mode);
-
-  // Note that passing base::Unretained(this) below is safe because the callback
-  // is executed synchronously. It is not possible to pass UIStringOverrider
-  // directly to VariationsSeedProcessor (which is in components/variations and
-  // not components/variations/service) as the variations component should not
-  // depend on //ui/base.
-  VariationsSeedProcessor().CreateTrialsFromSeed(
-      seed, *client_filterable_state,
-      base::BindRepeating(&VariationsFieldTrialCreator::OverrideUIString,
-                          base::Unretained(this)),
-      low_entropy_provider, feature_list);
-
-  // Store into the |safe_seed_manager| the combined server and client data used
-  // to create the field trials. But, as an optimization, skip this step when
-  // running in safe mode – once running in safe mode, there can never be a need
-  // to save the active state to the safe seed prefs.
-  if (!run_in_safe_mode) {
-    safe_seed_manager->SetActiveSeedState(seed_data, base64_seed_signature,
-                                          std::move(client_filterable_state),
-                                          seed_store_->GetLastFetchTime());
+bool VariationsFieldTrialCreator::SetupFieldTrials(
+    const char* kEnableGpuBenchmarking,
+    const char* kEnableFeatures,
+    const char* kDisableFeatures,
+    const std::vector<std::string>& variation_ids,
+    const std::vector<base::FeatureList::FeatureOverrideInfo>& extra_overrides,
+    std::unique_ptr<const base::FieldTrial::EntropyProvider>
+        low_entropy_provider,
+    std::unique_ptr<base::FeatureList> feature_list,
+    PlatformFieldTrials* platform_field_trials,
+    SafeSeedManager* safe_seed_manager,
+    base::Optional<int> low_entropy_source_value) {
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kEnableBenchmarking) ||
+      command_line->HasSwitch(kEnableGpuBenchmarking)) {
+    base::FieldTrial::EnableBenchmarking();
   }
 
-  UMA_HISTOGRAM_TIMES("Variations.SeedProcessingTime",
-                      base::TimeTicks::Now() - start_time);
-  return true;
+  if (command_line->HasSwitch(switches::kForceFieldTrialParams)) {
+    bool result = AssociateParamsFromString(
+        command_line->GetSwitchValueASCII(switches::kForceFieldTrialParams));
+    if (!result) {
+      // Some field trial params implement things like csv or json with a
+      // particular param. If some control characters are not %-encoded, it can
+      // lead to confusing error messages, so add a hint here.
+      ExitWithMessage(base::StringPrintf(
+          "Invalid --%s list specified. Make sure you %%-"
+          "encode the following characters in param values: %%:/.,",
+          switches::kForceFieldTrialParams));
+    }
+  }
+
+  // Ensure any field trials specified on the command line are initialized.
+  if (command_line->HasSwitch(::switches::kForceFieldTrials)) {
+    // Create field trials without activating them, so that this behaves in a
+    // consistent manner with field trials created from the server.
+    bool result = base::FieldTrialList::CreateTrialsFromString(
+        command_line->GetSwitchValueASCII(::switches::kForceFieldTrials));
+    if (!result) {
+      ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
+                                         ::switches::kForceFieldTrials));
+    }
+  }
+
+  VariationsIdsProvider* http_header_provider =
+      VariationsIdsProvider::GetInstance();
+  http_header_provider->SetLowEntropySourceValue(low_entropy_source_value);
+  // Force the variation ids selected in chrome://flags and/or specified using
+  // the command-line flag.
+  auto result = http_header_provider->ForceVariationIds(
+      variation_ids,
+      command_line->GetSwitchValueASCII(switches::kForceVariationIds));
+
+  switch (result) {
+    case VariationsIdsProvider::ForceIdsResult::INVALID_SWITCH_ENTRY:
+      ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
+                                         switches::kForceVariationIds));
+      break;
+    case VariationsIdsProvider::ForceIdsResult::INVALID_VECTOR_ENTRY:
+      // It should not be possible to have invalid variation ids from the
+      // vector param (which corresponds to chrome://flags).
+      NOTREACHED();
+      break;
+    case VariationsIdsProvider::ForceIdsResult::SUCCESS:
+      break;
+  }
+
+  bool success = http_header_provider->ForceDisableVariationIds(
+      command_line->GetSwitchValueASCII(switches::kForceDisableVariationIds));
+  if (!success) {
+    ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
+                                       switches::kForceDisableVariationIds));
+  }
+
+  feature_list->InitializeFromCommandLine(
+      command_line->GetSwitchValueASCII(kEnableFeatures),
+      command_line->GetSwitchValueASCII(kDisableFeatures));
+
+  // This needs to happen here: After the InitializeFromCommandLine() call,
+  // because the explicit cmdline --disable-features and --enable-features
+  // should take precedence over these extra overrides. Before the call to
+  // SetInstance(), because overrides cannot be registered after the FeatureList
+  // instance is set.
+  feature_list->RegisterExtraFeatureOverrides(extra_overrides);
+
+  bool used_testing_config = false;
+#if BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
+  if (!command_line->HasSwitch(switches::kDisableFieldTrialTestingConfig) &&
+      !command_line->HasSwitch(::switches::kForceFieldTrials) &&
+      !command_line->HasSwitch(switches::kVariationsServerURL)) {
+    // Note that passing base::Unretained(this) below is safe because the
+    // callback is executed synchronously.
+    AssociateDefaultFieldTrialConfig(
+        base::BindRepeating(&VariationsFieldTrialCreator::OverrideUIString,
+                            base::Unretained(this)),
+        GetPlatform(), client_->GetCurrentFormFactor(), feature_list.get());
+    used_testing_config = true;
+  }
+#endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
+  bool used_seed = false;
+  if (!used_testing_config) {
+    used_seed = CreateTrialsFromSeed(low_entropy_provider.get(),
+                                     feature_list.get(), safe_seed_manager);
+  }
+
+  platform_field_trials->SetupFeatureControllingFieldTrials(
+      used_seed, low_entropy_provider.get(), feature_list.get());
+
+  base::FeatureList::SetInstance(std::move(feature_list));
+
+  // This must be called after |local_state_| is initialized.
+  platform_field_trials->SetupFieldTrials();
+
+  return used_seed;
 }
 
 std::unique_ptr<ClientFilterableState>
@@ -386,6 +443,10 @@
   overridden_strings_map_.clear();
 }
 
+bool VariationsFieldTrialCreator::IsOverrideResourceMapEmpty() {
+  return overridden_strings_map_.empty();
+}
+
 bool VariationsFieldTrialCreator::LoadSeed(VariationsSeed* seed,
                                            std::string* seed_data,
                                            std::string* base64_signature) {
@@ -431,121 +492,64 @@
   return true;
 }
 
-bool VariationsFieldTrialCreator::SetupFieldTrials(
-    const char* kEnableGpuBenchmarking,
-    const char* kEnableFeatures,
-    const char* kDisableFeatures,
-    const std::vector<std::string>& variation_ids,
-    const std::vector<base::FeatureList::FeatureOverrideInfo>& extra_overrides,
-    std::unique_ptr<const base::FieldTrial::EntropyProvider>
-        low_entropy_provider,
-    std::unique_ptr<base::FeatureList> feature_list,
-    PlatformFieldTrials* platform_field_trials,
-    SafeSeedManager* safe_seed_manager,
-    base::Optional<int> low_entropy_source_value) {
-  const base::CommandLine* command_line =
-      base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kEnableBenchmarking) ||
-      command_line->HasSwitch(kEnableGpuBenchmarking)) {
-    base::FieldTrial::EnableBenchmarking();
+bool VariationsFieldTrialCreator::CreateTrialsFromSeed(
+    const base::FieldTrial::EntropyProvider* low_entropy_provider,
+    base::FeatureList* feature_list,
+    SafeSeedManager* safe_seed_manager) {
+  TRACE_EVENT0("startup", "VariationsFieldTrialCreator::CreateTrialsFromSeed");
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  CHECK(!create_trials_from_seed_called_);
+  create_trials_from_seed_called_ = true;
+
+  base::TimeTicks start_time = base::TimeTicks::Now();
+
+  const base::Version& current_version = version_info::GetVersion();
+  if (!current_version.IsValid())
+    return false;
+
+  std::unique_ptr<ClientFilterableState> client_filterable_state =
+      GetClientFilterableStateForVersion(current_version);
+  base::UmaHistogramSparse("Variations.UserChannel",
+                           client_filterable_state->channel);
+  base::UmaHistogramEnumeration("Variations.PolicyRestriction",
+                                client_filterable_state->policy_restriction);
+
+  VariationsSeed seed;
+  bool run_in_safe_mode = safe_seed_manager->ShouldRunInSafeMode() &&
+                          LoadSafeSeed(&seed, client_filterable_state.get());
+
+  std::string seed_data;
+  std::string base64_seed_signature;
+  if (!run_in_safe_mode && !LoadSeed(&seed, &seed_data, &base64_seed_signature))
+    return false;
+
+  UMA_HISTOGRAM_BOOLEAN("Variations.SafeMode.FellBackToSafeMode2",
+                        run_in_safe_mode);
+
+  // Note that passing base::Unretained(this) below is safe because the callback
+  // is executed synchronously. It is not possible to pass UIStringOverrider
+  // directly to VariationsSeedProcessor (which is in components/variations and
+  // not components/variations/service) as the variations component should not
+  // depend on //ui/base.
+  VariationsSeedProcessor().CreateTrialsFromSeed(
+      seed, *client_filterable_state,
+      base::BindRepeating(&VariationsFieldTrialCreator::OverrideUIString,
+                          base::Unretained(this)),
+      low_entropy_provider, feature_list);
+
+  // Store into the |safe_seed_manager| the combined server and client data used
+  // to create the field trials. But, as an optimization, skip this step when
+  // running in safe mode – once running in safe mode, there can never be a need
+  // to save the active state to the safe seed prefs.
+  if (!run_in_safe_mode) {
+    safe_seed_manager->SetActiveSeedState(seed_data, base64_seed_signature,
+                                          std::move(client_filterable_state),
+                                          seed_store_->GetLastFetchTime());
   }
 
-  if (command_line->HasSwitch(switches::kForceFieldTrialParams)) {
-    bool result = AssociateParamsFromString(
-        command_line->GetSwitchValueASCII(switches::kForceFieldTrialParams));
-    if (!result) {
-      // Some field trial params implement things like csv or json with a
-      // particular param. If some control characters are not %-encoded, it can
-      // lead to confusing error messages, so add a hint here.
-      ExitWithMessage(base::StringPrintf(
-          "Invalid --%s list specified. Make sure you %%-"
-          "encode the following characters in param values: %%:/.,",
-          switches::kForceFieldTrialParams));
-    }
-  }
-
-  // Ensure any field trials specified on the command line are initialized.
-  if (command_line->HasSwitch(::switches::kForceFieldTrials)) {
-    // Create field trials without activating them, so that this behaves in a
-    // consistent manner with field trials created from the server.
-    bool result = base::FieldTrialList::CreateTrialsFromString(
-        command_line->GetSwitchValueASCII(::switches::kForceFieldTrials));
-    if (!result) {
-      ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
-                                         ::switches::kForceFieldTrials));
-    }
-  }
-
-  VariationsIdsProvider* http_header_provider =
-      VariationsIdsProvider::GetInstance();
-  http_header_provider->SetLowEntropySourceValue(low_entropy_source_value);
-  // Force the variation ids selected in chrome://flags and/or specified using
-  // the command-line flag.
-  auto result = http_header_provider->ForceVariationIds(
-      variation_ids,
-      command_line->GetSwitchValueASCII(switches::kForceVariationIds));
-
-  switch (result) {
-    case VariationsIdsProvider::ForceIdsResult::INVALID_SWITCH_ENTRY:
-      ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
-                                         switches::kForceVariationIds));
-      break;
-    case VariationsIdsProvider::ForceIdsResult::INVALID_VECTOR_ENTRY:
-      // It should not be possible to have invalid variation ids from the
-      // vector param (which corresponds to chrome://flags).
-      NOTREACHED();
-      break;
-    case VariationsIdsProvider::ForceIdsResult::SUCCESS:
-      break;
-  }
-
-  bool success = http_header_provider->ForceDisableVariationIds(
-      command_line->GetSwitchValueASCII(switches::kForceDisableVariationIds));
-  if (!success) {
-    ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
-                                       switches::kForceDisableVariationIds));
-  }
-
-  feature_list->InitializeFromCommandLine(
-      command_line->GetSwitchValueASCII(kEnableFeatures),
-      command_line->GetSwitchValueASCII(kDisableFeatures));
-
-  // This needs to happen here: After the InitializeFromCommandLine() call,
-  // because the explicit cmdline --disable-features and --enable-features
-  // should take precedence over these extra overrides. Before the call to
-  // SetInstance(), because overrides cannot be registered after the FeatureList
-  // instance is set.
-  feature_list->RegisterExtraFeatureOverrides(extra_overrides);
-
-  bool used_testing_config = false;
-#if BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
-  if (!command_line->HasSwitch(switches::kDisableFieldTrialTestingConfig) &&
-      !command_line->HasSwitch(::switches::kForceFieldTrials) &&
-      !command_line->HasSwitch(switches::kVariationsServerURL)) {
-    // Note that passing base::Unretained(this) below is safe because the
-    // callback is executed synchronously.
-    AssociateDefaultFieldTrialConfig(
-        base::BindRepeating(&VariationsFieldTrialCreator::OverrideUIString,
-                            base::Unretained(this)),
-        GetPlatform(), client_->GetCurrentFormFactor(), feature_list.get());
-    used_testing_config = true;
-  }
-#endif  // BUILDFLAG(FIELDTRIAL_TESTING_ENABLED)
-  bool used_seed = false;
-  if (!used_testing_config) {
-    used_seed = CreateTrialsFromSeed(low_entropy_provider.get(),
-                                     feature_list.get(), safe_seed_manager);
-  }
-
-  platform_field_trials->SetupFeatureControllingFieldTrials(
-      used_seed, low_entropy_provider.get(), feature_list.get());
-
-  base::FeatureList::SetInstance(std::move(feature_list));
-
-  // This must be called after |local_state_| is initialized.
-  platform_field_trials->SetupFieldTrials();
-
-  return used_seed;
+  UMA_HISTOGRAM_TIMES("Variations.SeedProcessingTime",
+                      base::TimeTicks::Now() - start_time);
+  return true;
 }
 
 void VariationsFieldTrialCreator::OverrideUIString(uint32_t resource_hash,
@@ -565,10 +569,6 @@
       resource_id, str);
 }
 
-bool VariationsFieldTrialCreator::IsOverrideResourceMapEmpty() {
-  return overridden_strings_map_.empty();
-}
-
 VariationsSeedStore* VariationsFieldTrialCreator::GetSeedStore() {
   return seed_store_.get();
 }
diff --git a/components/variations/service/variations_field_trial_creator.h b/components/variations/service/variations_field_trial_creator.h
index 21b528b1..85067c8 100644
--- a/components/variations/service/variations_field_trial_creator.h
+++ b/components/variations/service/variations_field_trial_creator.h
@@ -115,9 +115,6 @@
   // client.
   void StoreVariationsOverriddenCountry(const std::string& country);
 
-  // Records the time of the most recent successful fetch.
-  void RecordLastFetchTime();
-
   // Allow the platform that is used to filter the set of active trials to be
   // overridden.
   void OverrideVariationsPlatform(Study::Platform platform_override);
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc
index edaba4f..eb09070 100644
--- a/components/viz/service/display/display.cc
+++ b/components/viz/service/display/display.cc
@@ -9,10 +9,10 @@
 #include <limits>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/components/viz/service/display/display_scheduler_unittest.cc b/components/viz/service/display/display_scheduler_unittest.cc
index 1d18f5a..60ccdd7 100644
--- a/components/viz/service/display/display_scheduler_unittest.cc
+++ b/components/viz/service/display/display_scheduler_unittest.cc
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/check.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/test/null_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/trace_event/trace_event.h"
diff --git a/components/viz/service/display/draw_polygon_unittest.cc b/components/viz/service/display/draw_polygon_unittest.cc
index c44b623..598e61a 100644
--- a/components/viz/service/display/draw_polygon_unittest.cc
+++ b/components/viz/service/display/draw_polygon_unittest.cc
@@ -9,9 +9,9 @@
 #include <utility>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/numerics/math_constants.h"
-#include "base/stl_util.h"
 #include "build/build_config.h"
 #include "components/viz/service/display/bsp_compare_result.h"
 #include "components/viz/service/display/draw_polygon.h"
diff --git a/components/viz/service/display_embedder/server_shared_bitmap_manager.cc b/components/viz/service/display_embedder/server_shared_bitmap_manager.cc
index b668512b..c2a177e 100644
--- a/components/viz/service/display_embedder/server_shared_bitmap_manager.cc
+++ b/components/viz/service/display_embedder/server_shared_bitmap_manager.cc
@@ -9,12 +9,12 @@
 #include <string>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/shared_memory_mapping.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/trace_event/process_memory_dump.h"
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
index e910e09a..a996019 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -10,8 +10,8 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "cc/base/features.h"
diff --git a/components/viz/test/test_gles2_interface.h b/components/viz/test/test_gles2_interface.h
index 1ad792e..df07639 100644
--- a/components/viz/test/test_gles2_interface.h
+++ b/components/viz/test/test_gles2_interface.h
@@ -11,11 +11,11 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/stl_util.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/gles2_interface_stub.h"
 #include "gpu/command_buffer/common/capabilities.h"
diff --git a/components/webapps/browser/installable/installable_manager.cc b/components/webapps/browser/installable/installable_manager.cc
index de794c4a..f23766b 100644
--- a/components/webapps/browser/installable/installable_manager.cc
+++ b/components/webapps/browser/installable/installable_manager.cc
@@ -11,7 +11,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/string_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
diff --git a/components/webdata/common/BUILD.gn b/components/webdata/common/BUILD.gn
index d3d431e..f225e86 100644
--- a/components/webdata/common/BUILD.gn
+++ b/components/webdata/common/BUILD.gn
@@ -82,6 +82,7 @@
     "//components/test/data/web_database/version_92.sql",
     "//components/test/data/web_database/version_93.sql",
     "//components/test/data/web_database/version_94.sql",
+    "//components/test/data/web_database/version_95.sql",
   ]
   outputs = [ "{{bundle_resources_dir}}/" +
               "{{source_root_relative_dir}}/{{source_file_part}}" ]
diff --git a/components/webdata/common/web_database.cc b/components/webdata/common/web_database.cc
index 58d2265..f05381e 100644
--- a/components/webdata/common/web_database.cc
+++ b/components/webdata/common/web_database.cc
@@ -14,7 +14,7 @@
 // corresponding changes must happen in the unit tests, and new migration test
 // added.  See |WebDatabaseMigrationTest::kCurrentTestedVersionNumber|.
 // static
-const int WebDatabase::kCurrentVersionNumber = 95;
+const int WebDatabase::kCurrentVersionNumber = 96;
 
 const int WebDatabase::kDeprecatedVersionNumber = 51;
 
diff --git a/components/webdata/common/web_database_migration_unittest.cc b/components/webdata/common/web_database_migration_unittest.cc
index 40a2992a..8173eb66 100644
--- a/components/webdata/common/web_database_migration_unittest.cc
+++ b/components/webdata/common/web_database_migration_unittest.cc
@@ -125,7 +125,7 @@
   DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest);
 };
 
-const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 95;
+const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 96;
 
 void WebDatabaseMigrationTest::LoadDatabase(
     const base::FilePath::StringType& file) {
@@ -2126,3 +2126,36 @@
         connection.DoesColumnExist("credit_card_art_images", "card_art_image"));
   }
 }
+
+// Tests addition of lock state to the autofill_profile table.
+TEST_F(WebDatabaseMigrationTest, MigrateVersion95ToCurrent) {
+  ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_95.sql")));
+
+  // Verify pre-conditions.
+  {
+    sql::Database connection;
+    ASSERT_TRUE(connection.Open(GetDatabasePath()));
+    ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
+
+    sql::MetaTable meta_table;
+    ASSERT_TRUE(meta_table.Init(&connection, 95, 83));
+
+    EXPECT_FALSE(connection.DoesColumnExist(
+        "autofill_profile", "disallow_settings_visible_updates"));
+  }
+
+  DoMigration();
+
+  // Verify post-conditions.
+  {
+    sql::Database connection;
+    ASSERT_TRUE(connection.Open(GetDatabasePath()));
+    ASSERT_TRUE(sql::MetaTable::DoesTableExist(&connection));
+
+    // Check version.
+    EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection));
+
+    EXPECT_FALSE(connection.DoesColumnExist(
+        "autofill_profile", "disallow_settings_visible_updates"));
+  }
+}
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
index b2b2f842..c17242f 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
+++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -7,10 +7,10 @@
 #include <limits>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/debug/crash_logging.h"
 #import "base/mac/foundation_util.h"
 #include "base/numerics/ranges.h"
-#include "base/stl_util.h"
 #include "base/strings/sys_string_conversions.h"
 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
 #import "content/browser/accessibility/browser_accessibility_mac.h"
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index c10ae16..efecbd7 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -203,6 +203,9 @@
   // Fire any events that need to be fired when tree nodes get deleted. For
   // example, events that fire every time "OnSubtreeWillBeDeleted" is called.
   ax_tree()->Destroy();
+  for (auto& key_value_pair : id_wrapper_map_) {
+    delete key_value_pair.second;
+  }
   delegate_ = nullptr;  // Guard against reentrancy by screen reader.
   if (last_focused_node_tree_id_ &&
       ax_tree_id_ == *last_focused_node_tree_id_) {
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index 932d38d7..d06da10 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/win/scoped_variant.h"
 #include "base/win/windows_version.h"
 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index eb90e3f..cb383977 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -10662,4 +10662,115 @@
                     {}, {}, {}, FROM_HERE);
 }
 
+class BackForwardCacheOptInBrowserTest : public BackForwardCacheBrowserTest {
+ protected:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    EnableFeatureAndSetParams(features::kBackForwardCache,
+                              "opt_in_header_required", "true");
+    BackForwardCacheBrowserTest::SetUpCommandLine(command_line);
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(BackForwardCacheOptInBrowserTest, NoCacheWithoutHeader) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  // 2) Navigate to B.
+  EXPECT_TRUE(NavigateToURL(shell(), url_b));
+  EXPECT_TRUE(delete_observer_rfh_a.deleted());
+
+  // 3) Go back.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason::
+                         kOptInUnloadHeaderNotPresent},
+                    {}, {}, {}, FROM_HERE);
+}
+
+namespace {
+
+const char kResponseWithOptIn[] =
+    "HTTP/1.1 200 OK\r\n"
+    "Content-Type: text/html; charset=utf-8\r\n"
+    "BFCache-Opt-In: unload\r\n"
+    "\r\n"
+    "bfcache opt in page.";
+
+}  // namespace
+
+IN_PROC_BROWSER_TEST_F(BackForwardCacheOptInBrowserTest,
+                       CacheIfHeaderIsPresent) {
+  net::test_server::ControllableHttpResponse response(embedded_test_server(),
+                                                      "/opt_in_document");
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/opt_in_document"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  TestNavigationObserver observer(web_contents());
+  shell()->LoadURL(url_a);
+  response.WaitForRequest();
+  response.Send(kResponseWithOptIn);
+  response.Done();
+  observer.Wait();
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  // 2) Navigate to B.
+  EXPECT_TRUE(NavigateToURL(shell(), url_b));
+  ASSERT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_TRUE(rfh_a->IsInBackForwardCache());
+
+  // 3) Go back.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  ExpectRestored(FROM_HERE);
+}
+
+IN_PROC_BROWSER_TEST_F(BackForwardCacheOptInBrowserTest,
+                       NoCacheIfHeaderOnlyPresentOnDestinationPage) {
+  net::test_server::ControllableHttpResponse response(embedded_test_server(),
+                                                      "/opt_in_document");
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/opt_in_document"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+
+  // 2) Navigate to B.
+  TestNavigationObserver observer(web_contents());
+  shell()->LoadURL(url_b);
+  response.WaitForRequest();
+  response.Send(kResponseWithOptIn);
+  response.Done();
+  observer.Wait();
+  EXPECT_TRUE(delete_observer_rfh_a.deleted());
+
+  // 3) Go back. - A doesn't have header so it shouldn't be cached.
+  web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason::
+                         kOptInUnloadHeaderNotPresent},
+                    {}, {}, {}, FROM_HERE);
+
+  // 4) Go forward. - B has the header, so it should be cached.
+  web_contents()->GetController().GoForward();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  ExpectRestored(FROM_HERE);
+}
+
 }  // namespace content
diff --git a/content/browser/bluetooth/bluetooth_allowed_devices.cc b/content/browser/bluetooth/bluetooth_allowed_devices.cc
index be47f41..0f69a5f 100644
--- a/content/browser/bluetooth/bluetooth_allowed_devices.cc
+++ b/content/browser/bluetooth/bluetooth_allowed_devices.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "content/browser/bluetooth/bluetooth_blocklist.h"
 
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.cc b/content/browser/browsing_data/browsing_data_remover_impl.cc
index 9749af8..349ceb6 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl.cc
@@ -12,12 +12,12 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
-#include "base/stl_util.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "content/browser/browsing_data/browsing_data_filter_builder_impl.h"
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.cc b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
index 4c6c0a5b..4c96def 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage.cc
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
@@ -15,6 +15,7 @@
 #include "base/barrier_closure.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/files/memory_mapped_file.h"
 #include "base/guid.h"
@@ -26,7 +27,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
diff --git a/content/browser/cross_origin_opener_policy_browsertest.cc b/content/browser/cross_origin_opener_policy_browsertest.cc
index 6b25385b..852a2e70 100644
--- a/content/browser/cross_origin_opener_policy_browsertest.cc
+++ b/content/browser/cross_origin_opener_policy_browsertest.cc
@@ -182,12 +182,19 @@
 
 IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
                        NewPopupCOOP_InheritsSameOrigin) {
-  GURL starting_page(
-      https_server()->GetURL("a.com", "/cross_site_iframe_factory.html?a(a)"));
+  GURL starting_page(https_server()->GetURL(
+      "a.com", "/set-header?cross-origin-opener-policy: same-origin"));
   EXPECT_TRUE(NavigateToURL(shell(), starting_page));
 
   RenderFrameHostImpl* main_frame = current_frame_host();
-  main_frame->set_cross_origin_opener_policy_for_testing(CoopSameOrigin());
+
+  // Create same origin child frame.
+  ASSERT_TRUE(ExecJs(main_frame, R"(
+    let frame = document.createElement('iframe');
+    frame.src = '/empty.html';
+    document.body.appendChild(frame);
+  )"));
+  EXPECT_TRUE(WaitForLoadStop(web_contents()));
 
   ShellAddedObserver shell_observer;
   RenderFrameHostImpl* iframe = main_frame->child_at(0)->current_frame_host();
@@ -205,13 +212,20 @@
 
 IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
                        NewPopupCOOP_InheritsSameOriginAllowPopups) {
-  GURL starting_page(
-      https_server()->GetURL("a.com", "/cross_site_iframe_factory.html?a(a)"));
+  GURL starting_page(https_server()->GetURL(
+      "a.com",
+      "/set-header?cross-origin-opener-policy: same-origin-allow-popups"));
   EXPECT_TRUE(NavigateToURL(shell(), starting_page));
 
   RenderFrameHostImpl* main_frame = current_frame_host();
-  main_frame->set_cross_origin_opener_policy_for_testing(
-      CoopSameOriginAllowPopups());
+
+  // Create same origin child frame.
+  ASSERT_TRUE(ExecJs(current_frame_host(), R"(
+    let frame = document.createElement('iframe');
+    frame.src = '/empty.html';
+    document.body.appendChild(frame);
+  )"));
+  EXPECT_TRUE(WaitForLoadStop(web_contents()));
 
   ShellAddedObserver shell_observer;
   RenderFrameHostImpl* iframe = main_frame->child_at(0)->current_frame_host();
@@ -231,12 +245,22 @@
 
 IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
                        NewPopupCOOP_CrossOriginDoesNotInherit) {
-  GURL starting_page(
-      https_server()->GetURL("a.com", "/cross_site_iframe_factory.html?a(b)"));
+  GURL starting_page(https_server()->GetURL(
+      "a.com", "/set-header?cross-origin-opener-policy: same-origin"));
+  GURL url_b(https_server()->GetURL("b.com", "/empty.html"));
+
   EXPECT_TRUE(NavigateToURL(shell(), starting_page));
 
   RenderFrameHostImpl* main_frame = current_frame_host();
-  main_frame->set_cross_origin_opener_policy_for_testing(CoopSameOrigin());
+
+  // Create cross origin child frame.
+  ASSERT_TRUE(ExecJs(main_frame, JsReplace(R"(
+    let frame = document.createElement('iframe');
+    frame.src = $1;
+    document.body.appendChild(frame);
+  )",
+                                           url_b)));
+  EXPECT_TRUE(WaitForLoadStop(web_contents()));
 
   ShellAddedObserver shell_observer;
   RenderFrameHostImpl* iframe = main_frame->child_at(0)->current_frame_host();
@@ -255,13 +279,26 @@
 IN_PROC_BROWSER_TEST_P(
     CrossOriginOpenerPolicyBrowserTest,
     NewPopupCOOP_SameOriginPolicyAndCrossOriginIframeSetsNoopener) {
-  for (auto coop_value : {CoopSameOriginPlusCoep(), CoopSameOrigin()}) {
-    GURL starting_page(https_server()->GetURL(
-        "a.com", "/cross_site_iframe_factory.html?a(b)"));
+  for (const char* header :
+       {"cross-origin-opener-policy: same-origin",
+        "cross-origin-opener-policy: same-origin&cross-origin-embedder-policy: "
+        "require-corp"}) {
+    GURL starting_page(
+        https_server()->GetURL("a.com", std::string("/set-header?") + header));
+    GURL url_b(https_server()->GetURL("b.com", "/empty.html"));
+
     EXPECT_TRUE(NavigateToURL(shell(), starting_page));
 
     RenderFrameHostImpl* main_frame = current_frame_host();
-    main_frame->set_cross_origin_opener_policy_for_testing(coop_value);
+
+    // Create cross origin child frame.
+    ASSERT_TRUE(ExecJs(main_frame, JsReplace(R"(
+        let frame = document.createElement('iframe');
+        frame.src = $1;
+        document.body.appendChild(frame);
+    )",
+                                             url_b)));
+    EXPECT_TRUE(WaitForLoadStop(web_contents()));
 
     ShellAddedObserver new_shell_observer;
     RenderFrameHostImpl* iframe = main_frame->child_at(0)->current_frame_host();
@@ -442,10 +479,155 @@
   EXPECT_EQ(iframe_rfh->GetLastCommittedURL(), iframe_navigation_url);
   EXPECT_EQ(iframe_rfh->GetSiteInstance(), non_coop_iframe_site_instance);
 
+  // The iframe's COOP value is defaulted to unsafe-none since the iframe is
+  // cross origin with its top frame.
   EXPECT_EQ(iframe_rfh->cross_origin_opener_policy(), CoopUnsafeNone());
 }
 
 IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
+                       CoopSameOriginIframeInheritance) {
+  GURL coop_url(embedded_test_server()->GetURL(
+      "/set-header?cross-origin-opener-policy: same-origin"));
+  ASSERT_TRUE(NavigateToURL(shell(), coop_url));
+
+  // Create same origin child frame.
+  ASSERT_TRUE(ExecJs(current_frame_host(), R"(
+    let frame = document.createElement('iframe');
+    frame.src = '/empty.html';
+    document.body.appendChild(frame);
+  )"));
+  EXPECT_TRUE(WaitForLoadStop(web_contents()));
+
+  RenderFrameHostImpl* child_rfh =
+      current_frame_host()->child_at(0)->current_frame_host();
+
+  // The embedded document has a COOP value that is always inherited from its
+  // top level document if they are same-origin. This has no incidence on the
+  // embeddee but is inherited by the popup opened hereafter.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin,
+      child_rfh->policy_container_host()->cross_origin_opener_policy().value);
+
+  // Create a popup from the iframe.
+  ShellAddedObserver shell_observer;
+  EXPECT_TRUE(ExecJs(child_rfh, R"(
+    w = window.open("about:blank");
+  )"));
+  WebContentsImpl* popup_webcontents =
+      static_cast<WebContentsImpl*>(shell_observer.GetShell()->web_contents());
+  RenderFrameHostImpl* popup_rfh = popup_webcontents->GetMainFrame();
+
+  // Verify inheritance from the opener:
+  // The second about:blank document of the popup, due to the synchronous
+  // re-navigation to about:blank, inherits COOP from its opener.
+  // When the opener is same-origin with its top-level document, the top-level
+  // document's COOP value (same-origin) is used.
+  // In practice policy container handles the inheritance, taking the value
+  // from the opener directly, which was properly set when the document was
+  // committed.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin,
+      popup_rfh->policy_container_host()->cross_origin_opener_policy().value);
+
+  PolicyContainerHost* popup_initial_policy_container =
+      popup_rfh->policy_container_host();
+
+  // Navigate the popup from the iframe to about:blank.
+  EXPECT_TRUE(ExecJs(child_rfh, R"(
+    w.location.href = "about:blank";
+  )"));
+  EXPECT_TRUE(WaitForLoadStop(popup_webcontents));
+  popup_rfh = popup_webcontents->GetMainFrame();
+
+  // Verify the policy container changed, highlighting that the popup has
+  // navigated to a different about:blank document.
+  EXPECT_NE(popup_initial_policy_container, popup_rfh->policy_container_host());
+
+  // Verify inheritance from the initiator:
+  // The navigation to a local scheme inherits COOP from the initiator. When the
+  // initiator is same-origin with its top-level document, the top-level
+  // document's COOP value (same-origin) is used.
+  // In practice policy container handles the inheritance, taking the value
+  // from the initiator directly, which was properly set when the document was
+  // committed.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin,
+      popup_rfh->policy_container_host()->cross_origin_opener_policy().value);
+}
+
+IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
+                       CoopCrossOriginIframeInheritance) {
+  GURL coop_url(embedded_test_server()->GetURL(
+      "/set-header?cross-origin-opener-policy: same-origin-allow-popups"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/empty.html"));
+  ASSERT_TRUE(NavigateToURL(shell(), coop_url));
+
+  // Create child frame.
+  ASSERT_TRUE(ExecJs(current_frame_host(), JsReplace(R"(
+    let frame = document.createElement('iframe');
+    frame.src = $1;
+    document.body.appendChild(frame);
+  )",
+                                                     url_b)));
+  EXPECT_TRUE(WaitForLoadStop(web_contents()));
+
+  RenderFrameHostImpl* child_rfh =
+      current_frame_host()->child_at(0)->current_frame_host();
+
+  // The embedded document has a COOP value that is always defaulted when it is
+  // cross origin with its top level document. This has no incidence on the
+  // embeddee but is inherited by the popup opened hereafter.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone,
+      child_rfh->policy_container_host()->cross_origin_opener_policy().value);
+
+  // Create a popup from the iframe.
+  ShellAddedObserver shell_observer;
+  EXPECT_TRUE(ExecJs(child_rfh, R"(
+    w = window.open("about:blank");
+  )"));
+  WebContentsImpl* popup_webcontents =
+      static_cast<WebContentsImpl*>(shell_observer.GetShell()->web_contents());
+  RenderFrameHostImpl* popup_rfh = popup_webcontents->GetMainFrame();
+
+  // The second about:blank document of the popup, due to the synchronous
+  // re-navigation to about:blank, inherits COOP from its opener.
+  // When the opener is cross-origin with its top-level document, the COOP value
+  // is defaulted to unsafe-none.
+  // In practice policy container handles the inheritance, taking the value
+  // from the opener directly, which was properly set when the document was
+  // committed.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone,
+      popup_rfh->policy_container_host()->cross_origin_opener_policy().value);
+
+  PolicyContainerHost* popup_initial_policy_container =
+      popup_rfh->policy_container_host();
+
+  // Navigate the popup from the iframe.
+  EXPECT_TRUE(ExecJs(child_rfh, R"(
+    w.location.href = "about:blank";
+  )"));
+  EXPECT_TRUE(WaitForLoadStop(popup_webcontents));
+  popup_rfh = popup_webcontents->GetMainFrame();
+
+  // Verify the policy container changed, highlighting that the popup has
+  // navigated to a different about:blank document.
+  EXPECT_NE(popup_initial_policy_container, popup_rfh->policy_container_host());
+
+  // Verify inheritance from the initiator:
+  // The navigation to a local scheme inherits COOP from the initiator. When the
+  // initiator is cross-origin with its top-level document, the COOP value is
+  // defaulted to unsafe-none.
+  // In practice policy container handles the inheritance, taking the value
+  // from the initiator directly, which was properly set when the document was
+  // committed.
+  EXPECT_EQ(
+      network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone,
+      popup_rfh->policy_container_host()->cross_origin_opener_policy().value);
+}
+
+IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest,
                        NonCoopPageCrashIntoCoop) {
   IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess());
   GURL non_coop_page(https_server()->GetURL("a.com", "/title1.html"));
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 0936be5..a948e55 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/debug/alias.h"
 #include "base/files/file_util.h"
 #include "base/i18n/case_conversion.h"
@@ -17,7 +18,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/supports_user_data.h"
 #include "base/synchronization/lock.h"
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc
index eaed2ec..0395a592 100644
--- a/content/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -16,7 +17,6 @@
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/rand_util.h"
-#include "base/stl_util.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index 52eaa81e..23dfde8 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -14,10 +14,10 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/environment.h"
 #include "base/i18n/time_formatting.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringize_macros.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.cc b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
index 6494194..9458f4a9 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry.cc
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
@@ -5,8 +5,8 @@
 #include "content/browser/indexed_db/indexed_db_active_blob_registry.h"
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
-#include "base/stl_util.h"
 #include "base/task_runner.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/indexed_db/indexed_db_backing_store.h"
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry_unittest.cc b/content/browser/indexed_db/indexed_db_active_blob_registry_unittest.cc
index b504e3df..06fcc12 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry_unittest.cc
@@ -8,8 +8,8 @@
 #include <set>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "base/test/task_environment.h"
 #include "content/browser/indexed_db/indexed_db_active_blob_registry.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/indexed_db/indexed_db_connection.cc b/content/browser/indexed_db/indexed_db_connection.cc
index 832a594..8d221caa 100644
--- a/content/browser/indexed_db/indexed_db_connection.cc
+++ b/content/browser/indexed_db/indexed_db_connection.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/check_op.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/browser/indexed_db/indexed_db_class_factory.h"
 #include "content/browser/indexed_db/indexed_db_database_callbacks.h"
 #include "content/browser/indexed_db/indexed_db_database_error.h"
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index b409178..a9f92f48 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -13,6 +13,7 @@
 
 #include "base/auto_reset.h"
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
@@ -20,7 +21,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scope.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scopes.h"
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.cc b/content/browser/indexed_db/indexed_db_factory_impl.cc
index c540c37..d16d0db 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.cc
+++ b/content/browser/indexed_db/indexed_db_factory_impl.cc
@@ -16,13 +16,13 @@
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/browser/indexed_db/indexed_db_origin_state.cc b/content/browser/indexed_db/indexed_db_origin_state.cc
index 42fb0c2..76a9302 100644
--- a/content/browser/indexed_db/indexed_db_origin_state.cc
+++ b/content/browser/indexed_db/indexed_db_origin_state.cc
@@ -11,9 +11,9 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/rand_util.h"
-#include "base/stl_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h"
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h"
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc
index 1e451d4..02ae2a1 100644
--- a/content/browser/loader/navigation_url_loader_impl.cc
+++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -11,11 +11,11 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "components/download/public/common/download_stats.h"
diff --git a/content/browser/locks/lock_manager.cc b/content/browser/locks/lock_manager.cc
index 19c70ea..905b25d5 100644
--- a/content/browser/locks/lock_manager.cc
+++ b/content/browser/locks/lock_manager.cc
@@ -12,8 +12,8 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/guid.h"
-#include "base/stl_util.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/common/content_client.h"
diff --git a/content/browser/media/midi_host.cc b/content/browser/media/midi_host.cc
index 2a8cf7d..a781969 100644
--- a/content/browser/media/midi_host.cc
+++ b/content/browser/media/midi_host.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/process/process.h"
-#include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/browser_main_loop.h"
diff --git a/content/browser/media/service_factory.cc b/content/browser/media/service_factory.cc
index e33ccc0..59c887a 100644
--- a/content/browser/media/service_factory.cc
+++ b/content/browser/media/service_factory.cc
@@ -93,7 +93,8 @@
     auto site_display_name =
         GetContentClient()->browser()->GetSiteDisplayNameForCdmProcess(
             browser_context, site);
-    display_name += " (" + site_display_name + ")";
+    if (!site_display_name.empty())
+      display_name += " (" + site_display_name + ")";
   } else {
     key = {guid, nullptr, GURL()};
   }
diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc
index eb3ebd4..9a4167c 100644
--- a/content/browser/media/session/media_session_impl.cc
+++ b/content/browser/media/session/media_session_impl.cc
@@ -9,9 +9,9 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/numerics/ranges.h"
 #include "base/ranges/algorithm.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/content/browser/payments/payment_app_content_unittest_base.cc b/content/browser/payments/payment_app_content_unittest_base.cc
index 7ca6e9ff..04b1633 100644
--- a/content/browser/payments/payment_app_content_unittest_base.cc
+++ b/content/browser/payments/payment_app_content_unittest_base.cc
@@ -10,9 +10,9 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "content/browser/service_worker/embedded_worker_test_helper.h"
 #include "content/browser/service_worker/fake_embedded_worker_instance_client.h"
 #include "content/browser/service_worker/fake_service_worker.h"
diff --git a/content/browser/payments/payment_app_context_impl.cc b/content/browser/payments/payment_app_context_impl.cc
index 59ee6153..b725d996c 100644
--- a/content/browser/payments/payment_app_context_impl.cc
+++ b/content/browser/payments/payment_app_context_impl.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/task/post_task.h"
 #include "content/browser/payments/payment_manager.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/content/browser/plugin_list.cc b/content/browser/plugin_list.cc
index 19e5905..dd2b55a1 100644
--- a/content/browser/plugin_list.cc
+++ b/content/browser/plugin_list.cc
@@ -10,8 +10,8 @@
 
 #include "base/check.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
-#include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
diff --git a/content/browser/plugin_private_storage_helper.cc b/content/browser/plugin_private_storage_helper.cc
index 7ab7c65..a9b4e2de 100644
--- a/content/browser/plugin_private_storage_helper.cc
+++ b/content/browser/plugin_private_storage_helper.cc
@@ -14,12 +14,12 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/files/file.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/posix_file_descriptor_info_impl.cc b/content/browser/posix_file_descriptor_info_impl.cc
index 94a498a9..8b56eddd 100644
--- a/content/browser/posix_file_descriptor_info_impl.cc
+++ b/content/browser/posix_file_descriptor_info_impl.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 
 namespace content {
 
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc
index b86cb93..8de5e8e7 100644
--- a/content/browser/prerender/prerender_host_registry.cc
+++ b/content/browser/prerender/prerender_host_registry.cc
@@ -6,9 +6,9 @@
 
 #include "base/callback_helpers.h"
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/system/sys_info.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_conversion_helper.h"
diff --git a/content/browser/renderer_host/agent_scheduling_group_host.cc b/content/browser/renderer_host/agent_scheduling_group_host.cc
index 66ff18d..964fd56 100644
--- a/content/browser/renderer_host/agent_scheduling_group_host.cc
+++ b/content/browser/renderer_host/agent_scheduling_group_host.cc
@@ -5,10 +5,10 @@
 
 #include <memory>
 
+#include "base/containers/contains.h"
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/feature_list.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/supports_user_data.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/renderer_host/agent_scheduling_group_host_factory.h"
diff --git a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
index 83518e7..48435907 100644
--- a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
+++ b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
@@ -157,6 +157,9 @@
       return "Browsing instance is not swapped";
     case Reason::kBackForwardCacheDisabledForDelegate:
       return "BackForwardCache is not supported by delegate";
+    case Reason::kOptInUnloadHeaderNotPresent:
+      return "BFCache-Opt-In header not present, or does not include `unload` "
+             "token, and an experimental config which requires it is active.";
   }
 }
 
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc
index 22db2c8f..7764baf 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.cc
+++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -109,6 +109,14 @@
   return file_system_api_supported.Get();
 }
 
+bool IsOptInHeaderRequired() {
+  if (!IsBackForwardCacheEnabled())
+    return false;
+  static constexpr base::FeatureParam<bool> opt_in_header_required(
+      &features::kBackForwardCache, "opt_in_header_required", false);
+  return opt_in_header_required.Get();
+}
+
 uint64_t SupportedFeaturesBitmaskImpl() {
   if (!IsBackForwardCacheEnabled())
     return 0;
@@ -530,6 +538,25 @@
   if (!IsAllowed(rfh->GetLastCommittedURL()))
     result.No(BackForwardCacheMetrics::NotRestoredReason::kDomainNotAllowed);
 
+  // TODO(crbug.com/1201653): Also implement a variant that checks for the
+  // existance of an `unload` handler.
+  if (IsOptInHeaderRequired()) {
+    const network::mojom::URLResponseHeadPtr& response_head =
+        rfh->last_response_head();
+    if (!response_head) {
+      // For the cases without `response_head`, we should have already bailed
+      // out of BFCache for other reasons.
+      DCHECK(!result.CanStore());
+    } else {
+      const network::mojom::ParsedHeadersPtr& headers =
+          response_head->parsed_headers;
+      if (!headers || !headers->bfcache_opt_in_unload) {
+        result.No(BackForwardCacheMetrics::NotRestoredReason::
+                      kOptInUnloadHeaderNotPresent);
+      }
+    }
+  }
+
   CanStoreRenderFrameHostLater(&result, rfh);
 
   DVLOG(1) << "CanPotentiallyStorePageLater: " << rfh->GetLastCommittedURL()
diff --git a/content/browser/renderer_host/back_forward_cache_metrics.h b/content/browser/renderer_host/back_forward_cache_metrics.h
index 4e9677e..04b1140 100644
--- a/content/browser/renderer_host/back_forward_cache_metrics.h
+++ b/content/browser/renderer_host/back_forward_cache_metrics.h
@@ -100,7 +100,8 @@
     kForegroundCacheLimit = 46,
     kBrowsingInstanceNotSwapped = 47,
     kBackForwardCacheDisabledForDelegate = 48,
-    kMaxValue = kBackForwardCacheDisabledForDelegate,
+    kOptInUnloadHeaderNotPresent = 49,
+    kMaxValue = kOptInUnloadHeaderNotPresent,
   };
 
   using NotRestoredReasons =
diff --git a/content/browser/renderer_host/cross_origin_opener_policy_status.cc b/content/browser/renderer_host/cross_origin_opener_policy_status.cc
index 2a42dd0e..15fceac4 100644
--- a/content/browser/renderer_host/cross_origin_opener_policy_status.cc
+++ b/content/browser/renderer_host/cross_origin_opener_policy_status.cc
@@ -114,28 +114,33 @@
 
 CrossOriginOpenerPolicyStatus::~CrossOriginOpenerPolicyStatus() = default;
 
-base::Optional<network::mojom::BlockedByResponseReason>
-CrossOriginOpenerPolicyStatus::EnforceCOOP(
+network::CrossOriginOpenerPolicy&
+CrossOriginOpenerPolicyStatus::RetrieveCOOPFromResponse(
     network::mojom::URLResponseHead* response_head,
-    const net::NetworkIsolationKey& network_isolation_key) {
+    const url::Origin& response_origin) {
   const GURL& response_url = navigation_request_->common_params().url;
-  const GURL& response_referrer_url =
-      navigation_request_->common_params().referrer->url;
-
-  // TODO(https://crbug.com/1063518): Take sandbox into account.
-  url::Origin response_origin = url::Origin::Create(response_url);
 
   SanitizeCoopHeaders(response_url, response_origin, response_head);
+
   network::mojom::ParsedHeaders* parsed_headers =
       response_head->parsed_headers.get();
 
-  // Return early if the situation prevents COOP from operating.
-  if (!frame_tree_node_->IsMainFrame() || response_url.IsAboutBlank()) {
+  return parsed_headers->cross_origin_opener_policy;
+}
+
+base::Optional<network::mojom::BlockedByResponseReason>
+CrossOriginOpenerPolicyStatus::EnforceCOOP(
+    const network::CrossOriginOpenerPolicy& response_coop,
+    const url::Origin& response_origin,
+    const net::NetworkIsolationKey& network_isolation_key) {
+  // COOP only applies to top level browsing contexts.
+  if (!frame_tree_node_->IsMainFrame()) {
     return base::nullopt;
   }
 
-  network::CrossOriginOpenerPolicy& response_coop =
-      parsed_headers->cross_origin_opener_policy;
+  const GURL& response_url = navigation_request_->common_params().url;
+  const GURL& response_referrer_url =
+      navigation_request_->common_params().referrer->url;
 
   // Popups with a sandboxing flag, inherited from their opener, are not
   // allowed to navigate to a document with a Cross-Origin-Opener-Policy that
@@ -146,6 +151,13 @@
           network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone &&
       (frame_tree_node_->pending_frame_policy().sandbox_flags !=
        network::mojom::WebSandboxFlags::kNone)) {
+    // Blob and Filesystem documents' cross-origin-opener-policy values are
+    // defaulted to the default unsafe-none.
+    // Data documents can only be loaded on main documents through browser
+    // initiated navigations. These never inherit sandbox flags.
+    DCHECK(!response_url.SchemeIsBlob());
+    DCHECK(!response_url.SchemeIsFileSystem());
+    DCHECK(!response_url.SchemeIs(url::kDataScheme));
     return network::mojom::BlockedByResponseReason::
         kCoopSandboxedIFrameCannotNavigateToCoopPage;
   }
diff --git a/content/browser/renderer_host/cross_origin_opener_policy_status.h b/content/browser/renderer_host/cross_origin_opener_policy_status.h
index 6c3c199..0c10a15 100644
--- a/content/browser/renderer_host/cross_origin_opener_policy_status.h
+++ b/content/browser/renderer_host/cross_origin_opener_policy_status.h
@@ -29,10 +29,18 @@
   explicit CrossOriginOpenerPolicyStatus(NavigationRequest* navigation_request);
   ~CrossOriginOpenerPolicyStatus();
 
-  // Called after receiving a network response. Returns a BlockedByResponse
-  // reason if the navigation should be blocked, nullopt otherwise.
-  base::Optional<network::mojom::BlockedByResponseReason> EnforceCOOP(
+  // Called after receiving a network response. Returns the
+  // Cross-Origin-Opener-Policy contained in the response.
+  network::CrossOriginOpenerPolicy& RetrieveCOOPFromResponse(
       network::mojom::URLResponseHead* response_head,
+      const url::Origin& response_origin);
+
+  // Called when receiving a redirect or the final response. Returns a
+  // BlockedByResponse reason if the navigation should be blocked, nullopt
+  // otherwise.
+  base::Optional<network::mojom::BlockedByResponseReason> EnforceCOOP(
+      const network::CrossOriginOpenerPolicy& response_coop,
+      const url::Origin& response_origin,
       const net::NetworkIsolationKey& network_isolation_key);
 
   // Set to true whenever the Cross-Origin-Opener-Policy spec requires a
diff --git a/content/browser/renderer_host/frame_tree.cc b/content/browser/renderer_host/frame_tree.cc
index 8954795..983d2d0 100644
--- a/content/browser/renderer_host/frame_tree.cc
+++ b/content/browser/renderer_host/frame_tree.cc
@@ -12,9 +12,9 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "base/trace_event/optional_trace_event.h"
 #include "base/unguessable_token.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
index 6812d1f5..27512eb 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -39,8 +39,7 @@
 const int kIdScreenReaderHoneyPot = 1;
 
 // static
-LegacyRenderWidgetHostHWND* LegacyRenderWidgetHostHWND::Create(
-    HWND parent) {
+LegacyRenderWidgetHostHWND* LegacyRenderWidgetHostHWND::Create(HWND parent) {
   // content_unittests passes in the desktop window as the parent. We allow
   // the LegacyRenderWidgetHostHWND instance to be created in this case for
   // these tests to pass.
@@ -50,14 +49,10 @@
     return nullptr;
 
   LegacyRenderWidgetHostHWND* legacy_window_instance =
-      new LegacyRenderWidgetHostHWND(parent);
-  // If we failed to create the child, or if the switch to disable the legacy
-  // window is passed in, then return NULL.
-  if (!::IsWindow(legacy_window_instance->hwnd())) {
-    delete legacy_window_instance;
-    return NULL;
-  }
-  legacy_window_instance->Init();
+      new LegacyRenderWidgetHostHWND();
+  if (!legacy_window_instance->InitOrDeleteSelf(parent))
+    return nullptr;
+
   return legacy_window_instance;
 }
 
@@ -123,25 +118,42 @@
   delete this;
 }
 
-LegacyRenderWidgetHostHWND::LegacyRenderWidgetHostHWND(HWND parent)
+LegacyRenderWidgetHostHWND::LegacyRenderWidgetHostHWND()
     : mouse_tracking_enabled_(false),
       host_(nullptr),
-      did_return_uia_object_(false) {
-  RECT rect = {0};
-  Base::Create(parent, rect, L"Chrome Legacy Window",
-               WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
-               WS_EX_TRANSPARENT);
-  // We create a system caret regardless of accessibility mode since not all
-  // assistive software that makes use of a caret is classified as a screen
-  // reader, e.g. the built-in Windows Magnifier.
-  ax_system_caret_ = std::make_unique<ui::AXSystemCaretWin>(hwnd());
-}
+      did_return_uia_object_(false) {}
 
 LegacyRenderWidgetHostHWND::~LegacyRenderWidgetHostHWND() {
   DCHECK(!::IsWindow(hwnd()));
 }
 
-void LegacyRenderWidgetHostHWND::Init() {
+bool LegacyRenderWidgetHostHWND::InitOrDeleteSelf(HWND parent) {
+  // Need to use weak_ptr to guard against `this` from being deleted by
+  // Base::Create(), which used to be called in the constructor and caused
+  // heap-use-after-free crash (https://crbug.com/1194694).
+  auto weak_ptr = weak_factory_.GetWeakPtr();
+  RECT rect = {0};
+  Base::Create(parent, rect, L"Chrome Legacy Window",
+               WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
+               WS_EX_TRANSPARENT);
+  if (!weak_ptr) {
+    // Base::Create() runs nested windows message loops that could end up
+    // deleting `this`. Therefore, upon returning false here, `this` is already
+    // deleted.
+    return false;
+  }
+
+  // We create a system caret regardless of accessibility mode since not all
+  // assistive software that makes use of a caret is classified as a screen
+  // reader, e.g. the built-in Windows Magnifier.
+  ax_system_caret_ = std::make_unique<ui::AXSystemCaretWin>(hwnd());
+
+  // If we failed to create the child, then return false.
+  if (!::IsWindow(hwnd())) {
+    delete this;
+    return false;
+  }
+
   // Only register a touch window if we are using WM_TOUCH.
   if (!features::IsUsingWMPointerForTouch())
     RegisterTouchWindow(hwnd(), TWF_WANTPALM);
@@ -174,6 +186,8 @@
 
   // Disable pen flicks (http://crbug.com/506977)
   base::win::DisableFlicks(hwnd());
+
+  return true;
 }
 
 // static
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.h b/content/browser/renderer_host/legacy_render_widget_host_win.h
index d43dddd..026e8b9 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.h
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.h
@@ -16,6 +16,7 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "content/common/content_export.h"
 #include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
 #include "ui/gfx/geometry/rect.h"
@@ -138,10 +139,11 @@
   friend class AccessibilityObjectLifetimeWinBrowserTest;
   friend class DirectManipulationBrowserTestBase;
 
-  explicit LegacyRenderWidgetHostHWND(HWND parent);
+  LegacyRenderWidgetHostHWND();
   ~LegacyRenderWidgetHostHWND() override;
 
-  void Init();
+  // If initialization fails, deletes `this` and returns false.
+  bool InitOrDeleteSelf(HWND parent);
 
   // Returns the target to which the windows input events are forwarded.
   static ui::WindowEventTarget* GetWindowEventTarget(HWND parent);
@@ -200,6 +202,8 @@
   // in Chrome on Windows 10.
   std::unique_ptr<DirectManipulationHelper> direct_manipulation_helper_;
 
+  base::WeakPtrFactory<LegacyRenderWidgetHostHWND> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(LegacyRenderWidgetHostHWND);
 };
 
diff --git a/content/browser/renderer_host/mixed_content_navigation_throttle.cc b/content/browser/renderer_host/mixed_content_navigation_throttle.cc
index d590d280..ed7a339 100644
--- a/content/browser/renderer_host/mixed_content_navigation_throttle.cc
+++ b/content/browser/renderer_host/mixed_content_navigation_throttle.cc
@@ -6,9 +6,9 @@
 
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "content/browser/renderer_host/frame_tree.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/navigation_request.h"
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 445bb94..ab66515 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -1599,6 +1599,16 @@
     if (IsSameDocument()) {
       render_frame_host_ = frame_tree_node_->current_frame_host();
     } else {
+      // Enforce cross-origin-opener-policy for about:blank, about:srcdoc and
+      // MHTML iframe, before selecting the RenderFrameHost.
+      const url::Origin origin = GetOriginForURLLoaderFactoryUnchecked(this);
+      const base::Optional<network::mojom::BlockedByResponseReason>
+          coop_requires_blocking = coop_status_.EnforceCOOP(
+              policy_container_navigation_bundle_->FinalPolicies()
+                  .cross_origin_opener_policy,
+              origin, net::NetworkIsolationKey(origin, origin));
+      DCHECK(!coop_requires_blocking);
+
       // Select an appropriate RenderFrameHost.
       std::string frame_host_choice_reason;
       render_frame_host_ =
@@ -2189,12 +2199,11 @@
     return;
   }
 
-  // TODO(clamy): When we are able to compute the origin of a response in the
-  // browser process, we should use the computed origin instead of extracting it
-  // from the response URL.
+  const url::Origin origin = GetOriginForURLLoaderFactoryUnchecked(this);
   const base::Optional<network::mojom::BlockedByResponseReason>
-      coop_requires_blocking =
-          coop_status_.EnforceCOOP(response_head_.get(), network_isolation_key);
+      coop_requires_blocking = coop_status_.EnforceCOOP(
+          coop_status_.RetrieveCOOPFromResponse(response_head_.get(), origin),
+          origin, network_isolation_key);
   if (coop_requires_blocking) {
     OnRequestFailedInternal(
         network::URLLoaderCompletionStatus(*coop_requires_blocking),
@@ -2675,6 +2684,30 @@
     return;
   }
 
+  {
+    const url::Origin origin = GetOriginForURLLoaderFactoryUnchecked(this);
+    // TODO(pmeuleman) Move the enforcement of COOP to after
+    // ComputePoliciesToCommit and use the origin from
+    // GetOriginForURLLoaderFactory.
+    const base::Optional<network::mojom::BlockedByResponseReason>
+        coop_requires_blocking = coop_status_.EnforceCOOP(
+            coop_status_.RetrieveCOOPFromResponse(response_head_.get(), origin),
+            origin, network_isolation_key);
+    policy_container_navigation_bundle_->SetCrossOriginOpenerPolicy(
+        coop_status_.current_coop());
+    if (coop_requires_blocking) {
+      // TODO(https://crbug.com/1172169): Investigate what must be done in case
+      // of a download.
+      OnRequestFailedInternal(
+          network::URLLoaderCompletionStatus(*coop_requires_blocking),
+          false /* skip_throttles */, base::nullopt /* error_page_content */,
+          false /* collapse_frame */);
+      // DO NOT ADD CODE after this. The previous call to
+      // OnRequestFailedInternal has destroyed the NavigationRequest.
+      return;
+    }
+  }
+
   ComputePoliciesToCommit();
 
   // The navigation may have encountered a header that requests isolation for
@@ -2769,24 +2802,6 @@
     return;
   }
 
-  // TODO(clamy): When we are able to compute the origin of a response in the
-  // browser process, we should use the computed origin instead of extracting it
-  // from the response URL.
-  const base::Optional<network::mojom::BlockedByResponseReason>
-      coop_requires_blocking =
-          coop_status_.EnforceCOOP(response_head_.get(), network_isolation_key);
-  if (coop_requires_blocking) {
-    // TODO(https://crbug.com/1172169): Investigate what must be done in case of
-    // a download.
-    OnRequestFailedInternal(
-        network::URLLoaderCompletionStatus(*coop_requires_blocking),
-        false /* skip_throttles */, base::nullopt /* error_page_content */,
-        false /* collapse_frame */);
-    // DO NOT ADD CODE after this. The previous call to
-    // OnRequestFailedInternal has destroyed the NavigationRequest.
-    return;
-  }
-
   const base::Optional<network::mojom::BlockedByResponseReason>
       coep_requires_blocking = EnforceCOEP();
   if (coep_requires_blocking) {
diff --git a/content/browser/renderer_host/policy_container_host.cc b/content/browser/renderer_host/policy_container_host.cc
index f0a1b82..fcf8f21 100644
--- a/content/browser/renderer_host/policy_container_host.cc
+++ b/content/browser/renderer_host/policy_container_host.cc
@@ -44,7 +44,8 @@
          std::equal(lhs.content_security_policies.begin(),
                     lhs.content_security_policies.end(),
                     rhs.content_security_policies.begin(),
-                    rhs.content_security_policies.end());
+                    rhs.content_security_policies.end()) &&
+         lhs.cross_origin_opener_policy == rhs.cross_origin_opener_policy;
 }
 
 bool operator!=(const PolicyContainerPolicies& lhs,
@@ -59,15 +60,30 @@
       << ", is_web_secure_context: " << policies.is_web_secure_context
       << ", content_security_policies: ";
 
-  if (policies.content_security_policies.empty())
-    return out << "[] }";
-
-  out << "[ ";
-  auto it = policies.content_security_policies.begin();
-  for (; it + 1 != policies.content_security_policies.end(); ++it) {
-    out << (*it)->header->header_value << ", ";
+  if (policies.content_security_policies.empty()) {
+    out << "[]";
+  } else {
+    out << "[ ";
+    auto it = policies.content_security_policies.begin();
+    for (; it + 1 != policies.content_security_policies.end(); ++it) {
+      out << (*it)->header->header_value << ", ";
+    }
+    out << (*it)->header->header_value << " ]";
   }
-  return out << (*it)->header->header_value << " ] }";
+
+  out << ", cross_origin_opener_policy: "
+      << "{ value: " << policies.cross_origin_opener_policy.value
+      << ", reporting_endpoint: "
+      << policies.cross_origin_opener_policy.reporting_endpoint.value_or(
+             "<null>")
+      << ", report_only_value: "
+      << policies.cross_origin_opener_policy.report_only_value
+      << ", report_only_reporting_endpoint: "
+      << policies.cross_origin_opener_policy.report_only_reporting_endpoint
+             .value_or("<null>")
+      << " }";
+
+  return out << " }";
 }
 
 PolicyContainerPolicies::PolicyContainerPolicies() = default;
@@ -77,11 +93,13 @@
     network::mojom::IPAddressSpace ip_address_space,
     bool is_web_secure_context,
     std::vector<network::mojom::ContentSecurityPolicyPtr>
-        content_security_policies)
+        content_security_policies,
+    const network::CrossOriginOpenerPolicy& cross_origin_opener_policy)
     : referrer_policy(referrer_policy),
       ip_address_space(ip_address_space),
       is_web_secure_context(is_web_secure_context),
-      content_security_policies(std::move(content_security_policies)) {}
+      content_security_policies(std::move(content_security_policies)),
+      cross_origin_opener_policy(cross_origin_opener_policy) {}
 
 PolicyContainerPolicies::~PolicyContainerPolicies() = default;
 
@@ -89,7 +107,7 @@
     const {
   return std::make_unique<PolicyContainerPolicies>(
       referrer_policy, ip_address_space, is_web_secure_context,
-      mojo::Clone(content_security_policies));
+      mojo::Clone(content_security_policies), cross_origin_opener_policy);
 }
 
 void PolicyContainerPolicies::AddContentSecurityPolicies(
diff --git a/content/browser/renderer_host/policy_container_host.h b/content/browser/renderer_host/policy_container_host.h
index 1f768141..a75862b 100644
--- a/content/browser/renderer_host/policy_container_host.h
+++ b/content/browser/renderer_host/policy_container_host.h
@@ -11,6 +11,7 @@
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "mojo/public/cpp/bindings/unique_receiver_set.h"
+#include "services/network/public/cpp/cross_origin_opener_policy.h"
 #include "services/network/public/mojom/content_security_policy.mojom-forward.h"
 #include "services/network/public/mojom/ip_address_space.mojom-shared.h"
 #include "services/network/public/mojom/referrer_policy.mojom-shared.h"
@@ -22,11 +23,13 @@
 // The contents of a PolicyContainerHost.
 struct CONTENT_EXPORT PolicyContainerPolicies {
   PolicyContainerPolicies();
-  PolicyContainerPolicies(network::mojom::ReferrerPolicy referrer_policy,
-                          network::mojom::IPAddressSpace ip_address_space,
-                          bool is_web_secure_context,
-                          std::vector<network::mojom::ContentSecurityPolicyPtr>
-                              content_security_policies);
+  PolicyContainerPolicies(
+      network::mojom::ReferrerPolicy referrer_policy,
+      network::mojom::IPAddressSpace ip_address_space,
+      bool is_web_secure_context,
+      std::vector<network::mojom::ContentSecurityPolicyPtr>
+          content_security_policies,
+      const network::CrossOriginOpenerPolicy& cross_origin_opener_policy);
   PolicyContainerPolicies(const PolicyContainerPolicies&) = delete;
   PolicyContainerPolicies operator=(const PolicyContainerPolicies&) = delete;
   ~PolicyContainerPolicies();
@@ -64,6 +67,11 @@
   // The content security policies of the associated document.
   std::vector<network::mojom::ContentSecurityPolicyPtr>
       content_security_policies;
+
+  // The cross-origin-opener-policy (COOP) of the document
+  // See:
+  // https://html.spec.whatwg.org/multipage/origin.html#cross-origin-opener-policies
+  network::CrossOriginOpenerPolicy cross_origin_opener_policy;
 };
 
 // PolicyContainerPolicies structs are comparable for equality.
@@ -137,10 +145,19 @@
     return policies_->ip_address_space;
   }
 
+  network::CrossOriginOpenerPolicy cross_origin_opener_policy() const {
+    return policies_->cross_origin_opener_policy;
+  }
+
   void AddContentSecurityPolicies(
       std::vector<network::mojom::ContentSecurityPolicyPtr>
           content_security_policies) final;
 
+  void set_cross_origin_opener_policy(
+      const network::CrossOriginOpenerPolicy& policy) {
+    policies_->cross_origin_opener_policy = policy;
+  }
+
   // Return a PolicyContainer containing copies of the policies and a pending
   // mojo remote that can be used to update policies in this object. If called a
   // second time, it resets the receiver and creates a new PolicyContainer,
diff --git a/content/browser/renderer_host/policy_container_host_unittest.cc b/content/browser/renderer_host/policy_container_host_unittest.cc
index 5ac294ab..cc4fe7a 100644
--- a/content/browser/renderer_host/policy_container_host_unittest.cc
+++ b/content/browser/renderer_host/policy_container_host_unittest.cc
@@ -26,6 +26,7 @@
   bool is_web_secure_context;
   std::vector<network::mojom::ContentSecurityPolicyPtr>
       content_security_policies;
+  network::CrossOriginOpenerPolicy cross_origin_opener_policy;
 };
 
 }  // namespace
@@ -47,11 +48,17 @@
   auto csp = network::mojom::ContentSecurityPolicy::New();
   csp->treat_as_public_address = true;
   csps.push_back(std::move(csp));
+  network::CrossOriginOpenerPolicy coop;
+  coop.value = network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin;
+  coop.report_only_value =
+      network::mojom::CrossOriginOpenerPolicyValue::kSameOriginAllowPopups;
+  coop.reporting_endpoint = "endpoint 1";
+  coop.report_only_reporting_endpoint = "endpoint 2";
 
   auto policies = std::make_unique<PolicyContainerPolicies>(
       network::mojom::ReferrerPolicy::kAlways,
       network::mojom::IPAddressSpace::kUnknown,
-      /*is_web_secure_context=*/true, std::move(csps));
+      /*is_web_secure_context=*/true, std::move(csps), coop);
 
   EXPECT_THAT(policies->Clone(), Pointee(Eq(ByRef(*policies))));
 }
diff --git a/content/browser/renderer_host/policy_container_navigation_bundle.cc b/content/browser/renderer_host/policy_container_navigation_bundle.cc
index d17191ac..9713a7a5 100644
--- a/content/browser/renderer_host/policy_container_navigation_bundle.cc
+++ b/content/browser/renderer_host/policy_container_navigation_bundle.cc
@@ -128,6 +128,13 @@
   delivered_policies_->AddContentSecurityPolicies(std::move(policies));
 }
 
+void PolicyContainerNavigationBundle::SetCrossOriginOpenerPolicy(
+    network::CrossOriginOpenerPolicy coop) {
+  DCHECK(!HasComputedPolicies());
+
+  delivered_policies_->cross_origin_opener_policy = coop;
+}
+
 const PolicyContainerPolicies&
 PolicyContainerNavigationBundle::DeliveredPoliciesForTesting() const {
   DCHECK(!HasComputedPolicies());
@@ -153,6 +160,15 @@
   // crbug.com/1180140.
   policies->ip_address_space = delivered_policies_->ip_address_space;
 
+  // TODO(https://crbug.com/1153648) This keeps the existing behavior which is
+  // to keep the last value stored in cross_origin_opener_policy_status for the
+  // error page. This will be the previous document COOP value or the last
+  // redirect. This should be changed to a default value to be decided, for that
+  // this will need to be executed before determining the render frame host to
+  // use for the error.
+  policies->cross_origin_opener_policy =
+      delivered_policies_->cross_origin_opener_policy;
+
   SetFinalPolicies(std::move(policies));
 
   DCHECK(HasComputedPolicies());
@@ -173,6 +189,7 @@
 
 std::unique_ptr<PolicyContainerPolicies>
 PolicyContainerNavigationBundle::IncorporateDeliveredPolicies(
+    const GURL& url,
     std::unique_ptr<PolicyContainerPolicies> policies) {
   // Delivered content security policies must be appended.
   policies->AddContentSecurityPolicies(
@@ -184,6 +201,14 @@
     policies->ip_address_space = delivered_policies_->ip_address_space;
   }
 
+  // Ignore inheritance of COOP for blobs or filesystem schemes as this
+  // conflicts with COEP.
+  // TODO(https://crbug.com/1057296) properly implement inheritance for blobs
+  if (url.SchemeIs(url::kBlobScheme) || url.SchemeIs(url::kFileSystemScheme)) {
+    policies->cross_origin_opener_policy =
+        delivered_policies_->cross_origin_opener_policy;
+  }
+
   return policies;
 }
 
@@ -220,7 +245,7 @@
   if (history_policies_)
     return history_policies_->Clone();
 
-  return IncorporateDeliveredPolicies(ComputeInheritedPolicies(url));
+  return IncorporateDeliveredPolicies(url, ComputeInheritedPolicies(url));
 }
 
 void PolicyContainerNavigationBundle::ComputePolicies(const GURL& url) {
diff --git a/content/browser/renderer_host/policy_container_navigation_bundle.h b/content/browser/renderer_host/policy_container_navigation_bundle.h
index 327f86b..188493dc 100644
--- a/content/browser/renderer_host/policy_container_navigation_bundle.h
+++ b/content/browser/renderer_host/policy_container_navigation_bundle.h
@@ -79,6 +79,11 @@
   // if the entry had no policies.
   const PolicyContainerPolicies* HistoryPolicies() const;
 
+  // Sets the cross origin opener policy of the new document.
+  //
+  // This must be called before |ComputePolicies()|.
+  void SetCrossOriginOpenerPolicy(network::CrossOriginOpenerPolicy coop);
+
   // Sets the IP address space of the delivered policies of the new document.
   //
   // This must be called before |ComputePolicies()|.
@@ -163,6 +168,7 @@
   // Helper for `FinalizePolicies()`. Appends the delivered Content Security
   // Policies to `policies` and returns them.
   std::unique_ptr<PolicyContainerPolicies> IncorporateDeliveredPolicies(
+      const GURL& url,
       std::unique_ptr<PolicyContainerPolicies> policies);
 
   // Helper for `FinalizePolicies()`. Returns, depending on `url`, the policies
diff --git a/content/browser/renderer_host/policy_container_navigation_bundle_unittest.cc b/content/browser/renderer_host/policy_container_navigation_bundle_unittest.cc
index b60721b..281d5ff 100644
--- a/content/browser/renderer_host/policy_container_navigation_bundle_unittest.cc
+++ b/content/browser/renderer_host/policy_container_navigation_bundle_unittest.cc
@@ -45,7 +45,8 @@
   return std::make_unique<PolicyContainerPolicies>(
       network::mojom::ReferrerPolicy::kAlways,
       network::mojom::IPAddressSpace::kPublic,
-      /*is_web_secure_context=*/true, std::move(csp_list));
+      /*is_web_secure_context=*/true, std::move(csp_list),
+      network::CrossOriginOpenerPolicy());
 }
 
 // Shorthand.
@@ -114,6 +115,26 @@
   EXPECT_EQ(bundle.DeliveredPoliciesForTesting(), expected_policies);
 }
 
+// Verifies that SetCrossOriginOpenerPolicy sets the cross-origin-opener-policy
+// in the bundle's delivered policies.
+TEST_F(PolicyContainerNavigationBundleTest, SetCrossOriginOpenerPolicy) {
+  PolicyContainerNavigationBundle bundle(nullptr, nullptr, nullptr);
+
+  network::CrossOriginOpenerPolicy coop;
+  coop.value = network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin;
+  coop.report_only_value =
+      network::mojom::CrossOriginOpenerPolicyValue::kSameOriginAllowPopups;
+  coop.reporting_endpoint = "A";
+  coop.report_only_reporting_endpoint = "B";
+
+  bundle.SetCrossOriginOpenerPolicy(coop);
+
+  PolicyContainerPolicies expected_policies;
+  expected_policies.cross_origin_opener_policy = coop;
+
+  EXPECT_EQ(bundle.DeliveredPoliciesForTesting(), expected_policies);
+}
+
 // Verifies that the default final policies of a bundle are default-constructed,
 // and are equal to the policies of the bundle's policy container host.
 TEST_F(PolicyContainerNavigationBundleTest, DefaultFinalPolicies) {
@@ -272,6 +293,32 @@
   EXPECT_EQ(bundle.FinalPolicies(), *initiator_policies);
 }
 
+// Verifies that when the URL of the document to commit is `blob:.*`, the
+// bundle's final policies are copied from the initiator, with the exception of
+// cross-origin-opener-policy.
+TEST_F(PolicyContainerNavigationBundleTest, FinalPoliciesBlobWithInitiator) {
+  std::unique_ptr<PolicyContainerPolicies> initiator_policies =
+      MakeTestPolicies();
+  TestRenderFrameHost* initiator = contents()->GetMainFrame();
+  initiator->SetPolicyContainerHost(NewHost(initiator_policies->Clone()));
+
+  // Force implicit conversion from LocalFrameToken to UnguessableToken.
+  const blink::LocalFrameToken& token = initiator->GetFrameToken();
+  PolicyContainerNavigationBundle bundle(nullptr, &token, nullptr);
+
+  // Set a delivered cross-origin-opener-policy.
+  network::CrossOriginOpenerPolicy coop;
+  coop.value = network::mojom::CrossOriginOpenerPolicyValue::kSameOrigin;
+  bundle.SetCrossOriginOpenerPolicy(coop);
+
+  bundle.ComputePolicies(
+      GURL("blob:https://example.com/016ece86-b7f9-4b07-88c2-a0e36b7f1dd6"));
+
+  initiator_policies->cross_origin_opener_policy = coop;
+
+  EXPECT_EQ(bundle.FinalPolicies(), *initiator_policies);
+}
+
 // Verifies that when the URL of the document to commit is `about:blank`, the
 // bundle's final policies are copied from the initiator, and additional
 // delivered policies are merged.
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 003477c..46ca65a 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -5630,7 +5630,6 @@
         dom_storage_context, params->session_storage_namespace_id);
   }
 
-  network::CrossOriginOpenerPolicy popup_coop;
   network::CrossOriginEmbedderPolicy popup_coep;
   // On popup creation, if the opener and the openers's top-level document
   // are same origin, then the popup's initial empty document inherits its
@@ -5638,10 +5637,8 @@
   // https://gist.github.com/annevk/6f2dd8c79c77123f39797f6bdac43f3e#model
   RenderFrameHostImpl* top_level_opener = GetMainFrame();
   // Verify that they are same origin.
-  if (top_level_opener->GetLastCommittedOrigin().IsSameOriginWith(
+  if (!top_level_opener->GetLastCommittedOrigin().IsSameOriginWith(
           GetLastCommittedOrigin())) {
-    popup_coop = top_level_opener->cross_origin_opener_policy();
-  } else {
     // The documents are cross origin, leave COOP of the popup to the default
     // unsafe-none.
     switch (top_level_opener->cross_origin_opener_policy().value) {
@@ -5716,8 +5713,8 @@
   // because the flags should be already inherited by the CreateNewWindow call
   // above.
   main_frame->SetOriginDependentStateOfNewFrame(GetLastCommittedOrigin());
-  main_frame->cross_origin_opener_policy_ = popup_coop;
   main_frame->cross_origin_embedder_policy_ = popup_coep;
+
   main_frame->virtual_browsing_context_group_ =
       popup_virtual_browsing_context_group;
 
@@ -5728,7 +5725,7 @@
     main_frame->set_coop_reporter(
         std::make_unique<CrossOriginOpenerPolicyReporter>(
             GetProcess()->GetStoragePartition(), GetLastCommittedURL(),
-            params->referrer->url, popup_coop,
+            params->referrer->url, main_frame->cross_origin_opener_policy(),
             isolation_info_.network_isolation_key()));
   }
 
@@ -9387,6 +9384,30 @@
 
   TakeNewDocumentPropertiesFromNavigation(navigation_request);
 
+  // Set embedded documents' cross-origin-opener-policy from their top level:
+  //  - Use top level's policy if they are same-origin.
+  //  - Use the default policy if they are cross-origin.
+  // This COOP value is not used to enforce anything on this frame, but will be
+  // inherited to every local-scheme document created from them.
+  // It will also be inherited by the initial empty document from its opener.
+
+  // TODO(https://crbug.com/888079) Computing and assigning the
+  // cross-origin-opener-policy of an embedded frame should be done in
+  // |NavigationRequest::ComputePoliciesToCommit| , but this is not currently
+  // possible because we need the origin for the computation. The linked bug
+  // moves the origin computation earlier in the navigation request, which will
+  // enable the move to |NavigationRequest::ComputePoliciesToCommit|.
+  if (parent_) {
+    if (GetMainFrame()->GetLastCommittedOrigin().IsSameOriginWith(
+            params.origin)) {
+      policy_container_host_->set_cross_origin_opener_policy(
+          GetMainFrame()->cross_origin_opener_policy());
+    } else {
+      policy_container_host_->set_cross_origin_opener_policy(
+          network::CrossOriginOpenerPolicy());
+    }
+  }
+
   CrossOriginOpenerPolicyReporter::InstallAccessMonitorsIfNeeded(
       frame_tree_node_);
 
@@ -9406,9 +9427,6 @@
 
   last_base_url_ = navigation_request->common_params().base_url_for_data_url;
 
-  cross_origin_opener_policy_ =
-      navigation_request->coop_status().current_coop();
-
   coop_reporter_ = navigation_request->coop_status().TakeCoopReporter();
   virtual_browsing_context_group_ =
       navigation_request->coop_status().virtual_browsing_context_group();
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index 402df7e..9630c707 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -1639,12 +1639,9 @@
   // Semi-formal definition of COOP:
   // https://gist.github.com/annevk/6f2dd8c79c77123f39797f6bdac43f3e
   network::CrossOriginOpenerPolicy cross_origin_opener_policy() const {
-    return cross_origin_opener_policy_;
+    return policy_container_host_->cross_origin_opener_policy();
   }
-  void set_cross_origin_opener_policy_for_testing(
-      const network::CrossOriginOpenerPolicy& cross_origin_opener_policy) {
-    cross_origin_opener_policy_ = cross_origin_opener_policy;
-  }
+
   CrossOriginOpenerPolicyReporter* coop_reporter() {
     return coop_reporter_.get();
   }
@@ -2962,8 +2959,6 @@
 
   network::CrossOriginEmbedderPolicy cross_origin_embedder_policy_;
 
-  network::CrossOriginOpenerPolicy cross_origin_opener_policy_;
-
   // Track the SiteInfo of the last site we committed successfully, as obtained
   // from SiteInstanceImpl::GetSiteInfoForURL().
   SiteInfo last_committed_site_info_;
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
index 3eac2b38..f2ccdb0 100644
--- a/content/browser/renderer_host/render_frame_host_manager.cc
+++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -15,11 +15,11 @@
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/containers/adapters.h"
+#include "base/containers/contains.h"
 #include "base/debug/crash_logging.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/memory/ptr_util.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "base/trace_event/base_tracing.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/render_frame_host_manager_unittest.cc b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
index 98b2677..b87449b 100644
--- a/content/browser/renderer_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/renderer_host/render_frame_host_manager_unittest.cc
@@ -424,6 +424,9 @@
     TestRenderFrameHost* frame_host = static_cast<TestRenderFrameHost*>(
         manager->GetFrameHostForNavigation(navigation_request.get()));
     CHECK(frame_host);
+
+    frame_host->SetPolicyContainerHost(
+        base::MakeRefCounted<PolicyContainerHost>());
     return frame_host;
   }
 
diff --git a/content/browser/service_worker/service_worker_identifiability_metrics.cc b/content/browser/service_worker/service_worker_identifiability_metrics.cc
index 8a5c3be..3b760723 100644
--- a/content/browser/service_worker/service_worker_identifiability_metrics.cc
+++ b/content/browser/service_worker/service_worker_identifiability_metrics.cc
@@ -4,7 +4,7 @@
 
 #include "content/browser/service_worker/service_worker_identifiability_metrics.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/public/browser/worker_type.h"
 #include "services/metrics/public/cpp/delegating_ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
@@ -116,4 +116,4 @@
   }
 }
 
-}  // namespace content
\ No newline at end of file
+}  // namespace content
diff --git a/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc b/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc
index b9b4ec5..fcc61e5 100644
--- a/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc
+++ b/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc
@@ -6,9 +6,9 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "content/browser/service_worker/embedded_worker_test_helper.h"
diff --git a/content/browser/service_worker/service_worker_registry.cc b/content/browser/service_worker/service_worker_registry.cc
index bd1ec6c..9cc7f4d 100644
--- a/content/browser/service_worker/service_worker_registry.cc
+++ b/content/browser/service_worker/service_worker_registry.cc
@@ -7,10 +7,10 @@
 
 #include "content/browser/service_worker/service_worker_registry.h"
 
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 #include "components/services/storage/public/mojom/storage_policy_update.mojom.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 48dacdc..0eea147 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -14,6 +14,7 @@
 #include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/guid.h"
 #include "base/location.h"
@@ -21,7 +22,6 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index 66cc0f6..cf5ab229 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -8,10 +8,10 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/json/json_reader.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
 #include "base/test/bind.h"
diff --git a/content/browser/snapshot_browsertest.cc b/content/browser/snapshot_browsertest.cc
index 8bb707d9..068ee65 100644
--- a/content/browser/snapshot_browsertest.cc
+++ b/content/browser/snapshot_browsertest.cc
@@ -10,9 +10,9 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index eaec6a41..31552d9 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/files/file_util.h"
 #include "base/macros.h"
@@ -17,7 +18,6 @@
 #include "base/optional.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/pattern.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/browser/webauth/authenticator_environment_impl.cc b/content/browser/webauth/authenticator_environment_impl.cc
index a3175abe2..5bf6467 100644
--- a/content/browser/webauth/authenticator_environment_impl.cc
+++ b/content/browser/webauth/authenticator_environment_impl.cc
@@ -8,7 +8,7 @@
 #include <utility>
 
 #include "base/command_line.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/browser/webauth/virtual_authenticator.h"
 #include "content/browser/webauth/virtual_discovery.h"
 #include "content/browser/webauth/virtual_fido_discovery_factory.h"
diff --git a/content/browser/webrtc/resources/webrtc_internals.css b/content/browser/webrtc/resources/webrtc_internals.css
index 934a8ff..456ea89 100644
--- a/content/browser/webrtc/resources/webrtc_internals.css
+++ b/content/browser/webrtc/resources/webrtc_internals.css
@@ -132,3 +132,7 @@
 details[open] details summary {
     background-color: rgb(220, 220, 220);
 }
+
+.peerconnection-deprecations {
+  font-weight: bold;
+}
diff --git a/content/browser/webrtc/resources/webrtc_internals.js b/content/browser/webrtc/resources/webrtc_internals.js
index 86139fc..9415259 100644
--- a/content/browser/webrtc/resources/webrtc_internals.js
+++ b/content/browser/webrtc/resources/webrtc_internals.js
@@ -327,6 +327,25 @@
   }
   peerConnectionElement.appendChild(p);
 
+  // Show deprecation notices as a list.
+  // Note: data.rtcConfiguration is not in JSON format and may
+  // not be defined in tests.
+  if (data.rtcConfiguration) {
+    const deprecationNotices = document.createElement('ul');
+    deprecationNotices.className = 'peerconnection-deprecations';
+    if (data.rtcConfiguration.indexOf('extmapAllowMixed: false') !== -1) {
+      // Hard deprecation, setting "false" will no longer work.
+      appendChildWithText(deprecationNotices, 'li',
+        'Note: The RTCPeerConnection offerAllowExtmapMixed ' +
+        'option is a non-standard feature. This feature will be removed ' +
+        'in M93 (Canary: July 15, 2021; Stable: August 24, 2021). For ' +
+        'interoperability with legacy WebRTC versions that throw errors ' +
+        'when attempting to parse the a=extmap-allow-mixed line in the ' +
+        'SDP remove the line from the SDP during signalling.');
+    }
+    peerConnectionElement.appendChild(deprecationNotices);
+  }
+
   return peerConnectionElement;
 }
 
diff --git a/content/browser/webui/url_data_manager.cc b/content/browser/webui/url_data_manager.cc
index c44e9b4..8d48c81 100644
--- a/content/browser/webui/url_data_manager.cc
+++ b/content/browser/webui/url_data_manager.cc
@@ -11,9 +11,9 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ref_counted_memory.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 #include "base/thread_annotations.h"
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc
index 5bfb5b76..de4e07c7 100644
--- a/content/browser/webui/url_data_manager_backend.cc
+++ b/content/browser/webui/url_data_manager_backend.cc
@@ -8,13 +8,13 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
diff --git a/content/browser/xr/service/browser_xr_runtime_impl.cc b/content/browser/xr/service/browser_xr_runtime_impl.cc
index 71dc7800..cf0ea0ef 100644
--- a/content/browser/xr/service/browser_xr_runtime_impl.cc
+++ b/content/browser/xr/service/browser_xr_runtime_impl.cc
@@ -13,8 +13,8 @@
 #endif
 
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/numerics/ranges.h"
-#include "base/stl_util.h"
 #include "build/build_config.h"
 #include "content/browser/xr/service/vr_service_impl.h"
 #include "content/browser/xr/xr_utils.h"
diff --git a/content/browser/xr/service/vr_service_impl.cc b/content/browser/xr/service/vr_service_impl.cc
index 082e7d40..5cf17a5 100644
--- a/content/browser/xr/service/vr_service_impl.cc
+++ b/content/browser/xr/service/vr_service_impl.cc
@@ -7,9 +7,9 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "content/browser/permissions/permission_controller_impl.h"
diff --git a/content/common/font_cache_dispatcher_win.cc b/content/common/font_cache_dispatcher_win.cc
index d08ecf3..6182cd6 100644
--- a/content/common/font_cache_dispatcher_win.cc
+++ b/content/common/font_cache_dispatcher_win.cc
@@ -10,10 +10,10 @@
 #include <utility>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/numerics/checked_math.h"
-#include "base/stl_util.h"
 #include "base/thread_annotations.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 
diff --git a/content/common/origin_util.cc b/content/common/origin_util.cc
index 858e2275..dc5b501 100644
--- a/content/common/origin_util.cc
+++ b/content/common/origin_util.cc
@@ -4,9 +4,9 @@
 
 #include "content/public/common/origin_util.h"
 
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "base/strings/pattern.h"
 #include "content/common/url_schemes.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
diff --git a/content/common/state_transitions.h b/content/common/state_transitions.h
index 3117898..b3bf0ff 100644
--- a/content/common/state_transitions.h
+++ b/content/common/state_transitions.h
@@ -8,8 +8,8 @@
 #include <vector>
 
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 
 namespace content {
 
diff --git a/content/public/browser/notification_registrar.cc b/content/public/browser/notification_registrar.cc
index 01299028..6f9583e 100644
--- a/content/public/browser/notification_registrar.cc
+++ b/content/public/browser/notification_registrar.cc
@@ -9,7 +9,7 @@
 #include <algorithm>
 
 #include "base/check_op.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/browser/notification_service_impl.h"
 
 namespace content {
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index 04f0158..89c4c22 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -14,12 +14,12 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/guid.h"
 #include "base/json/json_reader.h"
 #include "base/process/kill.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/pattern.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/content/public/test/download_test_observer.cc b/content/public/test/download_test_observer.cc
index 1d80f97..ac12c176 100644
--- a/content/public/test/download_test_observer.cc
+++ b/content/public/test/download_test_observer.cc
@@ -8,9 +8,9 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/notreached.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "components/download/public/common/download_url_parameters.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/renderer/accessibility/ax_image_annotator.cc b/content/renderer/accessibility/ax_image_annotator.cc
index 0d44a60..1375b70 100644
--- a/content/renderer/accessibility/ax_image_annotator.cc
+++ b/content/renderer/accessibility/ax_image_annotator.cc
@@ -9,9 +9,9 @@
 #include <vector>
 
 #include "base/base64.h"
+#include "base/containers/contains.h"
 #include "base/i18n/char_iterator.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/renderer/accessibility/ax_image_stopwords.cc b/content/renderer/accessibility/ax_image_stopwords.cc
index 26238b73..477c0ae 100644
--- a/content/renderer/accessibility/ax_image_stopwords.cc
+++ b/content/renderer/accessibility/ax_image_stopwords.cc
@@ -5,11 +5,11 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
 #include "base/i18n/case_conversion.h"
 #include "base/i18n/char_iterator.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index d1744de..89e1980 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -10,8 +10,8 @@
 #include <set>
 
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/content/renderer/worker/worker_thread_registry.cc b/content/renderer/worker/worker_thread_registry.cc
index 800b3749..316d3c85f 100644
--- a/content/renderer/worker/worker_thread_registry.cc
+++ b/content/renderer/worker/worker_thread_registry.cc
@@ -9,12 +9,12 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
 #include "base/observer_list.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/threading/thread_local.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/public/renderer/worker_thread.h"
diff --git a/content/test/data/gpu/mediapipe_zip/mediapipe_chromium_tests.zip.sha1 b/content/test/data/gpu/mediapipe_zip/mediapipe_chromium_tests.zip.sha1
new file mode 100644
index 0000000..171b068
--- /dev/null
+++ b/content/test/data/gpu/mediapipe_zip/mediapipe_chromium_tests.zip.sha1
@@ -0,0 +1 @@
+1d6ca505c384ef8f5af14e7958f62d54ec126356
\ No newline at end of file
diff --git a/content/test/gpu/gpu_tests/mediapipe_integration_test.py b/content/test/gpu/gpu_tests/mediapipe_integration_test.py
new file mode 100644
index 0000000..590fae2
--- /dev/null
+++ b/content/test/gpu/gpu_tests/mediapipe_integration_test.py
@@ -0,0 +1,66 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+from gpu_tests import common_browser_args as cba
+from gpu_tests import gpu_integration_test
+from gpu_tests import path_util
+
+# Tests will be stored individually in subdirectories underneath this base
+# directory.
+_DATA_PATH = os.path.join(path_util.GetChromiumSrcDir(), 'content', 'test',
+                          'data', 'gpu', 'mediapipe')
+
+
+class MediaPipeIntegrationTest(gpu_integration_test.GpuIntegrationTest):
+  """Google MediaPipe Tests
+
+  The tests are generated by MediaPipe's test_harness and placed into a
+  zip file that is stored on the cloud.  See mediapipe_update.py.
+
+  Iterate through the subdirectories under _DATA_PATH and runs each test
+  individually.
+  """
+
+  @classmethod
+  def Name(cls):
+    return 'mediapipe'
+
+  @classmethod
+  def SetUpProcess(cls):
+    super(MediaPipeIntegrationTest, cls).SetUpProcess()
+    cls.CustomizeBrowserArgs([
+        cba.FORCE_BROWSER_CRASH_ON_GPU_CRASH,
+    ])
+
+    cls.SetStaticServerDirs([_DATA_PATH])
+    cls.StartBrowser()
+
+  @classmethod
+  def GenerateGpuTests(cls, options):
+    for entry in next(os.walk(_DATA_PATH))[1]:
+      yield ('MediaPipe_mediapipe_%s' % entry, _get_test_html(entry), ())
+
+  def RunActualGpuTest(self, url, *_):
+    action_runner = self.tab.action_runner
+    action_runner.Navigate(self.UrlOfStaticFilePath(url))
+    action_runner.WaitForJavaScriptCondition('window.runTest !== undefined')
+    action_runner.EvaluateJavaScript('window.runTest()')
+    action_runner.WaitForJavaScriptCondition('window.isTestComplete()',
+                                             timeout=60)
+    errors = action_runner.EvaluateJavaScript('window.getErrors()')
+
+    if errors:
+      self.fail(errors)
+
+
+def _get_test_html(entry):
+  return '%s/_CLICK_ME_TO_RUN_%s_LOCALLY.html' % (entry, entry)
+
+
+def load_tests(loader, tests, pattern):
+  del loader, tests, pattern  # Unused.
+  return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/mediapipe_update.py b/content/test/gpu/gpu_tests/mediapipe_update.py
new file mode 100644
index 0000000..3859ba21
--- /dev/null
+++ b/content/test/gpu/gpu_tests/mediapipe_update.py
@@ -0,0 +1,61 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import shutil
+import subprocess
+import sys
+import zipfile
+import filecmp
+
+
+def GetChromiumSrcDir():
+  return os.path.abspath(
+      os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))
+
+
+_TEST_ROOT = os.path.join(GetChromiumSrcDir(), 'content', 'test', 'data', 'gpu')
+
+
+def main():
+  sha1_src = os.path.join(_TEST_ROOT, 'mediapipe_zip',
+                          'mediapipe_chromium_tests.zip.sha1')
+  sha1_dest = os.path.join(_TEST_ROOT, 'mediapipe',
+                           'mediapipe_chromium_tests.zip.sha1')
+
+  download_script = 'download_from_google_storage'
+  if os.name == 'nt':
+    download_script += '.bat'
+
+  subprocess.check_call([
+      download_script, '--no_resume', '--no_auth', '--bucket',
+      'chromium-telemetry', '-s', sha1_src
+  ])
+
+  # Check the SHA1 of the downloaded ZIP with the one we recorded
+  # previously. If we can't find the recorded SHA1, treat it like
+  # it's new.
+  sha1_recorded = os.path.isfile(sha1_dest)
+  if not (sha1_recorded and filecmp.cmp(sha1_src, sha1_dest)):
+    data_path = os.path.join(_TEST_ROOT, 'mediapipe')
+
+    # Remove the existing unzipped tree and recreate it.
+    if os.path.isdir(data_path):
+      shutil.rmtree(data_path)
+    os.mkdir(data_path)
+    zip_file_path = os.path.join(_TEST_ROOT, 'mediapipe_zip',
+                                 'mediapipe_chromium_tests.zip')
+    zip_file = zipfile.ZipFile(zip_file_path)
+    zip_file.extractall(data_path)
+    zip_file.close()
+
+    # Store the SHA1 we used so we can detect if a new version
+    # got synced.
+    shutil.copyfile(sha1_src, sha1_dest)
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/content/test/gpu/unexpected_pass_finder.py b/content/test/gpu/unexpected_pass_finder.py
index 33478f2..cc45c61 100755
--- a/content/test/gpu/unexpected_pass_finder.py
+++ b/content/test/gpu/unexpected_pass_finder.py
@@ -82,6 +82,7 @@
           'gpu_process',
           'info_collection',
           'maps',
+          'mediapipe',
           'pixel',
           'power',
           'screenshot_sync',
diff --git a/content/test/mock_clipboard_host.cc b/content/test/mock_clipboard_host.cc
index aff4409..a22c5df2 100644
--- a/content/test/mock_clipboard_host.cc
+++ b/content/test/mock_clipboard_host.cc
@@ -4,7 +4,7 @@
 
 #include "content/test/mock_clipboard_host.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/utf_string_conversions.h"
 
 namespace content {
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc
index e731956..500c767 100644
--- a/content/web_test/browser/web_test_control_host.cc
+++ b/content/web_test/browser/web_test_control_host.cc
@@ -22,12 +22,12 @@
 #include "base/callback.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/web_test/renderer/gc_controller.cc b/content/web_test/renderer/gc_controller.cc
index d487ca7..2e5a7c0 100644
--- a/content/web_test/renderer/gc_controller.cc
+++ b/content/web_test/renderer/gc_controller.cc
@@ -97,6 +97,8 @@
   v8::Local<v8::Context> context = func->CreationContext();
   v8::Context::Scope context_scope(context);
   v8::TryCatch try_catch(isolate);
+  v8::MicrotasksScope microtasks_scope(
+      isolate, v8::MicrotasksScope::kDoNotRunMicrotasks);
   auto result = func->Call(context, context->Global(), 0, nullptr);
   // Swallow potential exception.
   ignore_result(result);
diff --git a/device/bluetooth/bluetooth_device_android.cc b/device/bluetooth/bluetooth_device_android.cc
index 2fe1844..b0b5fc9 100644
--- a/device/bluetooth/bluetooth_device_android.cc
+++ b/device/bluetooth/bluetooth_device_android.cc
@@ -6,7 +6,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "device/bluetooth/bluetooth_adapter_android.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service_android.h"
 #include "device/bluetooth/jni_headers/ChromeBluetoothDevice_jni.h"
diff --git a/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc b/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc
index 17e4aaa..e5ac46cf9 100644
--- a/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc
+++ b/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc
@@ -9,8 +9,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/win/post_async_results.h"
 #include "components/device_event_log/device_event_log.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
index fe92a2b..4fd63137 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
@@ -10,10 +10,10 @@
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/bluetooth_adapter_android.h"
 #include "device/bluetooth/bluetooth_remote_gatt_descriptor_android.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_android.cc b/device/bluetooth/bluetooth_remote_gatt_service_android.cc
index cbdfbdb..228adf4f 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_android.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_android.cc
@@ -8,7 +8,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "device/bluetooth/bluetooth_adapter_android.h"
 #include "device/bluetooth/bluetooth_device_android.h"
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_android.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_win.cc b/device/bluetooth/bluetooth_remote_gatt_service_win.cc
index 8c22cf9..bd7ed79 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_win.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_win.cc
@@ -8,8 +8,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "device/bluetooth/bluetooth_adapter_win.h"
 #include "device/bluetooth/bluetooth_device_win.h"
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_win.h"
diff --git a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc
index 1bf27d3..ee3d96f 100644
--- a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc
+++ b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc
@@ -11,8 +11,8 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/current_thread.h"
 #include "base/test/bind.h"
diff --git a/device/bluetooth/bluez/metrics_recorder.cc b/device/bluetooth/bluez/metrics_recorder.cc
index b5f04010..96d7ca7 100644
--- a/device/bluetooth/bluez/metrics_recorder.cc
+++ b/device/bluetooth/bluez/metrics_recorder.cc
@@ -4,8 +4,8 @@
 
 #include "device/bluetooth/bluez/metrics_recorder.h"
 
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 
 namespace bluetooth {
 namespace {
diff --git a/device/bluetooth/dbus/fake_bluetooth_device_client.cc b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
index 2824e57..75b44c8 100644
--- a/device/bluetooth/dbus/fake_bluetooth_device_client.cc
+++ b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
@@ -17,13 +17,13 @@
 
 #include "base/base64.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/rand_util.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
diff --git a/device/fido/auth_token_requester_unittest.cc b/device/fido/auth_token_requester_unittest.cc
index e06f348..4111ee2 100644
--- a/device/fido/auth_token_requester_unittest.cc
+++ b/device/fido/auth_token_requester_unittest.cc
@@ -10,12 +10,12 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#include "base/containers/contains.h"
 #include "base/containers/span.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/task_environment.h"
 #include "device/fido/fido_constants.h"
diff --git a/device/fido/device_response_converter.cc b/device/fido/device_response_converter.cc
index ec5f1ff..ab80b78 100644
--- a/device/fido/device_response_converter.cc
+++ b/device/fido/device_response_converter.cc
@@ -8,11 +8,11 @@
 #include <string>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/containers/span.h"
 #include "base/i18n/streaming_utf8_validator.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "components/cbor/diagnostic_writer.h"
diff --git a/device/fido/fido_device.cc b/device/fido/fido_device.cc
index 2d3c9337..00158839 100644
--- a/device/fido/fido_device.cc
+++ b/device/fido/fido_device.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "components/device_event_log/device_event_log.h"
 #include "device/fido/device_response_converter.h"
 #include "device/fido/fido_constants.h"
diff --git a/device/fido/get_assertion_handler_unittest.cc b/device/fido/get_assertion_handler_unittest.cc
index 7939aa2..161c2b0 100644
--- a/device/fido/get_assertion_handler_unittest.cc
+++ b/device/fido/get_assertion_handler_unittest.cc
@@ -7,7 +7,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
diff --git a/device/fido/hid/fido_hid_device.cc b/device/fido/hid/fido_hid_device.cc
index c4a7491..1beaf183 100644
--- a/device/fido/hid/fido_hid_device.cc
+++ b/device/fido/hid/fido_hid_device.cc
@@ -10,9 +10,9 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/containers/fixed_flat_set.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
diff --git a/device/fido/hid/fido_hid_discovery.cc b/device/fido/hid/fido_hid_discovery.cc
index cdd7ec5..817e460 100644
--- a/device/fido/hid/fido_hid_discovery.cc
+++ b/device/fido/hid/fido_hid_discovery.cc
@@ -7,8 +7,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "components/device_event_log/device_event_log.h"
 #include "device/fido/hid/fido_hid_device.h"
 
diff --git a/device/fido/hid/fido_hid_packet.cc b/device/fido/hid/fido_hid_packet.cc
index ddf9e4e..088d029 100644
--- a/device/fido/hid/fido_hid_packet.cc
+++ b/device/fido/hid/fido_hid_packet.cc
@@ -7,9 +7,9 @@
 #include <algorithm>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/stl_util.h"
 
 namespace device {
 
diff --git a/device/vr/android/arcore/arcore_plane_manager.cc b/device/vr/android/arcore/arcore_plane_manager.cc
index 60b2fef..24ebe70 100644
--- a/device/vr/android/arcore/arcore_plane_manager.cc
+++ b/device/vr/android/arcore/arcore_plane_manager.cc
@@ -4,7 +4,7 @@
 
 #include "device/vr/android/arcore/arcore_plane_manager.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "device/vr/android/arcore/type_converters.h"
 
 namespace device {
diff --git a/extensions/browser/api/audio/audio_service_chromeos.cc b/extensions/browser/api/audio/audio_service_chromeos.cc
index a6c3c8d..e4292b4 100644
--- a/extensions/browser/api/audio/audio_service_chromeos.cc
+++ b/extensions/browser/api/audio/audio_service_chromeos.cc
@@ -10,9 +10,9 @@
 #include "ash/components/audio/audio_device.h"
 #include "ash/components/audio/cras_audio_handler.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/audio/audio_device_id_calculator.h"
diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router.cc b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
index df60f16a..779ffc1 100644
--- a/extensions/browser/api/bluetooth/bluetooth_event_router.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
@@ -10,10 +10,10 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "components/device_event_log/device_event_log.h"
diff --git a/extensions/browser/api/declarative/deduping_factory.h b/extensions/browser/api/declarative/deduping_factory.h
index 67c7033..3763c00 100644
--- a/extensions/browser/api/declarative/deduping_factory.h
+++ b/extensions/browser/api/declarative/deduping_factory.h
@@ -14,9 +14,9 @@
 
 #include "base/check.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/stl_util.h"
 
 namespace base {
 class Value;
diff --git a/extensions/browser/api/declarative/rules_registry.cc b/extensions/browser/api/declarative/rules_registry.cc
index 3d1f0c3..0336ed5 100644
--- a/extensions/browser/api/declarative/rules_registry.cc
+++ b/extensions/browser/api/declarative/rules_registry.cc
@@ -8,9 +8,9 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition.cc b/extensions/browser/api/declarative_webrequest/webrequest_condition.cc
index 84690189..c3b1ec6 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_condition.cc
+++ b/extensions/browser/api/declarative_webrequest/webrequest_condition.cc
@@ -5,7 +5,7 @@
 #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h"
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 #include "components/url_matcher/url_matcher_factory.h"
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
index 07da743b..deded07c 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
+++ b/extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc
@@ -10,11 +10,11 @@
 #include <vector>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "extensions/browser/api/declarative/deduping_factory.h"
diff --git a/extensions/browser/api/declarative_webrequest/webrequest_rules_registry.cc b/extensions/browser/api/declarative_webrequest/webrequest_rules_registry.cc
index 679ad22..8f5cbc8 100644
--- a/extensions/browser/api/declarative_webrequest/webrequest_rules_registry.cc
+++ b/extensions/browser/api/declarative_webrequest/webrequest_rules_registry.cc
@@ -10,7 +10,7 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h"
 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
diff --git a/extensions/browser/api/lock_screen_data/lock_screen_item_storage_unittest.cc b/extensions/browser/api/lock_screen_data/lock_screen_item_storage_unittest.cc
index d883201..8c52c94 100644
--- a/extensions/browser/api/lock_screen_data/lock_screen_item_storage_unittest.cc
+++ b/extensions/browser/api/lock_screen_data/lock_screen_item_storage_unittest.cc
@@ -12,13 +12,13 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/containers/queue.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc
index cd19627..e9abff54 100644
--- a/extensions/browser/api/management/management_api.cc
+++ b/extensions/browser/api/management/management_api.cc
@@ -10,13 +10,13 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/json/json_writer.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/extensions/browser/api/socket/udp_socket.cc b/extensions/browser/api/socket/udp_socket.cc
index 0f129a6..0f667bc 100644
--- a/extensions/browser/api/socket/udp_socket.cc
+++ b/extensions/browser/api/socket/udp_socket.cc
@@ -8,8 +8,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
-#include "base/stl_util.h"
 #include "extensions/browser/api/api_resource.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
diff --git a/extensions/browser/api/system_display/system_display_apitest.cc b/extensions/browser/api/system_display/system_display_apitest.cc
index be40367..bbf92915 100644
--- a/extensions/browser/api/system_display/system_display_apitest.cc
+++ b/extensions/browser/api/system_display/system_display_apitest.cc
@@ -8,9 +8,9 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/debug/leak_annotations.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
diff --git a/extensions/browser/app_window/app_window_geometry_cache.cc b/extensions/browser/app_window/app_window_geometry_cache.cc
index 06f0dba..c9d569a6 100644
--- a/extensions/browser/app_window/app_window_geometry_cache.cc
+++ b/extensions/browser/app_window/app_window_geometry_cache.cc
@@ -9,7 +9,7 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/string_number_conversions.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "extensions/browser/extension_prefs.h"
diff --git a/extensions/browser/app_window/app_window_registry.cc b/extensions/browser/app_window/app_window_registry.cc
index 8ea7d102..d1ec152 100644
--- a/extensions/browser/app_window/app_window_registry.cc
+++ b/extensions/browser/app_window/app_window_registry.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <vector>
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/stringprintf.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
diff --git a/extensions/browser/content_verifier.cc b/extensions/browser/content_verifier.cc
index 6c3b7f8..eb068f0b 100644
--- a/extensions/browser/content_verifier.cc
+++ b/extensions/browser/content_verifier.cc
@@ -10,11 +10,11 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/timer/elapsed_timer.h"
diff --git a/extensions/browser/extension_action.h b/extensions/browser/extension_action.h
index 2b43afb..f3fb071 100644
--- a/extensions/browser/extension_action.h
+++ b/extensions/browser/extension_action.h
@@ -10,8 +10,8 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "extensions/common/api/extension_action/action_info.h"
 #include "extensions/common/constants.h"
 #include "third_party/skia/include/core/SkColor.h"
diff --git a/extensions/browser/extension_registrar.cc b/extensions/browser/extension_registrar.cc
index 4a9137f..9fe893a 100644
--- a/extensions/browser/extension_registrar.cc
+++ b/extensions/browser/extension_registrar.cc
@@ -7,9 +7,9 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/devtools_agent_host.h"
diff --git a/extensions/browser/extension_user_script_loader.cc b/extensions/browser/extension_user_script_loader.cc
index d0b5239..72b8b9e 100644
--- a/extensions/browser/extension_user_script_loader.cc
+++ b/extensions/browser/extension_user_script_loader.cc
@@ -15,13 +15,13 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/one_shot_event.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/version.h"
 #include "content/public/browser/browser_context.h"
diff --git a/extensions/browser/renderer_startup_helper.cc b/extensions/browser/renderer_startup_helper.cc
index d3fc519..0ac879e 100644
--- a/extensions/browser/renderer_startup_helper.cc
+++ b/extensions/browser/renderer_startup_helper.cc
@@ -8,9 +8,9 @@
 #include <vector>
 
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/feature_list.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
diff --git a/extensions/browser/renderer_startup_helper_unittest.cc b/extensions/browser/renderer_startup_helper_unittest.cc
index 4247b5f2..c9b9499e 100644
--- a/extensions/browser/renderer_startup_helper_unittest.cc
+++ b/extensions/browser/renderer_startup_helper_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "extensions/browser/renderer_startup_helper.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "components/crx_file/id_util.h"
 #include "content/public/test/mock_render_process_host.h"
 #include "extensions/browser/extension_prefs.h"
diff --git a/extensions/browser/updater/extension_cache_fake.cc b/extensions/browser/updater/extension_cache_fake.cc
index 9eb2503..5515c2a 100644
--- a/extensions/browser/updater/extension_cache_fake.cc
+++ b/extensions/browser/updater/extension_cache_fake.cc
@@ -5,7 +5,7 @@
 #include "extensions/browser/updater/extension_cache_fake.h"
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 
diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extension_l10n_util.cc
index ecb88b2..1a51563 100644
--- a/extensions/common/extension_l10n_util.cc
+++ b/extensions/common/extension_l10n_util.cc
@@ -10,13 +10,13 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/json/json_file_value_serializer.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/logging.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc
index cd4378cc..5f63558 100644
--- a/extensions/common/features/simple_feature.cc
+++ b/extensions/common/features/simple_feature.cc
@@ -11,8 +11,8 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/extensions/common/manifest_handler.cc b/extensions/common/manifest_handler.cc
index bbba247..b22646b 100644
--- a/extensions/common/manifest_handler.cc
+++ b/extensions/common/manifest_handler.cc
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/check.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/permissions/manifest_permission.h"
 #include "extensions/common/permissions/manifest_permission_set.h"
diff --git a/extensions/common/manifest_handlers/permissions_parser.cc b/extensions/common/manifest_handlers/permissions_parser.cc
index 77261ec..22bf78ee 100644
--- a/extensions/common/manifest_handlers/permissions_parser.cc
+++ b/extensions/common/manifest_handlers/permissions_parser.cc
@@ -8,9 +8,9 @@
 #include <utility>
 
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
diff --git a/extensions/common/message_bundle.cc b/extensions/common/message_bundle.cc
index aeb728d..346a5e2 100644
--- a/extensions/common/message_bundle.cc
+++ b/extensions/common/message_bundle.cc
@@ -8,9 +8,9 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/i18n/rtl.h"
 #include "base/lazy_instance.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/extensions/common/permissions/permissions_data.cc b/extensions/common/permissions/permissions_data.cc
index b3684159..3402feb 100644
--- a/extensions/common/permissions/permissions_data.cc
+++ b/extensions/common/permissions/permissions_data.cc
@@ -8,8 +8,8 @@
 #include <utility>
 
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "content/public/common/url_constants.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/error_utils.h"
diff --git a/extensions/common/permissions/permissions_info.cc b/extensions/common/permissions/permissions_info.cc
index 5657eb8..17fc3b0 100644
--- a/extensions/common/permissions/permissions_info.cc
+++ b/extensions/common/permissions/permissions_info.cc
@@ -5,9 +5,9 @@
 #include "extensions/common/permissions/permissions_info.h"
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "extensions/common/alias.h"
 
diff --git a/extensions/common/url_pattern_set_unittest.cc b/extensions/common/url_pattern_set_unittest.cc
index 9610e6f..b125653 100644
--- a/extensions/common/url_pattern_set_unittest.cc
+++ b/extensions/common/url_pattern_set_unittest.cc
@@ -8,7 +8,7 @@
 
 #include <sstream>
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
diff --git a/extensions/renderer/feature_cache_unittest.cc b/extensions/renderer/feature_cache_unittest.cc
index afb9a55..826122d1 100644
--- a/extensions/renderer/feature_cache_unittest.cc
+++ b/extensions/renderer/feature_cache_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "extensions/renderer/feature_cache.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "components/crx_file/id_util.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/common/extension.h"
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
index 01b9e32..7d5666f8 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
@@ -7,10 +7,10 @@
 #include <algorithm>
 #include <utility>
 
+#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "content/public/common/webplugininfo.h"
 #include "content/public/renderer/render_frame.h"
diff --git a/extensions/renderer/one_time_message_handler.cc b/extensions/renderer/one_time_message_handler.cc
index cbdcba8e..32950b5 100644
--- a/extensions/renderer/one_time_message_handler.cc
+++ b/extensions/renderer/one_time_message_handler.cc
@@ -8,7 +8,7 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/supports_user_data.h"
 #include "content/public/renderer/render_frame.h"
 #include "extensions/common/api/messaging/message.h"
diff --git a/extensions/renderer/resource_bundle_source_map.cc b/extensions/renderer/resource_bundle_source_map.cc
index 5c01db7..b81b628 100644
--- a/extensions/renderer/resource_bundle_source_map.cc
+++ b/extensions/renderer/resource_bundle_source_map.cc
@@ -4,8 +4,8 @@
 
 #include "extensions/renderer/resource_bundle_source_map.h"
 
+#include "base/containers/contains.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "base/strings/string_piece.h"
 #include "extensions/renderer/static_v8_external_one_byte_string_resource.h"
 #include "third_party/zlib/google/compression_utils.h"
diff --git a/extensions/renderer/script_context.cc b/extensions/renderer/script_context.cc
index 0e5b9781b..76c4442 100644
--- a/extensions/renderer/script_context.cc
+++ b/extensions/renderer/script_context.cc
@@ -5,9 +5,9 @@
 #include "extensions/renderer/script_context.h"
 
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
diff --git a/fuchsia/engine/context_provider_impl.cc b/fuchsia/engine/context_provider_impl.cc
index 8217231..6d5ac6ea 100644
--- a/fuchsia/engine/context_provider_impl.cc
+++ b/fuchsia/engine/context_provider_impl.cc
@@ -27,6 +27,7 @@
 #include "base/base_switches.h"
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_file.h"
@@ -37,7 +38,6 @@
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
-#include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
diff --git a/gpu/command_buffer/common/gpu_memory_buffer_support.cc b/gpu/command_buffer/common/gpu_memory_buffer_support.cc
index da1bada..78eb758 100644
--- a/gpu/command_buffer/common/gpu_memory_buffer_support.cc
+++ b/gpu/command_buffer/common/gpu_memory_buffer_support.cc
@@ -8,8 +8,8 @@
 #include <GLES2/gl2extchromium.h>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/common/capabilities.h"
 
diff --git a/gpu/command_buffer/tests/gl_test_utils.cc b/gpu/command_buffer/tests/gl_test_utils.cc
index 7409e65..db38d9f 100644
--- a/gpu/command_buffer/tests/gl_test_utils.cc
+++ b/gpu/command_buffer/tests/gl_test_utils.cc
@@ -12,8 +12,8 @@
 #include <string>
 
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/config/gpu_info_collector.h"
diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc b/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc
index d058706f..c5cf83f 100644
--- a/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc
+++ b/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc
@@ -6,8 +6,8 @@
 
 #include "base/android/android_hardware_buffer_compat.h"
 #include "base/android/scoped_hardware_buffer_handle.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
 #include "build/build_config.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
diff --git a/ios/chrome/app/spotlight/base_spotlight_manager.mm b/ios/chrome/app/spotlight/base_spotlight_manager.mm
index d346b7b7..015f4fc47 100644
--- a/ios/chrome/app/spotlight/base_spotlight_manager.mm
+++ b/ios/chrome/app/spotlight/base_spotlight_manager.mm
@@ -9,8 +9,8 @@
 #import <MaterialComponents/MaterialTypography.h>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/hash/md5.h"
-#include "base/stl_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "components/favicon/core/fallback_url_util.h"
diff --git a/ios/chrome/browser/bookmarks/bookmarks_utils.cc b/ios/chrome/browser/bookmarks/bookmarks_utils.cc
index 6c983454..aa1ca31 100644
--- a/ios/chrome/browser/bookmarks/bookmarks_utils.cc
+++ b/ios/chrome/browser/bookmarks/bookmarks_utils.cc
@@ -5,8 +5,8 @@
 #include "ios/chrome/browser/bookmarks/bookmarks_utils.h"
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
index b5ca7e4..567c1900 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
@@ -15,11 +15,11 @@
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/debug/alias.h"
 #include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/BUILD.gn b/ios/chrome/browser/infobars/overlays/browser_agent/BUILD.gn
index ef6c842..790b0cf5 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/BUILD.gn
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/BUILD.gn
@@ -30,9 +30,9 @@
   deps = [
     ":browser_agent",
     "//base",
+    "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/confirm",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords",
-    "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate",
     "//ios/chrome/browser/main:public",
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_util.mm b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_util.mm
index d5032ca..495a8cf 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_util.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_util.mm
@@ -6,10 +6,10 @@
 
 #include "base/feature_list.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/confirm/confirm_infobar_interaction_handler.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords/password_infobar_interaction_handler.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords/update_password_infobar_interaction_handler.h"
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_interaction_handler.h"
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate/translate_infobar_interaction_handler.h"
 #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/BUILD.gn b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/BUILD.gn
similarity index 97%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/BUILD.gn
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/BUILD.gn
index cd960ac3..8528d5d 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/BUILD.gn
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/BUILD.gn
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-source_set("save_address_profile") {
+source_set("autofill_address_profile") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "save_address_profile_infobar_banner_interaction_handler.h",
@@ -39,7 +39,7 @@
     "save_address_profile_infobar_modal_interaction_handler_unittest.mm",
   ]
   deps = [
-    ":save_address_profile",
+    ":autofill_address_profile",
     "//base/test:test_support",
     "//components/autofill/core/browser:test_support",
     "//ios/chrome/browser/infobars",
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h
similarity index 81%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h
index 16276ae..bc145bb 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
-#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
+#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
+#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
 
 #include <string.h>
 
@@ -33,4 +33,4 @@
       InfoBarIOS* infobar);
 };
 
-#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
+#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_INTERACTION_HANDLER_H_
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.mm
similarity index 96%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.mm
index 70585ae..1f5a7bf 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
 
 #include "base/check.h"
 #include "components/autofill/core/browser/autofill_save_address_profile_delegate_ios.h"
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm
similarity index 95%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm
index f48d87b4..2e43e38 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
 
 #include "base/guid.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.h
similarity index 75%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.h
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.h
index bbea078..175b0f4 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
-#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
+#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
+#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
 
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h"
 
@@ -18,4 +18,4 @@
   ~SaveAddressProfileInfobarInteractionHandler() override;
 };
 
-#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
+#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_INTERACTION_HANDLER_H_
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.mm
similarity index 78%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.mm
index 491ed193..ef845958 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.mm
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_interaction_handler.h"
 
 #import "ios/chrome/browser/infobars/infobar_type.h"
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_banner_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h
similarity index 85%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h
index b0fae32..3cf0863d 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
-#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
+#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
+#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
 
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_modal_interaction_handler.h"
 
@@ -44,4 +44,4 @@
   Browser* browser_ = nullptr;
 };
 
-#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
+#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_INTERACTION_HANDLER_H_
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.mm
similarity index 90%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.mm
index cba1714..2b38148 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.mm
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
 
 #include "components/autofill/core/browser/autofill_save_address_profile_delegate_ios.h"
 #include "ios/chrome/browser/infobars/infobar_ios.h"
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h"
 #include "ios/chrome/browser/main/browser.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm
similarity index 95%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm
index 511f0e46..701389ce 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
 
 #include <string>
 
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h
similarity index 85%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h
index d8d203a..05493cde 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
-#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
+#ifndef IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
+#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
 
 #import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_modal_overlay_request_callback_installer.h"
 
@@ -41,4 +41,4 @@
       weak_factory_{this};
 };
 
-#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
+#endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm
similarity index 92%
rename from ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm
rename to ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm
index 8b619cb..236b76c 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.mm
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_overlay_request_callback_installer.h"
 
 #include "base/check.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/chrome/browser/infobars/infobar_ios.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
-#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
+#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/save_address_profile_infobar_modal_interaction_handler.h"
 #include "ios/chrome/browser/infobars/overlays/infobar_overlay_util.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/save_address_profile_infobar_modal_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/save_address_profile_infobar_modal_overlay_responses.h"
diff --git a/ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl_unittest.mm b/ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl_unittest.mm
index e0b7f46..e8d3593 100644
--- a/ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl_unittest.mm
@@ -7,20 +7,24 @@
 #include "base/feature_list.h"
 #include "base/guid.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/infobars/core/infobar.h"
 #include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/translate/core/browser/mock_translate_infobar_delegate.h"
 #include "ios/chrome/browser/infobars/infobar_ios.h"
+#include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_address_profile_delegate_ios.h"
 #include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h"
 #include "ios/chrome/browser/infobars/test/mock_infobar_delegate.h"
 #import "ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h"
+#import "ios/chrome/browser/overlays/public/infobar_banner/save_address_profile_infobar_banner_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h"
 #import "ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_banner/update_password_infobar_banner_overlay.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/password_infobar_modal_overlay_request_config.h"
+#import "ios/chrome/browser/overlays/public/infobar_modal/save_address_profile_infobar_modal_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h"
 #import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h"
@@ -37,8 +41,12 @@
 using infobars::InfoBar;
 using infobars::InfoBarDelegate;
 using confirm_infobar_overlays::ConfirmBannerRequestConfig;
+using save_address_profile_infobar_overlays::
+    SaveAddressProfileBannerRequestConfig;
 using save_card_infobar_overlays::SaveCardBannerRequestConfig;
 using translate_infobar_overlays::TranslateBannerRequestConfig;
+using save_address_profile_infobar_overlays::
+    SaveAddressProfileModalRequestConfig;
 using save_card_infobar_overlays::SaveCardModalRequestConfig;
 using translate_infobar_overlays::TranslateModalRequestConfig;
 
@@ -48,6 +56,7 @@
   InfobarOverlayRequestFactoryImplTest()
       : prefs_(autofill::test::PrefServiceForTesting()),
         card_(base::GenerateGUID(), "https://www.example.com/"),
+        profile_(base::GenerateGUID(), "https://www.example.com/"),
         translate_delegate_factory_("fr", "en") {}
 
   InfobarOverlayRequestFactory* factory() { return &factory_; }
@@ -56,6 +65,7 @@
   InfobarOverlayRequestFactoryImpl factory_;
   std::unique_ptr<PrefService> prefs_;
   autofill::CreditCard card_;
+  autofill::AutofillProfile profile_;
   std::unique_ptr<InfoBarIOS> infobar_;
   translate::testing::MockTranslateInfoBarDelegateFactory
       translate_delegate_factory_;
@@ -161,3 +171,23 @@
       factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
   EXPECT_TRUE(modal_request->GetConfig<TranslateModalRequestConfig>());
 }
+
+// Tests that the factory creates a save address profile request.
+TEST_F(InfobarOverlayRequestFactoryImplTest, SaveAddressProfile) {
+  GURL url("https://chromium.test");
+  InfoBarIOS infobar(
+      InfobarType::kInfobarTypeSaveAutofillAddressProfile,
+      MockAutofillSaveAddressProfileDelegateIOSFactory::
+          CreateMockAutofillSaveAddressProfileDelegateIOSFactory(profile_));
+
+  // Test banner request creation.
+  std::unique_ptr<OverlayRequest> banner_request =
+      factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
+  EXPECT_TRUE(
+      banner_request->GetConfig<SaveAddressProfileBannerRequestConfig>());
+
+  // Test modal request creation.
+  std::unique_ptr<OverlayRequest> modal_request =
+      factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
+  EXPECT_TRUE(modal_request->GetConfig<SaveAddressProfileModalRequestConfig>());
+}
diff --git a/ios/chrome/browser/reading_list/url_downloader.cc b/ios/chrome/browser/reading_list/url_downloader.cc
index 5e00a35..78ce9499 100644
--- a/ios/chrome/browser/reading_list/url_downloader.cc
+++ b/ios/chrome/browser/reading_list/url_downloader.cc
@@ -9,12 +9,12 @@
 
 #include "base/base64.h"
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/json/json_writer.h"
 #include "base/memory/ptr_util.h"
 #include "base/path_service.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
diff --git a/ios/chrome/browser/reading_list/url_downloader_unittest.mm b/ios/chrome/browser/reading_list/url_downloader_unittest.mm
index 2218f3e..93c4517 100644
--- a/ios/chrome/browser/reading_list/url_downloader_unittest.mm
+++ b/ios/chrome/browser/reading_list/url_downloader_unittest.mm
@@ -7,9 +7,9 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
-#include "base/stl_util.h"
 #import "base/test/ios/wait_util.h"
 #include "base/test/task_environment.h"
 #include "components/reading_list/core/offline_url_utils.h"
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/BUILD.gn b/ios/chrome/browser/ui/overlays/infobar_banner/BUILD.gn
index dae6dfe..f03ffccd 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/BUILD.gn
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/BUILD.gn
@@ -32,9 +32,9 @@
     "//ios/chrome/browser/ui/infobars/presentation",
     "//ios/chrome/browser/ui/overlays:coordinators",
     "//ios/chrome/browser/ui/overlays:util",
+    "//ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile",
     "//ios/chrome/browser/ui/overlays/infobar_banner/confirm",
     "//ios/chrome/browser/ui/overlays/infobar_banner/passwords",
-    "//ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile",
     "//ios/chrome/browser/ui/overlays/infobar_banner/save_card",
     "//ios/chrome/browser/ui/overlays/infobar_banner/translate:mediators",
     "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/BUILD.gn b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/BUILD.gn
similarity index 95%
rename from ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/BUILD.gn
rename to ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/BUILD.gn
index 0d36872..a5dfd2a 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/BUILD.gn
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/BUILD.gn
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-source_set("save_address_profile") {
+source_set("autofill_address_profile") {
   sources = [
     "save_address_profile_infobar_banner_overlay_mediator.h",
     "save_address_profile_infobar_banner_overlay_mediator.mm",
@@ -31,7 +31,7 @@
   configs += [ "//build/config/compiler:enable_arc" ]
 
   deps = [
-    ":save_address_profile",
+    ":autofill_address_profile",
     "//base/test:test_support",
     "//components/autofill/core/browser",
     "//components/autofill/core/browser:test_support",
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h
new file mode 100644
index 0000000..87d8902
--- /dev/null
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h
@@ -0,0 +1,16 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
+
+#import "ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.h"
+
+// Mediator that configures an infobar banner for a save address profile
+// infobar.
+@interface SaveAddressProfileInfobarBannerOverlayMediator
+    : InfobarBannerOverlayMediator
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm
similarity index 94%
rename from ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm
rename to ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm
index b4cc6df..b73fc67 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
+#import "ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "ios/chrome/browser/overlays/public/infobar_banner/infobar_banner_overlay_responses.h"
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm
similarity index 95%
rename from ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm
rename to ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm
index b29df1a7..b09fec6 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
+#import "ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
 
 #include "base/bind.h"
 #include "base/feature_list.h"
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_coordinator.mm b/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_coordinator.mm
index 7e113e2..2732a3d 100644
--- a/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_coordinator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_coordinator.mm
@@ -16,11 +16,11 @@
 #import "ios/chrome/browser/ui/infobars/infobar_constants.h"
 #import "ios/chrome/browser/ui/infobars/presentation/infobar_banner_positioner.h"
 #import "ios/chrome/browser/ui/infobars/presentation/infobar_banner_transition_driver.h"
+#import "ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/confirm/confirm_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/passwords/save_password_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/passwords/update_password_infobar_banner_overlay_mediator.h"
-#import "ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/save_card/save_card_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_banner/translate/translate_infobar_banner_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/overlay_request_coordinator+subclassing.h"
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h b/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h
deleted file mode 100644
index 6eae2f4..0000000
--- a/ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile/save_address_profile_infobar_banner_overlay_mediator.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
-
-#import "ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_overlay_mediator.h"
-
-// Mediator that configures an infobar banner for a save address profile
-// infobar.
-@interface SaveAddressProfileInfobarBannerOverlayMediator
-    : InfobarBannerOverlayMediator
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_BANNER_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_BANNER_OVERLAY_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/BUILD.gn b/ios/chrome/browser/ui/overlays/infobar_modal/BUILD.gn
index a2a7acc..9999947 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/BUILD.gn
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/BUILD.gn
@@ -9,8 +9,8 @@
   configs += [ "//build/config/compiler:enable_arc" ]
 
   deps = [
+    "//ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile",
     "//ios/chrome/browser/ui/overlays/infobar_modal/passwords",
-    "//ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile",
     "//ios/chrome/browser/ui/overlays/infobar_modal/save_card",
     "//ios/chrome/browser/ui/overlays/infobar_modal/translate",
   ]
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/BUILD.gn b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/BUILD.gn
similarity index 95%
rename from ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/BUILD.gn
rename to ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/BUILD.gn
index 0274ce71..9d00b52 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/BUILD.gn
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/BUILD.gn
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-source_set("save_address_profile") {
+source_set("autofill_address_profile") {
   sources = [
     "save_address_profile_infobar_modal_overlay_coordinator.h",
     "save_address_profile_infobar_modal_overlay_coordinator.mm",
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h
new file mode 100644
index 0000000..f5ab126
--- /dev/null
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h
@@ -0,0 +1,16 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
+
+#import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_overlay_coordinator.h"
+
+// A coordinator that displays the Save Address Profile infobar modal UI using
+// OverlayPresenter.
+@interface SaveAddressProfileInfobarModalOverlayCoordinator
+    : InfobarModalOverlayCoordinator
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm
similarity index 90%
rename from ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm
rename to ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm
index 277dbd1..6a7bf5c 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.mm
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h"
+#import "ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h"
 
 #include "base/check.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/save_address_profile_infobar_modal_overlay_request_config.h"
 #include "ios/chrome/browser/overlays/public/overlay_callback_manager.h"
 #include "ios/chrome/browser/overlays/public/overlay_response.h"
 #import "ios/chrome/browser/ui/infobars/modals/infobar_save_address_profile_table_view_controller.h"
+#import "ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_overlay_coordinator+modal_configuration.h"
-#import "ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.h b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.h
similarity index 66%
rename from ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.h
rename to ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.h
index 64d2cfc..4c8afd9 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.h
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
 
 #import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_overlay_mediator.h"
 
@@ -21,4 +21,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_AUTOFILL_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm
similarity index 95%
rename from ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm
rename to ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm
index d56eec210..c509b92 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_mediator.h"
+#import "ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #import "ios/chrome/browser/overlays/public/infobar_modal/save_address_profile_infobar_modal_overlay_request_config.h"
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.mm b/ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.mm
index e027e00c..ea2b12f6 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.mm
@@ -4,8 +4,8 @@
 
 #import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.h"
 
+#import "ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_modal/passwords/password_infobar_modal_overlay_coordinator.h"
-#import "ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_modal/save_card/save_card_infobar_modal_overlay_coordinator.h"
 #import "ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_coordinator.h"
 
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h b/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h
deleted file mode 100644
index a298c89..0000000
--- a/ios/chrome/browser/ui/overlays/infobar_modal/save_address_profile/save_address_profile_infobar_modal_overlay_coordinator.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
-
-#import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_overlay_coordinator.h"
-
-// A coordinator that displays the Save Address Profile infobar modal UI using
-// OverlayPresenter.
-@interface SaveAddressProfileInfobarModalOverlayCoordinator
-    : InfobarModalOverlayCoordinator
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_OVERLAYS_INFOBAR_MODAL_SAVE_ADDRESS_PROFILE_SAVE_ADDRESS_PROFILE_INFOBAR_MODAL_OVERLAY_COORDINATOR_H_
diff --git a/ios/chrome/browser/voice/speech_input_locale_config_impl.mm b/ios/chrome/browser/voice/speech_input_locale_config_impl.mm
index d786627..a03eb96 100644
--- a/ios/chrome/browser/voice/speech_input_locale_config_impl.mm
+++ b/ios/chrome/browser/voice/speech_input_locale_config_impl.mm
@@ -6,10 +6,10 @@
 
 #import <Foundation/Foundation.h>
 
+#include "base/containers/contains.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_cftyperef.h"
-#include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/chrome/browser/voice/speech_input_locale_match.h"
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index 0315c05..2eb5646 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -187,10 +187,10 @@
     "//ios/chrome/browser/infobars:unit_tests",
     "//ios/chrome/browser/infobars/overlays:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent:unit_tests",
+    "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/confirm:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords:unit_tests",
-    "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_address_profile:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card:unit_tests",
     "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate:unit_tests",
     "//ios/chrome/browser/itunes_urls:unit_tests",
@@ -283,9 +283,9 @@
     "//ios/chrome/browser/ui/open_in:unit_tests",
     "//ios/chrome/browser/ui/overlays:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_banner:unit_tests",
+    "//ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_banner/confirm:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_banner/passwords:unit_tests",
-    "//ios/chrome/browser/ui/overlays/infobar_banner/save_address_profile:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_banner/save_card:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_banner/translate:unit_tests",
     "//ios/chrome/browser/ui/overlays/infobar_modal:unit_tests",
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index 7c8d236..b75ad4e 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-eef3770852bb7da6928c116dd6e7ffbda3a30db7
\ No newline at end of file
+048cd5631ad59a4fea59b557163f44d082b728d9
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index de81c4e..7004c05 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-aeb1d917f8837e12f5c90cf6b801b61963bdc7b8
\ No newline at end of file
+0b0f49306283948e277879986128680f39aea73f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
index af841ac..e90fab3 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-dd34ad80e6b0541dfc58b2f93abfb0ed1b54c874
\ No newline at end of file
+482521668a5e900d51da504fe121ea97101e914c
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
index d65853b..980f9b8 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-128e01acc824e6c646cab937b10dbf369aa98365
\ No newline at end of file
+5f371c63572fa7a135116c9706b67f52cdcad701
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index 4dcf28c..e705527 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-913bf98d713131a8cf2b2c35d3fa7b1229078e78
\ No newline at end of file
+b39b20b08f5a67536bbbbce42ce4f7aa98d3cc3d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index a392175..abd8480 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-0b8d0e6c979c4c666d7ba2fbf1984a3f3434f750
\ No newline at end of file
+3193e5d149744941f26f882ba22b7cc263fabbb6
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index 4e57681..2bbe9f8 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-49f2dc26606d38f05319842c54a7271e0101781e
\ No newline at end of file
+63b3d72e60c2b281e12e1c18650d44865b214af4
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index bc47828..761be1d6 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-e8a0b45e35a0090f91c42fa38b1e494d942a4bab
\ No newline at end of file
+d98727ce83ddcd8764dd3937ca247c578669d375
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index f1f8de1..f685578f 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-d8892f035855093a1563f0ea6d1b18be4408211b
\ No newline at end of file
+2005abb18663d5fd048f99edd889dd845527749f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index 961bd0f..e751ec80 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-bfb9431712c6abf09f457fbdc7c2a6d0a043fc35
\ No newline at end of file
+abd53525722f74cdb483fc5510c40a48bb7c63ae
\ No newline at end of file
diff --git a/ios/web/webui/url_data_manager_ios.cc b/ios/web/webui/url_data_manager_ios.cc
index 32105a85..230353c8 100644
--- a/ios/web/webui/url_data_manager_ios.cc
+++ b/ios/web/webui/url_data_manager_ios.cc
@@ -10,9 +10,9 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/no_destructor.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
diff --git a/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc b/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc
index 50567d6..48955b7 100644
--- a/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc
+++ b/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc
@@ -6,9 +6,9 @@
 
 #include <algorithm>
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/stl_util.h"
 #include "third_party/libjingle_xmpp/xmpp/constants.h"
 #include "third_party/libjingle_xmpp/xmpp/saslcookiemechanism.h"
 #include "third_party/webrtc/rtc_base/socket_address.h"
diff --git a/media/audio/audio_output_dispatcher_impl.cc b/media/audio/audio_output_dispatcher_impl.cc
index 439331d..a8c428c 100644
--- a/media/audio/audio_output_dispatcher_impl.cc
+++ b/media/audio/audio_output_dispatcher_impl.cc
@@ -9,8 +9,8 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/containers/contains.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/time/time.h"
 #include "media/audio/audio_logging.h"
 #include "media/audio/audio_manager.h"
diff --git a/media/base/eme_constants.h b/media/base/eme_constants.h
index 11e7c1e..6e47c0e 100644
--- a/media/base/eme_constants.h
+++ b/media/base/eme_constants.h
@@ -187,19 +187,20 @@
   IDENTIFIER_AND_PERSISTENCE_REQUIRED,
 
   // The configuration option prevents use of hardware-secure codecs.
-  // This rule only has meaning on platforms that distinguish hardware-secure
-  // codecs (i.e. Android, Windows and ChromeOS).
   HW_SECURE_CODECS_NOT_ALLOWED,
 
   // The configuration option is supported if hardware-secure codecs are used.
-  // This rule only has meaning on platforms that distinguish hardware-secure
-  // codecs (i.e. Android, Windows and ChromeOS).
   HW_SECURE_CODECS_REQUIRED,
 
   // The configuration option is supported on platforms where hardware-secure
   // codecs are used and an identifier is also required (i.e. ChromeOS).
   IDENTIFIER_AND_HW_SECURE_CODECS_REQUIRED,
 
+  // The configuration option is supported on platforms where hardware-secure
+  // codecs are used and both identifier and persistent state are required (i.e.
+  // Windows).
+  IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED,
+
   // The configuration option is supported without conditions.
   SUPPORTED,
 };
diff --git a/media/blink/cdm_session_adapter.cc b/media/blink/cdm_session_adapter.cc
index ca04693..ed1a277 100644
--- a/media/blink/cdm_session_adapter.cc
+++ b/media/blink/cdm_session_adapter.cc
@@ -8,10 +8,10 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/cdm_factory.h"
diff --git a/media/blink/key_system_config_selector.cc b/media/blink/key_system_config_selector.cc
index 682cfe9..b99382fb 100644
--- a/media/blink/key_system_config_selector.cc
+++ b/media/blink/key_system_config_selector.cc
@@ -261,8 +261,8 @@
       case EmeConfigRule::PERSISTENCE_REQUIRED:
         return !is_persistence_not_allowed_;
       case EmeConfigRule::IDENTIFIER_AND_PERSISTENCE_REQUIRED:
-        return (!is_identifier_not_allowed_ && IsPermissionPossible() &&
-                !is_persistence_not_allowed_);
+        return !is_identifier_not_allowed_ && IsPermissionPossible() &&
+               !is_persistence_not_allowed_;
       case EmeConfigRule::HW_SECURE_CODECS_NOT_ALLOWED:
         return !are_hw_secure_codecs_required_;
       case EmeConfigRule::HW_SECURE_CODECS_REQUIRED:
@@ -270,6 +270,10 @@
       case EmeConfigRule::IDENTIFIER_AND_HW_SECURE_CODECS_REQUIRED:
         return !is_identifier_not_allowed_ && IsPermissionPossible() &&
                !are_hw_secure_codecs_not_allowed_;
+      case EmeConfigRule::IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED:
+        return !is_identifier_not_allowed_ && IsPermissionPossible() &&
+               !is_persistence_not_allowed_ &&
+               !are_hw_secure_codecs_not_allowed_;
       case EmeConfigRule::SUPPORTED:
         return true;
     }
@@ -313,6 +317,11 @@
         is_identifier_required_ = true;
         are_hw_secure_codecs_required_ = true;
         return;
+      case EmeConfigRule::IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED:
+        is_identifier_required_ = true;
+        is_persistence_required_ = true;
+        are_hw_secure_codecs_required_ = true;
+        return;
       case EmeConfigRule::SUPPORTED:
         return;
     }
diff --git a/media/blink/key_system_config_selector_unittest.cc b/media/blink/key_system_config_selector_unittest.cc
index 346333b25..7b65983 100644
--- a/media/blink/key_system_config_selector_unittest.cc
+++ b/media/blink/key_system_config_selector_unittest.cc
@@ -44,8 +44,10 @@
 const char kRequireIdentifierRobustness[] = "require_identifier";
 const char kDisallowHwSecureCodecRobustness[] = "disallow_hw_secure_codec";
 const char kRequireHwSecureCodecRobustness[] = "require_hw_secure_codec";
-const char kRequireHwSecureCodecAndIdentifierRobustness[] =
-    "require_hw_secure_codec_and_identifier";
+const char kRequireIdentifierAndHwSecureCodecRobustness[] =
+    "require_identifier_and_hw_secure_codec";
+const char kRequireIdentifierPersistenceAndHwSecureCodecRobustness[] =
+    "require_identifier_persistence_and_hw_secure_codec";
 const char kUnsupportedRobustness[] = "unsupported";
 
 // Test container mime types. Supported types are prefixed with audio/video so
@@ -296,8 +298,13 @@
       return EmeConfigRule::HW_SECURE_CODECS_NOT_ALLOWED;
     if (requested_robustness == kRequireHwSecureCodecRobustness)
       return EmeConfigRule::HW_SECURE_CODECS_REQUIRED;
-    if (requested_robustness == kRequireHwSecureCodecAndIdentifierRobustness)
+    if (requested_robustness == kRequireIdentifierAndHwSecureCodecRobustness)
       return EmeConfigRule::IDENTIFIER_AND_HW_SECURE_CODECS_REQUIRED;
+    if (requested_robustness ==
+        kRequireIdentifierPersistenceAndHwSecureCodecRobustness) {
+      return EmeConfigRule::
+          IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED;
+    }
     if (requested_robustness == kUnsupportedRobustness)
       return EmeConfigRule::NOT_SUPPORTED;
 
@@ -1486,10 +1493,10 @@
   SelectConfigReturnsError();
 }
 
-// --- HW Secure and Identifier Robustness ---
+// --- Identifier and HW Secure Robustness ---
 
 TEST_F(KeySystemConfigSelectorTest,
-       HwSecureCodecAndIdentifier_IncompatibleCodecAndRobustness) {
+       IdentifierAndHwSecureCodec_IncompatibleCodecAndRobustness) {
   media_permission_->is_granted = true;
   key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE;
 
@@ -1498,7 +1505,7 @@
   video_capabilities[0].mime_type = kSupportedVideoContainer;
   video_capabilities[0].codecs = kDisallowHwSecureCodec;
   video_capabilities[0].robustness =
-      kRequireHwSecureCodecAndIdentifierRobustness;
+      kRequireIdentifierAndHwSecureCodecRobustness;
 
   auto config = EmptyConfiguration();
   config.video_capabilities = video_capabilities;
@@ -1508,7 +1515,7 @@
 }
 
 TEST_F(KeySystemConfigSelectorTest,
-       HwSecureCodecAndIdentifier_IncompatibleCapabilities) {
+       IdentifierAndHwSecureCodec_IncompatibleCapabilities) {
   media_permission_->is_granted = true;
   key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE;
 
@@ -1517,7 +1524,7 @@
   video_capabilities[0].mime_type = kSupportedVideoContainer;
   video_capabilities[0].codecs = kSupportedVideoCodec;
   video_capabilities[0].robustness =
-      kRequireHwSecureCodecAndIdentifierRobustness;
+      kRequireIdentifierAndHwSecureCodecRobustness;
   video_capabilities[1].content_type = "disallow_hw_secure_codec";
   video_capabilities[1].mime_type = kSupportedVideoContainer;
   video_capabilities[1].codecs = kDisallowHwSecureCodec;
@@ -1536,7 +1543,7 @@
 }
 
 TEST_F(KeySystemConfigSelectorTest,
-       HwSecureCodecAndIdentifier_UnsupportedCapabilityNotAffectingRules) {
+       IdentifierAndHwSecureCodec_UnsupportedCapabilityNotAffectingRules) {
   media_permission_->is_granted = true;
   key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE;
 
@@ -1549,7 +1556,7 @@
   video_capabilities[1].mime_type = kSupportedVideoContainer;
   video_capabilities[1].codecs = kRequireHwSecureCodec;
   video_capabilities[1].robustness =
-      kRequireHwSecureCodecAndIdentifierRobustness;
+      kRequireIdentifierAndHwSecureCodecRobustness;
 
   auto config = EmptyConfiguration();
   config.video_capabilities = video_capabilities;
@@ -1563,6 +1570,54 @@
   EXPECT_TRUE(cdm_config_.use_hw_secure_codecs);
 }
 
+// --- Identifier, Persistence and HW Secure Robustness ---
+
+TEST_F(KeySystemConfigSelectorTest,
+       IdentifierPersistenceAndHwSecureCodec_Supported) {
+  media_permission_->is_granted = true;
+  key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE;
+  key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE;
+
+  std::vector<WebMediaKeySystemMediaCapability> video_capabilities(1);
+  video_capabilities[0].content_type = "require_hw_secure_codec";
+  video_capabilities[0].mime_type = kSupportedVideoContainer;
+  video_capabilities[0].codecs = kSupportedVideoCodec;
+  video_capabilities[0].robustness =
+      kRequireIdentifierPersistenceAndHwSecureCodecRobustness;
+
+  auto config = EmptyConfiguration();
+  config.video_capabilities = video_capabilities;
+  configs_.push_back(config);
+
+  SelectConfigRequestsPermissionAndReturnsConfig();
+  EXPECT_EQ(MediaKeysRequirement::kRequired, config_.distinctive_identifier);
+  EXPECT_EQ(MediaKeysRequirement::kRequired, config_.persistent_state);
+  ASSERT_EQ(1u, config_.video_capabilities.size());
+  EXPECT_EQ("require_hw_secure_codec",
+            config_.video_capabilities[0].content_type);
+  EXPECT_TRUE(cdm_config_.use_hw_secure_codecs);
+}
+
+TEST_F(KeySystemConfigSelectorTest,
+       IdentifierPersistenceAndHwSecureCodec_NotSupported) {
+  media_permission_->is_granted = true;
+  key_systems_->persistent_state = EmeFeatureSupport::NOT_SUPPORTED;
+  key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE;
+
+  std::vector<WebMediaKeySystemMediaCapability> video_capabilities(1);
+  video_capabilities[0].content_type = "require_hw_secure_codec";
+  video_capabilities[0].mime_type = kSupportedVideoContainer;
+  video_capabilities[0].codecs = kSupportedVideoCodec;
+  video_capabilities[0].robustness =
+      kRequireIdentifierPersistenceAndHwSecureCodecRobustness;
+
+  auto config = EmptyConfiguration();
+  config.video_capabilities = video_capabilities;
+  configs_.push_back(config);
+
+  SelectConfigReturnsError();
+}
+
 // --- audioCapabilities ---
 // These are handled by the same code as |videoCapabilities|, so only minimal
 // additional testing is done.
diff --git a/media/blink/new_session_cdm_result_promise.cc b/media/blink/new_session_cdm_result_promise.cc
index 4e718ca..0f19f3a 100644
--- a/media/blink/new_session_cdm_result_promise.cc
+++ b/media/blink/new_session_cdm_result_promise.cc
@@ -4,9 +4,9 @@
 
 #include "media/blink/new_session_cdm_result_promise.h"
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/stl_util.h"
 #include "media/blink/cdm_result_promise_helper.h"
 #include "third_party/blink/public/platform/web_string.h"
 
diff --git a/media/capture/video/chromeos/camera_buffer_factory.cc b/media/capture/video/chromeos/camera_buffer_factory.cc
index 345c9dc..6099afb 100644
--- a/media/capture/video/chromeos/camera_buffer_factory.cc
+++ b/media/capture/video/chromeos/camera_buffer_factory.cc
@@ -4,7 +4,7 @@
 
 #include "media/capture/video/chromeos/camera_buffer_factory.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "media/capture/video/chromeos/video_capture_device_factory_chromeos.h"
 
 namespace media {
diff --git a/media/capture/video/chromeos/camera_metadata_utils.h b/media/capture/video/chromeos/camera_metadata_utils.h
index 851b1fd..d6b4a30 100644
--- a/media/capture/video/chromeos/camera_metadata_utils.h
+++ b/media/capture/video/chromeos/camera_metadata_utils.h
@@ -5,7 +5,7 @@
 #ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
 #define MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "media/capture/capture_export.h"
 #include "media/capture/video/chromeos/mojom/camera_metadata.mojom.h"
 
diff --git a/media/gpu/chromeos/platform_video_frame_utils_unittest.cc b/media/gpu/chromeos/platform_video_frame_utils_unittest.cc
index ba698cb..d6e8b8c 100644
--- a/media/gpu/chromeos/platform_video_frame_utils_unittest.cc
+++ b/media/gpu/chromeos/platform_video_frame_utils_unittest.cc
@@ -10,13 +10,13 @@
 #include <utility>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_file.h"
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/time/time.h"
 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
 #include "media/base/color_plane_layout.h"
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
index f25d7d2e..aa350bd 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
@@ -479,6 +479,10 @@
   while (!output_request_queue_.empty()) {
     if (!output_request_queue_.front().IsReady()) {
       DVLOGF(3) << "The first surface is not ready yet.";
+      // It is possible that that V4L2 buffers for this output surface are not
+      // even queued yet. Make sure that avd_->Decode() is called to continue
+      // that work and prevent the decoding thread from starving.
+      resume_decode = true;
       break;
     }
 
diff --git a/media/gpu/vaapi/vaapi_unittest.cc b/media/gpu/vaapi/vaapi_unittest.cc
index 8ac7f30..fb2867c 100644
--- a/media/gpu/vaapi/vaapi_unittest.cc
+++ b/media/gpu/vaapi/vaapi_unittest.cc
@@ -14,12 +14,12 @@
 #include <va/va_str.h>
 
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/files/file.h"
 #include "base/files/scoped_file.h"
 #include "base/logging.h"
 #include "base/optional.h"
 #include "base/process/launch.h"
-#include "base/stl_util.h"
 #include "base/strings/pattern.h"
 #include "base/strings/string_split.h"
 #include "base/test/launcher/unit_test_launcher.h"
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc
index 8629994..61221d4a 100644
--- a/media/gpu/vaapi/vaapi_video_decoder.cc
+++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -10,10 +10,10 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/containers/contains.h"
 #include "base/containers/fixed_flat_map.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/mojo/public/cpp/bindings/lib/multiplex_router.cc b/mojo/public/cpp/bindings/lib/multiplex_router.cc
index 9dc2729..8fccf1a 100644
--- a/mojo/public/cpp/bindings/lib/multiplex_router.cc
+++ b/mojo/public/cpp/bindings/lib/multiplex_router.cc
@@ -9,12 +9,12 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "mojo/public/cpp/bindings/interface_endpoint_client.h"
diff --git a/mojo/public/cpp/bindings/receiver_set.h b/mojo/public/cpp/bindings/receiver_set.h
index 783740b2..3121f58b 100644
--- a/mojo/public/cpp/bindings/receiver_set.h
+++ b/mojo/public/cpp/bindings/receiver_set.h
@@ -13,9 +13,9 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/component_export.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "mojo/public/cpp/bindings/connection_error_callback.h"
 #include "mojo/public/cpp/bindings/message.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/mojo/public/cpp/bindings/remote_set.h b/mojo/public/cpp/bindings/remote_set.h
index 6c826ee..eb98f73 100644
--- a/mojo/public/cpp/bindings/remote_set.h
+++ b/mojo/public/cpp/bindings/remote_set.h
@@ -11,10 +11,10 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
 #include "base/util/type_safety/id_type.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
diff --git a/mojo/public/cpp/bindings/service_factory.cc b/mojo/public/cpp/bindings/service_factory.cc
index 1263b3d..9457381 100644
--- a/mojo/public/cpp/bindings/service_factory.cc
+++ b/mojo/public/cpp/bindings/service_factory.cc
@@ -5,7 +5,7 @@
 #include "mojo/public/cpp/bindings/service_factory.h"
 
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 
 namespace mojo {
 
diff --git a/net/base/expiring_cache_unittest.cc b/net/base/expiring_cache_unittest.cc
index 1f3c5d38..536b954 100644
--- a/net/base/expiring_cache_unittest.cc
+++ b/net/base/expiring_cache_unittest.cc
@@ -7,7 +7,7 @@
 #include <functional>
 #include <string>
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/net/base/filename_util_internal.cc b/net/base/filename_util_internal.cc
index 90b8b40..ddb94271 100644
--- a/net/base/filename_util_internal.cc
+++ b/net/base/filename_util_internal.cc
@@ -4,9 +4,9 @@
 
 #include "net/base/filename_util.h"
 
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/net/base/mime_util_unittest.cc b/net/base/mime_util_unittest.cc
index 176b458..060caed 100644
--- a/net/base/mime_util_unittest.cc
+++ b/net/base/mime_util_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "net/base/mime_util.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
diff --git a/net/dns/dns_util.cc b/net/dns/dns_util.cc
index 09e1dce..ae4e063 100644
--- a/net/dns/dns_util.cc
+++ b/net/dns/dns_util.cc
@@ -13,10 +13,10 @@
 #include <vector>
 
 #include "base/big_endian.h"
+#include "base/containers/contains.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "build/build_config.h"
diff --git a/net/http/http_auth_handler_factory.cc b/net/http/http_auth_handler_factory.cc
index 3f065ce..4617186a 100644
--- a/net/http/http_auth_handler_factory.cc
+++ b/net/http/http_auth_handler_factory.cc
@@ -6,8 +6,8 @@
 
 #include <set>
 
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
diff --git a/net/http/http_server_properties.cc b/net/http/http_server_properties.cc
index 7f67a27..037d6b4 100644
--- a/net/http/http_server_properties.cc
+++ b/net/http/http_server_properties.cc
@@ -6,11 +6,11 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc
index 652c9432..7b1904c 100644
--- a/net/http/http_stream_factory_job.cc
+++ b/net/http/http_stream_factory_job.cc
@@ -11,13 +11,13 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/sparse_histogram.h"
 #include "base/notreached.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc
index 5044657..b47f43a 100644
--- a/net/http/transport_security_state.cc
+++ b/net/http/transport_security_state.cc
@@ -13,6 +13,7 @@
 #include "base/base64.h"
 #include "base/bind.h"
 #include "base/build_time.h"
+#include "base/containers/contains.h"
 #include "base/containers/span.h"
 #include "base/feature_list.h"
 #include "base/json/json_writer.h"
@@ -22,7 +23,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/net/quic/platform/impl/quic_map_util_impl.h b/net/quic/platform/impl/quic_map_util_impl.h
index c25e1c4..006877a9 100644
--- a/net/quic/platform/impl/quic_map_util_impl.h
+++ b/net/quic/platform/impl/quic_map_util_impl.h
@@ -5,7 +5,7 @@
 #ifndef NET_QUIC_PLATFORM_IMPL_QUIC_MAP_UTIL_IMPL_H_
 #define NET_QUIC_PLATFORM_IMPL_QUIC_MAP_UTIL_IMPL_H_
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 
 namespace quic {
 
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index bffd7d9..9575411 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
@@ -16,7 +17,6 @@
 #include "base/metrics/sparse_histogram.h"
 #include "base/no_destructor.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 9f249ae0..8f353ba 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -11,12 +11,12 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
 #include "base/strings/abseil_string_conversions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 8841902..53a1201 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -9,8 +9,8 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_allocator_dump.h"
diff --git a/net/url_request/url_request_job_factory.cc b/net/url_request/url_request_job_factory.cc
index dceb26f..8ff76c5 100644
--- a/net/url_request/url_request_job_factory.cc
+++ b/net/url_request/url_request_job_factory.cc
@@ -4,7 +4,7 @@
 
 #include "net/url_request/url_request_job_factory.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "net/base/net_errors.h"
 #include "net/net_buildflags.h"
 #include "net/url_request/url_request.h"
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index 796e3d7..16b6986 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -355,6 +355,8 @@
       "test/test_client.h",
       "test/test_document_loader.cc",
       "test/test_document_loader.h",
+      "test/test_helpers.cc",
+      "test/test_helpers.h",
     ]
 
     configs += [ ":common" ]
@@ -365,6 +367,7 @@
       "//base",
       "//ppapi/cpp:objects",
       "//testing/gtest",
+      "//ui/gfx:geometry_skia",
       "//ui/gfx/range",
     ]
   }
diff --git a/pdf/ppapi_migration/graphics_unittest.cc b/pdf/ppapi_migration/graphics_unittest.cc
index 5e096bd..2269534 100644
--- a/pdf/ppapi_migration/graphics_unittest.cc
+++ b/pdf/ppapi_migration/graphics_unittest.cc
@@ -12,6 +12,7 @@
 #include "pdf/ppapi_migration/bitmap.h"
 #include "pdf/ppapi_migration/callback.h"
 #include "pdf/ppapi_migration/image.h"
+#include "pdf/test/test_helpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImage.h"
@@ -38,12 +39,6 @@
   sk_sp<SkImage> snapshot;
 };
 
-Image CreateSourceImage(const SkISize& src_size) {
-  SkBitmap bitmap = CreateN32PremulSkBitmap(src_size);
-  bitmap.eraseColor(SK_ColorRED);
-  return Image(bitmap);
-}
-
 SkBitmap GenerateExpectedBitmap(const SkISize& graphics_size,
                                 const SkIRect& rect) {
   SkBitmap bitmap = CreateN32PremulSkBitmap(graphics_size);
@@ -70,7 +65,7 @@
 class SkiaGraphicsTest : public testing::Test {
  protected:
   void TestPaintImageResult(const SkISize& graphics_size,
-                            const SkISize& src_size,
+                            const gfx::Size& src_size,
                             const gfx::Rect& paint_rect,
                             const SkIRect& overlapped_rect) {
     graphics_ =
@@ -78,7 +73,8 @@
     ASSERT_TRUE(graphics_);
 
     // Create snapshots as SkImage and SkBitmap after painting.
-    graphics_->PaintImage(CreateSourceImage(src_size), paint_rect);
+    graphics_->PaintImage(CreateSkiaImageForTesting(src_size, SK_ColorRED),
+                          paint_rect);
     graphics_->Flush(base::DoNothing());
     SkBitmap snapshot_bitmap;
     ASSERT_TRUE(client_.snapshot->asLegacyBitmap(&snapshot_bitmap));
@@ -159,7 +155,7 @@
     SkISize graphics_size;
 
     // Size of the source image.
-    SkISize src_size;
+    gfx::Size src_size;
 
     // Painting area.
     gfx::Rect paint_rect;
diff --git a/pdf/test/test_helpers.cc b/pdf/test/test_helpers.cc
new file mode 100644
index 0000000..e4fafbc
--- /dev/null
+++ b/pdf/test/test_helpers.cc
@@ -0,0 +1,21 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "pdf/test/test_helpers.h"
+
+#include "pdf/ppapi_migration/bitmap.h"
+#include "pdf/ppapi_migration/image.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/skia_util.h"
+
+namespace chrome_pdf {
+
+Image CreateSkiaImageForTesting(const gfx::Size& size, SkColor color) {
+  SkBitmap bitmap = CreateN32PremulSkBitmap(gfx::SizeToSkISize(size));
+  bitmap.eraseColor(color);
+  return Image(bitmap);
+}
+
+}  // namespace chrome_pdf
diff --git a/pdf/test/test_helpers.h b/pdf/test/test_helpers.h
new file mode 100644
index 0000000..28b7c89
--- /dev/null
+++ b/pdf/test/test_helpers.h
@@ -0,0 +1,22 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PDF_TEST_TEST_HELPERS_H_
+#define PDF_TEST_TEST_HELPERS_H_
+
+#include "pdf/ppapi_migration/image.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+namespace gfx {
+class Size;
+}  // namespace gfx
+
+namespace chrome_pdf {
+
+// Creates a Skia-format `Image` of a given size filled with a given color.
+Image CreateSkiaImageForTesting(const gfx::Size& size, SkColor color);
+
+}  // namespace chrome_pdf
+
+#endif  // PDF_TEST_TEST_HELPERS_H_
diff --git a/ppapi/proxy/file_system_resource.cc b/ppapi/proxy/file_system_resource.cc
index 5bb5e2a7..2d58afe8 100644
--- a/ppapi/proxy/file_system_resource.cc
+++ b/ppapi/proxy/file_system_resource.cc
@@ -6,7 +6,7 @@
 
 #include "base/barrier_closure.h"
 #include "base/bind.h"
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "ipc/ipc_message.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/proxy/ppapi_messages.h"
diff --git a/printing/BUILD.gn b/printing/BUILD.gn
index d5626f9..f49826d5 100644
--- a/printing/BUILD.gn
+++ b/printing/BUILD.gn
@@ -15,9 +15,6 @@
 if (is_android) {
   import("//build/config/android/rules.gni")
 }
-if (use_cups && is_chromeos_ash) {
-  import("//printing/backend/tools/code_generator.gni")
-}
 
 assert(enable_basic_printing)
 
@@ -28,20 +25,44 @@
              "set enable_pdf=true.")
 }
 
-# Enable the CUPS IPP printing backend.
-# TODO(crbug.com/226176): Remove this after CUPS PPD API calls are removed.
-declare_args() {
-  use_cups_ipp = use_cups && !(is_linux || is_chromeos_lacros)
-}
-
-if (use_cups_ipp && is_chromeos_ash) {
-  ipp_handler_map_path = "$target_gen_dir/backend/ipp_handler_map.cc"
-
-  ipp_code_generate("ipp_handlers_generate") {
-    outputs = [ ipp_handler_map_path ]
-    args = [ "--ipp-handler-map=" +
-             rebase_path(ipp_handler_map_path, root_build_dir) ]
+# Lower-dependency base printing files which are needed by both :printing and
+# //printing/backend without incurring deeper UI dependencies (e.g.,
+# //ui/accessibility).  New files should normally be added to :printing, and
+# only be moved here if they are also required by //printing/backend.
+component("printing_base") {
+  sources = [
+    "print_job_constants.cc",
+    "print_job_constants.h",
+    "printing_features.cc",
+    "printing_features.h",
+    "printing_utils.cc",
+    "printing_utils.h",
+    "units.cc",
+    "units.h",
+  ]
+  if (use_cups_ipp || is_chromeos_ash) {
+    sources += [
+      "printer_query_result.h",
+      "printer_status.cc",
+      "printer_status.h",
+    ]
   }
+
+  if (use_cups) {
+    configs += [ ":cups" ]
+  }
+
+  configs += [ "//build/config/compiler:noshadowing" ]
+  cflags = []
+  defines = [ "IS_PRINTING_BASE_IMPL" ]
+
+  public_deps = [ "//build:chromeos_buildflags" ]
+  deps = [
+    "//base",
+    "//third_party/icu",
+    "//ui/gfx",
+    "//ui/gfx/geometry",
+  ]
 }
 
 if (is_linux || is_chromeos) {
@@ -61,15 +82,6 @@
 
 component("printing") {
   sources = [
-    "backend/print_backend.cc",
-    "backend/print_backend.h",
-    "backend/print_backend_consts.cc",
-    "backend/print_backend_consts.h",
-    "backend/print_backend_dummy.cc",
-    "backend/print_backend_utils.cc",
-    "backend/print_backend_utils.h",
-    "backend/printing_restrictions.cc",
-    "backend/printing_restrictions.h",
     "metafile.cc",
     "metafile.h",
     "metafile_skia.cc",
@@ -85,8 +97,6 @@
     "page_setup.h",
     "pdf_render_settings.h",
     "print_dialog_gtk_interface.h",
-    "print_job_constants.cc",
-    "print_job_constants.h",
     "print_settings.cc",
     "print_settings.h",
     "print_settings_conversion.cc",
@@ -95,20 +105,18 @@
     "printed_document.h",
     "printing_context.cc",
     "printing_context.h",
-    "printing_features.cc",
-    "printing_features.h",
-    "printing_utils.cc",
-    "printing_utils.h",
     "pwg_raster_settings.h",
-    "units.cc",
-    "units.h",
   ]
 
   configs += [ "//build/config/compiler:noshadowing" ]
   cflags = []
   defines = [ "IS_PRINTING_IMPL" ]
 
-  public_deps = [ "//printing/buildflags" ]
+  public_deps = [
+    ":printing_base",
+    "//printing/backend",
+    "//printing/buildflags",
+  ]
   deps = [
     "//base",
     "//base:i18n",
@@ -139,10 +147,7 @@
   }
 
   if (is_chromeos_ash) {
-    defines += [ "PRINT_BACKEND_AVAILABLE" ]
-
     sources += [
-      "backend/print_backend_chromeos.cc",
       "printed_document_chromeos.cc",
       "printing_context_no_system_dialog.cc",
       "printing_context_no_system_dialog.h",
@@ -175,18 +180,14 @@
       "CoreFoundation.framework",
       "CoreGraphics.framework",
     ]
+
+    # TODO(crbug.com/1203935) Modernize macOS system API usage so that this
+    # flag can be removed.
+    cflags += [ "-Wno-deprecated-declarations" ]
   }
 
   if (is_win) {
-    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation of the
-    # print backend and enables a custom implementation instead.
-    defines += [ "PRINT_BACKEND_AVAILABLE" ]
     sources += [
-      "backend/print_backend_win.cc",
-      "backend/printing_info_win.cc",
-      "backend/printing_info_win.h",
-      "backend/win_helper.cc",
-      "backend/win_helper.h",
       "emf_win.cc",
       "emf_win.h",
       "print_settings_initializer_win.cc",
@@ -208,85 +209,14 @@
   if (use_cups) {
     configs += [ ":cups" ]
 
-    if (is_linux || is_chromeos) {
-      # CUPS 1.6 deprecated the PPD APIs, but we will stay with this API
-      # for now as the suitability of the replacement is unclear.
-      # More info: crbug.com/226176
-      cflags += [ "-Wno-deprecated-declarations" ]
-    }
-
-    if (is_mac) {
-      # CUPS 1.6 deprecated the PPD APIs. We need to evaluate the
-      # effect of migrating Mac. More info: crbug.com/226176
-      cflags += [ "-Wno-deprecated-declarations" ]
-    }
-
-    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
-    # of the print backend and enables a custom implementation instead.
-    defines += [ "PRINT_BACKEND_AVAILABLE" ]
-
-    if (use_cups_ipp) {
-      sources += [
-        "backend/cups_connection.cc",
-        "backend/cups_connection.h",
-        "backend/cups_deleters.cc",
-        "backend/cups_deleters.h",
-        "backend/cups_ipp_constants.cc",
-        "backend/cups_ipp_constants.h",
-        "backend/cups_ipp_helper.cc",
-        "backend/cups_ipp_helper.h",
-        "backend/cups_ipp_utils.cc",
-        "backend/cups_ipp_utils.h",
-        "backend/cups_jobs.cc",
-        "backend/cups_jobs.h",
-        "backend/cups_printer.cc",
-        "backend/cups_printer.h",
-        "backend/print_backend_cups_ipp.cc",
-        "backend/print_backend_cups_ipp.h",
-      ]
-    }
-
     if (is_chromeos_ash) {
-      deps += [ ":ipp_handlers_generate" ]
-
       sources += [
-        "backend/ipp_handler_map.h",
-        "backend/ipp_handlers.cc",
-        "backend/ipp_handlers.h",
         "printing_context_chromeos.cc",
         "printing_context_chromeos.h",
-        ipp_handler_map_path,
       ]
-    } else {
-      # TODO(crbug.com/1062136): Remove the original CUPS backend for macOS
-      # when Cloud Print support is terminated. Follow up after Jan 1, 2021.
-      sources += [
-        "backend/cups_helper.cc",
-        "backend/cups_helper.h",
-        "backend/print_backend_cups.cc",
-        "backend/print_backend_cups.h",
-      ]
-
-      # We still build the utils for fuzzing if not already built.
-      if (use_fuzzing_engine && !use_cups_ipp) {
-        sources += [
-          "backend/cups_ipp_constants.cc",
-          "backend/cups_ipp_constants.h",
-          "backend/cups_ipp_helper.cc",
-          "backend/cups_ipp_helper.h",
-        ]
-      }
     }
   }
 
-  if (use_cups_ipp || is_chromeos_ash) {
-    sources += [
-      "printer_query_result.h",
-      "printer_status.cc",
-      "printer_status.h",
-    ]
-  }
-
   if (is_linux || is_chromeos) {
     deps += [ ":printing_sandbox_hook" ]
   }
@@ -295,8 +225,6 @@
 static_library("test_support") {
   testonly = true
   sources = [
-    "backend/test_print_backend.cc",
-    "backend/test_print_backend.h",
     "image.cc",
     "image.h",
   ]
@@ -304,6 +232,7 @@
   configs += [ "//build/config/compiler:noshadowing" ]
   public_deps = [
     "//printing",
+    "//printing/backend:test_support",
     "//ui/gfx/geometry",
   ]
   deps = [
@@ -353,6 +282,8 @@
     "//build:chromeos_buildflags",
     "//mojo/core/test:run_all_unittests",
     "//mojo/public/cpp/test_support:test_utils",
+    "//printing/backend",
+    "//printing/backend:test_support",
     "//printing/backend/mojom",
     "//printing/common",
     "//printing/mojom",
diff --git a/printing/backend/BUILD.gn b/printing/backend/BUILD.gn
new file mode 100644
index 0000000..f73883cd
--- /dev/null
+++ b/printing/backend/BUILD.gn
@@ -0,0 +1,154 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/chromeos/ui_mode.gni")
+import("//printing/buildflags/buildflags.gni")
+if (use_cups && is_chromeos_ash) {
+  import("//printing/backend/tools/code_generator.gni")
+}
+
+if (use_cups_ipp && is_chromeos_ash) {
+  ipp_handler_map_path = "$target_gen_dir/backend/ipp_handler_map.cc"
+
+  ipp_code_generate("ipp_handlers_generate") {
+    outputs = [ ipp_handler_map_path ]
+    args = [ "--ipp-handler-map=" +
+             rebase_path(ipp_handler_map_path, root_build_dir) ]
+  }
+}
+
+component("backend") {
+  sources = [
+    "print_backend.cc",
+    "print_backend.h",
+    "print_backend_consts.cc",
+    "print_backend_consts.h",
+    "print_backend_dummy.cc",
+    "print_backend_utils.cc",
+    "print_backend_utils.h",
+    "printing_restrictions.cc",
+    "printing_restrictions.h",
+  ]
+
+  configs += [ "//build/config/compiler:noshadowing" ]
+  cflags = []
+  defines = [ "IS_PRINT_BACKEND_IMPL" ]
+
+  public_deps = [ "//printing/buildflags" ]
+  deps = [
+    "//base",
+    "//build:chromeos_buildflags",
+    "//printing:printing_base",
+    "//printing/mojom",
+    "//ui/gfx/geometry",
+    "//url",
+  ]
+
+  if (is_chromeos_ash) {
+    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
+    # print backend and enables a custom implementation instead.
+    defines += [ "PRINT_BACKEND_AVAILABLE" ]
+
+    sources += [ "print_backend_chromeos.cc" ]
+  }
+
+  if (is_win) {
+    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation of the
+    # print backend and enables a custom implementation instead.
+    defines += [ "PRINT_BACKEND_AVAILABLE" ]
+    sources += [
+      "print_backend_win.cc",
+      "printing_info_win.cc",
+      "printing_info_win.h",
+      "win_helper.cc",
+      "win_helper.h",
+    ]
+  }
+
+  if (use_cups) {
+    configs += [ "//printing:cups" ]
+
+    if (is_linux || is_chromeos) {
+      # CUPS 1.6 deprecated the PPD APIs, but we will stay with this API
+      # for now as the suitability of the replacement is unclear.
+      # More info: crbug.com/226176
+      cflags += [ "-Wno-deprecated-declarations" ]
+    }
+
+    if (is_mac) {
+      # CUPS 1.6 deprecated the PPD APIs. We need to evaluate the
+      # effect of migrating Mac. More info: crbug.com/226176
+      cflags += [ "-Wno-deprecated-declarations" ]
+    }
+
+    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
+    # of the print backend and enables a custom implementation instead.
+    defines += [ "PRINT_BACKEND_AVAILABLE" ]
+
+    if (use_cups_ipp) {
+      sources += [
+        "cups_connection.cc",
+        "cups_connection.h",
+        "cups_deleters.cc",
+        "cups_deleters.h",
+        "cups_ipp_constants.cc",
+        "cups_ipp_constants.h",
+        "cups_ipp_helper.cc",
+        "cups_ipp_helper.h",
+        "cups_ipp_utils.cc",
+        "cups_ipp_utils.h",
+        "cups_jobs.cc",
+        "cups_jobs.h",
+        "cups_printer.cc",
+        "cups_printer.h",
+        "print_backend_cups_ipp.cc",
+        "print_backend_cups_ipp.h",
+      ]
+    }
+
+    if (is_chromeos_ash) {
+      deps += [ ":ipp_handlers_generate" ]
+
+      sources += [
+        "ipp_handler_map.h",
+        "ipp_handlers.cc",
+        "ipp_handlers.h",
+        ipp_handler_map_path,
+      ]
+    } else {
+      # TODO(crbug.com/1062136): Remove the original CUPS backend for macOS
+      # when Cloud Print support is terminated. Follow up after Jan 1, 2021.
+      sources += [
+        "cups_helper.cc",
+        "cups_helper.h",
+        "print_backend_cups.cc",
+        "print_backend_cups.h",
+      ]
+
+      # We still build the utils for fuzzing if not already built.
+      if (use_fuzzing_engine && !use_cups_ipp) {
+        sources += [
+          "cups_ipp_constants.cc",
+          "cups_ipp_constants.h",
+          "cups_ipp_helper.cc",
+          "cups_ipp_helper.h",
+        ]
+      }
+    }
+  }
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "test_print_backend.cc",
+    "test_print_backend.h",
+  ]
+
+  configs += [ "//build/config/compiler:noshadowing" ]
+  deps = [
+    ":backend",
+    "//base",
+  ]
+}
diff --git a/printing/backend/cups_connection.h b/printing/backend/cups_connection.h
index 0f9f7830..1d08c90 100644
--- a/printing/backend/cups_connection.h
+++ b/printing/backend/cups_connection.h
@@ -22,7 +22,7 @@
 namespace printing {
 
 // Represents the status of a printer queue.
-struct COMPONENT_EXPORT(PRINTING) QueueStatus {
+struct COMPONENT_EXPORT(PRINT_BACKEND) QueueStatus {
   QueueStatus();
   QueueStatus(const QueueStatus& other);
   ~QueueStatus();
@@ -32,7 +32,7 @@
 };
 
 // Represents a connection to a CUPS server.
-class COMPONENT_EXPORT(PRINTING) CupsConnection {
+class COMPONENT_EXPORT(PRINT_BACKEND) CupsConnection {
  public:
   virtual ~CupsConnection() = default;
 
diff --git a/printing/backend/cups_deleters.h b/printing/backend/cups_deleters.h
index 1d455b6d..9124e6a 100644
--- a/printing/backend/cups_deleters.h
+++ b/printing/backend/cups_deleters.h
@@ -12,19 +12,19 @@
 
 namespace printing {
 
-struct COMPONENT_EXPORT(PRINTING) HttpDeleter {
+struct COMPONENT_EXPORT(PRINT_BACKEND) HttpDeleter {
   void operator()(http_t* http) const;
 };
 
-struct COMPONENT_EXPORT(PRINTING) DestinationDeleter {
+struct COMPONENT_EXPORT(PRINT_BACKEND) DestinationDeleter {
   void operator()(cups_dest_t* dest) const;
 };
 
-struct COMPONENT_EXPORT(PRINTING) DestInfoDeleter {
+struct COMPONENT_EXPORT(PRINT_BACKEND) DestInfoDeleter {
   void operator()(cups_dinfo_t* info) const;
 };
 
-struct COMPONENT_EXPORT(PRINTING) OptionDeleter {
+struct COMPONENT_EXPORT(PRINT_BACKEND) OptionDeleter {
   void operator()(cups_option_t* option) const;
 };
 
diff --git a/printing/backend/cups_helper.h b/printing/backend/cups_helper.h
index 38f64668..3b6fb68 100644
--- a/printing/backend/cups_helper.h
+++ b/printing/backend/cups_helper.h
@@ -19,7 +19,7 @@
 
 // Helper wrapper around http_t structure, with connection and cleanup
 // functionality.
-class COMPONENT_EXPORT(PRINTING) HttpConnectionCUPS {
+class COMPONENT_EXPORT(PRINT_BACKEND) HttpConnectionCUPS {
  public:
   HttpConnectionCUPS(const GURL& print_server_url,
                      http_encryption_t encryption,
@@ -34,7 +34,7 @@
 
 // Helper function to parse and convert PPD capabilitites to
 // semantic options.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 bool ParsePpdCapabilities(cups_dest_t* dest,
                           base::StringPiece locale,
                           base::StringPiece printer_capabilities,
diff --git a/printing/backend/cups_ipp_constants.h b/printing/backend/cups_ipp_constants.h
index 6348f328..f3e0e3ce 100644
--- a/printing/backend/cups_ipp_constants.h
+++ b/printing/backend/cups_ipp_constants.h
@@ -11,29 +11,29 @@
 namespace printing {
 
 // property names
-COMPONENT_EXPORT(PRINTING) extern const char kIppCollate[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppCopies[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppMedia[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppDuplex[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppRequestingUserName[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppResolution[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppPin[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppPinEncryption[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppCollate[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppCopies[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppColor[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppMedia[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppDuplex[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppRequestingUserName[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppResolution[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppPin[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppPinEncryption[];
 
 // collation values
-COMPONENT_EXPORT(PRINTING) extern const char kCollated[];
-COMPONENT_EXPORT(PRINTING) extern const char kUncollated[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCollated[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kUncollated[];
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 
-COMPONENT_EXPORT(PRINTING) extern const char kIppDocumentAttributes[];
-COMPONENT_EXPORT(PRINTING) extern const char kIppJobAttributes[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppDocumentAttributes[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kIppJobAttributes[];
 
-COMPONENT_EXPORT(PRINTING) extern const char kPinEncryptionNone[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPinEncryptionNone[];
 
-COMPONENT_EXPORT(PRINTING) extern const char kOptionFalse[];
-COMPONENT_EXPORT(PRINTING) extern const char kOptionTrue[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kOptionFalse[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kOptionTrue[];
 
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
diff --git a/printing/backend/cups_ipp_helper.cc b/printing/backend/cups_ipp_helper.cc
index 7137f49..13e0ea72 100644
--- a/printing/backend/cups_ipp_helper.cc
+++ b/printing/backend/cups_ipp_helper.cc
@@ -10,9 +10,9 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/optional.h"
-#include "base/stl_util.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "build/chromeos_buildflags.h"
diff --git a/printing/backend/cups_ipp_helper.h b/printing/backend/cups_ipp_helper.h
index b6faae4..f8c0418 100644
--- a/printing/backend/cups_ipp_helper.h
+++ b/printing/backend/cups_ipp_helper.h
@@ -19,17 +19,18 @@
 using ScopedIppPtr = std::unique_ptr<ipp_t, void (*)(ipp_t*)>;
 
 // Returns the default paper setting for `printer`.
+COMPONENT_EXPORT(PRINT_BACKEND)
 PrinterSemanticCapsAndDefaults::Paper DefaultPaper(
     const CupsOptionProvider& printer);
 
 // Populates the `printer_info` object with attributes retrieved using IPP from
 // `printer`.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 void CapsAndDefaultsFromPrinter(const CupsOptionProvider& printer,
                                 PrinterSemanticCapsAndDefaults* printer_info);
 
 // Wraps `ipp` in unique_ptr with appropriate deleter
-COMPONENT_EXPORT(PRINTING) ScopedIppPtr WrapIpp(ipp_t* ipp);
+COMPONENT_EXPORT(PRINT_BACKEND) ScopedIppPtr WrapIpp(ipp_t* ipp);
 
 }  // namespace printing
 
diff --git a/printing/backend/cups_jobs.h b/printing/backend/cups_jobs.h
index f276740..0cdd7dd9 100644
--- a/printing/backend/cups_jobs.h
+++ b/printing/backend/cups_jobs.h
@@ -26,7 +26,7 @@
 struct PrinterStatus;
 
 // Represents a print job sent to the queue.
-struct COMPONENT_EXPORT(PRINTING) CupsJob {
+struct COMPONENT_EXPORT(PRINT_BACKEND) CupsJob {
   // Corresponds to job-state from RFC2911.
   enum JobState {
     UNKNOWN,
@@ -58,7 +58,7 @@
   int processing_started = 0;
 };
 
-struct COMPONENT_EXPORT(PRINTING) PrinterInfo {
+struct COMPONENT_EXPORT(PRINT_BACKEND) PrinterInfo {
   PrinterInfo();
   PrinterInfo(const PrinterInfo& info);
 
@@ -87,7 +87,7 @@
 
 // Returns the uri for printer with `id` as served by CUPS. Assumes that `id` is
 // a valid CUPS printer name and performs no error checking or escaping.
-std::string COMPONENT_EXPORT(PRINTING)
+std::string COMPONENT_EXPORT(PRINT_BACKEND)
     PrinterUriFromName(const std::string& id);
 
 // Extracts structured job information from the `response` for `printer_id`.
@@ -102,7 +102,7 @@
 // Queries the printer at `address` on `port` with a Get-Printer-Attributes
 // request to populate `printer_info`. If `encrypted` is true, request is made
 // using ipps, otherwise, ipp is used. Returns false if the request failed.
-PrinterQueryResult COMPONENT_EXPORT(PRINTING)
+PrinterQueryResult COMPONENT_EXPORT(PRINT_BACKEND)
     GetPrinterInfo(const std::string& address,
                    int port,
                    const std::string& resource,
diff --git a/printing/backend/cups_printer.h b/printing/backend/cups_printer.h
index e4dc672..2a06f89 100644
--- a/printing/backend/cups_printer.h
+++ b/printing/backend/cups_printer.h
@@ -20,7 +20,7 @@
 struct PrinterBasicInfo;
 
 // Provides information regarding cups options.
-class COMPONENT_EXPORT(PRINTING) CupsOptionProvider {
+class COMPONENT_EXPORT(PRINT_BACKEND) CupsOptionProvider {
  public:
   virtual ~CupsOptionProvider() = default;
 
@@ -48,7 +48,7 @@
 // Retrieves information from CUPS printer objects as requested.  This class
 // is only valid as long as the CupsConnection which created it exists as they
 // share an http connection which the CupsConnection closes on destruction.
-class COMPONENT_EXPORT(PRINTING) CupsPrinter : public CupsOptionProvider {
+class COMPONENT_EXPORT(PRINT_BACKEND) CupsPrinter : public CupsOptionProvider {
  public:
   // Represents the margins that CUPS reports for some given media.
   // Its members are valued in PWG units (100ths of mm).
diff --git a/printing/backend/mojom/BUILD.gn b/printing/backend/mojom/BUILD.gn
index ba216b9d..9cb5ed2 100644
--- a/printing/backend/mojom/BUILD.gn
+++ b/printing/backend/mojom/BUILD.gn
@@ -32,8 +32,9 @@
       traits_sources = [ "print_backend_mojom_traits.cc" ]
       traits_headers = [ "print_backend_mojom_traits.h" ]
       traits_deps = [
+        "//base",
         "//build:chromeos_buildflags",
-        "//printing:printing",
+        "//printing/backend",
       ]
     },
   ]
diff --git a/printing/backend/print_backend.h b/printing/backend/print_backend.h
index 092853c..1ca5a20 100644
--- a/printing/backend/print_backend.h
+++ b/printing/backend/print_backend.h
@@ -28,7 +28,7 @@
 
 using PrinterBasicInfoOptions = std::map<std::string, std::string>;
 
-struct COMPONENT_EXPORT(PRINTING) PrinterBasicInfo {
+struct COMPONENT_EXPORT(PRINT_BACKEND) PrinterBasicInfo {
   PrinterBasicInfo();
   PrinterBasicInfo(const std::string& printer_name,
                    const std::string& display_name,
@@ -58,7 +58,7 @@
 
 #if defined(OS_CHROMEOS)
 
-struct COMPONENT_EXPORT(PRINTING) AdvancedCapabilityValue {
+struct COMPONENT_EXPORT(PRINT_BACKEND) AdvancedCapabilityValue {
   AdvancedCapabilityValue();
   AdvancedCapabilityValue(const std::string& name,
                           const std::string& display_name);
@@ -74,7 +74,7 @@
   std::string display_name;
 };
 
-struct COMPONENT_EXPORT(PRINTING) AdvancedCapability {
+struct COMPONENT_EXPORT(PRINT_BACKEND) AdvancedCapability {
   enum class Type : uint8_t { kBoolean, kFloat, kInteger, kString };
 
   AdvancedCapability();
@@ -109,7 +109,7 @@
 
 #endif  // defined(OS_CHROMEOS)
 
-struct COMPONENT_EXPORT(PRINTING) PrinterSemanticCapsAndDefaults {
+struct COMPONENT_EXPORT(PRINT_BACKEND) PrinterSemanticCapsAndDefaults {
   PrinterSemanticCapsAndDefaults();
   PrinterSemanticCapsAndDefaults(const PrinterSemanticCapsAndDefaults& other);
   ~PrinterSemanticCapsAndDefaults();
@@ -130,7 +130,7 @@
   mojom::ColorModel color_model = mojom::ColorModel::kUnknownColorModel;
   mojom::ColorModel bw_model = mojom::ColorModel::kUnknownColorModel;
 
-  struct COMPONENT_EXPORT(PRINTING) Paper {
+  struct COMPONENT_EXPORT(PRINT_BACKEND) Paper {
     std::string display_name;
     std::string vendor_id;
     gfx::Size size_um;
@@ -151,7 +151,7 @@
 #endif  // defined(OS_CHROMEOS)
 };
 
-struct COMPONENT_EXPORT(PRINTING) PrinterCapsAndDefaults {
+struct COMPONENT_EXPORT(PRINT_BACKEND) PrinterCapsAndDefaults {
   PrinterCapsAndDefaults();
   PrinterCapsAndDefaults(const PrinterCapsAndDefaults& other);
   ~PrinterCapsAndDefaults();
@@ -169,7 +169,7 @@
 // print system specific. For example, CUPS is available on both Linux and Mac,
 // but not available on ChromeOS, etc. This design allows us to add more
 // functionality on some platforms, while reusing core (CUPS) functions.
-class COMPONENT_EXPORT(PRINTING) PrintBackend
+class COMPONENT_EXPORT(PRINT_BACKEND) PrintBackend
     : public base::RefCountedThreadSafe<PrintBackend> {
  public:
   // Enumerates the list of installed local and network printers.
diff --git a/printing/backend/print_backend_consts.h b/printing/backend/print_backend_consts.h
index 600c7d73..c90670a 100644
--- a/printing/backend/print_backend_consts.h
+++ b/printing/backend/print_backend_consts.h
@@ -7,22 +7,22 @@
 
 #include "base/component_export.h"
 
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSBlocking[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSEncryption[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSEnterprisePrinter[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSPrintServerURL[];
-COMPONENT_EXPORT(PRINTING) extern const char kDriverInfoTagName[];
-COMPONENT_EXPORT(PRINTING) extern const char kDriverNameTagName[];
-COMPONENT_EXPORT(PRINTING) extern const char kLocationTagName[];
-COMPONENT_EXPORT(PRINTING) extern const char kValueFalse[];
-COMPONENT_EXPORT(PRINTING) extern const char kValueTrue[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSBlocking[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSEncryption[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSEnterprisePrinter[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSPrintServerURL[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kDriverInfoTagName[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kDriverNameTagName[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kLocationTagName[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kValueFalse[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kValueTrue[];
 
 // CUPS destination option names.
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptDeviceUri[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptPrinterInfo[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptPrinterLocation[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptPrinterMakeAndModel[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptPrinterState[];
-COMPONENT_EXPORT(PRINTING) extern const char kCUPSOptPrinterType[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptDeviceUri[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptPrinterInfo[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptPrinterLocation[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptPrinterMakeAndModel[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptPrinterState[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kCUPSOptPrinterType[];
 
 #endif  // PRINTING_BACKEND_PRINT_BACKEND_CONSTS_H_
diff --git a/printing/backend/print_backend_cups.h b/printing/backend/print_backend_cups.h
index 0623192..9f35beab 100644
--- a/printing/backend/print_backend_cups.h
+++ b/printing/backend/print_backend_cups.h
@@ -25,10 +25,10 @@
                    const std::string& locale);
 
   // These static functions are exposed here for use in the tests.
-  COMPONENT_EXPORT(PRINTING)
+  COMPONENT_EXPORT(PRINT_BACKEND)
   static bool PrinterBasicInfoFromCUPS(const cups_dest_t& printer,
                                        PrinterBasicInfo* printer_info);
-  COMPONENT_EXPORT(PRINTING)
+  COMPONENT_EXPORT(PRINT_BACKEND)
   static std::string PrinterDriverInfoFromCUPS(const cups_dest_t& printer);
 
  private:
diff --git a/printing/backend/print_backend_utils.h b/printing/backend/print_backend_utils.h
index d2c661e..5f3c37f 100644
--- a/printing/backend/print_backend_utils.h
+++ b/printing/backend/print_backend_utils.h
@@ -11,7 +11,7 @@
 
 namespace printing {
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 PrinterSemanticCapsAndDefaults::Paper ParsePaper(base::StringPiece value);
 
 }  // namespace printing
diff --git a/printing/backend/printing_info_win.h b/printing/backend/printing_info_win.h
index 2ee907e..4aad87c 100644
--- a/printing/backend/printing_info_win.h
+++ b/printing/backend/printing_info_win.h
@@ -17,8 +17,10 @@
 
 namespace internal {
 
-COMPONENT_EXPORT(PRINTING) uint8_t* GetDriverInfo(HANDLE printer, int level);
-COMPONENT_EXPORT(PRINTING) uint8_t* GetPrinterInfo(HANDLE printer, int level);
+COMPONENT_EXPORT(PRINT_BACKEND)
+uint8_t* GetDriverInfo(HANDLE printer, int level);
+COMPONENT_EXPORT(PRINT_BACKEND)
+uint8_t* GetPrinterInfo(HANDLE printer, int level);
 
 // This class is designed to work with PRINTER_INFO_X structures
 // and calls GetPrinter internally with correctly allocated buffer.
diff --git a/printing/backend/printing_restrictions.h b/printing/backend/printing_restrictions.h
index 149ecfb..f85f590 100644
--- a/printing/backend/printing_restrictions.h
+++ b/printing/backend/printing_restrictions.h
@@ -40,12 +40,12 @@
 // Dictionary key for printing policies.
 // Must coincide with the name of field in `print_preview.Policies` in
 // chrome/browser/resources/print_preview/data/destination.js
-COMPONENT_EXPORT(PRINTING) extern const char kAllowedColorModes[];
-COMPONENT_EXPORT(PRINTING) extern const char kAllowedDuplexModes[];
-COMPONENT_EXPORT(PRINTING) extern const char kAllowedPinModes[];
-COMPONENT_EXPORT(PRINTING) extern const char kDefaultColorMode[];
-COMPONENT_EXPORT(PRINTING) extern const char kDefaultDuplexMode[];
-COMPONENT_EXPORT(PRINTING) extern const char kDefaultPinMode[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kAllowedColorModes[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kAllowedDuplexModes[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kAllowedPinModes[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kDefaultColorMode[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kDefaultDuplexMode[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kDefaultPinMode[];
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 // Allowed background graphics modes.
@@ -57,11 +57,11 @@
 };
 
 // Dictionary keys to be used with `kPrintingPaperSizeDefault` policy.
-COMPONENT_EXPORT(PRINTING) extern const char kPaperSizeName[];
-COMPONENT_EXPORT(PRINTING) extern const char kPaperSizeNameCustomOption[];
-COMPONENT_EXPORT(PRINTING) extern const char kPaperSizeCustomSize[];
-COMPONENT_EXPORT(PRINTING) extern const char kPaperSizeWidth[];
-COMPONENT_EXPORT(PRINTING) extern const char kPaperSizeHeight[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPaperSizeName[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPaperSizeNameCustomOption[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPaperSizeCustomSize[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPaperSizeWidth[];
+COMPONENT_EXPORT(PRINT_BACKEND) extern const char kPaperSizeHeight[];
 
 }  // namespace printing
 
diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h
index 4b38b627..09aff42 100644
--- a/printing/backend/win_helper.h
+++ b/printing/backend/win_helper.h
@@ -26,9 +26,9 @@
 // These are helper functions for dealing with Windows Printing.
 namespace printing {
 
-struct COMPONENT_EXPORT(PRINTING) PrinterBasicInfo;
+struct COMPONENT_EXPORT(PRINT_BACKEND) PrinterBasicInfo;
 
-class COMPONENT_EXPORT(PRINTING) PrinterHandleTraits {
+class COMPONENT_EXPORT(PRINT_BACKEND) PrinterHandleTraits {
  public:
   PrinterHandleTraits() = delete;
   PrinterHandleTraits(const PrinterHandleTraits&) = delete;
@@ -43,14 +43,14 @@
   static HANDLE NullHandle() { return nullptr; }
 };
 
-class COMPONENT_EXPORT(PRINTING) ScopedPrinterHandle
+class COMPONENT_EXPORT(PRINT_BACKEND) ScopedPrinterHandle
     : public base::win::GenericScopedHandle<PrinterHandleTraits,
                                             base::win::DummyVerifierTraits> {
  public:
   bool OpenPrinterWithName(const wchar_t* printer);
 };
 
-class COMPONENT_EXPORT(PRINTING) PrinterChangeHandleTraits {
+class COMPONENT_EXPORT(PRINT_BACKEND) PrinterChangeHandleTraits {
  public:
   PrinterChangeHandleTraits() = delete;
   PrinterChangeHandleTraits(const PrinterChangeHandleTraits&) = delete;
@@ -75,7 +75,7 @@
 // this would mean having to add that to every binary that links with
 // printing.lib (which is a LOT of binaries). So choosing the GetProcAddress
 // route instead).
-class COMPONENT_EXPORT(PRINTING) XPSModule {
+class COMPONENT_EXPORT(PRINT_BACKEND) XPSModule {
  public:
   // All the other methods can ONLY be called after a successful call to Init.
   // Init can be called many times and by multiple threads.
@@ -115,7 +115,7 @@
 };
 
 // See comments in cc file explaining why we need this.
-class COMPONENT_EXPORT(PRINTING) ScopedXPSInitializer {
+class COMPONENT_EXPORT(PRINT_BACKEND) ScopedXPSInitializer {
  public:
   ScopedXPSInitializer();
   ScopedXPSInitializer(const ScopedXPSInitializer&) = delete;
@@ -131,7 +131,7 @@
 // Wrapper class to wrap the XPS Print APIs (these are different from the PTxxx
 // which deal with the XML Print Schema). This is needed because these
 // APIs are only available on Windows 7 and higher.
-class COMPONENT_EXPORT(PRINTING) XPSPrintModule {
+class COMPONENT_EXPORT(PRINT_BACKEND) XPSPrintModule {
  public:
   // All the other methods can ONLY be called after a successful call to Init.
   // Init can be called many times and by multiple threads.
@@ -153,37 +153,37 @@
 };
 
 // Sets the function that gets friendly names for network printers.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 void SetGetDisplayNameFunction(
     std::string (*get_display_name_func)(const std::string& printer_name));
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 bool InitBasicPrinterInfo(HANDLE printer, PrinterBasicInfo* printer_info);
 
-COMPONENT_EXPORT(PRINTING) std::string GetDriverInfo(HANDLE printer);
+COMPONENT_EXPORT(PRINT_BACKEND) std::string GetDriverInfo(HANDLE printer);
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 std::unique_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
     const std::wstring& printer_name,
     const std::string& print_ticket);
 
-COMPONENT_EXPORT(PRINTING) bool IsDevModeWithColor(const DEVMODE* devmode);
+COMPONENT_EXPORT(PRINT_BACKEND) bool IsDevModeWithColor(const DEVMODE* devmode);
 
 // Creates default DEVMODE and sets color option. Some devices need special
 // workaround for color.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 std::unique_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor(
     HANDLE printer,
     const std::wstring& printer_name,
     bool color);
 
 // Creates new DEVMODE. If `in` is not NULL copy settings from there.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 std::unique_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer,
                                                           DEVMODE* in);
 
 // Prompts for new DEVMODE. If `in` is not NULL copy settings from there.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINT_BACKEND)
 std::unique_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
     HANDLE printer,
     const std::wstring& printer_name,
diff --git a/printing/buildflags/buildflags.gni b/printing/buildflags/buildflags.gni
index 058e7f7..2fe0c2a 100644
--- a/printing/buildflags/buildflags.gni
+++ b/printing/buildflags/buildflags.gni
@@ -11,12 +11,11 @@
 declare_args() {
   # Enable basic printing support and UI.
   enable_basic_printing = !is_chromecast && !is_ios && !is_fuchsia
+}
 
-  # Enable printing with print preview. It implies enable_basic_printing.
-  # Note: It would be convenient to not repeat many of the same conditions in
-  # enable_basic_printing below. However, GN does not allow the use of
-  # enable_basic_printing within the same declare_args() block.
-  enable_print_preview = !is_android && !is_chromecast && !is_ios && !is_fuchsia
+declare_args() {
+  # Enable printing with print preview.
+  enable_print_preview = enable_basic_printing && !is_android
 
   # Enable exporting to tagged PDF.
   enable_tagged_pdf = !is_android && !is_chromecast && !is_ios && !is_fuchsia
@@ -29,3 +28,9 @@
                 is_mac) && !is_chromecast && !is_fuchsia
   }
 }
+
+declare_args() {
+  # Enable the CUPS IPP printing backend.
+  # TODO(crbug.com/226176): Remove this after CUPS PPD API calls are removed.
+  use_cups_ipp = use_cups && !(is_linux || is_chromeos_lacros)
+}
diff --git a/printing/print_job_constants.h b/printing/print_job_constants.h
index 5950ba0..cb3f3e2 100644
--- a/printing/print_job_constants.h
+++ b/printing/print_job_constants.h
@@ -11,105 +11,165 @@
 
 namespace printing {
 
-COMPONENT_EXPORT(PRINTING) extern const char kIsFirstRequest[];
-COMPONENT_EXPORT(PRINTING) extern const char kPreviewRequestID[];
-COMPONENT_EXPORT(PRINTING) extern const char kPreviewUIID[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingCapabilities[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingCloudPrintId[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingCollate[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingSetColorAsDefault[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingContentHeight[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingContentWidth[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingCopies[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDeviceName[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDisableScaling[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDpiDefault[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDpiHorizontal[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDpiVertical[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingDuplexMode[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingFitToPageScaling[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingHeaderFooterEnabled[];
-COMPONENT_EXPORT(PRINTING) extern const float kSettingHeaderFooterInterstice;
-COMPONENT_EXPORT(PRINTING) extern const char kSettingHeaderFooterDate[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingHeaderFooterTitle[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingHeaderFooterURL[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingLandscape[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMediaSize[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMediaSizeHeightMicrons[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMediaSizeWidthMicrons[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMediaSizeVendorId[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMediaSizeIsDefault[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginBottom[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginLeft[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginRight[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginTop[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginsCustom[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingMarginsType[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPreviewPageCount[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPageRange[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPageRangeFrom[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPageRangeTo[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPageWidth[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPageHeight[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPagesPerSheet[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPinValue[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPolicies[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPreviewIsFromArc[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPreviewIsPdf[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPreviewModifiable[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrintToGoogleDrive[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrintableAreaHeight[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrintableAreaWidth[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrintableAreaX[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrintableAreaY[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrinterDescription[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrinterName[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrinterOptions[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingPrinterType[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingRasterizePdf[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingScaleFactor[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingScalingType[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingTicket[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingSendUserInfo[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingShouldPrintBackgrounds[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingShouldPrintSelectionOnly[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingShowSystemDialog[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingUsername[];
-COMPONENT_EXPORT(PRINTING) extern const char kSettingAdvancedSettings[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kIsFirstRequest[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kPreviewRequestID[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kPreviewUIID[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingCapabilities[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingCloudPrintId[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingCollate[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingColor[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingSetColorAsDefault[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingContentHeight[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingContentWidth[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingCopies[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDeviceName[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDisableScaling[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDpiDefault[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDpiHorizontal[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDpiVertical[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingDuplexMode[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingFitToPageScaling[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingHeaderFooterEnabled[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const float kSettingHeaderFooterInterstice;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingHeaderFooterDate[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingHeaderFooterTitle[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingHeaderFooterURL[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingLandscape[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMediaSize[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMediaSizeHeightMicrons[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMediaSizeWidthMicrons[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMediaSizeVendorId[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMediaSizeIsDefault[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginBottom[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginLeft[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginRight[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginTop[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginsCustom[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingMarginsType[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPreviewPageCount[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPageRange[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPageRangeFrom[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPageRangeTo[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPageWidth[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPageHeight[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPagesPerSheet[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingPinValue[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingPolicies[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPreviewIsFromArc[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPreviewIsPdf[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPreviewModifiable[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrintToGoogleDrive[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrintableAreaHeight[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrintableAreaWidth[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrintableAreaX[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrintableAreaY[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrinterDescription[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrinterName[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrinterOptions[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingPrinterType[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingRasterizePdf[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingScaleFactor[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingScalingType[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingTicket[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingSendUserInfo[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingShouldPrintBackgrounds[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingShouldPrintSelectionOnly[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingShowSystemDialog[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSettingUsername[];
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingAdvancedSettings[];
 
-COMPONENT_EXPORT(PRINTING) extern const int FIRST_PAGE_INDEX;
-COMPONENT_EXPORT(PRINTING) extern const int COMPLETE_PREVIEW_DOCUMENT_INDEX;
-COMPONENT_EXPORT(PRINTING) extern const char kSettingOpenPDFInPreview[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const int FIRST_PAGE_INDEX;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const int COMPLETE_PREVIEW_DOCUMENT_INDEX;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const char kSettingOpenPDFInPreview[];
 
-COMPONENT_EXPORT(PRINTING) extern const uint32_t kInvalidPageIndex;
-COMPONENT_EXPORT(PRINTING) extern const uint32_t kMaxPageCount;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const uint32_t kInvalidPageIndex;
+COMPONENT_EXPORT(PRINTING_BASE) extern const uint32_t kMaxPageCount;
 
 #if defined(USE_CUPS)
 // Printer color models
-COMPONENT_EXPORT(PRINTING) extern const char kBlack[];
-COMPONENT_EXPORT(PRINTING) extern const char kCMYK[];
-COMPONENT_EXPORT(PRINTING) extern const char kKCMY[];
-COMPONENT_EXPORT(PRINTING) extern const char kCMY_K[];
-COMPONENT_EXPORT(PRINTING) extern const char kCMY[];
-COMPONENT_EXPORT(PRINTING) extern const char kColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kEpsonColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kEpsonMono[];
-COMPONENT_EXPORT(PRINTING) extern const char kFullColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kGray[];
-COMPONENT_EXPORT(PRINTING) extern const char kGrayscale[];
-COMPONENT_EXPORT(PRINTING) extern const char kGreyscale[];
-COMPONENT_EXPORT(PRINTING) extern const char kMono[];
-COMPONENT_EXPORT(PRINTING) extern const char kMonochrome[];
-COMPONENT_EXPORT(PRINTING) extern const char kNormal[];
-COMPONENT_EXPORT(PRINTING) extern const char kNormalGray[];
-COMPONENT_EXPORT(PRINTING) extern const char kRGB[];
-COMPONENT_EXPORT(PRINTING) extern const char kRGBA[];
-COMPONENT_EXPORT(PRINTING) extern const char kRGB16[];
-COMPONENT_EXPORT(PRINTING) extern const char kSharpCMColor[];
-COMPONENT_EXPORT(PRINTING) extern const char kSharpCMBW[];
-COMPONENT_EXPORT(PRINTING) extern const char kXeroxAutomatic[];
-COMPONENT_EXPORT(PRINTING) extern const char kXeroxBW[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kBlack[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kCMYK[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kKCMY[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kCMY_K[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kCMY[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kColor[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kEpsonColor[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kEpsonMono[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kFullColor[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kGray[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kGrayscale[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kGreyscale[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kMono[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kMonochrome[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kNormal[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kNormalGray[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kRGB[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kRGBA[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kRGB16[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSharpCMColor[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kSharpCMBW[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kXeroxAutomatic[];
+COMPONENT_EXPORT(PRINTING_BASE) extern const char kXeroxBW[];
 #endif
 
 // Specifies the horizontal alignment of the headers and footers.
diff --git a/printing/printer_query_result.h b/printing/printer_query_result.h
index a5fe727..39718db 100644
--- a/printing/printer_query_result.h
+++ b/printing/printer_query_result.h
@@ -13,7 +13,7 @@
 // This enum is used to record UMA histogram values and should not be
 // reordered. Please keep in sync with PrinterStatusQueryResult in
 // src/tools/metrics/histograms/enums.xml.
-enum class COMPONENT_EXPORT(PRINTING) PrinterQueryResult {
+enum class COMPONENT_EXPORT(PRINTING_BASE) PrinterQueryResult {
   kUnknownFailure = 0,      // catchall error
   kSuccess = 1,             // successful
   kUnreachable = 2,         // failed to reach the host
diff --git a/printing/printer_status.h b/printing/printer_status.h
index 5269655..7d86b5d4 100644
--- a/printing/printer_status.h
+++ b/printing/printer_status.h
@@ -16,7 +16,7 @@
 
 // Represents the status of a printer containing the properties printer-state,
 // printer-state-reasons, and printer-state-message.
-struct COMPONENT_EXPORT(PRINTING) PrinterStatus {
+struct COMPONENT_EXPORT(PRINTING_BASE) PrinterStatus {
   struct PrinterReason {
     // This enum is used to record UMA histogram values and should not be
     // reordered. Please keep in sync with PrinterStatusReasons in
diff --git a/printing/printing_features.h b/printing/printing_features.h
index 9dc84aa..c75189cf 100644
--- a/printing/printing_features.h
+++ b/printing/printing_features.h
@@ -17,27 +17,32 @@
 // documented with descriptions of their behaviors in the .cc file.
 
 #if defined(OS_MAC)
-COMPONENT_EXPORT(PRINTING) extern const base::Feature kCupsIppPrintingBackend;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const base::Feature kCupsIppPrintingBackend;
 #endif  // defined(OS_MAC)
 
 #if defined(OS_WIN)
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 extern const base::Feature kPrintWithReducedRasterization;
-COMPONENT_EXPORT(PRINTING) extern const base::Feature kUseXpsForPrinting;
-COMPONENT_EXPORT(PRINTING) extern const base::Feature kUseXpsForPrintingFromPdf;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const base::Feature kUseXpsForPrinting;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const base::Feature kUseXpsForPrintingFromPdf;
 
 // Helper function to determine if there is any print path which could require
 // the use of XPS print capabilities.
-COMPONENT_EXPORT(PRINTING) bool IsXpsPrintCapabilityRequired();
+COMPONENT_EXPORT(PRINTING_BASE) bool IsXpsPrintCapabilityRequired();
 
 // Helper function to determine if printing of a document from a particular
 // source should be done using XPS printing API instead of with GDI.
-COMPONENT_EXPORT(PRINTING) bool ShouldPrintUsingXps(bool source_is_pdf);
+COMPONENT_EXPORT(PRINTING_BASE)
+bool ShouldPrintUsingXps(bool source_is_pdf);
 #endif  // defined(OS_WIN)
 
 #if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || \
     defined(OS_CHROMEOS)
-COMPONENT_EXPORT(PRINTING) extern const base::Feature kEnableOopPrintDrivers;
+COMPONENT_EXPORT(PRINTING_BASE)
+extern const base::Feature kEnableOopPrintDrivers;
 #endif  // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) ||
         // defined(OS_CHROMEOS)
 
diff --git a/printing/printing_utils.h b/printing/printing_utils.h
index 9000dde..2fd4834 100644
--- a/printing/printing_utils.h
+++ b/printing/printing_utils.h
@@ -19,18 +19,18 @@
 namespace printing {
 
 // Simplify title to resolve issue with some drivers.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 std::u16string SimplifyDocumentTitle(const std::u16string& title);
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 std::u16string SimplifyDocumentTitleWithLength(const std::u16string& title,
                                                size_t length);
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 std::u16string FormatDocumentTitleWithOwner(const std::u16string& owner,
                                             const std::u16string& title);
 
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 std::u16string FormatDocumentTitleWithOwnerAndLength(
     const std::u16string& owner,
     const std::u16string& title,
@@ -38,12 +38,12 @@
 
 // Returns the paper size (microns) most common in the locale to the nearest
 // millimeter. Defaults to ISO A4 for an empty or invalid locale.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 gfx::Size GetDefaultPaperSizeFromLocaleMicrons(base::StringPiece locale);
 
 // Returns true if both dimensions of the sizes have a delta less than or equal
 // to the epsilon value.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 bool SizesEqualWithinEpsilon(const gfx::Size& lhs,
                              const gfx::Size& rhs,
                              int epsilon);
diff --git a/printing/units.h b/printing/units.h
index fc78236..7460ded2 100644
--- a/printing/units.h
+++ b/printing/units.h
@@ -44,21 +44,23 @@
 constexpr float kA3HeightInch = 16.54f;
 
 // Converts from one unit system to another using integer arithmetics.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 int ConvertUnit(double value, int old_unit, int new_unit);
 
 // Converts from one unit system to another using doubles.
-COMPONENT_EXPORT(PRINTING)
+COMPONENT_EXPORT(PRINTING_BASE)
 double ConvertUnitDouble(double value, double old_unit, double new_unit);
 
 // Converts from 1 pixel to 1 point using integers.
-COMPONENT_EXPORT(PRINTING) int ConvertPixelsToPoint(int pixels);
+COMPONENT_EXPORT(PRINTING_BASE) int ConvertPixelsToPoint(int pixels);
 
 // Converts from 1 pixel to 1 point using doubles.
-COMPONENT_EXPORT(PRINTING) double ConvertPixelsToPointDouble(double pixels);
+COMPONENT_EXPORT(PRINTING_BASE)
+double ConvertPixelsToPointDouble(double pixels);
 
 // Converts from 1 point to 1 pixel using doubles.
-COMPONENT_EXPORT(PRINTING) double ConvertPointsToPixelDouble(double points);
+COMPONENT_EXPORT(PRINTING_BASE)
+double ConvertPointsToPixelDouble(double points);
 
 }  // namespace printing
 
diff --git a/services/device/public/cpp/test/fake_usb_device.cc b/services/device/public/cpp/test/fake_usb_device.cc
index 22f5190..c1c222a 100644
--- a/services/device/public/cpp/test/fake_usb_device.cc
+++ b/services/device/public/cpp/test/fake_usb_device.cc
@@ -11,9 +11,9 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/ranges/algorithm.h"
-#include "base/stl_util.h"
 #include "services/device/public/cpp/test/mock_usb_mojo_device.h"
 #include "services/device/public/cpp/usb/usb_utils.h"
 
diff --git a/services/device/usb/mojo/device_impl.cc b/services/device/usb/mojo/device_impl.cc
index b3668db..976abef5 100644
--- a/services/device/usb/mojo/device_impl.cc
+++ b/services/device/usb/mojo/device_impl.cc
@@ -14,9 +14,9 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted_memory.h"
-#include "base/stl_util.h"
 #include "services/device/public/cpp/usb/usb_utils.h"
 #include "services/device/usb/usb_descriptors.h"
 #include "services/device/usb/usb_device.h"
diff --git a/storage/common/file_system/file_system_util.cc b/storage/common/file_system/file_system_util.cc
index 4b457f80..1dba5ce 100644
--- a/storage/common/file_system/file_system_util.cc
+++ b/storage/common/file_system/file_system_util.cc
@@ -9,9 +9,9 @@
 #include <algorithm>
 
 #include "base/check.h"
+#include "base/containers/contains.h"
 #include "base/macros.h"
 #include "base/notreached.h"
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "build/build_config.h"
diff --git a/styleguide/web/web.md b/styleguide/web/web.md
index c569316..fa4e4e7 100644
--- a/styleguide/web/web.md
+++ b/styleguide/web/web.md
@@ -387,6 +387,8 @@
     };
   }
 }
+
+customElements.define(MyAppElement.is, MyAppElement);
 ```
 
 * Use a consistent ordering for common methods (or, in legacy code, the
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 2973052..7b9e9cd 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -4675,11 +4675,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -4689,7 +4689,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -4754,11 +4754,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -4768,7 +4768,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -4912,11 +4912,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -4926,7 +4926,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -4991,11 +4991,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -5005,7 +5005,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5155,11 +5155,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -5169,7 +5169,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5235,11 +5235,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Client Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -5249,7 +5249,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5395,11 +5395,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -5409,7 +5409,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -5475,11 +5475,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_with_chrome_apk_Implementation Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -5489,7 +5489,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 75888be..899338c 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -53951,11 +53951,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -53965,7 +53965,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54030,11 +54030,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -54044,7 +54044,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54188,11 +54188,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -54202,7 +54202,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54267,11 +54267,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -54281,7 +54281,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54492,11 +54492,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -54506,7 +54506,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54571,11 +54571,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -54585,7 +54585,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54729,11 +54729,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.100",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.101",
         "resultdb": {
           "enable": true
         },
@@ -54743,7 +54743,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M90",
-              "revision": "version:90.0.4430.100"
+              "revision": "version:90.0.4430.101"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -54808,11 +54808,11 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28"
+            "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.28",
+        "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 91.0.4472.29",
         "resultdb": {
           "enable": true
         },
@@ -54822,7 +54822,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M91",
-              "revision": "version:91.0.4472.28"
+              "revision": "version:91.0.4472.29"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 95e19f3..c4f364d 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -10286,7 +10286,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -11839,7 +11839,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "idempotent": false,
@@ -11867,7 +11867,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "idempotent": false,
@@ -12401,7 +12401,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -13748,7 +13748,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "idempotent": false,
@@ -13775,7 +13775,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-16.04"
+              "os": "Ubuntu-18.04"
             }
           ],
           "idempotent": false,
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 0525ab2..833d802 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1172,6 +1172,25 @@
           'shards': 15,
         },
       },
+      # TODO(crbug/1199425): Remove it once bionic is the default option.
+      'Linux Tests': {
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
+      },
+      'Linux Tests (dbg)(1)': {
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
+      },
       'Lollipop Phone Tester': {
         'swarming': {
           'shards': 10,
@@ -2658,12 +2677,28 @@
           '--xvfb',
           '--jobs=1',
         ],
+        # TODO(crbug/1199425): Remove it once bionic is the default option.
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
       },
       'Linux Tests (dbg)(1)': {
         'args': [
           '--xvfb',
           '--jobs=1',
         ],
+        # TODO(crbug/1199425): Remove it once bionic is the default option.
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
       },
       # TODO crbug.com/1143924: Remove when experimentation is complete
       'Linux Tests Robocrop': {
@@ -2746,6 +2781,25 @@
   },
   'telemetry_unittests': {
     'modifications': {
+      # TODO(crbug/1199425): Remove it once bionic is the default option.
+      'Linux Tests': {
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
+      },
+      'Linux Tests (dbg)(1)': {
+        'swarming': {
+          'dimension_sets': [
+            {
+              'os': 'Ubuntu-18.04',
+            }
+          ],
+        },
+      },
       'Win10 Tests x64 (dbg)': {
         'experiment_percentage': 100,  # crbug.com/870673
       },
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 47a8db3..9ad99fc6 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -331,13 +331,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=91',
     ],
-    'identifier': 'Implementation Library Skew Tests For 91.0.4472.28',
+    'identifier': 'Implementation Library Skew Tests For 91.0.4472.29',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M91',
-          'revision': 'version:91.0.4472.28',
+          'revision': 'version:91.0.4472.29',
         }
       ],
     },
@@ -355,13 +355,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=90',
     ],
-    'identifier': 'Implementation Library Skew Tests For 90.0.4430.100',
+    'identifier': 'Implementation Library Skew Tests For 90.0.4430.101',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.100',
+          'revision': 'version:90.0.4430.101',
         }
       ],
     },
@@ -403,13 +403,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=91',
     ],
-    'identifier': 'Implementation Library Skew Tests For 91.0.4472.28',
+    'identifier': 'Implementation Library Skew Tests For 91.0.4472.29',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M91',
-          'revision': 'version:91.0.4472.28',
+          'revision': 'version:91.0.4472.29',
         }
       ],
     },
@@ -427,13 +427,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--impl-version=90',
     ],
-    'identifier': 'Implementation Library Skew Tests For 90.0.4430.100',
+    'identifier': 'Implementation Library Skew Tests For 90.0.4430.101',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.100',
+          'revision': 'version:90.0.4430.101',
         }
       ],
     },
@@ -475,13 +475,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--client-version=91',
     ],
-    'identifier': 'Client Library Skew Tests For 91.0.4472.28',
+    'identifier': 'Client Library Skew Tests For 91.0.4472.29',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M91',
-          'revision': 'version:91.0.4472.28',
+          'revision': 'version:91.0.4472.29',
         }
       ],
     },
@@ -499,13 +499,13 @@
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
       '--client-version=90',
     ],
-    'identifier': 'Client Library Skew Tests For 90.0.4430.100',
+    'identifier': 'Client Library Skew Tests For 90.0.4430.101',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M90',
-          'revision': 'version:90.0.4430.100',
+          'revision': 'version:90.0.4430.101',
         }
       ],
     },
diff --git a/third_party/abseil-cpp/BUILD.gn b/third_party/abseil-cpp/BUILD.gn
index d3497e509..e7fbd6c0 100644
--- a/third_party/abseil-cpp/BUILD.gn
+++ b/third_party/abseil-cpp/BUILD.gn
@@ -189,6 +189,11 @@
         "absl/memory:memory_test",
         "absl/meta:type_traits_test",
         "absl/strings:ascii_test",
+        "absl/strings:cordz_functions_test",
+        "absl/strings:cordz_info_test",
+        "absl/strings:cordz_test",
+        "absl/strings:cordz_update_scope_test",
+        "absl/strings:cordz_update_tracker_test",
         "absl/strings:match_test",
         "absl/strings:str_replace_test",
         "absl/strings:string_view_test",
diff --git a/third_party/abseil-cpp/CMake/AbseilDll.cmake b/third_party/abseil-cpp/CMake/AbseilDll.cmake
index 253c73f..8ee4120 100644
--- a/third_party/abseil-cpp/CMake/AbseilDll.cmake
+++ b/third_party/abseil-cpp/CMake/AbseilDll.cmake
@@ -197,16 +197,27 @@
   "strings/cord.h"
   "strings/escaping.cc"
   "strings/escaping.h"
+  "strings/internal/charconv_bigint.cc"
+  "strings/internal/charconv_bigint.h"
+  "strings/internal/charconv_parse.cc"
+  "strings/internal/charconv_parse.h"
   "strings/internal/cord_internal.cc"
   "strings/internal/cord_internal.h"
   "strings/internal/cord_rep_flat.h"
   "strings/internal/cord_rep_ring.cc"
   "strings/internal/cord_rep_ring.h"
   "strings/internal/cord_rep_ring_reader.h"
-  "strings/internal/charconv_bigint.cc"
-  "strings/internal/charconv_bigint.h"
-  "strings/internal/charconv_parse.cc"
-  "strings/internal/charconv_parse.h"
+  "strings/internal/cordz_functions.cc"
+  "strings/internal/cordz_functions.h"
+  "strings/internal/cordz_handle.cc"
+  "strings/internal/cordz_handle.h"
+  "strings/internal/cordz_info.cc"
+  "strings/internal/cordz_info.h"
+  "strings/internal/cordz_sample_token.cc"
+  "strings/internal/cordz_sample_token.h"
+  "strings/internal/cordz_statistics.h"
+  "strings/internal/cordz_update_scope.h"
+  "strings/internal/cordz_update_tracker.h"
   "strings/internal/stl_type_traits.h"
   "strings/internal/string_constant.h"
   "strings/match.cc"
diff --git a/third_party/abseil-cpp/README.chromium b/third_party/abseil-cpp/README.chromium
index 2afaf70..57d8d56b 100644
--- a/third_party/abseil-cpp/README.chromium
+++ b/third_party/abseil-cpp/README.chromium
@@ -4,7 +4,7 @@
 License: Apache 2.0
 License File: LICENSE
 Version: 0
-Revision: db1b7310d7021700b5a7bcea1989b2a625529f40
+Revision: bcc11a8918f8cc9b43c9a0dc5da7b52d48452bd3
 Security Critical: yes
 
 Description:
diff --git a/third_party/abseil-cpp/absl/algorithm/container.h b/third_party/abseil-cpp/absl/algorithm/container.h
index 6398438..1652e7b 100644
--- a/third_party/abseil-cpp/absl/algorithm/container.h
+++ b/third_party/abseil-cpp/absl/algorithm/container.h
@@ -905,11 +905,11 @@
 
 // Overload of c_sort() for performing a `comp` comparison other than the
 // default `operator<`.
-template <typename C, typename Compare>
-void c_sort(C& c, Compare&& comp) {
+template <typename C, typename LessThan>
+void c_sort(C& c, LessThan&& comp) {
   std::sort(container_algorithm_internal::c_begin(c),
             container_algorithm_internal::c_end(c),
-            std::forward<Compare>(comp));
+            std::forward<LessThan>(comp));
 }
 
 // c_stable_sort()
@@ -925,11 +925,11 @@
 
 // Overload of c_stable_sort() for performing a `comp` comparison other than the
 // default `operator<`.
-template <typename C, typename Compare>
-void c_stable_sort(C& c, Compare&& comp) {
+template <typename C, typename LessThan>
+void c_stable_sort(C& c, LessThan&& comp) {
   std::stable_sort(container_algorithm_internal::c_begin(c),
                    container_algorithm_internal::c_end(c),
-                   std::forward<Compare>(comp));
+                   std::forward<LessThan>(comp));
 }
 
 // c_is_sorted()
@@ -944,11 +944,11 @@
 
 // c_is_sorted() overload for performing a `comp` comparison other than the
 // default `operator<`.
-template <typename C, typename Compare>
-bool c_is_sorted(const C& c, Compare&& comp) {
+template <typename C, typename LessThan>
+bool c_is_sorted(const C& c, LessThan&& comp) {
   return std::is_sorted(container_algorithm_internal::c_begin(c),
                         container_algorithm_internal::c_end(c),
-                        std::forward<Compare>(comp));
+                        std::forward<LessThan>(comp));
 }
 
 // c_partial_sort()
@@ -966,14 +966,14 @@
 
 // Overload of c_partial_sort() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename RandomAccessContainer, typename Compare>
+template <typename RandomAccessContainer, typename LessThan>
 void c_partial_sort(
     RandomAccessContainer& sequence,
     container_algorithm_internal::ContainerIter<RandomAccessContainer> middle,
-    Compare&& comp) {
+    LessThan&& comp) {
   std::partial_sort(container_algorithm_internal::c_begin(sequence), middle,
                     container_algorithm_internal::c_end(sequence),
-                    std::forward<Compare>(comp));
+                    std::forward<LessThan>(comp));
 }
 
 // c_partial_sort_copy()
@@ -994,15 +994,15 @@
 
 // Overload of c_partial_sort_copy() for performing a `comp` comparison other
 // than the default `operator<`.
-template <typename C, typename RandomAccessContainer, typename Compare>
+template <typename C, typename RandomAccessContainer, typename LessThan>
 container_algorithm_internal::ContainerIter<RandomAccessContainer>
 c_partial_sort_copy(const C& sequence, RandomAccessContainer& result,
-                    Compare&& comp) {
+                    LessThan&& comp) {
   return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence),
                                 container_algorithm_internal::c_end(sequence),
                                 container_algorithm_internal::c_begin(result),
                                 container_algorithm_internal::c_end(result),
-                                std::forward<Compare>(comp));
+                                std::forward<LessThan>(comp));
 }
 
 // c_is_sorted_until()
@@ -1018,12 +1018,12 @@
 
 // Overload of c_is_sorted_until() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename C, typename Compare>
+template <typename C, typename LessThan>
 container_algorithm_internal::ContainerIter<C> c_is_sorted_until(
-    C& c, Compare&& comp) {
+    C& c, LessThan&& comp) {
   return std::is_sorted_until(container_algorithm_internal::c_begin(c),
                               container_algorithm_internal::c_end(c),
-                              std::forward<Compare>(comp));
+                              std::forward<LessThan>(comp));
 }
 
 // c_nth_element()
@@ -1043,14 +1043,14 @@
 
 // Overload of c_nth_element() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename RandomAccessContainer, typename Compare>
+template <typename RandomAccessContainer, typename LessThan>
 void c_nth_element(
     RandomAccessContainer& sequence,
     container_algorithm_internal::ContainerIter<RandomAccessContainer> nth,
-    Compare&& comp) {
+    LessThan&& comp) {
   std::nth_element(container_algorithm_internal::c_begin(sequence), nth,
                    container_algorithm_internal::c_end(sequence),
-                   std::forward<Compare>(comp));
+                   std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
@@ -1072,12 +1072,12 @@
 
 // Overload of c_lower_bound() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename Sequence, typename T, typename Compare>
+template <typename Sequence, typename T, typename LessThan>
 container_algorithm_internal::ContainerIter<Sequence> c_lower_bound(
-    Sequence& sequence, T&& value, Compare&& comp) {
+    Sequence& sequence, T&& value, LessThan&& comp) {
   return std::lower_bound(container_algorithm_internal::c_begin(sequence),
                           container_algorithm_internal::c_end(sequence),
-                          std::forward<T>(value), std::forward<Compare>(comp));
+                          std::forward<T>(value), std::forward<LessThan>(comp));
 }
 
 // c_upper_bound()
@@ -1095,12 +1095,12 @@
 
 // Overload of c_upper_bound() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename Sequence, typename T, typename Compare>
+template <typename Sequence, typename T, typename LessThan>
 container_algorithm_internal::ContainerIter<Sequence> c_upper_bound(
-    Sequence& sequence, T&& value, Compare&& comp) {
+    Sequence& sequence, T&& value, LessThan&& comp) {
   return std::upper_bound(container_algorithm_internal::c_begin(sequence),
                           container_algorithm_internal::c_end(sequence),
-                          std::forward<T>(value), std::forward<Compare>(comp));
+                          std::forward<T>(value), std::forward<LessThan>(comp));
 }
 
 // c_equal_range()
@@ -1118,12 +1118,12 @@
 
 // Overload of c_equal_range() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename Sequence, typename T, typename Compare>
+template <typename Sequence, typename T, typename LessThan>
 container_algorithm_internal::ContainerIterPairType<Sequence, Sequence>
-c_equal_range(Sequence& sequence, T&& value, Compare&& comp) {
+c_equal_range(Sequence& sequence, T&& value, LessThan&& comp) {
   return std::equal_range(container_algorithm_internal::c_begin(sequence),
                           container_algorithm_internal::c_end(sequence),
-                          std::forward<T>(value), std::forward<Compare>(comp));
+                          std::forward<T>(value), std::forward<LessThan>(comp));
 }
 
 // c_binary_search()
@@ -1140,12 +1140,12 @@
 
 // Overload of c_binary_search() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename Sequence, typename T, typename Compare>
-bool c_binary_search(Sequence&& sequence, T&& value, Compare&& comp) {
+template <typename Sequence, typename T, typename LessThan>
+bool c_binary_search(Sequence&& sequence, T&& value, LessThan&& comp) {
   return std::binary_search(container_algorithm_internal::c_begin(sequence),
                             container_algorithm_internal::c_end(sequence),
                             std::forward<T>(value),
-                            std::forward<Compare>(comp));
+                            std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
@@ -1166,14 +1166,14 @@
 
 // Overload of c_merge() for performing a `comp` comparison other than
 // the default `operator<`.
-template <typename C1, typename C2, typename OutputIterator, typename Compare>
+template <typename C1, typename C2, typename OutputIterator, typename LessThan>
 OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result,
-                       Compare&& comp) {
+                       LessThan&& comp) {
   return std::merge(container_algorithm_internal::c_begin(c1),
                     container_algorithm_internal::c_end(c1),
                     container_algorithm_internal::c_begin(c2),
                     container_algorithm_internal::c_end(c2), result,
-                    std::forward<Compare>(comp));
+                    std::forward<LessThan>(comp));
 }
 
 // c_inplace_merge()
@@ -1189,13 +1189,13 @@
 
 // Overload of c_inplace_merge() for performing a merge using a `comp` other
 // than `operator<`.
-template <typename C, typename Compare>
+template <typename C, typename LessThan>
 void c_inplace_merge(C& c,
                      container_algorithm_internal::ContainerIter<C> middle,
-                     Compare&& comp) {
+                     LessThan&& comp) {
   std::inplace_merge(container_algorithm_internal::c_begin(c), middle,
                      container_algorithm_internal::c_end(c),
-                     std::forward<Compare>(comp));
+                     std::forward<LessThan>(comp));
 }
 
 // c_includes()
@@ -1213,13 +1213,13 @@
 
 // Overload of c_includes() for performing a merge using a `comp` other than
 // `operator<`.
-template <typename C1, typename C2, typename Compare>
-bool c_includes(const C1& c1, const C2& c2, Compare&& comp) {
+template <typename C1, typename C2, typename LessThan>
+bool c_includes(const C1& c1, const C2& c2, LessThan&& comp) {
   return std::includes(container_algorithm_internal::c_begin(c1),
                        container_algorithm_internal::c_end(c1),
                        container_algorithm_internal::c_begin(c2),
                        container_algorithm_internal::c_end(c2),
-                       std::forward<Compare>(comp));
+                       std::forward<LessThan>(comp));
 }
 
 // c_set_union()
@@ -1243,7 +1243,7 @@
 
 // Overload of c_set_union() for performing a merge using a `comp` other than
 // `operator<`.
-template <typename C1, typename C2, typename OutputIterator, typename Compare,
+template <typename C1, typename C2, typename OutputIterator, typename LessThan,
           typename = typename std::enable_if<
               !container_algorithm_internal::IsUnorderedContainer<C1>::value,
               void>::type,
@@ -1251,12 +1251,12 @@
               !container_algorithm_internal::IsUnorderedContainer<C2>::value,
               void>::type>
 OutputIterator c_set_union(const C1& c1, const C2& c2, OutputIterator output,
-                           Compare&& comp) {
+                           LessThan&& comp) {
   return std::set_union(container_algorithm_internal::c_begin(c1),
                         container_algorithm_internal::c_end(c1),
                         container_algorithm_internal::c_begin(c2),
                         container_algorithm_internal::c_end(c2), output,
-                        std::forward<Compare>(comp));
+                        std::forward<LessThan>(comp));
 }
 
 // c_set_intersection()
@@ -1280,7 +1280,7 @@
 
 // Overload of c_set_intersection() for performing a merge using a `comp` other
 // than `operator<`.
-template <typename C1, typename C2, typename OutputIterator, typename Compare,
+template <typename C1, typename C2, typename OutputIterator, typename LessThan,
           typename = typename std::enable_if<
               !container_algorithm_internal::IsUnorderedContainer<C1>::value,
               void>::type,
@@ -1288,12 +1288,12 @@
               !container_algorithm_internal::IsUnorderedContainer<C2>::value,
               void>::type>
 OutputIterator c_set_intersection(const C1& c1, const C2& c2,
-                                  OutputIterator output, Compare&& comp) {
+                                  OutputIterator output, LessThan&& comp) {
   return std::set_intersection(container_algorithm_internal::c_begin(c1),
                                container_algorithm_internal::c_end(c1),
                                container_algorithm_internal::c_begin(c2),
                                container_algorithm_internal::c_end(c2), output,
-                               std::forward<Compare>(comp));
+                               std::forward<LessThan>(comp));
 }
 
 // c_set_difference()
@@ -1318,7 +1318,7 @@
 
 // Overload of c_set_difference() for performing a merge using a `comp` other
 // than `operator<`.
-template <typename C1, typename C2, typename OutputIterator, typename Compare,
+template <typename C1, typename C2, typename OutputIterator, typename LessThan,
           typename = typename std::enable_if<
               !container_algorithm_internal::IsUnorderedContainer<C1>::value,
               void>::type,
@@ -1326,12 +1326,12 @@
               !container_algorithm_internal::IsUnorderedContainer<C2>::value,
               void>::type>
 OutputIterator c_set_difference(const C1& c1, const C2& c2,
-                                OutputIterator output, Compare&& comp) {
+                                OutputIterator output, LessThan&& comp) {
   return std::set_difference(container_algorithm_internal::c_begin(c1),
                              container_algorithm_internal::c_end(c1),
                              container_algorithm_internal::c_begin(c2),
                              container_algorithm_internal::c_end(c2), output,
-                             std::forward<Compare>(comp));
+                             std::forward<LessThan>(comp));
 }
 
 // c_set_symmetric_difference()
@@ -1357,7 +1357,7 @@
 
 // Overload of c_set_symmetric_difference() for performing a merge using a
 // `comp` other than `operator<`.
-template <typename C1, typename C2, typename OutputIterator, typename Compare,
+template <typename C1, typename C2, typename OutputIterator, typename LessThan,
           typename = typename std::enable_if<
               !container_algorithm_internal::IsUnorderedContainer<C1>::value,
               void>::type,
@@ -1366,13 +1366,13 @@
               void>::type>
 OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2,
                                           OutputIterator output,
-                                          Compare&& comp) {
+                                          LessThan&& comp) {
   return std::set_symmetric_difference(
       container_algorithm_internal::c_begin(c1),
       container_algorithm_internal::c_end(c1),
       container_algorithm_internal::c_begin(c2),
       container_algorithm_internal::c_end(c2), output,
-      std::forward<Compare>(comp));
+      std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
@@ -1391,11 +1391,11 @@
 
 // Overload of c_push_heap() for performing a push operation on a heap using a
 // `comp` other than `operator<`.
-template <typename RandomAccessContainer, typename Compare>
-void c_push_heap(RandomAccessContainer& sequence, Compare&& comp) {
+template <typename RandomAccessContainer, typename LessThan>
+void c_push_heap(RandomAccessContainer& sequence, LessThan&& comp) {
   std::push_heap(container_algorithm_internal::c_begin(sequence),
                  container_algorithm_internal::c_end(sequence),
-                 std::forward<Compare>(comp));
+                 std::forward<LessThan>(comp));
 }
 
 // c_pop_heap()
@@ -1410,11 +1410,11 @@
 
 // Overload of c_pop_heap() for performing a pop operation on a heap using a
 // `comp` other than `operator<`.
-template <typename RandomAccessContainer, typename Compare>
-void c_pop_heap(RandomAccessContainer& sequence, Compare&& comp) {
+template <typename RandomAccessContainer, typename LessThan>
+void c_pop_heap(RandomAccessContainer& sequence, LessThan&& comp) {
   std::pop_heap(container_algorithm_internal::c_begin(sequence),
                 container_algorithm_internal::c_end(sequence),
-                std::forward<Compare>(comp));
+                std::forward<LessThan>(comp));
 }
 
 // c_make_heap()
@@ -1429,11 +1429,11 @@
 
 // Overload of c_make_heap() for performing heap comparisons using a
 // `comp` other than `operator<`
-template <typename RandomAccessContainer, typename Compare>
-void c_make_heap(RandomAccessContainer& sequence, Compare&& comp) {
+template <typename RandomAccessContainer, typename LessThan>
+void c_make_heap(RandomAccessContainer& sequence, LessThan&& comp) {
   std::make_heap(container_algorithm_internal::c_begin(sequence),
                  container_algorithm_internal::c_end(sequence),
-                 std::forward<Compare>(comp));
+                 std::forward<LessThan>(comp));
 }
 
 // c_sort_heap()
@@ -1448,11 +1448,11 @@
 
 // Overload of c_sort_heap() for performing heap comparisons using a
 // `comp` other than `operator<`
-template <typename RandomAccessContainer, typename Compare>
-void c_sort_heap(RandomAccessContainer& sequence, Compare&& comp) {
+template <typename RandomAccessContainer, typename LessThan>
+void c_sort_heap(RandomAccessContainer& sequence, LessThan&& comp) {
   std::sort_heap(container_algorithm_internal::c_begin(sequence),
                  container_algorithm_internal::c_end(sequence),
-                 std::forward<Compare>(comp));
+                 std::forward<LessThan>(comp));
 }
 
 // c_is_heap()
@@ -1467,11 +1467,11 @@
 
 // Overload of c_is_heap() for performing heap comparisons using a
 // `comp` other than `operator<`
-template <typename RandomAccessContainer, typename Compare>
-bool c_is_heap(const RandomAccessContainer& sequence, Compare&& comp) {
+template <typename RandomAccessContainer, typename LessThan>
+bool c_is_heap(const RandomAccessContainer& sequence, LessThan&& comp) {
   return std::is_heap(container_algorithm_internal::c_begin(sequence),
                       container_algorithm_internal::c_end(sequence),
-                      std::forward<Compare>(comp));
+                      std::forward<LessThan>(comp));
 }
 
 // c_is_heap_until()
@@ -1487,12 +1487,12 @@
 
 // Overload of c_is_heap_until() for performing heap comparisons using a
 // `comp` other than `operator<`
-template <typename RandomAccessContainer, typename Compare>
+template <typename RandomAccessContainer, typename LessThan>
 container_algorithm_internal::ContainerIter<RandomAccessContainer>
-c_is_heap_until(RandomAccessContainer& sequence, Compare&& comp) {
+c_is_heap_until(RandomAccessContainer& sequence, LessThan&& comp) {
   return std::is_heap_until(container_algorithm_internal::c_begin(sequence),
                             container_algorithm_internal::c_end(sequence),
-                            std::forward<Compare>(comp));
+                            std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
@@ -1513,12 +1513,12 @@
 
 // Overload of c_min_element() for performing a `comp` comparison other than
 // `operator<`.
-template <typename Sequence, typename Compare>
+template <typename Sequence, typename LessThan>
 container_algorithm_internal::ContainerIter<Sequence> c_min_element(
-    Sequence& sequence, Compare&& comp) {
+    Sequence& sequence, LessThan&& comp) {
   return std::min_element(container_algorithm_internal::c_begin(sequence),
                           container_algorithm_internal::c_end(sequence),
-                          std::forward<Compare>(comp));
+                          std::forward<LessThan>(comp));
 }
 
 // c_max_element()
@@ -1535,12 +1535,12 @@
 
 // Overload of c_max_element() for performing a `comp` comparison other than
 // `operator<`.
-template <typename Sequence, typename Compare>
+template <typename Sequence, typename LessThan>
 container_algorithm_internal::ContainerIter<Sequence> c_max_element(
-    Sequence& sequence, Compare&& comp) {
+    Sequence& sequence, LessThan&& comp) {
   return std::max_element(container_algorithm_internal::c_begin(sequence),
                           container_algorithm_internal::c_end(sequence),
-                          std::forward<Compare>(comp));
+                          std::forward<LessThan>(comp));
 }
 
 // c_minmax_element()
@@ -1558,12 +1558,12 @@
 
 // Overload of c_minmax_element() for performing `comp` comparisons other than
 // `operator<`.
-template <typename C, typename Compare>
+template <typename C, typename LessThan>
 container_algorithm_internal::ContainerIterPairType<C, C>
-c_minmax_element(C& c, Compare&& comp) {
+c_minmax_element(C& c, LessThan&& comp) {
   return std::minmax_element(container_algorithm_internal::c_begin(c),
                              container_algorithm_internal::c_end(c),
-                             std::forward<Compare>(comp));
+                             std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
@@ -1588,15 +1588,15 @@
 
 // Overload of c_lexicographical_compare() for performing a lexicographical
 // comparison using a `comp` operator instead of `operator<`.
-template <typename Sequence1, typename Sequence2, typename Compare>
+template <typename Sequence1, typename Sequence2, typename LessThan>
 bool c_lexicographical_compare(Sequence1&& sequence1, Sequence2&& sequence2,
-                               Compare&& comp) {
+                               LessThan&& comp) {
   return std::lexicographical_compare(
       container_algorithm_internal::c_begin(sequence1),
       container_algorithm_internal::c_end(sequence1),
       container_algorithm_internal::c_begin(sequence2),
       container_algorithm_internal::c_end(sequence2),
-      std::forward<Compare>(comp));
+      std::forward<LessThan>(comp));
 }
 
 // c_next_permutation()
@@ -1612,11 +1612,11 @@
 
 // Overload of c_next_permutation() for performing a lexicographical
 // comparison using a `comp` operator instead of `operator<`.
-template <typename C, typename Compare>
-bool c_next_permutation(C& c, Compare&& comp) {
+template <typename C, typename LessThan>
+bool c_next_permutation(C& c, LessThan&& comp) {
   return std::next_permutation(container_algorithm_internal::c_begin(c),
                                container_algorithm_internal::c_end(c),
-                               std::forward<Compare>(comp));
+                               std::forward<LessThan>(comp));
 }
 
 // c_prev_permutation()
@@ -1632,11 +1632,11 @@
 
 // Overload of c_prev_permutation() for performing a lexicographical
 // comparison using a `comp` operator instead of `operator<`.
-template <typename C, typename Compare>
-bool c_prev_permutation(C& c, Compare&& comp) {
+template <typename C, typename LessThan>
+bool c_prev_permutation(C& c, LessThan&& comp) {
   return std::prev_permutation(container_algorithm_internal::c_begin(c),
                                container_algorithm_internal::c_end(c),
-                               std::forward<Compare>(comp));
+                               std::forward<LessThan>(comp));
 }
 
 //------------------------------------------------------------------------------
diff --git a/third_party/abseil-cpp/absl/base/attributes.h b/third_party/abseil-cpp/absl/base/attributes.h
index 294e5d0..d710f28 100644
--- a/third_party/abseil-cpp/absl/base/attributes.h
+++ b/third_party/abseil-cpp/absl/base/attributes.h
@@ -281,10 +281,7 @@
 // ABSL_ATTRIBUTE_RETURNS_NONNULL
 //
 // Tells the compiler that a particular function never returns a null pointer.
-#if ABSL_HAVE_ATTRIBUTE(returns_nonnull) || \
-    (defined(__GNUC__) && \
-     (__GNUC__ > 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) && \
-     !defined(__clang__))
+#if ABSL_HAVE_ATTRIBUTE(returns_nonnull)
 #define ABSL_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
 #else
 #define ABSL_ATTRIBUTE_RETURNS_NONNULL
@@ -622,7 +619,7 @@
 #if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
 #define ABSL_FALLTHROUGH_INTENDED [[clang::fallthrough]]
 #endif
-#elif defined(__GNUC__) && __GNUC__ >= 7
+#elif ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(7, 0)
 #define ABSL_FALLTHROUGH_INTENDED [[gnu::fallthrough]]
 #endif
 
diff --git a/third_party/abseil-cpp/absl/base/config.h b/third_party/abseil-cpp/absl/base/config.h
index 7abc75a..0524196 100644
--- a/third_party/abseil-cpp/absl/base/config.h
+++ b/third_party/abseil-cpp/absl/base/config.h
@@ -166,6 +166,22 @@
 #define ABSL_HAVE_FEATURE(f) 0
 #endif
 
+// Portable check for GCC minimum version:
+// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(x, y) \
+  (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y))
+#else
+#define ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(x, y) 0
+#endif
+
+#if defined(__clang__) && defined(__clang_major__) && defined(__clang_minor__)
+#define ABSL_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) \
+  (__clang_major__ > (x) || __clang_major__ == (x) && __clang_minor__ >= (y))
+#else
+#define ABSL_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) 0
+#endif
+
 // ABSL_HAVE_TLS is defined to 1 when __thread should be supported.
 // We assume __thread is supported on Linux when compiled with Clang or compiled
 // against libstdc++ with _GLIBCXX_HAVE_TLS defined.
@@ -183,10 +199,9 @@
 // gcc >= 4.8.1 using libstdc++, and Visual Studio.
 #ifdef ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE
 #error ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE cannot be directly set
-#elif defined(_LIBCPP_VERSION) ||                                        \
-    (!defined(__clang__) && defined(__GNUC__) && defined(__GLIBCXX__) && \
-     (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) ||        \
-    defined(_MSC_VER)
+#elif defined(_LIBCPP_VERSION) || defined(_MSC_VER) || \
+    (!defined(__clang__) && defined(__GLIBCXX__) &&    \
+     ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(4, 8))
 #define ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE 1
 #endif
 
@@ -205,10 +220,9 @@
 #error ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE cannot be directly set
 #elif defined(ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE)
 #error ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE cannot directly set
-#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) ||        \
-    (!defined(__clang__) && defined(__GNUC__) &&                 \
-     (__GNUC__ > 7 || (__GNUC__ == 7 && __GNUC_MINOR__ >= 4)) && \
-     (defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) ||      \
+#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) ||                \
+    (!defined(__clang__) && ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(7, 4) && \
+     (defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) ||              \
     (defined(_MSC_VER) && !defined(__NVCC__))
 #define ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE 1
 #define ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1
@@ -222,7 +236,7 @@
 #if ABSL_INTERNAL_HAS_KEYWORD(__builtin_LINE) && \
     ABSL_INTERNAL_HAS_KEYWORD(__builtin_FILE)
 #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
-#elif defined(__GNUC__) && __GNUC__ >= 5
+#elif ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 0)
 #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
 #endif
 #endif
@@ -319,25 +333,21 @@
 // For further details, consult the compiler's documentation.
 #ifdef ABSL_HAVE_EXCEPTIONS
 #error ABSL_HAVE_EXCEPTIONS cannot be directly set.
-
-#elif defined(__clang__)
-
-#if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6)
+#elif ABSL_INTERNAL_HAVE_MIN_CLANG_VERSION(3, 6)
 // Clang >= 3.6
 #if ABSL_HAVE_FEATURE(cxx_exceptions)
 #define ABSL_HAVE_EXCEPTIONS 1
 #endif  // ABSL_HAVE_FEATURE(cxx_exceptions)
-#else
+#elif defined(__clang__)
 // Clang < 3.6
 // http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro
 #if defined(__EXCEPTIONS) && ABSL_HAVE_FEATURE(cxx_exceptions)
 #define ABSL_HAVE_EXCEPTIONS 1
 #endif  // defined(__EXCEPTIONS) && ABSL_HAVE_FEATURE(cxx_exceptions)
-#endif  // __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6)
-
 // Handle remaining special cases and default to exceptions being supported.
-#elif !(defined(__GNUC__) && (__GNUC__ < 5) && !defined(__EXCEPTIONS)) &&    \
-    !(defined(__GNUC__) && (__GNUC__ >= 5) && !defined(__cpp_exceptions)) && \
+#elif !(defined(__GNUC__) && (__GNUC__ < 5) && !defined(__EXCEPTIONS)) && \
+    !(ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 0) &&                        \
+      !defined(__cpp_exceptions)) &&                                      \
     !(defined(_MSC_VER) && !defined(_CPPUNWIND))
 #define ABSL_HAVE_EXCEPTIONS 1
 #endif
diff --git a/third_party/abseil-cpp/absl/base/dynamic_annotations.h b/third_party/abseil-cpp/absl/base/dynamic_annotations.h
index bf874db9..065bd5b 100644
--- a/third_party/abseil-cpp/absl/base/dynamic_annotations.h
+++ b/third_party/abseil-cpp/absl/base/dynamic_annotations.h
@@ -468,7 +468,7 @@
   __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid)
 #define ABSL_ADDRESS_SANITIZER_REDZONE(name) \
   struct {                                   \
-    char x[8] __attribute__((aligned(8)));   \
+    alignas(8) char x[8];                    \
   } name
 
 #else
diff --git a/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h b/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h
index 6869fe4..f1f555a5 100644
--- a/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h
+++ b/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h
@@ -21,11 +21,13 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <cassert>
 #include <iosfwd>
 #include <random>
 #include <tuple>
 #include <type_traits>
 #include <utility>
+#include <vector>
 
 #include "absl/container/internal/hash_policy_testing.h"
 #include "absl/memory/memory.h"
@@ -153,6 +155,25 @@
                                   typename Container::value_type,
                                   typename Container::key_type>::type>&>()());
 
+// Naive wrapper that performs a linear search of previous values.
+// Beware this is O(SQR), which is reasonable for smaller kMaxValues.
+template <class T, size_t kMaxValues = 64, class E = void>
+struct UniqueGenerator {
+  Generator<T, E> gen;
+  std::vector<T> values;
+
+  T operator()() {
+    assert(values.size() < kMaxValues);
+    for (;;) {
+      T value = gen();
+      if (std::find(values.begin(), values.end(), value) == values.end()) {
+        values.push_back(value);
+        return value;
+      }
+    }
+  }
+};
+
 }  // namespace hash_internal
 }  // namespace container_internal
 ABSL_NAMESPACE_END
diff --git a/third_party/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h b/third_party/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h
index 3f90ad7..c1d20f3c 100644
--- a/third_party/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h
+++ b/third_party/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h
@@ -179,7 +179,7 @@
   A alloc(0);
   std::vector<T> values;
   std::generate_n(std::back_inserter(values), 10,
-                  hash_internal::Generator<T>());
+                  hash_internal::UniqueGenerator<T>());
   TypeParam m(values.begin(), values.end(), 123, hasher, equal, alloc);
   EXPECT_EQ(m.hash_function(), hasher);
   EXPECT_EQ(m.key_eq(), equal);
@@ -198,7 +198,7 @@
   A alloc(0);
   std::vector<T> values;
   std::generate_n(std::back_inserter(values), 10,
-                  hash_internal::Generator<T>());
+                  hash_internal::UniqueGenerator<T>());
   TypeParam m(values.begin(), values.end(), 123, alloc);
   EXPECT_EQ(m.get_allocator(), alloc);
   EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values));
@@ -221,7 +221,7 @@
   A alloc(0);
   std::vector<T> values;
   std::generate_n(std::back_inserter(values), 10,
-                  hash_internal::Generator<T>());
+                  hash_internal::UniqueGenerator<T>());
   TypeParam m(values.begin(), values.end(), 123, hasher, alloc);
   EXPECT_EQ(m.hash_function(), hasher);
   EXPECT_EQ(m.get_allocator(), alloc);
@@ -241,8 +241,9 @@
   H hasher;
   E equal;
   A alloc(0);
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m(123, hasher, equal, alloc);
-  for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator<T>()());
+  for (size_t i = 0; i != 10; ++i) m.insert(gen());
   TypeParam n(m);
   EXPECT_EQ(m.hash_function(), n.hash_function());
   EXPECT_EQ(m.key_eq(), n.key_eq());
@@ -262,8 +263,9 @@
   H hasher;
   E equal;
   A alloc(0);
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m(123, hasher, equal, alloc);
-  for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator<T>()());
+  for (size_t i = 0; i != 10; ++i) m.insert(gen());
   TypeParam n(m, A(11));
   EXPECT_EQ(m.hash_function(), n.hash_function());
   EXPECT_EQ(m.key_eq(), n.key_eq());
@@ -285,8 +287,9 @@
   H hasher;
   E equal;
   A alloc(0);
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m(123, hasher, equal, alloc);
-  for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator<T>()());
+  for (size_t i = 0; i != 10; ++i) m.insert(gen());
   TypeParam t(m);
   TypeParam n(std::move(t));
   EXPECT_EQ(m.hash_function(), n.hash_function());
@@ -307,8 +310,9 @@
   H hasher;
   E equal;
   A alloc(0);
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m(123, hasher, equal, alloc);
-  for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator<T>()());
+  for (size_t i = 0; i != 10; ++i) m.insert(gen());
   TypeParam t(m);
   TypeParam n(std::move(t), A(1));
   EXPECT_EQ(m.hash_function(), n.hash_function());
@@ -325,7 +329,7 @@
 
 TYPED_TEST_P(ConstructorTest, InitializerListBucketHashEqualAlloc) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   using H = typename TypeParam::hasher;
   using E = typename TypeParam::key_equal;
@@ -348,7 +352,7 @@
 void InitializerListBucketAllocTest(std::true_type) {
   using T = hash_internal::GeneratedType<TypeParam>;
   using A = typename TypeParam::allocator_type;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   A alloc(0);
   TypeParam m(values, 123, alloc);
@@ -371,7 +375,7 @@
   using A = typename TypeParam::allocator_type;
   H hasher;
   A alloc(0);
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   TypeParam m(values, 123, hasher, alloc);
   EXPECT_EQ(m.hash_function(), hasher);
@@ -392,7 +396,7 @@
   H hasher;
   E equal;
   A alloc(0);
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc);
   TypeParam n;
   n = m;
@@ -412,7 +416,7 @@
   H hasher;
   E equal;
   A alloc(0);
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc);
   TypeParam t(m);
   TypeParam n;
@@ -424,7 +428,7 @@
 
 TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerList) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   TypeParam m;
   m = values;
@@ -433,7 +437,7 @@
 
 TYPED_TEST_P(ConstructorTest, AssignmentOverwritesExisting) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m({gen(), gen(), gen()});
   TypeParam n({gen()});
   n = m;
@@ -442,7 +446,7 @@
 
 TYPED_TEST_P(ConstructorTest, MoveAssignmentOverwritesExisting) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   TypeParam m({gen(), gen(), gen()});
   TypeParam t(m);
   TypeParam n({gen()});
@@ -452,7 +456,7 @@
 
 TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerListOverwritesExisting) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   TypeParam m;
   m = values;
@@ -461,7 +465,7 @@
 
 TYPED_TEST_P(ConstructorTest, AssignmentOnSelf) {
   using T = hash_internal::GeneratedType<TypeParam>;
-  hash_internal::Generator<T> gen;
+  hash_internal::UniqueGenerator<T> gen;
   std::initializer_list<T> values = {gen(), gen(), gen(), gen(), gen()};
   TypeParam m(values);
   m = *&m;  // Avoid -Wself-assign
diff --git a/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake b/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
index 51742c9b..18a1e5c3 100644
--- a/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
+++ b/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
@@ -71,6 +71,7 @@
     "-Wformat-security"
     "-Wgnu-redeclared-enum"
     "-Winfinite-recursion"
+    "-Winvalid-constexpr"
     "-Wliteral-conversion"
     "-Wmissing-declarations"
     "-Woverlength-strings"
diff --git a/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl b/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
index 6707488f..d2bd560 100644
--- a/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
+++ b/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
@@ -72,6 +72,7 @@
     "-Wformat-security",
     "-Wgnu-redeclared-enum",
     "-Winfinite-recursion",
+    "-Winvalid-constexpr",
     "-Wliteral-conversion",
     "-Wmissing-declarations",
     "-Woverlength-strings",
diff --git a/third_party/abseil-cpp/absl/copts/copts.py b/third_party/abseil-cpp/absl/copts/copts.py
index cf52981..ce30df8 100644
--- a/third_party/abseil-cpp/absl/copts/copts.py
+++ b/third_party/abseil-cpp/absl/copts/copts.py
@@ -87,6 +87,7 @@
         "-Wformat-security",
         "-Wgnu-redeclared-enum",
         "-Winfinite-recursion",
+        "-Winvalid-constexpr",
         "-Wliteral-conversion",
         "-Wmissing-declarations",
         "-Woverlength-strings",
diff --git a/third_party/abseil-cpp/absl/copts/generate_copts.py b/third_party/abseil-cpp/absl/copts/generate_copts.py
index 0e5dc9fa..34be2fc2 100755
--- a/third_party/abseil-cpp/absl/copts/generate_copts.py
+++ b/third_party/abseil-cpp/absl/copts/generate_copts.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
 """Generate Abseil compile compile option configs.
 
 Usage: <path_to_absl>/copts/generate_copts.py
diff --git a/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc b/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc
index f4d5727b..87dbd078 100644
--- a/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc
+++ b/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc
@@ -701,6 +701,16 @@
       const char *start_address =
           ComputeOffset(original_start_address, relocation);
 
+#ifdef __arm__
+      // ARM functions are always aligned to multiples of two bytes; the
+      // lowest-order bit in start_address is ignored by the CPU and indicates
+      // whether the function contains ARM (0) or Thumb (1) code. We don't care
+      // about what encoding is being used; we just want the real start address
+      // of the function.
+      start_address = reinterpret_cast<const char *>(
+          reinterpret_cast<uintptr_t>(start_address) & ~1);
+#endif
+
       if (deref_function_descriptor_pointer &&
           InSection(original_start_address, opd)) {
         // The opd section is mapped into memory.  Just dereference
diff --git a/third_party/abseil-cpp/absl/debugging/symbolize_test.cc b/third_party/abseil-cpp/absl/debugging/symbolize_test.cc
index a2dd495..35de02e 100644
--- a/third_party/abseil-cpp/absl/debugging/symbolize_test.cc
+++ b/third_party/abseil-cpp/absl/debugging/symbolize_test.cc
@@ -477,6 +477,46 @@
 #endif
 }
 
+#if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
+// Test that we correctly identify bounds of Thumb functions on ARM.
+//
+// Thumb functions have the lowest-order bit set in their addresses in the ELF
+// symbol table. This requires some extra logic to properly compute function
+// bounds. To test this logic, nudge a Thumb function right up against an ARM
+// function and try to symbolize the ARM function.
+//
+// A naive implementation will simply use the Thumb function's entry point as
+// written in the symbol table and will therefore treat the Thumb function as
+// extending one byte further in the instruction stream than it actually does.
+// When asked to symbolize the start of the ARM function, it will identify an
+// overlap between the Thumb and ARM functions, and it will return the name of
+// the Thumb function.
+//
+// A correct implementation, on the other hand, will null out the lowest-order
+// bit in the Thumb function's entry point. It will correctly compute the end of
+// the Thumb function, it will find no overlap between the Thumb and ARM
+// functions, and it will return the name of the ARM function.
+
+__attribute__((target("thumb"))) int ArmThumbOverlapThumb(int x) {
+  return x * x * x;
+}
+
+__attribute__((target("arm"))) int ArmThumbOverlapArm(int x) {
+  return x * x * x;
+}
+
+void ABSL_ATTRIBUTE_NOINLINE TestArmThumbOverlap() {
+#if defined(ABSL_HAVE_ATTRIBUTE_NOINLINE)
+  const char *symbol = TrySymbolize((void *)&ArmThumbOverlapArm);
+  ABSL_RAW_CHECK(symbol != nullptr, "TestArmThumbOverlap failed");
+  ABSL_RAW_CHECK(strcmp("ArmThumbOverlapArm()", symbol) == 0,
+                 "TestArmThumbOverlap failed");
+  std::cout << "TestArmThumbOverlap passed" << std::endl;
+#endif
+}
+
+#endif  // defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
+
 #elif defined(_WIN32)
 #if !defined(ABSL_CONSUME_DLL)
 
@@ -551,6 +591,9 @@
   TestWithPCInsideInlineFunction();
   TestWithPCInsideNonInlineFunction();
   TestWithReturnAddress();
+#if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
+  TestArmThumbOverlap();
+#endif
 #endif
 
   return RUN_ALL_TESTS();
diff --git a/third_party/abseil-cpp/absl/numeric/int128.h b/third_party/abseil-cpp/absl/numeric/int128.h
index 0dd814a..235361a 100644
--- a/third_party/abseil-cpp/absl/numeric/int128.h
+++ b/third_party/abseil-cpp/absl/numeric/int128.h
@@ -817,27 +817,27 @@
   return MakeUint128(hi, lo);
 }
 
-inline bool operator!(uint128 val) {
+constexpr inline bool operator!(uint128 val) {
   return !Uint128High64(val) && !Uint128Low64(val);
 }
 
 // Logical operators.
 
-inline uint128 operator~(uint128 val) {
+constexpr inline uint128 operator~(uint128 val) {
   return MakeUint128(~Uint128High64(val), ~Uint128Low64(val));
 }
 
-inline uint128 operator|(uint128 lhs, uint128 rhs) {
+constexpr inline uint128 operator|(uint128 lhs, uint128 rhs) {
   return MakeUint128(Uint128High64(lhs) | Uint128High64(rhs),
                            Uint128Low64(lhs) | Uint128Low64(rhs));
 }
 
-inline uint128 operator&(uint128 lhs, uint128 rhs) {
+constexpr inline uint128 operator&(uint128 lhs, uint128 rhs) {
   return MakeUint128(Uint128High64(lhs) & Uint128High64(rhs),
                            Uint128Low64(lhs) & Uint128Low64(rhs));
 }
 
-inline uint128 operator^(uint128 lhs, uint128 rhs) {
+constexpr inline uint128 operator^(uint128 lhs, uint128 rhs) {
   return MakeUint128(Uint128High64(lhs) ^ Uint128High64(rhs),
                            Uint128Low64(lhs) ^ Uint128Low64(rhs));
 }
diff --git a/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc b/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc
index 5bee530..725100a4 100644
--- a/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc
+++ b/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc
@@ -194,11 +194,10 @@
   // Not all the platforms that we build for have std::aligned_alloc, however
   // since we never free these objects, we can over allocate and munge the
   // pointers to the correct alignment.
-  void* memory = std::malloc(sizeof(RandenPoolEntry) + kAlignment);
-  auto x = reinterpret_cast<intptr_t>(memory);
+  intptr_t x = reinterpret_cast<intptr_t>(
+      new char[sizeof(RandenPoolEntry) + kAlignment]);
   auto y = x % kAlignment;
-  void* aligned =
-      (y == 0) ? memory : reinterpret_cast<void*>(x + kAlignment - y);
+  void* aligned = reinterpret_cast<void*>(y == 0 ? x : (x + kAlignment - y));
   return new (aligned) RandenPoolEntry();
 }
 
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.bazel b/third_party/abseil-cpp/absl/strings/BUILD.bazel
index 123b5ef..68c71f0 100644
--- a/third_party/abseil-cpp/absl/strings/BUILD.bazel
+++ b/third_party/abseil-cpp/absl/strings/BUILD.bazel
@@ -297,6 +297,26 @@
 )
 
 cc_library(
+    name = "cordz_update_tracker",
+    hdrs = ["internal/cordz_update_tracker.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    visibility = ["//visibility:private"],
+    deps = ["//absl/base:config"],
+)
+
+cc_test(
+    name = "cordz_update_tracker_test",
+    srcs = ["internal/cordz_update_tracker_test.cc"],
+    deps = [
+        ":cordz_update_tracker",
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "//absl/synchronization",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_library(
     name = "cord",
     srcs = [
         "cord.cc",
@@ -307,10 +327,16 @@
     copts = ABSL_DEFAULT_COPTS,
     deps = [
         ":cord_internal",
+        ":cordz_functions",
+        ":cordz_info",
+        ":cordz_statistics",
+        ":cordz_update_scope",
+        ":cordz_update_tracker",
         ":internal",
         ":str_format",
         ":strings",
         "//absl/base",
+        "//absl/base:config",
         "//absl/base:core_headers",
         "//absl/base:endian",
         "//absl/base:raw_logging_internal",
@@ -323,6 +349,176 @@
 )
 
 cc_library(
+    name = "cordz_handle",
+    srcs = ["internal/cordz_handle.cc"],
+    hdrs = ["internal/cordz_handle.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        "//absl/base",
+        "//absl/base:config",
+        "//absl/base:raw_logging_internal",
+        "//absl/synchronization",
+    ],
+)
+
+cc_library(
+    name = "cordz_info",
+    srcs = ["internal/cordz_info.cc"],
+    hdrs = ["internal/cordz_info.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cord_internal",
+        ":cordz_functions",
+        ":cordz_handle",
+        ":cordz_statistics",
+        ":cordz_update_tracker",
+        "//absl/base",
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "//absl/base:raw_logging_internal",
+        "//absl/debugging:stacktrace",
+        "//absl/synchronization",
+        "//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "cordz_update_scope",
+    hdrs = ["internal/cordz_update_scope.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cord_internal",
+        ":cordz_info",
+        ":cordz_update_tracker",
+        "//absl/base:config",
+        "//absl/base:core_headers",
+    ],
+)
+
+cc_test(
+    name = "cordz_update_scope_test",
+    srcs = ["internal/cordz_update_scope_test.cc"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cord_internal",
+        ":cordz_info",
+        ":cordz_test_helpers",
+        ":cordz_update_scope",
+        ":cordz_update_tracker",
+        "//absl/base:config",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "cordz_sample_token",
+    srcs = ["internal/cordz_sample_token.cc"],
+    hdrs = ["internal/cordz_sample_token.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cordz_handle",
+        ":cordz_info",
+        "//absl/base:config",
+    ],
+)
+
+cc_library(
+    name = "cordz_functions",
+    srcs = ["internal/cordz_functions.cc"],
+    hdrs = ["internal/cordz_functions.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "//absl/base:exponential_biased",
+        "//absl/base:raw_logging_internal",
+    ],
+)
+
+cc_library(
+    name = "cordz_statistics",
+    hdrs = ["internal/cordz_statistics.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cordz_update_tracker",
+        "//absl/base:config",
+    ],
+)
+
+cc_test(
+    name = "cordz_functions_test",
+    srcs = [
+        "internal/cordz_functions_test.cc",
+    ],
+    deps = [
+        ":cordz_functions",
+        ":cordz_test_helpers",
+        "//absl/base:config",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_test(
+    name = "cordz_handle_test",
+    srcs = [
+        "internal/cordz_handle_test.cc",
+    ],
+    deps = [
+        ":cordz_handle",
+        "//absl/base:config",
+        "//absl/memory",
+        "//absl/random",
+        "//absl/random:distributions",
+        "//absl/synchronization",
+        "//absl/synchronization:thread_pool",
+        "//absl/time",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_test(
+    name = "cordz_info_test",
+    srcs = [
+        "internal/cordz_info_test.cc",
+    ],
+    deps = [
+        ":cord_internal",
+        ":cordz_handle",
+        ":cordz_info",
+        ":cordz_statistics",
+        ":cordz_test_helpers",
+        ":cordz_update_tracker",
+        ":strings",
+        "//absl/base:config",
+        "//absl/debugging:stacktrace",
+        "//absl/debugging:symbolize",
+        "//absl/types:span",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_test(
+    name = "cordz_sample_token_test",
+    srcs = [
+        "internal/cordz_sample_token_test.cc",
+    ],
+    deps = [
+        ":cord_internal",
+        ":cordz_handle",
+        ":cordz_info",
+        ":cordz_sample_token",
+        ":cordz_test_helpers",
+        "//absl/base:config",
+        "//absl/memory",
+        "//absl/random",
+        "//absl/synchronization",
+        "//absl/synchronization:thread_pool",
+        "//absl/time",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_library(
     name = "cord_test_helpers",
     testonly = 1,
     hdrs = [
@@ -331,6 +527,26 @@
     copts = ABSL_DEFAULT_COPTS,
     deps = [
         ":cord",
+        ":cord_internal",
+        ":strings",
+    ],
+)
+
+cc_library(
+    name = "cordz_test_helpers",
+    testonly = 1,
+    hdrs = ["cordz_test_helpers.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    deps = [
+        ":cord",
+        ":cord_internal",
+        ":cordz_info",
+        ":cordz_sample_token",
+        ":cordz_statistics",
+        ":cordz_update_tracker",
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "@com_google_googletest//:gtest",
     ],
 )
 
@@ -343,6 +559,8 @@
     deps = [
         ":cord",
         ":cord_test_helpers",
+        ":cordz_functions",
+        ":cordz_test_helpers",
         ":str_format",
         ":strings",
         "//absl/base",
@@ -356,6 +574,39 @@
 )
 
 cc_test(
+    name = "cordz_test",
+    size = "medium",
+    srcs = ["cordz_test.cc"],
+    copts = ABSL_TEST_COPTS,
+    tags = [
+        "benchmark",
+        "no_test_android_arm",
+        "no_test_android_arm64",
+        "no_test_android_x86",
+        "no_test_darwin_x86_64",
+        "no_test_ios_x86_64",
+        "no_test_loonix",
+        "no_test_msvc_x64",
+    ],
+    visibility = ["//visibility:private"],
+    deps = [
+        ":cord",
+        ":cord_test_helpers",
+        ":cordz_functions",
+        ":cordz_info",
+        ":cordz_sample_token",
+        ":cordz_statistics",
+        ":cordz_test_helpers",
+        ":cordz_update_tracker",
+        ":strings",
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "//absl/base:raw_logging_internal",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+cc_test(
     name = "cord_ring_test",
     size = "medium",
     srcs = ["cord_ring_test.cc"],
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.gn b/third_party/abseil-cpp/absl/strings/BUILD.gn
index 404cc03..435f4a90 100644
--- a/third_party/abseil-cpp/absl/strings/BUILD.gn
+++ b/third_party/abseil-cpp/absl/strings/BUILD.gn
@@ -144,15 +144,40 @@
   ]
 }
 
+absl_source_set("cordz_update_tracker") {
+  public = ["internal/cordz_update_tracker.h"]
+  visibility = [ ":*" ]
+  deps = ["//third_party/abseil-cpp/absl/base:config"]
+}
+
+absl_source_set("cordz_update_tracker_test") {
+  testonly = true
+  sources = ["internal/cordz_update_tracker_test.cc"]
+  deps = [
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/synchronization",
+    "//third_party/googletest:gmock",
+    "//third_party/googletest:gtest",
+  ]
+}
+
 absl_source_set("cord") {
   sources = [ "cord.cc" ]
   public = [ "cord.h" ]
   deps = [
     ":cord_internal",
+    ":cordz_functions",
+    ":cordz_info",
+    ":cordz_statistics",
+    ":cordz_update_scope",
+    ":cordz_update_tracker",
     ":internal",
     ":str_format",
     ":strings",
     "//third_party/abseil-cpp/absl/base",
+    "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/base:core_headers",
     "//third_party/abseil-cpp/absl/base:endian",
     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
@@ -164,10 +189,207 @@
   ]
 }
 
+absl_source_set("cordz_handle") {
+  sources = ["internal/cordz_handle.cc"]
+  public = ["internal/cordz_handle.h"]
+  deps = [
+    "//third_party/abseil-cpp/absl/base",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
+    "//third_party/abseil-cpp/absl/synchronization",
+  ]
+}
+
+absl_source_set("cordz_info") {
+  sources = ["internal/cordz_info.cc"]
+  public = ["internal/cordz_info.h"]
+  deps = [
+    ":cord_internal",
+    ":cordz_functions",
+    ":cordz_handle",
+    ":cordz_statistics",
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
+    "//third_party/abseil-cpp/absl/debugging:stacktrace",
+    "//third_party/abseil-cpp/absl/synchronization",
+    "//third_party/abseil-cpp/absl/types:span",
+  ]
+}
+
+absl_source_set("cordz_update_scope") {
+  public = ["internal/cordz_update_scope.h"]
+  deps = [
+    ":cord_internal",
+    ":cordz_info",
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+  ]
+}
+
+absl_source_set("cordz_update_scope_test") {
+  testonly = true
+  sources = ["internal/cordz_update_scope_test.cc"]
+  deps = [
+    ":cord_internal",
+    ":cordz_info",
+    ":cordz_test_helpers",
+    ":cordz_update_scope",
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/googletest:gmock",
+    "//third_party/googletest:gtest",
+  ]
+}
+
+absl_source_set("cordz_sample_token") {
+  sources = ["internal/cordz_sample_token.cc"]
+  public = ["internal/cordz_sample_token.h"]
+  deps = [
+    ":cordz_handle",
+    ":cordz_info",
+    "//third_party/abseil-cpp/absl/base:config",
+  ]
+}
+
+absl_source_set("cordz_functions") {
+  sources = ["internal/cordz_functions.cc"]
+  public = ["internal/cordz_functions.h"]
+  deps = [
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/base:exponential_biased",
+    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
+  ]
+}
+
+absl_source_set("cordz_statistics") {
+  public = ["internal/cordz_statistics.h"]
+  deps = [
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base:config",
+  ]
+}
+
+absl_source_set("cordz_functions_test") {
+  testonly = true
+  sources = [ "internal/cordz_functions_test.cc" ]
+  deps = [
+    ":cordz_functions",
+    ":cordz_test_helpers",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/googletest:gmock",
+    "//third_party/googletest:gtest",
+  ]
+}
+
+# TODO(b/186638384): Re-enable when random is compilable on win32-archive-rel bot
+# absl_source_set("cordz_handle_test") {
+#   testonly = true
+#   sources = [ "internal/cordz_handle_test.cc" ]
+#   deps = [
+#     ":cordz_handle",
+#     "//third_party/abseil-cpp/absl/base:config",
+#     "//third_party/abseil-cpp/absl/memory",
+#     "//third_party/abseil-cpp/absl/random",
+#     "//third_party/abseil-cpp/absl/random:distributions",
+#     "//third_party/abseil-cpp/absl/synchronization",
+#     "//third_party/abseil-cpp/absl/synchronization:thread_pool",
+#     "//third_party/abseil-cpp/absl/time",
+#     "//third_party/googletest:gmock",
+#     "//third_party/googletest:gtest",
+#   ]
+# }
+
+absl_source_set("cordz_info_test") {
+  testonly = true
+  sources = [ "internal/cordz_info_test.cc" ]
+  deps = [
+    ":cord_internal",
+    ":cordz_handle",
+    ":cordz_info",
+    ":cordz_statistics",
+    ":cordz_test_helpers",
+    ":cordz_update_tracker",
+    ":strings",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/debugging:stacktrace",
+    "//third_party/abseil-cpp/absl/debugging:symbolize",
+    "//third_party/abseil-cpp/absl/types:span",
+    "//third_party/googletest:gmock",
+    "//third_party/googletest:gtest",
+  ]
+}
+
+# TODO(b/186638384): Re-enable when random is compilable on win32-archive-rel bot
+# absl_source_set("cordz_sample_token_test") {
+#   testonly = true
+#   sources = [ "internal/cordz_sample_token_test.cc" ]
+#   deps = [
+#     ":cord_internal",
+#     ":cordz_handle",
+#     ":cordz_info",
+#     ":cordz_sample_token",
+#     ":cordz_test_helpers",
+#     "//third_party/abseil-cpp/absl/base:config",
+#     "//third_party/abseil-cpp/absl/memory",
+#     "//third_party/abseil-cpp/absl/random",
+#     "//third_party/abseil-cpp/absl/synchronization",
+#     "//third_party/abseil-cpp/absl/synchronization:thread_pool",
+#     "//third_party/abseil-cpp/absl/time",
+#     "//third_party/googletest:gmock",
+#     "//third_party/googletest:gtest",
+#   ]
+# }
+
 absl_source_set("cord_test_helpers") {
   testonly = true
   public = [ "cord_test_helpers.h" ]
-  deps = [ ":cord" ]
+  deps = [
+    ":cord",
+    ":cord_internal",
+    ":strings",
+  ]
+}
+
+absl_source_set("cordz_test_helpers") {
+  testonly = true
+  public = ["cordz_test_helpers.h"]
+  deps = [
+    ":cord",
+    ":cord_internal",
+    ":cordz_info",
+    ":cordz_sample_token",
+    ":cordz_statistics",
+    ":cordz_update_tracker",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/googletest:gtest",
+  ]
+}
+
+absl_source_set("cordz_test") {
+  testonly = true
+  sources = ["cordz_test.cc"]
+  deps = [
+    ":cord",
+    ":cord_test_helpers",
+    ":cordz_functions",
+    ":cordz_info",
+    ":cordz_sample_token",
+    ":cordz_statistics",
+    ":cordz_test_helpers",
+    ":cordz_update_tracker",
+    ":strings",
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
+    "//third_party/googletest:gmock",
+    "//third_party/googletest:gtest",
+  ]
 }
 
 absl_source_set("pow10_helper") {
diff --git a/third_party/abseil-cpp/absl/strings/CMakeLists.txt b/third_party/abseil-cpp/absl/strings/CMakeLists.txt
index 3b7ae63..80ae2a6 100644
--- a/third_party/abseil-cpp/absl/strings/CMakeLists.txt
+++ b/third_party/abseil-cpp/absl/strings/CMakeLists.txt
@@ -259,7 +259,7 @@
 absl_cc_test(
   NAME
     str_join_test
-  SRCS
+ss  SRCS
     "str_join_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
@@ -552,24 +552,264 @@
 
 absl_cc_library(
   NAME
+    cord_internal
+  HDRS
+    "internal/cord_internal.h"
+    "internal/cord_rep_flat.h"
+    "internal/cord_rep_ring.h"
+    "internal/cord_rep_ring_reader.h"
+  SRCS
+    "internal/cord_internal.cc"
+    "internal/cord_rep_ring.cc"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::base_internal
+    absl::compressed_tuple
+    absl::config
+    absl::core_headers
+    absl::endian
+    absl::inlined_vector
+    absl::layout
+    absl::raw_logging_internal
+    absl::strings
+    absl::throw_delegate
+    absl::type_traits
+)
+
+absl_cc_library(
+  NAME
+    cordz_update_tracker
+  HDRS
+    "internal/cordz_update_tracker.h"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::config
+)
+
+absl_cc_test(
+  NAME
+    cordz_update_tracker_test
+  SRCS
+    "internal/cordz_update_tracker_test.cc"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::config
+    absl::cordz_update_tracker
+    absl::core_headers
+    absl::synchronization
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
+    cordz_functions
+  HDRS
+    "internal/cordz_functions.h"
+  SRCS
+    "internal/cordz_functions.cc"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::config
+    absl::core_headers
+    absl::exponential_biased
+    absl::raw_logging_internal
+)
+
+absl_cc_test(
+  NAME
+    cordz_functions_test
+  SRCS
+    "internal/cordz_functions_test.cc"
+  DEPS
+    absl::config
+    absl::cordz_functions
+    absl::cordz_test_helpers
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
+    cordz_statistics
+  HDRS
+    "internal/cordz_statistics.h"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::config
+    absl::core_headers
+    absl::cordz_update_tracker
+    absl::synchronization
+)
+
+absl_cc_library(
+  NAME
+    cordz_handle
+  HDRS
+    "internal/cordz_handle.h"
+  SRCS
+    "internal/cordz_handle.cc"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::base
+    absl::config
+    absl::raw_logging_internal
+    absl::synchronization
+)
+
+absl_cc_test(
+  NAME
+    cordz_handle_test
+  SRCS
+    "internal/cordz_handle_test.cc"
+  DEPS
+    absl::config
+    absl::cordz_handle
+    absl::cordz_test_helpers
+    absl::memory
+    absl::random_random
+    absl::random_distributions
+    absl::synchronization
+    absl::time
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
+    cordz_info
+  HDRS
+    "internal/cordz_info.h"
+  SRCS
+    "internal/cordz_info.cc"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::base
+    absl::config
+    absl::cord_internal
+    absl::cordz_functions
+    absl::cordz_handle
+    absl::cordz_statistics
+    absl::cordz_update_tracker
+    absl::core_headers
+    absl::span
+    absl::raw_logging_internal
+    absl::stacktrace
+    absl::synchronization
+)
+
+absl_cc_test(
+  NAME
+    cordz_info_test
+  SRCS
+    "internal/cordz_info_test.cc"
+  DEPS
+    absl::config
+    absl::cord_internal
+    absl::cordz_test_helpers
+    absl::cordz_handle
+    absl::cordz_info
+    absl::cordz_statistics
+    absl::cordz_test_helpers
+    absl::cordz_update_tracker
+    absl::span
+    absl::stacktrace
+    absl::symbolize
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
+    cordz_sample_token
+  HDRS
+    "internal/cordz_sample_token.h"
+  SRCS
+    "internal/cordz_sample_token.cc"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::config
+    absl::cordz_handle
+    absl::cordz_info
+)
+
+absl_cc_test(
+  NAME
+    cordz_sample_token_test
+  SRCS
+    "internal/cordz_sample_token_test.cc"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  DEPS
+    absl::config
+    absl::cord_internal
+    absl::cordz_handle
+    absl::cordz_info
+    absl::cordz_info
+    absl::cordz_sample_token
+    absl::cordz_test_helpers
+    absl::memory
+    absl::random_random
+    absl::synchronization
+    absl::thread_pool
+    absl::time
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
+    cordz_update_scope
+  HDRS
+    "internal/cordz_update_scope.h"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::config
+    absl::cord_internal
+    absl::cordz_info
+    absl::cordz_update_tracker
+    absl::core_headers
+)
+
+absl_cc_test(
+  NAME
+    cordz_update_scope_test
+  SRCS
+    "internal/cordz_update_scope_test.cc"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::config
+    absl::cord_internal
+    absl::cordz_info
+    absl::cordz_test_helpers
+    absl::cordz_update_scope
+    absl::cordz_update_tracker
+    absl::core_headers
+    gmock_main
+)
+
+absl_cc_library(
+  NAME
     cord
   HDRS
     "cord.h"
   SRCS
     "cord.cc"
-    "internal/cord_internal.cc"
-    "internal/cord_internal.h"
-    "internal/cord_rep_ring.h"
-    "internal/cord_rep_ring.cc"
-    "internal/cord_rep_ring_reader.h"
-    "internal/cord_rep_flat.h"
   COPTS
     ${ABSL_DEFAULT_COPTS}
   DEPS
     absl::base
-    absl::base_internal
-    absl::compressed_tuple
     absl::config
+    absl::cord_internal
+    absl::cordz_functions
+    absl::cordz_info
+    absl::cordz_update_scope
+    absl::cordz_update_tracker
     absl::core_headers
     absl::endian
     absl::fixed_array
@@ -578,8 +818,6 @@
     absl::optional
     absl::raw_logging_internal
     absl::strings
-    absl::strings_internal
-    absl::throw_delegate
     absl::type_traits
   PUBLIC
 )
@@ -593,6 +831,27 @@
     ${ABSL_TEST_COPTS}
   DEPS
     absl::cord
+    absl::cord_internal
+    absl::strings
+  TESTONLY
+)
+
+absl_cc_library(
+  NAME
+    cordz_test_helpers
+  HDRS
+    "cordz_test_helpers.h"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::config
+    absl::cord
+    absl::cord_internal
+    absl::cordz_info
+    absl::cordz_sample_token
+    absl::cordz_statistics
+    absl::cordz_update_tracker
+    absl::core_headers
   TESTONLY
 )
 
@@ -609,6 +868,8 @@
     absl::strings
     absl::base
     absl::config
+    absl::cord_test_helpers
+    absl::cordz_test_helpers
     absl::core_headers
     absl::endian
     absl::raw_logging_internal
@@ -624,12 +885,12 @@
   COPTS
     ${ABSL_TEST_COPTS}
   DEPS
-    absl::config
-    absl::cord
-    absl::strings
     absl::base
+    absl::config
+    absl::cord_internal
     absl::core_headers
     absl::raw_logging_internal
+    absl::strings
     gmock_main
 )
 
@@ -641,9 +902,33 @@
   COPTS
     ${ABSL_TEST_COPTS}
   DEPS
-    absl::cord
-    absl::strings
     absl::base
+    absl::cord_internal
     absl::core_headers
+    absl::strings
+    gmock_main
+)
+
+absl_cc_test(
+  NAME
+    cordz_test
+  SRCS
+    "cordz_test.cc"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::cord
+    absl::cord_test_helpers
+    absl::cordz_test_helpers
+    absl::cordz_functions
+    absl::cordz_info
+    absl::cordz_sample_token
+    absl::cordz_statistics
+    absl::cordz_update_tracker
+    absl::base
+    absl::config
+    absl::core_headers
+    absl::raw_logging_internal
+    absl::strings
     gmock_main
 )
diff --git a/third_party/abseil-cpp/absl/strings/cord.cc b/third_party/abseil-cpp/absl/strings/cord.cc
index 8f0999f8..15d1733 100644
--- a/third_party/abseil-cpp/absl/strings/cord.cc
+++ b/third_party/abseil-cpp/absl/strings/cord.cc
@@ -38,6 +38,9 @@
 #include "absl/strings/internal/cord_internal.h"
 #include "absl/strings/internal/cord_rep_flat.h"
 #include "absl/strings/internal/cord_rep_ring.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_scope.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
 #include "absl/strings/internal/resize_uninitialized.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_format.h"
@@ -53,8 +56,9 @@
 using ::absl::cord_internal::CordRepFlat;
 using ::absl::cord_internal::CordRepRing;
 using ::absl::cord_internal::CordRepSubstring;
-using ::absl::cord_internal::kMinFlatLength;
+using ::absl::cord_internal::InlineData;
 using ::absl::cord_internal::kMaxFlatLength;
+using ::absl::cord_internal::kMinFlatLength;
 
 using ::absl::cord_internal::CONCAT;
 using ::absl::cord_internal::EXTERNAL;
@@ -206,7 +210,7 @@
 }
 
 static CordRepFlat* CreateFlat(const char* data, size_t length,
-                            size_t alloc_hint) {
+                               size_t alloc_hint) {
   CordRepFlat* flat = CordRepFlat::New(length + alloc_hint);
   flat->length = length;
   memcpy(flat->Data(), data, length);
@@ -230,9 +234,7 @@
 
 // Create a new tree out of the specified array.
 // The returned node has a refcount of 1.
-static CordRep* NewTree(const char* data,
-                        size_t length,
-                        size_t alloc_hint) {
+static CordRep* NewTree(const char* data, size_t length, size_t alloc_hint) {
   if (length == 0) return nullptr;
   if (cord_ring_enabled()) {
     return RingNewTree(data, length, alloc_hint);
@@ -299,20 +301,6 @@
   return data_.as_chars();
 }
 
-inline CordRep* Cord::InlineRep::force_tree(size_t extra_hint) {
-  if (data_.is_tree()) {
-    return data_.as_tree();
-  }
-
-  size_t len = inline_size();
-  CordRepFlat* result = CordRepFlat::New(len + extra_hint);
-  result->length = len;
-  static_assert(kMinFlatLength >= sizeof(data_), "");
-  memcpy(result->Data(), data_.as_chars(), sizeof(data_));
-  set_tree(result);
-  return result;
-}
-
 inline void Cord::InlineRep::reduce_size(size_t n) {
   size_t tag = inline_size();
   assert(tag <= kMaxInline);
@@ -334,25 +322,72 @@
   return (rep->tag == RING) ? rep->ring() : CordRepRing::Create(rep, extra);
 }
 
-void Cord::InlineRep::AppendTree(CordRep* tree) {
-  if (tree == nullptr) return;
-  if (data_.is_empty()) {
-    set_tree(tree);
-  } else if (cord_ring_enabled()) {
-    set_tree(CordRepRing::Append(ForceRing(force_tree(0), 1), tree));
+void Cord::InlineRep::AppendTreeToInlined(CordRep* tree,
+                                          MethodIdentifier method) {
+  assert(!is_tree());
+  if (!data_.is_empty()) {
+    CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
+    if (cord_ring_enabled()) {
+      tree = CordRepRing::Append(CordRepRing::Create(flat, 1), tree);
+    } else {
+      tree = Concat(flat, tree);
+    }
+  }
+  EmplaceTree(tree, method);
+}
+
+void Cord::InlineRep::AppendTreeToTree(CordRep* tree, MethodIdentifier method) {
+  assert(is_tree());
+  const CordzUpdateScope scope(data_.cordz_info(), method);
+  if (cord_ring_enabled()) {
+    tree = CordRepRing::Append(ForceRing(data_.as_tree(), 1), tree);
   } else {
-    set_tree(Concat(force_tree(0), tree));
+    tree = Concat(data_.as_tree(), tree);
+  }
+  SetTree(tree, scope);
+}
+
+void Cord::InlineRep::AppendTree(CordRep* tree, MethodIdentifier method) {
+  if (tree == nullptr) return;
+  if (data_.is_tree()) {
+    AppendTreeToTree(tree, method);
+  } else {
+    AppendTreeToInlined(tree, method);
   }
 }
 
-void Cord::InlineRep::PrependTree(CordRep* tree) {
-  assert(tree != nullptr);
-  if (data_.is_empty()) {
-    set_tree(tree);
-  } else if (cord_ring_enabled()) {
-    set_tree(CordRepRing::Prepend(ForceRing(force_tree(0), 1), tree));
+void Cord::InlineRep::PrependTreeToInlined(CordRep* tree,
+                                           MethodIdentifier method) {
+  assert(!is_tree());
+  if (!data_.is_empty()) {
+    CordRepFlat* flat = MakeFlatWithExtraCapacity(0);
+    if (cord_ring_enabled()) {
+      tree = CordRepRing::Prepend(CordRepRing::Create(flat, 1), tree);
+    } else {
+      tree = Concat(tree, flat);
+    }
+  }
+  EmplaceTree(tree, method);
+}
+
+void Cord::InlineRep::PrependTreeToTree(CordRep* tree,
+                                        MethodIdentifier method) {
+  assert(is_tree());
+  const CordzUpdateScope scope(data_.cordz_info(), method);
+  if (cord_ring_enabled()) {
+    tree = CordRepRing::Prepend(ForceRing(data_.as_tree(), 1), tree);
   } else {
-    set_tree(Concat(tree, force_tree(0)));
+    tree = Concat(tree, data_.as_tree());
+  }
+  SetTree(tree, scope);
+}
+
+void Cord::InlineRep::PrependTree(CordRep* tree, MethodIdentifier method) {
+  assert(tree != nullptr);
+  if (data_.is_tree()) {
+    PrependTreeToTree(tree, method);
+  } else {
+    PrependTreeToInlined(tree, method);
   }
 }
 
@@ -404,76 +439,43 @@
   return true;
 }
 
+template <bool has_length>
 void Cord::InlineRep::GetAppendRegion(char** region, size_t* size,
-                                      size_t max_length) {
-  if (max_length == 0) {
-    *region = nullptr;
-    *size = 0;
-    return;
-  }
+                                      size_t length) {
+  auto constexpr method = CordzUpdateTracker::kGetAppendRegion;
 
-  // Try to fit in the inline buffer if possible.
-  if (!is_tree()) {
-    size_t inline_length = inline_size();
-    if (max_length <= kMaxInline - inline_length) {
-      *region = data_.as_chars() + inline_length;
-      *size = max_length;
-      set_inline_size(inline_length + max_length);
+  CordRep* root = tree();
+  size_t sz = root ? root->length : inline_size();
+  if (root == nullptr) {
+    size_t available = kMaxInline - sz;
+    if (available >= (has_length ? length : 1)) {
+      *region = data_.as_chars() + sz;
+      *size = has_length ? length : available;
+      set_inline_size(has_length ? sz + length : kMaxInline);
       return;
     }
   }
 
-  CordRep* root = force_tree(max_length);
-
-  if (PrepareAppendRegion(root, region, size, max_length)) {
+  size_t extra = has_length ? length : (std::max)(sz, kMinFlatLength);
+  CordRep* rep = root ? root : MakeFlatWithExtraCapacity(extra);
+  CordzUpdateScope scope(root ? data_.cordz_info() : nullptr, method);
+  if (PrepareAppendRegion(rep, region, size, length)) {
+    CommitTree(root, rep, scope, method);
     return;
   }
 
   // Allocate new node.
-  CordRepFlat* new_node =
-      CordRepFlat::New(std::max(static_cast<size_t>(root->length), max_length));
-  new_node->length = std::min(new_node->Capacity(), max_length);
+  CordRepFlat* new_node = CordRepFlat::New(extra);
+  new_node->length = std::min(new_node->Capacity(), length);
   *region = new_node->Data();
   *size = new_node->length;
 
   if (cord_ring_enabled()) {
-    replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
-    return;
+    rep = CordRepRing::Append(ForceRing(rep, 1), new_node);
+  } else {
+    rep = Concat(rep, new_node);
   }
-  replace_tree(Concat(root, new_node));
-}
-
-void Cord::InlineRep::GetAppendRegion(char** region, size_t* size) {
-  const size_t max_length = std::numeric_limits<size_t>::max();
-
-  // Try to fit in the inline buffer if possible.
-  if (!data_.is_tree()) {
-    size_t inline_length = inline_size();
-    if (inline_length < kMaxInline) {
-      *region = data_.as_chars() + inline_length;
-      *size = kMaxInline - inline_length;
-      set_inline_size(kMaxInline);
-      return;
-    }
-  }
-
-  CordRep* root = force_tree(max_length);
-
-  if (PrepareAppendRegion(root, region, size, max_length)) {
-    return;
-  }
-
-  // Allocate new node.
-  CordRepFlat* new_node = CordRepFlat::New(root->length);
-  new_node->length = new_node->Capacity();
-  *region = new_node->Data();
-  *size = new_node->length;
-
-  if (cord_ring_enabled()) {
-    replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
-    return;
-  }
-  replace_tree(Concat(root, new_node));
+  CommitTree(root, rep, scope, method);
 }
 
 // If the rep is a leaf, this will increment the value at total_mem_usage and
@@ -490,18 +492,32 @@
   return false;
 }
 
-void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
-  UnrefTree();
+void Cord::InlineRep::UpdateCordzStatisticsSlow() {
+  CordRep* tree = as_tree();
+  data_.cordz_info()->RecordMetrics(tree->length);
+}
 
-  data_ = src.data_;
-  if (is_tree()) {
-    CordRep::Ref(tree());
-    clear_cordz_info();
+void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
+  assert(&src != this);
+  assert(is_tree() || src.is_tree());
+  auto constexpr method = CordzUpdateTracker::kAssignCord;
+  if (CordRep* tree = this->tree()) {
+    CordzUpdateScope scope(data_.cordz_info(), method);
+    CordRep::Unref(tree);
+    if (CordRep* src_tree = src.tree()) {
+      SetTree(CordRep::Ref(src_tree), scope);
+    } else {
+      scope.SetCordRep(nullptr);
+      data_ = src.data_;
+    }
+  } else {
+    EmplaceTree(CordRep::Ref(src.as_tree()), method);
   }
 }
 
 void Cord::InlineRep::UnrefTree() {
   if (is_tree()) {
+    CordzInfo::MaybeUntrackCord(data_.cordz_info());
     CordRep::Unref(tree());
   }
 }
@@ -509,12 +525,13 @@
 // --------------------------------------------------------------------
 // Constructors and destructors
 
-Cord::Cord(absl::string_view src) {
+Cord::Cord(absl::string_view src) : contents_(InlineData::kDefaultInit) {
   const size_t n = src.size();
   if (n <= InlineRep::kMaxInline) {
-    contents_.set_data(src.data(), n, false);
+    contents_.set_data(src.data(), n, true);
   } else {
-    contents_.set_tree(NewTree(src.data(), n, 0));
+    CordRep* rep = NewTree(src.data(), n, 0);
+    contents_.EmplaceTree(rep, CordzUpdateTracker::kConstructorString);
   }
 }
 
@@ -552,9 +569,9 @@
 // The destruction code is separate so that the compiler can determine
 // that it does not need to call the destructor on a moved-from Cord.
 void Cord::DestroyCordSlow() {
-  if (CordRep* tree = contents_.tree()) {
-    CordRep::Unref(VerifyTree(tree));
-  }
+  assert(contents_.is_tree());
+  CordzInfo::MaybeUntrackCord(contents_.cordz_info());
+  CordRep::Unref(VerifyTree(contents_.as_tree()));
 }
 
 // --------------------------------------------------------------------
@@ -567,19 +584,18 @@
 }
 
 Cord& Cord::operator=(absl::string_view src) {
-
   const char* data = src.data();
   size_t length = src.size();
   CordRep* tree = contents_.tree();
   if (length <= InlineRep::kMaxInline) {
     // Embed into this->contents_
+    if (tree) CordzInfo::MaybeUntrackCord(contents_.cordz_info());
     contents_.set_data(data, length, true);
     if (tree) CordRep::Unref(tree);
     return *this;
   }
   if (tree != nullptr && tree->tag >= FLAT &&
-      tree->flat()->Capacity() >= length &&
-      tree->refcount.IsOne()) {
+      tree->flat()->Capacity() >= length && tree->refcount.IsOne()) {
     // Copy in place if the existing FLAT node is reusable.
     memmove(tree->flat()->Data(), data, length);
     tree->length = length;
@@ -605,70 +621,70 @@
 
 // TODO(sanjay): Move to Cord::InlineRep section of file.  For now,
 // we keep it here to make diffs easier.
-void Cord::InlineRep::AppendArray(const char* src_data, size_t src_size) {
-  if (src_size == 0) return;  // memcpy(_, nullptr, 0) is undefined.
+void Cord::InlineRep::AppendArray(absl::string_view src,
+                                  MethodIdentifier method) {
+  if (src.empty()) return;  // memcpy(_, nullptr, 0) is undefined.
 
   size_t appended = 0;
-  CordRep* root = nullptr;
-  if (is_tree()) {
-    root = data_.as_tree();
+  CordRep* rep = tree();
+  const CordRep* const root = rep;
+  CordzUpdateScope scope(root ? cordz_info() : nullptr, method);
+  if (root != nullptr) {
     char* region;
-    if (PrepareAppendRegion(root, &region, &appended, src_size)) {
-      memcpy(region, src_data, appended);
+    if (PrepareAppendRegion(rep, &region, &appended, src.size())) {
+      memcpy(region, src.data(), appended);
     }
   } else {
     // Try to fit in the inline buffer if possible.
     size_t inline_length = inline_size();
-    if (src_size <= kMaxInline - inline_length) {
+    if (src.size() <= kMaxInline - inline_length) {
       // Append new data to embedded array
-      memcpy(data_.as_chars() + inline_length, src_data, src_size);
-      set_inline_size(inline_length + src_size);
+      memcpy(data_.as_chars() + inline_length, src.data(), src.size());
+      set_inline_size(inline_length + src.size());
       return;
     }
 
-    // It is possible that src_data == data_, but when we transition from an
+    // It is possible that src.data() == data_, but when we transition from an
     // InlineRep to a tree we need to assign data_ = root via set_tree. To
     // avoid corrupting the source data before we copy it, delay calling
     // set_tree until after we've copied data.
     // We are going from an inline size to beyond inline size. Make the new size
     // either double the inlined size, or the added size + 10%.
-    const size_t size1 = inline_length * 2 + src_size;
-    const size_t size2 = inline_length + src_size / 10;
-    root = CordRepFlat::New(std::max<size_t>(size1, size2));
-    appended = std::min(
-        src_size, root->flat()->Capacity() - inline_length);
-    memcpy(root->flat()->Data(), data_.as_chars(), inline_length);
-    memcpy(root->flat()->Data() + inline_length, src_data, appended);
-    root->length = inline_length + appended;
-    set_tree(root);
+    const size_t size1 = inline_length * 2 + src.size();
+    const size_t size2 = inline_length + src.size() / 10;
+    rep = CordRepFlat::New(std::max<size_t>(size1, size2));
+    appended = std::min(src.size(), rep->flat()->Capacity() - inline_length);
+    memcpy(rep->flat()->Data(), data_.as_chars(), inline_length);
+    memcpy(rep->flat()->Data() + inline_length, src.data(), appended);
+    rep->length = inline_length + appended;
   }
 
-  src_data += appended;
-  src_size -= appended;
-  if (src_size == 0) {
+  src.remove_prefix(appended);
+  if (src.empty()) {
+    CommitTree(root, rep, scope, method);
     return;
   }
 
   if (cord_ring_enabled()) {
-    absl::string_view data(src_data, src_size);
-    root = ForceRing(root, (data.size() - 1) / kMaxFlatLength + 1);
-    replace_tree(CordRepRing::Append(root->ring(), data));
-    return;
+    rep = ForceRing(rep, (src.size() - 1) / kMaxFlatLength + 1);
+    rep = CordRepRing::Append(rep->ring(), src);
+  } else {
+    // Use new block(s) for any remaining bytes that were not handled above.
+    // Alloc extra memory only if the right child of the root of the new tree
+    // is going to be a FLAT node, which will permit further inplace appends.
+    size_t length = src.size();
+    if (src.size() < kMaxFlatLength) {
+      // The new length is either
+      // - old size + 10%
+      // - old_size + src.size()
+      // This will cause a reasonable conservative step-up in size that is
+      // still large enough to avoid excessive amounts of small fragments
+      // being added.
+      length = std::max<size_t>(rep->length / 10, src.size());
+    }
+    rep = Concat(rep, NewTree(src.data(), src.size(), length - src.size()));
   }
-
-  // Use new block(s) for any remaining bytes that were not handled above.
-  // Alloc extra memory only if the right child of the root of the new tree is
-  // going to be a FLAT node, which will permit further inplace appends.
-  size_t length = src_size;
-  if (src_size < kMaxFlatLength) {
-    // The new length is either
-    // - old size + 10%
-    // - old_size + src_size
-    // This will cause a reasonable conservative step-up in size that is still
-    // large enough to avoid excessive amounts of small fragments being added.
-    length = std::max<size_t>(root->length / 10, src_size);
-  }
-  set_tree(Concat(root, NewTree(src_data, src_size, length - src_size)));
+  CommitTree(root, rep, scope, method);
 }
 
 inline CordRep* Cord::TakeRep() const& {
@@ -683,10 +699,17 @@
 
 template <typename C>
 inline void Cord::AppendImpl(C&& src) {
+  auto constexpr method = CordzUpdateTracker::kAppendCord;
   if (empty()) {
-    // In case of an empty destination avoid allocating a new node, do not copy
-    // data.
-    *this = std::forward<C>(src);
+    // Since destination is empty, we can avoid allocating a node,
+    if (src.contents_.is_tree()) {
+      // by taking the tree directly
+      CordRep* rep = std::forward<C>(src).TakeRep();
+      contents_.EmplaceTree(rep, method);
+    } else {
+      // or copying over inline data
+      contents_.data_ = src.contents_.data_;
+    }
     return;
   }
 
@@ -696,12 +719,12 @@
     CordRep* src_tree = src.contents_.tree();
     if (src_tree == nullptr) {
       // src has embedded data.
-      contents_.AppendArray(src.contents_.data(), src_size);
+      contents_.AppendArray({src.contents_.data(), src_size}, method);
       return;
     }
     if (src_tree->tag >= FLAT) {
       // src tree just has one flat node.
-      contents_.AppendArray(src_tree->flat()->Data(), src_size);
+      contents_.AppendArray({src_tree->flat()->Data(), src_size}, method);
       return;
     }
     if (&src == this) {
@@ -717,7 +740,8 @@
   }
 
   // Guaranteed to be a tree (kMaxBytesToCopy > kInlinedSize)
-  contents_.AppendTree(std::forward<C>(src).TakeRep());
+  CordRep* rep = std::forward<C>(src).TakeRep();
+  contents_.AppendTree(rep, CordzUpdateTracker::kAppendCord);
 }
 
 void Cord::Append(const Cord& src) { AppendImpl(src); }
@@ -739,7 +763,7 @@
   CordRep* src_tree = src.contents_.tree();
   if (src_tree != nullptr) {
     CordRep::Ref(src_tree);
-    contents_.PrependTree(src_tree);
+    contents_.PrependTree(src_tree, CordzUpdateTracker::kPrependCord);
     return;
   }
 
@@ -762,7 +786,8 @@
       return;
     }
   }
-  contents_.PrependTree(NewTree(src.data(), src.size(), 0));
+  CordRep* rep = NewTree(src.data(), src.size(), 0);
+  contents_.PrependTree(rep, CordzUpdateTracker::kPrependString);
 }
 
 template <typename T, Cord::EnableIfString<T>>
@@ -1789,8 +1814,7 @@
           *os << absl::CEscape(std::string(rep->external()->base, rep->length));
         *os << "]\n";
       } else if (rep->tag >= FLAT) {
-        *os << "FLAT cap=" << rep->flat()->Capacity()
-            << " [";
+        *os << "FLAT cap=" << rep->flat()->Capacity() << " [";
         if (include_data)
           *os << absl::CEscape(std::string(rep->flat()->Data(), rep->length));
         *os << "]\n";
@@ -1802,7 +1826,7 @@
         do {
           DumpNode(ring->entry_child(head), include_data, os,
                    indent + kIndentStep);
-          head = ring->advance(head);;
+          head = ring->advance(head);
         } while (head != ring->tail());
       }
       if (stack.empty()) break;
@@ -1848,9 +1872,8 @@
         worklist.push_back(node->concat()->left);
       }
     } else if (node->tag >= FLAT) {
-      ABSL_INTERNAL_CHECK(
-          node->length <= node->flat()->Capacity(),
-          ReportError(root, node));
+      ABSL_INTERNAL_CHECK(node->length <= node->flat()->Capacity(),
+                          ReportError(root, node));
     } else if (node->tag == EXTERNAL) {
       ABSL_INTERNAL_CHECK(node->external()->base != nullptr,
                           ReportError(root, node));
diff --git a/third_party/abseil-cpp/absl/strings/cord.h b/third_party/abseil-cpp/absl/strings/cord.h
index 7ce938ca..d5a13b34 100644
--- a/third_party/abseil-cpp/absl/strings/cord.h
+++ b/third_party/abseil-cpp/absl/strings/cord.h
@@ -70,6 +70,7 @@
 #include <string>
 #include <type_traits>
 
+#include "absl/base/config.h"
 #include "absl/base/internal/endian.h"
 #include "absl/base/internal/per_thread_tls.h"
 #include "absl/base/macros.h"
@@ -80,6 +81,11 @@
 #include "absl/strings/internal/cord_internal.h"
 #include "absl/strings/internal/cord_rep_ring.h"
 #include "absl/strings/internal/cord_rep_ring_reader.h"
+#include "absl/strings/internal/cordz_functions.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_scope.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
 #include "absl/strings/internal/resize_uninitialized.h"
 #include "absl/strings/internal/string_constant.h"
 #include "absl/strings/string_view.h"
@@ -664,10 +670,20 @@
   explicit constexpr Cord(strings_internal::StringConstant<T>);
 
  private:
+  using CordRep = absl::cord_internal::CordRep;
+  using CordRepFlat = absl::cord_internal::CordRepFlat;
+  using CordzInfo = cord_internal::CordzInfo;
+  using CordzUpdateScope = cord_internal::CordzUpdateScope;
+  using CordzUpdateTracker = cord_internal::CordzUpdateTracker;
+  using InlineData = cord_internal::InlineData;
+  using MethodIdentifier = CordzUpdateTracker::MethodIdentifier;
+
   friend class CordTestPeer;
   friend bool operator==(const Cord& lhs, const Cord& rhs);
   friend bool operator==(const Cord& lhs, absl::string_view rhs);
 
+  friend const CordzInfo* GetCordzInfoForTesting(const Cord& cord);
+
   // Calls the provided function once for each cord chunk, in order.  Unlike
   // Chunks(), this API will not allocate memory.
   void ForEachChunk(absl::FunctionRef<void(absl::string_view)>) const;
@@ -687,6 +703,7 @@
     static_assert(kMaxInline >= sizeof(absl::cord_internal::CordRep*), "");
 
     constexpr InlineRep() : data_() {}
+    explicit InlineRep(InlineData::DefaultInitType init) : data_(init) {}
     InlineRep(const InlineRep& src);
     InlineRep(InlineRep&& src);
     InlineRep& operator=(const InlineRep& src);
@@ -712,15 +729,44 @@
     // Returns non-null iff was holding a pointer
     absl::cord_internal::CordRep* clear();
     // Converts to pointer if necessary.
-    absl::cord_internal::CordRep* force_tree(size_t extra_hint);
     void reduce_size(size_t n);  // REQUIRES: holding data
     void remove_prefix(size_t n);  // REQUIRES: holding data
-    void AppendArray(const char* src_data, size_t src_size);
+    void AppendArray(absl::string_view src, MethodIdentifier method);
     absl::string_view FindFlatStartPiece() const;
-    void AppendTree(absl::cord_internal::CordRep* tree);
-    void PrependTree(absl::cord_internal::CordRep* tree);
-    void GetAppendRegion(char** region, size_t* size, size_t max_length);
-    void GetAppendRegion(char** region, size_t* size);
+
+    // Creates a CordRepFlat instance from the current inlined data with `extra'
+    // bytes of desired additional capacity.
+    CordRepFlat* MakeFlatWithExtraCapacity(size_t extra);
+
+    // Sets the tree value for this instance. `rep` must not be null.
+    // Requires the current instance to hold a tree, and a lock to be held on
+    // any CordzInfo referenced by this instance. The latter is enforced through
+    // the CordzUpdateScope argument. If the current instance is sampled, then
+    // the CordzInfo instance is updated to reference the new `rep` value.
+    void SetTree(CordRep* rep, const CordzUpdateScope& scope);
+
+    // Sets the tree value for this instance, and randomly samples this cord.
+    // This function disregards existing contents in `data_`, and should be
+    // called when a Cord is 'promoted' from an 'uninitialized' or 'inlined'
+    // value to a non-inlined (tree / ring) value.
+    void EmplaceTree(CordRep* rep, MethodIdentifier method);
+
+    // Commits the change of a newly created, or updated `rep` root value into
+    // this cord. `old_rep` indicates the old (inlined or tree) value of the
+    // cord, and determines if the commit invokes SetTree() or EmplaceTree().
+    void CommitTree(const CordRep* old_rep, CordRep* rep,
+                    const CordzUpdateScope& scope, MethodIdentifier method);
+
+    void AppendTreeToInlined(CordRep* tree, MethodIdentifier method);
+    void AppendTreeToTree(CordRep* tree, MethodIdentifier method);
+    void AppendTree(CordRep* tree, MethodIdentifier method);
+    void PrependTreeToInlined(CordRep* tree, MethodIdentifier method);
+    void PrependTreeToTree(CordRep* tree, MethodIdentifier method);
+    void PrependTree(CordRep* tree, MethodIdentifier method);
+
+    template <bool has_length>
+    void GetAppendRegion(char** region, size_t* size, size_t length);
+
     bool IsSame(const InlineRep& other) const {
       return memcmp(&data_, &other.data_, sizeof(data_)) == 0;
     }
@@ -772,6 +818,11 @@
     // Resets the current cordz_info to null / empty.
     void clear_cordz_info() { data_.clear_cordz_info(); }
 
+    // Updates the cordz statistics. info may be nullptr if the CordzInfo object
+    // is unknown.
+    void UpdateCordzStatistics();
+    void UpdateCordzStatisticsSlow();
+
    private:
     friend class Cord;
 
@@ -943,6 +994,8 @@
   if (is_tree()) {
     data_.clear_cordz_info();
     absl::cord_internal::CordRep::Ref(as_tree());
+    CordzInfo::MaybeTrackCord(data_, src.data_,
+                              CordzUpdateTracker::kConstructorCord);
   }
 }
 
@@ -1002,8 +1055,45 @@
   return is_tree() ? as_tree()->length : inline_size();
 }
 
+inline cord_internal::CordRepFlat* Cord::InlineRep::MakeFlatWithExtraCapacity(
+    size_t extra) {
+  static_assert(cord_internal::kMinFlatLength >= sizeof(data_), "");
+  size_t len = data_.inline_size();
+  auto* result = CordRepFlat::New(len + extra);
+  result->length = len;
+  memcpy(result->Data(), data_.as_chars(), sizeof(data_));
+  return result;
+}
+
+inline void Cord::InlineRep::EmplaceTree(CordRep* rep,
+                                         MethodIdentifier method) {
+  data_.make_tree(rep);
+  CordzInfo::MaybeTrackCord(data_, method);
+}
+
+inline void Cord::InlineRep::SetTree(CordRep* rep,
+                                     const CordzUpdateScope& scope) {
+  assert(rep);
+  assert(data_.is_tree());
+  data_.set_tree(rep);
+  scope.SetCordRep(rep);
+}
+
+inline void Cord::InlineRep::CommitTree(const CordRep* old_rep, CordRep* rep,
+                                        const CordzUpdateScope& scope,
+                                        MethodIdentifier method) {
+  if (old_rep) {
+    SetTree(rep, scope);
+  } else {
+    EmplaceTree(rep, method);
+  }
+}
+
 inline void Cord::InlineRep::set_tree(absl::cord_internal::CordRep* rep) {
   if (rep == nullptr) {
+    if (data_.is_tree()) {
+      CordzInfo::MaybeUntrackCord(data_.cordz_info());
+    }
     ResetToEmpty();
   } else {
     if (data_.is_tree()) {
@@ -1013,7 +1103,9 @@
     } else {
       // `data_` contains inlined data: initialize data_ to tree value `rep`.
       data_.make_tree(rep);
+      CordzInfo::MaybeTrackCord(data_, CordzUpdateTracker::kUnknown);
     }
+    UpdateCordzStatistics();
   }
 }
 
@@ -1024,9 +1116,13 @@
     return;
   }
   data_.set_tree(rep);
+  UpdateCordzStatistics();
 }
 
 inline absl::cord_internal::CordRep* Cord::InlineRep::clear() {
+  if (is_tree()) {
+    CordzInfo::MaybeUntrackCord(cordz_info());
+  }
   absl::cord_internal::CordRep* result = tree();
   ResetToEmpty();
   return result;
@@ -1039,6 +1135,11 @@
   cord_internal::SmallMemmove(dst, data_.as_chars(), n);
 }
 
+inline void Cord::InlineRep::UpdateCordzStatistics() {
+  if (ABSL_PREDICT_TRUE(!is_profiled())) return;
+  UpdateCordzStatisticsSlow();
+}
+
 constexpr inline Cord::Cord() noexcept {}
 
 template <typename T>
@@ -1113,7 +1214,7 @@
 }
 
 inline void Cord::Append(absl::string_view src) {
-  contents_.AppendArray(src.data(), src.size());
+  contents_.AppendArray(src, CordzUpdateTracker::kAppendString);
 }
 
 extern template void Cord::Append(std::string&& src);
diff --git a/third_party/abseil-cpp/absl/strings/cord_test.cc b/third_party/abseil-cpp/absl/strings/cord_test.cc
index 710a1b4..74a9086 100644
--- a/third_party/abseil-cpp/absl/strings/cord_test.cc
+++ b/third_party/abseil-cpp/absl/strings/cord_test.cc
@@ -35,6 +35,7 @@
 #include "absl/base/macros.h"
 #include "absl/container/fixed_array.h"
 #include "absl/strings/cord_test_helpers.h"
+#include "absl/strings/cordz_test_helpers.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_format.h"
 #include "absl/strings/string_view.h"
@@ -239,7 +240,6 @@
   // caused crashes in production.  We grow exponentially so that the code will
   // execute in a reasonable amount of time.
   absl::Cord c;
-  ABSL_RAW_LOG(INFO, "Made a Cord with %zu bytes!", c.size());
   c.Append(from);
   while (c.size() < max_size) {
     c.Append(c);
diff --git a/third_party/abseil-cpp/absl/strings/cord_test_helpers.h b/third_party/abseil-cpp/absl/strings/cord_test_helpers.h
index f1036e3b..6ccccc51 100644
--- a/third_party/abseil-cpp/absl/strings/cord_test_helpers.h
+++ b/third_party/abseil-cpp/absl/strings/cord_test_helpers.h
@@ -17,11 +17,50 @@
 #ifndef ABSL_STRINGS_CORD_TEST_HELPERS_H_
 #define ABSL_STRINGS_CORD_TEST_HELPERS_H_
 
+#include <cstdint>
+#include <iostream>
+
 #include "absl/strings/cord.h"
+#include "absl/strings/internal/cord_internal.h"
+#include "absl/strings/string_view.h"
 
 namespace absl {
 ABSL_NAMESPACE_BEGIN
 
+// Cord sizes relevant for testing
+enum class TestCordSize {
+  kEmpty = 0,
+  kInlined = cord_internal::kMaxInline / 2 + 1,
+  kSmall = cord_internal::kMaxBytesToCopy / 2 + 1,
+  kMedium = cord_internal::kMaxFlatLength / 2 + 1,
+  kLarge = cord_internal::kMaxFlatLength * 4
+};
+
+// To string helper
+inline absl::string_view ToString(TestCordSize size) {
+  switch (size) {
+    case TestCordSize::kEmpty:
+      return "Empty";
+    case TestCordSize::kInlined:
+      return "Inlined";
+    case TestCordSize::kSmall:
+      return "Small";
+    case TestCordSize::kMedium:
+      return "Medium";
+    case TestCordSize::kLarge:
+      return "Large";
+  }
+  return "???";
+}
+
+// Returns the length matching the specified size
+inline size_t Length(TestCordSize size) { return static_cast<size_t>(size); }
+
+// Stream output helper
+inline std::ostream& operator<<(std::ostream& stream, TestCordSize size) {
+  return stream << ToString(size);
+}
+
 // Creates a multi-segment Cord from an iterable container of strings.  The
 // resulting Cord is guaranteed to have one segment for every string in the
 // container.  This allows code to be unit tested with multi-segment Cord
diff --git a/third_party/abseil-cpp/absl/strings/cordz_test.cc b/third_party/abseil-cpp/absl/strings/cordz_test.cc
new file mode 100644
index 0000000..b16e968
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/cordz_test.cc
@@ -0,0 +1,174 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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 <cstdint>
+#include <string>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+#include "absl/base/internal/raw_logging.h"
+#include "absl/base/macros.h"
+#include "absl/strings/cord.h"
+#include "absl/strings/cord_test_helpers.h"
+#include "absl/strings/cordz_test_helpers.h"
+#include "absl/strings/internal/cordz_functions.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/strings/internal/cordz_sample_token.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
+
+#ifdef ABSL_INTERNAL_CORDZ_ENABLED
+
+using testing::Eq;
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+
+using cord_internal::CordzInfo;
+using cord_internal::CordzSampleToken;
+using cord_internal::CordzStatistics;
+using cord_internal::CordzUpdateTracker;
+using Method = CordzUpdateTracker::MethodIdentifier;
+
+// Do not print cord contents, we only care about 'size' perhaps.
+// Note that this method must be inside the named namespace.
+inline void PrintTo(const Cord& cord, std::ostream* s) {
+  if (s) *s << "Cord[" << cord.size() << "]";
+}
+
+namespace {
+
+// Returns a string_view value of the specified length
+// We do this to avoid 'consuming' large strings in Cord by default.
+absl::string_view MakeString(size_t size) {
+  thread_local std::string str;
+  str = std::string(size, '.');
+  return str;
+}
+
+absl::string_view MakeString(TestCordSize size) {
+  return MakeString(Length(size));
+}
+
+std::string TestParamToString(::testing::TestParamInfo<TestCordSize> size) {
+  return absl::StrCat("On", ToString(size.param), "Cord");
+}
+
+class CordzUpdateTest : public testing::TestWithParam<TestCordSize> {
+ public:
+  Cord& cord() { return cord_; }
+
+  Method InitialOr(Method method) const {
+    return (GetParam() > TestCordSize::kInlined) ? Method::kConstructorString
+                                                 : method;
+  }
+
+ private:
+  CordzSamplingIntervalHelper sample_every_{1};
+  Cord cord_{MakeString(GetParam())};
+};
+
+INSTANTIATE_TEST_SUITE_P(WithParam, CordzUpdateTest,
+                         testing::Values(TestCordSize::kEmpty,
+                                         TestCordSize::kInlined,
+                                         TestCordSize::kLarge),
+                         TestParamToString);
+
+TEST(CordzTest, ConstructSmallString) {
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord cord(MakeString(TestCordSize::kSmall));
+  EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString));
+}
+
+TEST(CordzTest, ConstructLargeString) {
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord cord(MakeString(TestCordSize::kLarge));
+  EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString));
+}
+
+TEST(CordzTest, CopyConstruct) {
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord src = UnsampledCord(MakeString(TestCordSize::kLarge));
+  Cord cord(src);
+  EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorCord));
+}
+
+TEST(CordzTest, MoveConstruct) {
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord src(MakeString(TestCordSize::kLarge));
+  Cord cord(std::move(src));
+  EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString));
+}
+
+TEST_P(CordzUpdateTest, AssignCord) {
+  Cord src = UnsampledCord(MakeString(TestCordSize::kLarge));
+  cord() = src;
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAssignCord)));
+}
+
+TEST(CordzTest, AssignInlinedCord) {
+  CordzSampleToken token;
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord cord(MakeString(TestCordSize::kLarge));
+  const CordzInfo* info = GetCordzInfoForTesting(cord);
+  Cord src = UnsampledCord(MakeString(TestCordSize::kInlined));
+  cord = src;
+  EXPECT_THAT(GetCordzInfoForTesting(cord), Eq(nullptr));
+  EXPECT_FALSE(CordzInfoIsListed(info));
+}
+
+TEST(CordzTest, MoveAssignCord) {
+  CordzSamplingIntervalHelper sample_every{1};
+  Cord cord;
+  Cord src(MakeString(TestCordSize::kLarge));
+  cord = std::move(src);
+  EXPECT_THAT(cord, HasValidCordzInfoOf(Method::kConstructorString));
+}
+
+TEST_P(CordzUpdateTest, AppendCord) {
+  Cord src = UnsampledCord(MakeString(TestCordSize::kLarge));
+  cord().Append(src);
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAppendCord)));
+}
+
+TEST_P(CordzUpdateTest, MoveAppendCord) {
+  cord().Append(UnsampledCord(MakeString(TestCordSize::kLarge)));
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAppendCord)));
+}
+
+TEST_P(CordzUpdateTest, PrependCord) {
+  Cord src = UnsampledCord(MakeString(TestCordSize::kLarge));
+  cord().Prepend(src);
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kPrependCord)));
+}
+
+TEST_P(CordzUpdateTest, AppendSmallArray) {
+  cord().Append(MakeString(TestCordSize::kSmall));
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAppendString)));
+}
+
+TEST_P(CordzUpdateTest, AppendLargeArray) {
+  cord().Append(MakeString(TestCordSize::kLarge));
+  EXPECT_THAT(cord(), HasValidCordzInfoOf(InitialOr(Method::kAppendString)));
+}
+
+}  // namespace
+
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_INTERNAL_CORDZ_ENABLED
diff --git a/third_party/abseil-cpp/absl/strings/cordz_test_helpers.h b/third_party/abseil-cpp/absl/strings/cordz_test_helpers.h
new file mode 100644
index 0000000..d9573c9
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/cordz_test_helpers.h
@@ -0,0 +1,134 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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.
+
+#ifndef ABSL_STRINGS_CORDZ_TEST_HELPERS_H_
+#define ABSL_STRINGS_CORDZ_TEST_HELPERS_H_
+
+#include <utility>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+#include "absl/base/macros.h"
+#include "absl/strings/cord.h"
+#include "absl/strings/internal/cord_internal.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/strings/internal/cordz_sample_token.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+
+// Returns the CordzInfo for the cord, or nullptr if the cord is not sampled.
+inline const cord_internal::CordzInfo* GetCordzInfoForTesting(
+    const Cord& cord) {
+  if (cord.size() <= cord_internal::kMaxInline) return nullptr;
+  return cord.contents_.cordz_info();
+}
+
+// Returns true if the provided cordz_info is in the list of sampled cords.
+inline bool CordzInfoIsListed(const cord_internal::CordzInfo* cordz_info,
+                              cord_internal::CordzSampleToken token = {}) {
+  for (const cord_internal::CordzInfo& info : token) {
+    if (cordz_info == &info) return true;
+  }
+  return false;
+}
+
+// Matcher on Cord* that verifies all of:
+// - the cord is sampled
+// - the CordzInfo of the cord is listed / discoverable.
+// - the reported CordzStatistics match the cord's actual properties
+// - the cord has an (initial) UpdateTracker count of 1 for `method`
+// This matcher accepts a const Cord* to avoid having the matcher dump
+// copious amounts of cord data on failures.
+MATCHER_P(HasValidCordzInfoOf, method, "CordzInfo matches cord") {
+  const cord_internal::CordzInfo* cord_info = GetCordzInfoForTesting(arg);
+  if (cord_info == nullptr) {
+    *result_listener << "cord is not sampled";
+    return false;
+  }
+  if (!CordzInfoIsListed(cord_info)) {
+    *result_listener << "cord is sampled, but not listed";
+    return false;
+  }
+  cord_internal::CordzStatistics stat = cord_info->GetCordzStatistics();
+  if (stat.size != arg.size()) {
+    *result_listener << "cordz size " << stat.size
+                     << " does not match cord size " << arg.size();
+    return false;
+  }
+  if (stat.update_tracker.Value(method) != 1) {
+    *result_listener << "Expected method count 1 for " << method << ", found "
+                     << stat.update_tracker.Value(method);
+    return false;
+  }
+  return true;
+}
+
+// Cordz will only update with a new rate once the previously scheduled event
+// has fired. When we disable Cordz, a long delay takes place where we won't
+// consider profiling new Cords. CordzSampleIntervalHelper will burn through
+// that interval and allow for testing that assumes that the average sampling
+// interval is a particular value.
+class CordzSamplingIntervalHelper {
+ public:
+  explicit CordzSamplingIntervalHelper(int32_t interval)
+      : orig_mean_interval_(absl::cord_internal::get_cordz_mean_interval()) {
+    absl::cord_internal::set_cordz_mean_interval(interval);
+    absl::cord_internal::cordz_set_next_sample_for_testing(interval);
+  }
+
+  ~CordzSamplingIntervalHelper() {
+    absl::cord_internal::set_cordz_mean_interval(orig_mean_interval_);
+    absl::cord_internal::cordz_set_next_sample_for_testing(orig_mean_interval_);
+  }
+
+ private:
+  int32_t orig_mean_interval_;
+};
+
+// Wrapper struct managing a small CordRep `rep`
+struct TestCordRep {
+  cord_internal::CordRepFlat* rep;
+
+  TestCordRep() {
+    rep = cord_internal::CordRepFlat::New(100);
+    rep->length = 100;
+    memset(rep->Data(), 1, 100);
+  }
+  ~TestCordRep() { cord_internal::CordRep::Unref(rep); }
+};
+
+// Wrapper struct managing a small CordRep `rep`, and
+// an InlineData `data` initialized with that CordRep.
+struct TestCordData {
+  TestCordRep rep;
+  cord_internal::InlineData data{rep.rep};
+};
+
+// Creates a Cord that is not sampled
+template <typename... Args>
+Cord UnsampledCord(Args... args) {
+  CordzSamplingIntervalHelper never(9999);
+  Cord cord(std::forward<Args>(args)...);
+  ABSL_ASSERT(GetCordzInfoForTesting(cord) == nullptr);
+  return cord;
+}
+
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_CORDZ_TEST_HELPERS_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cord_internal.h b/third_party/abseil-cpp/absl/strings/internal/cord_internal.h
index 01ce70a..c7ae010 100644
--- a/third_party/abseil-cpp/absl/strings/internal/cord_internal.h
+++ b/third_party/abseil-cpp/absl/strings/internal/cord_internal.h
@@ -329,6 +329,9 @@
 
 class InlineData {
  public:
+  // DefaultInitType forces the use of the default initialization constructor.
+  enum DefaultInitType { kDefaultInit };
+
   // kNullCordzInfo holds the big endian representation of intptr_t(1)
   // This is the 'null' / initial value of 'cordz_info'. The null value
   // is specifically big endian 1 as with 64-bit pointers, the last
@@ -336,6 +339,7 @@
   static constexpr cordz_info_t kNullCordzInfo = BigEndianByte(1);
 
   constexpr InlineData() : as_chars_{0} {}
+  explicit InlineData(DefaultInitType) {}
   explicit constexpr InlineData(CordRep* rep) : as_tree_(rep) {}
   explicit constexpr InlineData(absl::string_view chars)
       : as_chars_{
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc
new file mode 100644
index 0000000..6ad864f
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc
@@ -0,0 +1,104 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_functions.h"
+
+#include <atomic>
+#include <cmath>
+#include <limits>
+#include <random>
+
+#include "absl/base/attributes.h"
+#include "absl/base/config.h"
+#include "absl/base/internal/exponential_biased.h"
+#include "absl/base/internal/raw_logging.h"
+
+// TODO(b/162942788): weak 'cordz_disabled' value.
+// A strong version is in the 'cordz_disabled_hack_for_odr' library which can
+// be linked in to disable cordz at compile time.
+extern "C" {
+bool absl_internal_cordz_disabled ABSL_ATTRIBUTE_WEAK = false;
+}
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+// The average interval until the next sample. A value of 0 disables profiling
+// while a value of 1 will profile all Cords.
+std::atomic<int> g_cordz_mean_interval(50000);
+
+}  // namespace
+
+#ifdef ABSL_INTERNAL_CORDZ_ENABLED
+
+ABSL_CONST_INIT thread_local int64_t cordz_next_sample = 0;
+
+// kIntervalIfDisabled is the number of profile-eligible events need to occur
+// before the code will confirm that cordz is still disabled.
+constexpr int64_t kIntervalIfDisabled = 1 << 16;
+
+ABSL_ATTRIBUTE_NOINLINE bool cordz_should_profile_slow() {
+  // TODO(b/162942788): check if profiling is disabled at compile time.
+  if (absl_internal_cordz_disabled) {
+    ABSL_RAW_LOG(WARNING, "Cordz info disabled at compile time");
+    // We are permanently disabled: set counter to highest possible value.
+    cordz_next_sample = std::numeric_limits<int64_t>::max();
+    return false;
+  }
+
+  thread_local absl::base_internal::ExponentialBiased
+      exponential_biased_generator;
+  int32_t mean_interval = get_cordz_mean_interval();
+
+  // Check if we disabled profiling. If so, set the next sample to a "large"
+  // number to minimize the overhead of the should_profile codepath.
+  if (mean_interval <= 0) {
+    cordz_next_sample = kIntervalIfDisabled;
+    return false;
+  }
+
+  // Check if we're always sampling.
+  if (mean_interval == 1) {
+    cordz_next_sample = 1;
+    return true;
+  }
+
+  if (cordz_next_sample <= 0) {
+    cordz_next_sample = exponential_biased_generator.GetStride(mean_interval);
+    return true;
+  }
+
+  --cordz_next_sample;
+  return false;
+}
+
+void cordz_set_next_sample_for_testing(int64_t next_sample) {
+  cordz_next_sample = next_sample;
+}
+
+#endif  // ABSL_INTERNAL_CORDZ_ENABLED
+
+int32_t get_cordz_mean_interval() {
+  return g_cordz_mean_interval.load(std::memory_order_acquire);
+}
+
+void set_cordz_mean_interval(int32_t mean_interval) {
+  g_cordz_mean_interval.store(mean_interval, std::memory_order_release);
+}
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h b/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h
new file mode 100644
index 0000000..c9ba145
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h
@@ -0,0 +1,85 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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.
+
+#ifndef ABSL_STRINGS_CORDZ_FUNCTIONS_H_
+#define ABSL_STRINGS_CORDZ_FUNCTIONS_H_
+
+#include <stdint.h>
+
+#include "absl/base/attributes.h"
+#include "absl/base/config.h"
+#include "absl/base/optimization.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// Returns the current sample rate. This represents the average interval
+// between samples.
+int32_t get_cordz_mean_interval();
+
+// Sets the sample rate with the average interval between samples.
+void set_cordz_mean_interval(int32_t mean_interval);
+
+// Enable cordz unless any of the following applies:
+// - no thread local support
+// - MSVC build
+// - Android build
+// - Apple build
+// - DLL build
+// Hashtablez is turned off completely in opensource builds.
+// MSVC's static atomics are dynamically initialized in debug mode, which breaks
+// sampling.
+#if defined(ABSL_HAVE_THREAD_LOCAL) && !defined(_MSC_VER)  && \
+    !defined(ABSL_BUILD_DLL) && !defined(ABSL_CONSUME_DLL) && \
+    !defined(__ANDROID__) && !defined(__APPLE__)
+#define ABSL_INTERNAL_CORDZ_ENABLED 1
+#endif
+
+#ifdef ABSL_INTERNAL_CORDZ_ENABLED
+
+// cordz_next_sample is the number of events until the next sample event. If
+// the value is 1 or less, the code will check on the next event if cordz is
+// enabled, and if so, will sample the Cord. cordz is only enabled when we can
+// use thread locals.
+ABSL_CONST_INIT extern thread_local int64_t cordz_next_sample;
+
+// Determines if the next sample should be profiled. If it is, the value pointed
+// at by next_sample will be set with the interval until the next sample.
+bool cordz_should_profile_slow();
+
+// Returns true if the next cord should be sampled.
+inline bool cordz_should_profile() {
+  if (ABSL_PREDICT_TRUE(cordz_next_sample > 1)) {
+    cordz_next_sample--;
+    return false;
+  }
+  return cordz_should_profile_slow();
+}
+
+// Sets the interval until the next sample (for testing only)
+void cordz_set_next_sample_for_testing(int64_t next_sample);
+
+#else  // ABSL_INTERNAL_CORDZ_ENABLED
+
+inline bool cordz_should_profile() { return false; }
+inline void cordz_set_next_sample_for_testing(int64_t) {}
+
+#endif  // ABSL_INTERNAL_CORDZ_ENABLED
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_CORDZ_FUNCTIONS_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc
new file mode 100644
index 0000000..f2cefae3
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc
@@ -0,0 +1,131 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_functions.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+using ::testing::Eq;
+using ::testing::Ge;
+using ::testing::Le;
+
+TEST(CordzFunctionsTest, SampleRate) {
+  int32_t orig_sample_rate = get_cordz_mean_interval();
+  int32_t expected_sample_rate = 123;
+  set_cordz_mean_interval(expected_sample_rate);
+  EXPECT_THAT(get_cordz_mean_interval(), Eq(expected_sample_rate));
+  set_cordz_mean_interval(orig_sample_rate);
+}
+
+// Cordz is disabled when we don't have thread_local. All calls to
+// should_profile will return false when cordz is diabled, so we might want to
+// avoid those tests.
+#ifdef ABSL_INTERNAL_CORDZ_ENABLED
+
+TEST(CordzFunctionsTest, ShouldProfileDisable) {
+  int32_t orig_sample_rate = get_cordz_mean_interval();
+
+  set_cordz_mean_interval(0);
+  cordz_set_next_sample_for_testing(0);
+  EXPECT_FALSE(cordz_should_profile());
+  // 1 << 16 is from kIntervalIfDisabled in cordz_functions.cc.
+  EXPECT_THAT(cordz_next_sample, Eq(1 << 16));
+
+  set_cordz_mean_interval(orig_sample_rate);
+}
+
+TEST(CordzFunctionsTest, ShouldProfileAlways) {
+  int32_t orig_sample_rate = get_cordz_mean_interval();
+
+  set_cordz_mean_interval(1);
+  cordz_set_next_sample_for_testing(1);
+  EXPECT_TRUE(cordz_should_profile());
+  EXPECT_THAT(cordz_next_sample, Le(1));
+
+  set_cordz_mean_interval(orig_sample_rate);
+}
+
+TEST(CordzFunctionsTest, ShouldProfileRate) {
+  static constexpr int kDesiredMeanInterval = 1000;
+  static constexpr int kSamples = 10000;
+  int32_t orig_sample_rate = get_cordz_mean_interval();
+
+  set_cordz_mean_interval(kDesiredMeanInterval);
+
+  int64_t sum_of_intervals = 0;
+  for (int i = 0; i < kSamples; i++) {
+    // Setting next_sample to 0 will force cordz_should_profile to generate a
+    // new value for next_sample each iteration.
+    cordz_set_next_sample_for_testing(0);
+    cordz_should_profile();
+    sum_of_intervals += cordz_next_sample;
+  }
+
+  // The sum of independent exponential variables is an Erlang distribution,
+  // which is a gamma distribution where the shape parameter is equal to the
+  // number of summands. The distribution used for cordz_should_profile is
+  // actually floor(Exponential(1/mean)) which introduces bias. However, we can
+  // apply the squint-really-hard correction factor. That is, when mean is
+  // large, then if we squint really hard the shape of the distribution between
+  // N and N+1 looks like a uniform distribution. On average, each value for
+  // next_sample will be about 0.5 lower than we would expect from an
+  // exponential distribution. This squint-really-hard correction approach won't
+  // work when mean is smaller than about 10 but works fine when mean is 1000.
+  //
+  // We can use R to calculate a confidence interval. This
+  // shows how to generate a confidence interval with a false positive rate of
+  // one in a billion.
+  //
+  // $ R -q
+  // > mean = 1000
+  // > kSamples = 10000
+  // > errorRate = 1e-9
+  // > correction = -kSamples / 2
+  // > low = qgamma(errorRate/2, kSamples, 1/mean) + correction
+  // > high = qgamma(1 - errorRate/2, kSamples, 1/mean) + correction
+  // > low
+  // [1] 9396115
+  // > high
+  // [1] 10618100
+  EXPECT_THAT(sum_of_intervals, Ge(9396115));
+  EXPECT_THAT(sum_of_intervals, Le(10618100));
+
+  set_cordz_mean_interval(orig_sample_rate);
+}
+
+#else  // ABSL_INTERNAL_CORDZ_ENABLED
+
+TEST(CordzFunctionsTest, ShouldProfileDisabled) {
+  int32_t orig_sample_rate = get_cordz_mean_interval();
+
+  set_cordz_mean_interval(1);
+  cordz_set_next_sample_for_testing(0);
+  EXPECT_FALSE(cordz_should_profile());
+
+  set_cordz_mean_interval(orig_sample_rate);
+}
+
+#endif  // ABSL_INTERNAL_CORDZ_ENABLED
+
+}  // namespace
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc
new file mode 100644
index 0000000..5297ec8
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc
@@ -0,0 +1,134 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_handle.h"
+
+#include <atomic>
+
+#include "absl/base/internal/raw_logging.h"  // For ABSL_RAW_CHECK
+#include "absl/base/internal/spinlock.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+using ::absl::base_internal::SpinLockHolder;
+
+ABSL_CONST_INIT CordzHandle::Queue CordzHandle::global_queue_(absl::kConstInit);
+
+CordzHandle::CordzHandle(bool is_snapshot) : is_snapshot_(is_snapshot) {
+  if (is_snapshot) {
+    SpinLockHolder lock(&queue_->mutex);
+    CordzHandle* dq_tail = queue_->dq_tail.load(std::memory_order_acquire);
+    if (dq_tail != nullptr) {
+      dq_prev_ = dq_tail;
+      dq_tail->dq_next_ = this;
+    }
+    queue_->dq_tail.store(this, std::memory_order_release);
+  }
+}
+
+CordzHandle::~CordzHandle() {
+  ODRCheck();
+  if (is_snapshot_) {
+    std::vector<CordzHandle*> to_delete;
+    {
+      SpinLockHolder lock(&queue_->mutex);
+      CordzHandle* next = dq_next_;
+      if (dq_prev_ == nullptr) {
+        // We were head of the queue, delete every CordzHandle until we reach
+        // either the end of the list, or a snapshot handle.
+        while (next && !next->is_snapshot_) {
+          to_delete.push_back(next);
+          next = next->dq_next_;
+        }
+      } else {
+        // Another CordzHandle existed before this one, don't delete anything.
+        dq_prev_->dq_next_ = next;
+      }
+      if (next) {
+        next->dq_prev_ = dq_prev_;
+      } else {
+        queue_->dq_tail.store(dq_prev_, std::memory_order_release);
+      }
+    }
+    for (CordzHandle* handle : to_delete) {
+      delete handle;
+    }
+  }
+}
+
+void CordzHandle::Delete(CordzHandle* handle) {
+  if (handle) {
+    handle->ODRCheck();
+    Queue* const queue = handle->queue_;
+    if (!handle->is_snapshot_ && !queue->IsEmpty()) {
+      SpinLockHolder lock(&queue->mutex);
+      CordzHandle* dq_tail = queue->dq_tail.load(std::memory_order_acquire);
+      if (dq_tail != nullptr) {
+        handle->dq_prev_ = dq_tail;
+        dq_tail->dq_next_ = handle;
+        queue->dq_tail.store(handle, std::memory_order_release);
+        return;
+      }
+    }
+    delete handle;
+  }
+}
+
+std::vector<const CordzHandle*> CordzHandle::DiagnosticsGetDeleteQueue() {
+  std::vector<const CordzHandle*> handles;
+  SpinLockHolder lock(&global_queue_.mutex);
+  CordzHandle* dq_tail = global_queue_.dq_tail.load(std::memory_order_acquire);
+  for (const CordzHandle* p = dq_tail; p; p = p->dq_prev_) {
+    handles.push_back(p);
+  }
+  return handles;
+}
+
+bool CordzHandle::DiagnosticsHandleIsSafeToInspect(
+    const CordzHandle* handle) const {
+  ODRCheck();
+  if (!is_snapshot_) return false;
+  if (handle == nullptr) return true;
+  if (handle->is_snapshot_) return false;
+  bool snapshot_found = false;
+  SpinLockHolder lock(&queue_->mutex);
+  for (const CordzHandle* p = queue_->dq_tail; p; p = p->dq_prev_) {
+    if (p == handle) return !snapshot_found;
+    if (p == this) snapshot_found = true;
+  }
+  ABSL_ASSERT(snapshot_found);  // Assert that 'this' is in delete queue.
+  return true;
+}
+
+std::vector<const CordzHandle*>
+CordzHandle::DiagnosticsGetSafeToInspectDeletedHandles() {
+  ODRCheck();
+  std::vector<const CordzHandle*> handles;
+  if (!is_snapshot()) {
+    return handles;
+  }
+
+  SpinLockHolder lock(&queue_->mutex);
+  for (const CordzHandle* p = dq_next_; p != nullptr; p = p->dq_next_) {
+    if (!p->is_snapshot()) {
+      handles.push_back(p);
+    }
+  }
+  return handles;
+}
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h b/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h
new file mode 100644
index 0000000..93076cf
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h
@@ -0,0 +1,120 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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.
+
+#ifndef ABSL_STRINGS_CORDZ_HANDLE_H_
+#define ABSL_STRINGS_CORDZ_HANDLE_H_
+
+#include <atomic>
+#include <vector>
+
+#include "absl/base/config.h"
+#include "absl/base/internal/raw_logging.h"
+#include "absl/base/internal/spinlock.h"
+#include "absl/synchronization/mutex.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// This base class allows multiple types of object (CordzInfo and
+// CordzSampleToken) to exist simultaneously on the delete queue (pointed to by
+// global_dq_tail and traversed using dq_prev_ and dq_next_). The
+// delete queue guarantees that once a profiler creates a CordzSampleToken and
+// has gained visibility into a CordzInfo object, that CordzInfo object will not
+// be deleted prematurely. This allows the profiler to inspect all CordzInfo
+// objects that are alive without needing to hold a global lock.
+class CordzHandle {
+ public:
+  CordzHandle() : CordzHandle(false) {}
+
+  bool is_snapshot() const { return is_snapshot_; }
+
+  // Deletes the provided instance, or puts it on the delete queue to be deleted
+  // once there are no more sample tokens (snapshot) instances potentially
+  // referencing the instance. `handle` may be null.
+  static void Delete(CordzHandle* handle);
+
+  // Returns the current entries in the delete queue in LIFO order.
+  static std::vector<const CordzHandle*> DiagnosticsGetDeleteQueue();
+
+  // Returns true if the provided handle is nullptr or guarded by this handle.
+  // Since the CordzSnapshot token is itself a CordzHandle, this method will
+  // allow tests to check if that token is keeping an arbitrary CordzHandle
+  // alive.
+  bool DiagnosticsHandleIsSafeToInspect(const CordzHandle* handle) const;
+
+  // Returns the current entries in the delete queue, in LIFO order, that are
+  // protected by this. CordzHandle objects are only placed on the delete queue
+  // after CordzHandle::Delete is called with them as an argument. Only
+  // CordzHandle objects that are not also CordzSnapshot objects will be
+  // included in the return vector. For each of the handles in the return
+  // vector, the earliest that their memory can be freed is when this
+  // CordzSnapshot object is deleted.
+  std::vector<const CordzHandle*> DiagnosticsGetSafeToInspectDeletedHandles();
+
+ protected:
+  explicit CordzHandle(bool is_snapshot);
+  virtual ~CordzHandle();
+
+ private:
+  // Global queue data. CordzHandle stores a pointer to the global queue
+  // instance to harden against ODR violations.
+  struct Queue {
+    constexpr explicit Queue(absl::ConstInitType)
+        : mutex(absl::kConstInit,
+                absl::base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL) {}
+
+    absl::base_internal::SpinLock mutex;
+    std::atomic<CordzHandle*> dq_tail ABSL_GUARDED_BY(mutex){nullptr};
+
+    // Returns true if this delete queue is empty. This method does not acquire
+    // the lock, but does a 'load acquire' observation on the delete queue tail.
+    // It is used inside Delete() to check for the presence of a delete queue
+    // without holding the lock. The assumption is that the caller is in the
+    // state of 'being deleted', and can not be newly discovered by a concurrent
+    // 'being constructed' snapshot instance. Practically, this means that any
+    // such discovery (`find`, 'first' or 'next', etc) must have proper 'happens
+    // before / after' semantics and atomic fences.
+    bool IsEmpty() const ABSL_NO_THREAD_SAFETY_ANALYSIS {
+      return dq_tail.load(std::memory_order_acquire) == nullptr;
+    }
+  };
+
+  void ODRCheck() const {
+#ifndef NDEBUG
+    ABSL_RAW_CHECK(queue_ == &global_queue_, "ODR violation in Cord");
+#endif
+  }
+
+  ABSL_CONST_INIT static Queue global_queue_;
+  Queue* const queue_ = &global_queue_;
+  const bool is_snapshot_;
+
+  // dq_prev_ and dq_next_ require the global queue mutex to be held.
+  // Unfortunately we can't use thread annotations such that the thread safety
+  // analysis understands that queue_ and global_queue_ are one and the same.
+  CordzHandle* dq_prev_  = nullptr;
+  CordzHandle* dq_next_ = nullptr;
+};
+
+class CordzSnapshot : public CordzHandle {
+ public:
+  CordzSnapshot() : CordzHandle(true) {}
+};
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_CORDZ_HANDLE_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_handle_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_handle_test.cc
new file mode 100644
index 0000000..c04240e
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_handle_test.cc
@@ -0,0 +1,253 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_handle.h"
+
+#include <random>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/memory/memory.h"
+#include "absl/synchronization/internal/thread_pool.h"
+#include "absl/synchronization/notification.h"
+#include "absl/time/clock.h"
+#include "absl/time/time.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+using ::testing::ElementsAre;
+using ::testing::Gt;
+using ::testing::IsEmpty;
+using ::testing::SizeIs;
+
+// Local less verbose helper
+std::vector<const CordzHandle*> DeleteQueue() {
+  return CordzHandle::DiagnosticsGetDeleteQueue();
+}
+
+struct CordzHandleDeleteTracker : public CordzHandle {
+  bool* deleted;
+  explicit CordzHandleDeleteTracker(bool* deleted) : deleted(deleted) {}
+  ~CordzHandleDeleteTracker() override { *deleted = true; }
+};
+
+TEST(CordzHandleTest, DeleteQueueIsEmpty) {
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+}
+
+TEST(CordzHandleTest, CordzHandleCreateDelete) {
+  bool deleted = false;
+  auto* handle = new CordzHandleDeleteTracker(&deleted);
+  EXPECT_FALSE(handle->is_snapshot());
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+
+  CordzHandle::Delete(handle);
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+  EXPECT_TRUE(deleted);
+}
+
+TEST(CordzHandleTest, CordzSnapshotCreateDelete) {
+  auto* snapshot = new CordzSnapshot();
+  EXPECT_TRUE(snapshot->is_snapshot());
+  EXPECT_THAT(DeleteQueue(), ElementsAre(snapshot));
+  delete snapshot;
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+}
+
+TEST(CordzHandleTest, CordzHandleCreateDeleteWithSnapshot) {
+  bool deleted = false;
+  auto* snapshot = new CordzSnapshot();
+  auto* handle = new CordzHandleDeleteTracker(&deleted);
+
+  CordzHandle::Delete(handle);
+  EXPECT_THAT(DeleteQueue(), ElementsAre(handle, snapshot));
+  EXPECT_FALSE(deleted);
+
+  delete snapshot;
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+  EXPECT_TRUE(deleted);
+}
+
+TEST(CordzHandleTest, MultiSnapshot) {
+  bool deleted[3] = {false, false, false};
+
+  CordzSnapshot* snapshot[3];
+  CordzHandleDeleteTracker* handle[3];
+  for (int i = 0; i < 3; ++i) {
+    snapshot[i] = new CordzSnapshot();
+    handle[i] = new CordzHandleDeleteTracker(&deleted[i]);
+    CordzHandle::Delete(handle[i]);
+  }
+
+  EXPECT_THAT(DeleteQueue(), ElementsAre(handle[2], snapshot[2], handle[1],
+                                         snapshot[1], handle[0], snapshot[0]));
+  EXPECT_THAT(deleted, ElementsAre(false, false, false));
+
+  delete snapshot[1];
+  EXPECT_THAT(DeleteQueue(), ElementsAre(handle[2], snapshot[2], handle[1],
+                                         handle[0], snapshot[0]));
+  EXPECT_THAT(deleted, ElementsAre(false, false, false));
+
+  delete snapshot[0];
+  EXPECT_THAT(DeleteQueue(), ElementsAre(handle[2], snapshot[2]));
+  EXPECT_THAT(deleted, ElementsAre(true, true, false));
+
+  delete snapshot[2];
+  EXPECT_THAT(DeleteQueue(), SizeIs(0));
+  EXPECT_THAT(deleted, ElementsAre(true, true, deleted));
+}
+
+TEST(CordzHandleTest, DiagnosticsHandleIsSafeToInspect) {
+  CordzSnapshot snapshot1;
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(nullptr));
+
+  auto* handle1 = new CordzHandle();
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(handle1));
+
+  CordzHandle::Delete(handle1);
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(handle1));
+
+  CordzSnapshot snapshot2;
+  auto* handle2 = new CordzHandle();
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(handle1));
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(handle2));
+  EXPECT_FALSE(snapshot2.DiagnosticsHandleIsSafeToInspect(handle1));
+  EXPECT_TRUE(snapshot2.DiagnosticsHandleIsSafeToInspect(handle2));
+
+  CordzHandle::Delete(handle2);
+  EXPECT_TRUE(snapshot1.DiagnosticsHandleIsSafeToInspect(handle1));
+}
+
+TEST(CordzHandleTest, DiagnosticsGetSafeToInspectDeletedHandles) {
+  EXPECT_THAT(DeleteQueue(), IsEmpty());
+
+  auto* handle = new CordzHandle();
+  auto* snapshot1 = new CordzSnapshot();
+
+  // snapshot1 should be able to see handle.
+  EXPECT_THAT(DeleteQueue(), ElementsAre(snapshot1));
+  EXPECT_TRUE(snapshot1->DiagnosticsHandleIsSafeToInspect(handle));
+  EXPECT_THAT(snapshot1->DiagnosticsGetSafeToInspectDeletedHandles(),
+              IsEmpty());
+
+  // This handle will be safe to inspect as long as snapshot1 is alive. However,
+  // since only snapshot1 can prove that it's alive, it will be hidden from
+  // snapshot2.
+  CordzHandle::Delete(handle);
+
+  // This snapshot shouldn't be able to see handle because handle was already
+  // sent to Delete.
+  auto* snapshot2 = new CordzSnapshot();
+
+  // DeleteQueue elements are LIFO order.
+  EXPECT_THAT(DeleteQueue(), ElementsAre(snapshot2, handle, snapshot1));
+
+  EXPECT_TRUE(snapshot1->DiagnosticsHandleIsSafeToInspect(handle));
+  EXPECT_FALSE(snapshot2->DiagnosticsHandleIsSafeToInspect(handle));
+
+  EXPECT_THAT(snapshot1->DiagnosticsGetSafeToInspectDeletedHandles(),
+              ElementsAre(handle));
+  EXPECT_THAT(snapshot2->DiagnosticsGetSafeToInspectDeletedHandles(),
+              IsEmpty());
+
+  CordzHandle::Delete(snapshot1);
+  EXPECT_THAT(DeleteQueue(), ElementsAre(snapshot2));
+
+  CordzHandle::Delete(snapshot2);
+  EXPECT_THAT(DeleteQueue(), IsEmpty());
+}
+
+// Create and delete CordzHandle and CordzSnapshot objects in multiple threads
+// so that tsan has some time to chew on it and look for memory problems.
+TEST(CordzHandleTest, MultiThreaded) {
+  Notification stop;
+  static constexpr int kNumThreads = 4;
+  // Keep the number of handles relatively small so that the test will naturally
+  // transition to an empty delete queue during the test. If there are, say, 100
+  // handles, that will virtually never happen. With 10 handles and around 50k
+  // iterations in each of 4 threads, the delete queue appears to become empty
+  // around 200 times.
+  static constexpr int kNumHandles = 10;
+
+  // Each thread is going to pick a random index and atomically swap its
+  // CordzHandle with one in handles. This way, each thread can avoid
+  // manipulating a CordzHandle that might be operated upon in another thread.
+  std::vector<std::atomic<CordzHandle*>> handles(kNumHandles);
+
+  absl::synchronization_internal::ThreadPool pool(kNumThreads);
+
+  for (int i = 0; i < kNumThreads; ++i) {
+    pool.Schedule([&stop, &handles]() {
+      std::minstd_rand gen;
+      std::uniform_int_distribution<int> dist_type(0, 2);
+      std::uniform_int_distribution<int> dist_handle(0, kNumHandles - 1);
+      size_t max_safe_to_inspect = 0;
+      while (!stop.HasBeenNotified()) {
+        CordzHandle* handle;
+        switch (dist_type(gen)) {
+          case 0:
+            handle = new CordzHandle();
+            break;
+          case 1:
+            handle = new CordzSnapshot();
+            break;
+          default:
+            handle = nullptr;
+            break;
+        }
+        CordzHandle* old_handle = handles[dist_handle(gen)].exchange(handle);
+        if (old_handle != nullptr) {
+          std::vector<const CordzHandle*> safe_to_inspect =
+              old_handle->DiagnosticsGetSafeToInspectDeletedHandles();
+          for (const CordzHandle* handle : safe_to_inspect) {
+            // We're in a tight loop, so don't generate too many error messages.
+            ASSERT_FALSE(handle->is_snapshot());
+          }
+          if (safe_to_inspect.size() > max_safe_to_inspect) {
+            max_safe_to_inspect = safe_to_inspect.size();
+          }
+        }
+        CordzHandle::Delete(old_handle);
+      }
+
+      // Confirm that the test did *something*. This check will be satisfied as
+      // long as this thread has delete a CordzSnapshot object and a
+      // non-snapshot CordzHandle was deleted after the CordzSnapshot was
+      // created. This max_safe_to_inspect count will often reach around 30
+      // (assuming 4 threads and 10 slots for live handles). Don't use a strict
+      // bound to avoid making this test flaky.
+      EXPECT_THAT(max_safe_to_inspect, Gt(0));
+
+      // Have each thread attempt to clean up everything. Some thread will be
+      // the last to reach this cleanup code, and it will be guaranteed to clean
+      // up everything because nothing remains to create new handles.
+      for (size_t i = 0; i < handles.size(); i++) {
+        CordzHandle* handle = handles[i].exchange(nullptr);
+        CordzHandle::Delete(handle);
+      }
+  });
+  }
+
+  // The threads will hammer away.  Give it a little bit of time for tsan to
+  // spot errors.
+  absl::SleepFor(absl::Seconds(3));
+  stop.Notify();
+}
+
+}  // namespace
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc
new file mode 100644
index 0000000..0461ec4
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc
@@ -0,0 +1,197 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_info.h"
+
+#include "absl/base/config.h"
+#include "absl/base/internal/spinlock.h"
+#include "absl/debugging/stacktrace.h"
+#include "absl/strings/internal/cord_internal.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+#include "absl/synchronization/mutex.h"
+#include "absl/types/span.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+using ::absl::base_internal::SpinLockHolder;
+
+constexpr int CordzInfo::kMaxStackDepth;
+
+ABSL_CONST_INIT CordzInfo::List CordzInfo::global_list_{absl::kConstInit};
+
+CordzInfo* CordzInfo::Head(const CordzSnapshot& snapshot) {
+  ABSL_ASSERT(snapshot.is_snapshot());
+
+  // We can do an 'unsafe' load of 'head', as we are guaranteed that the
+  // instance it points to is kept alive by the provided CordzSnapshot, so we
+  // can simply return the current value using an acquire load.
+  // We do enforce in DEBUG builds that the 'head' value is present in the
+  // delete queue: ODR violations may lead to 'snapshot' and 'global_list_'
+  // being in different libraries / modules.
+  CordzInfo* head = global_list_.head.load(std::memory_order_acquire);
+  ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(head));
+  return head;
+}
+
+CordzInfo* CordzInfo::Next(const CordzSnapshot& snapshot) const {
+  ABSL_ASSERT(snapshot.is_snapshot());
+
+  // Similar to the 'Head()' function, we do not need a mutex here.
+  CordzInfo* next = ci_next_.load(std::memory_order_acquire);
+  ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(this));
+  ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(next));
+  return next;
+}
+
+void CordzInfo::TrackCord(InlineData& cord, MethodIdentifier method) {
+  assert(cord.is_tree());
+  assert(!cord.is_profiled());
+  CordzInfo* cordz_info = new CordzInfo(cord.as_tree(), nullptr, method);
+  cord.set_cordz_info(cordz_info);
+  cordz_info->Track();
+}
+
+void CordzInfo::TrackCord(InlineData& cord, const InlineData& src,
+                          MethodIdentifier method) {
+  assert(cord.is_tree());
+  assert(!cord.is_profiled());
+  auto* info = src.is_tree() && src.is_profiled() ? src.cordz_info() : nullptr;
+  CordzInfo* cordz_info = new CordzInfo(cord.as_tree(), info, method);
+  cord.set_cordz_info(cordz_info);
+  cordz_info->Track();
+}
+
+CordzInfo::MethodIdentifier CordzInfo::GetParentMethod(const CordzInfo* src) {
+  if (src == nullptr) return MethodIdentifier::kUnknown;
+  return src->parent_method_ != MethodIdentifier::kUnknown ? src->parent_method_
+                                                           : src->method_;
+}
+
+int CordzInfo::FillParentStack(const CordzInfo* src, void** stack) {
+  assert(stack);
+  if (src == nullptr) return 0;
+  if (src->parent_stack_depth_) {
+    memcpy(stack, src->parent_stack_, src->parent_stack_depth_ * sizeof(void*));
+    return src->parent_stack_depth_;
+  }
+  memcpy(stack, src->stack_, src->stack_depth_ * sizeof(void*));
+  return src->stack_depth_;
+}
+
+CordzInfo::CordzInfo(CordRep* rep, const CordzInfo* src,
+                     MethodIdentifier method)
+    : rep_(rep),
+      stack_depth_(absl::GetStackTrace(stack_, /*max_depth=*/kMaxStackDepth,
+                                       /*skip_count=*/1)),
+      parent_stack_depth_(FillParentStack(src, parent_stack_)),
+      method_(method),
+      parent_method_(GetParentMethod(src)),
+      create_time_(absl::Now()),
+      size_(rep->length) {
+  update_tracker_.LossyAdd(method);
+}
+
+CordzInfo::~CordzInfo() {
+  // `rep_` is potentially kept alive if CordzInfo is included
+  // in a collection snapshot (which should be rare).
+  if (ABSL_PREDICT_FALSE(rep_)) {
+    CordRep::Unref(rep_);
+  }
+}
+
+void CordzInfo::Track() {
+  SpinLockHolder l(&list_->mutex);
+
+  CordzInfo* const head = list_->head.load(std::memory_order_acquire);
+  if (head != nullptr) {
+    head->ci_prev_.store(this, std::memory_order_release);
+  }
+  ci_next_.store(head, std::memory_order_release);
+  list_->head.store(this, std::memory_order_release);
+}
+
+void CordzInfo::Untrack() {
+  {
+    // TODO(b/117940323): change this to assuming ownership instead once all
+    // Cord logic is properly keeping `rep_` in sync with the Cord root rep.
+    absl::MutexLock lock(&mutex_);
+    rep_ = nullptr;
+  }
+
+  ODRCheck();
+  {
+    SpinLockHolder l(&list_->mutex);
+
+    CordzInfo* const head = list_->head.load(std::memory_order_acquire);
+    CordzInfo* const next = ci_next_.load(std::memory_order_acquire);
+    CordzInfo* const prev = ci_prev_.load(std::memory_order_acquire);
+
+    if (next) {
+      ABSL_ASSERT(next->ci_prev_.load(std::memory_order_acquire) == this);
+      next->ci_prev_.store(prev, std::memory_order_release);
+    }
+    if (prev) {
+      ABSL_ASSERT(head != this);
+      ABSL_ASSERT(prev->ci_next_.load(std::memory_order_acquire) == this);
+      prev->ci_next_.store(next, std::memory_order_release);
+    } else {
+      ABSL_ASSERT(head == this);
+      list_->head.store(next, std::memory_order_release);
+    }
+  }
+  CordzHandle::Delete(this);
+}
+
+void CordzInfo::Lock(MethodIdentifier method)
+    ABSL_EXCLUSIVE_LOCK_FUNCTION(mutex_) {
+  mutex_.Lock();
+  update_tracker_.LossyAdd(method);
+  assert(rep_);
+}
+
+void CordzInfo::Unlock() ABSL_UNLOCK_FUNCTION(mutex_) {
+  bool tracked = rep_ != nullptr;
+  if (rep_) {
+    size_.store(rep_->length);
+  }
+  mutex_.Unlock();
+  if (!tracked) {
+    Untrack();
+  }
+}
+
+absl::Span<void* const> CordzInfo::GetStack() const {
+  return absl::MakeConstSpan(stack_, stack_depth_);
+}
+
+absl::Span<void* const> CordzInfo::GetParentStack() const {
+  return absl::MakeConstSpan(parent_stack_, parent_stack_depth_);
+}
+
+CordzStatistics CordzInfo::GetCordzStatistics() const {
+  CordzStatistics stats;
+  stats.method = method_;
+  stats.parent_method = parent_method_;
+  stats.update_tracker = update_tracker_;
+  stats.size = size_.load(std::memory_order_relaxed);
+  return stats;
+}
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_info.h b/third_party/abseil-cpp/absl/strings/internal/cordz_info.h
new file mode 100644
index 0000000..f7682cb
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_info.h
@@ -0,0 +1,251 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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.
+
+#ifndef ABSL_STRINGS_CORDZ_INFO_H_
+#define ABSL_STRINGS_CORDZ_INFO_H_
+
+#include <atomic>
+#include <cstdint>
+#include <functional>
+
+#include "absl/base/config.h"
+#include "absl/base/internal/raw_logging.h"
+#include "absl/base/internal/spinlock.h"
+#include "absl/base/thread_annotations.h"
+#include "absl/strings/internal/cord_internal.h"
+#include "absl/strings/internal/cordz_functions.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+#include "absl/synchronization/mutex.h"
+#include "absl/types/span.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// CordzInfo tracks a profiled Cord. Each of these objects can be in two places.
+// If a Cord is alive, the CordzInfo will be in the global_cordz_infos map, and
+// can also be retrieved via the linked list starting with
+// global_cordz_infos_head and continued via the cordz_info_next() method. When
+// a Cord has reached the end of its lifespan, the CordzInfo object will be
+// migrated out of the global_cordz_infos list and the global_cordz_infos_map,
+// and will either be deleted or appended to the global_delete_queue. If it is
+// placed on the global_delete_queue, the CordzInfo object will be cleaned in
+// the destructor of a CordzSampleToken object.
+class ABSL_LOCKABLE CordzInfo : public CordzHandle {
+ public:
+  using MethodIdentifier = CordzUpdateTracker::MethodIdentifier;
+
+  // TrackCord creates a CordzInfo instance which tracks important metrics of
+  // a sampled cord, and stores the created CordzInfo instance into `cord'. All
+  // CordzInfo instances are placed in a global list which is used to discover
+  // and snapshot all actively tracked cords. Callers are responsible for
+  // calling UntrackCord() before the tracked Cord instance is deleted, or to
+  // stop tracking the sampled Cord. Callers are also responsible for guarding
+  // changes to the 'tree' value of a Cord (InlineData.tree) through the Lock()
+  // and Unlock() calls. Any change resulting in a new tree value for the cord
+  // requires a call to SetCordRep() before the old tree has been unreffed
+  // and/or deleted. `method` identifies the Cord public API method initiating
+  // the cord to be sampled.
+  // Requires `cord` to hold a tree, and `cord.cordz_info()` to be null.
+  static void TrackCord(InlineData& cord, MethodIdentifier method);
+
+  // Identical to TrackCord(), except that this function fills the
+  // `parent_stack` and `parent_method` properties of the returned CordzInfo
+  // instance from the provided `src` instance if `src` is sampled.
+  // This function should be used for sampling 'copy constructed' cords.
+  static void TrackCord(InlineData& cord, const InlineData& src,
+                        MethodIdentifier method);
+
+  // Maybe sample the cord identified by 'cord' for method 'method'.
+  // Uses `cordz_should_profile` to randomly pick cords to be sampled, and if
+  // so, invokes `TrackCord` to start sampling `cord`.
+  static void MaybeTrackCord(InlineData& cord, MethodIdentifier method);
+  static void MaybeTrackCord(InlineData& cord, const InlineData& src,
+                             MethodIdentifier method);
+
+  // Stops tracking changes for a sampled cord, and deletes the provided info.
+  // This function must be called before the sampled cord instance is deleted,
+  // and before the root cordrep of the sampled cord is unreffed.
+  // This function may extend the lifetime of the cordrep in cases where the
+  // CordInfo instance is being held by a concurrent collection thread.
+  void Untrack();
+
+  // Invokes UntrackCord() on `info` if `info` is not null.
+  static void MaybeUntrackCord(CordzInfo* info);
+
+  CordzInfo() = delete;
+  CordzInfo(const CordzInfo&) = delete;
+  CordzInfo& operator=(const CordzInfo&) = delete;
+
+  // Retrieves the oldest existing CordzInfo.
+  static CordzInfo* Head(const CordzSnapshot& snapshot)
+      ABSL_NO_THREAD_SAFETY_ANALYSIS;
+
+  // Retrieves the next oldest existing CordzInfo older than 'this' instance.
+  CordzInfo* Next(const CordzSnapshot& snapshot) const
+      ABSL_NO_THREAD_SAFETY_ANALYSIS;
+
+  // Locks this instance for the update identified by `method`.
+  // Increases the count for `method` in `update_tracker`.
+  void Lock(MethodIdentifier method) ABSL_EXCLUSIVE_LOCK_FUNCTION(mutex_);
+
+  // Unlocks this instance. If the contained `rep` has been set to null
+  // indicating the Cord has been cleared or is otherwise no longer sampled,
+  // then this method will delete this CordzInfo instance.
+  void Unlock() ABSL_UNLOCK_FUNCTION(mutex_);
+
+  // Asserts that this CordzInfo instance is locked.
+  void AssertHeld() ABSL_ASSERT_EXCLUSIVE_LOCK(mutex_);
+
+  // Updates the `rep' property of this instance. This methods is invoked by
+  // Cord logic each time the root node of a sampled Cord changes, and before
+  // the old root reference count is deleted. This guarantees that collection
+  // code can always safely take a reference on the tracked cord.
+  // Requires a lock to be held through the `Lock()` method.
+  // TODO(b/117940323): annotate with ABSL_EXCLUSIVE_LOCKS_REQUIRED once all
+  // Cord code is in a state where this can be proven true by the compiler.
+  void SetCordRep(CordRep* rep);
+
+  // Returns the current value of `rep_` for testing purposes only.
+  CordRep* GetCordRepForTesting() const ABSL_NO_THREAD_SAFETY_ANALYSIS {
+    return rep_;
+  }
+
+  // Returns the stack trace for where the cord was first sampled. Cords are
+  // potentially sampled when they promote from an inlined cord to a tree or
+  // ring representation, which is not necessarily the location where the cord
+  // was first created. Some cords are created as inlined cords, and only as
+  // data is added do they become a non-inlined cord. However, typically the
+  // location represents reasonably well where the cord is 'created'.
+  absl::Span<void* const> GetStack() const;
+
+  // Returns the stack trace for a sampled cord's 'parent stack trace'. This
+  // value may be set if the cord is sampled (promoted) after being created
+  // from, or being assigned the value of an existing (sampled) cord.
+  absl::Span<void* const> GetParentStack() const;
+
+  // Retrieves the CordzStatistics associated with this Cord. The statistics
+  // are only updated when a Cord goes through a mutation, such as an Append
+  // or RemovePrefix.
+  CordzStatistics GetCordzStatistics() const;
+
+  // Records size metric for this CordzInfo instance.
+  void RecordMetrics(int64_t size) {
+    size_.store(size, std::memory_order_relaxed);
+  }
+
+ private:
+  // Global cordz info list. CordzInfo stores a pointer to the global list
+  // instance to harden against ODR violations.
+  struct List {
+    constexpr explicit List(absl::ConstInitType)
+        : mutex(absl::kConstInit,
+                absl::base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL) {}
+
+    absl::base_internal::SpinLock mutex;
+    std::atomic<CordzInfo*> head ABSL_GUARDED_BY(mutex){nullptr};
+  };
+
+  static constexpr int kMaxStackDepth = 64;
+
+  explicit CordzInfo(CordRep* rep, const CordzInfo* src,
+                     MethodIdentifier method);
+  ~CordzInfo() override;
+
+  void Track();
+
+  // Returns the parent method from `src`, which is either `parent_method_` or
+  // `method_` depending on `parent_method_` being kUnknown.
+  // Returns kUnknown if `src` is null.
+  static MethodIdentifier GetParentMethod(const CordzInfo* src);
+
+  // Fills the provided stack from `src`, copying either `parent_stack_` or
+  // `stack_` depending on `parent_stack_` being empty, returning the size of
+  // the parent stack.
+  // Returns 0 if `src` is null.
+  static int FillParentStack(const CordzInfo* src, void** stack);
+
+  void ODRCheck() const {
+#ifndef NDEBUG
+    ABSL_RAW_CHECK(list_ == &global_list_, "ODR violation in Cord");
+#endif
+  }
+
+  ABSL_CONST_INIT static List global_list_;
+  List* const list_ = &global_list_;
+
+  // ci_prev_ and ci_next_ require the global list mutex to be held.
+  // Unfortunately we can't use thread annotations such that the thread safety
+  // analysis understands that list_ and global_list_ are one and the same.
+  std::atomic<CordzInfo*> ci_prev_{nullptr};
+  std::atomic<CordzInfo*> ci_next_{nullptr};
+
+  mutable absl::Mutex mutex_;
+  CordRep* rep_ ABSL_GUARDED_BY(mutex_);
+
+  void* stack_[kMaxStackDepth];
+  void* parent_stack_[kMaxStackDepth];
+  const int stack_depth_;
+  const int parent_stack_depth_;
+  const MethodIdentifier method_;
+  const MethodIdentifier parent_method_;
+  CordzUpdateTracker update_tracker_;
+  const absl::Time create_time_;
+
+  // Last recorded size for the cord.
+  std::atomic<int64_t> size_{0};
+};
+
+inline ABSL_ATTRIBUTE_ALWAYS_INLINE void CordzInfo::MaybeTrackCord(
+    InlineData& cord, MethodIdentifier method) {
+  if (ABSL_PREDICT_FALSE(cordz_should_profile())) {
+    TrackCord(cord, method);
+  }
+}
+
+inline ABSL_ATTRIBUTE_ALWAYS_INLINE void CordzInfo::MaybeTrackCord(
+    InlineData& cord, const InlineData& src, MethodIdentifier method) {
+  if (ABSL_PREDICT_FALSE(cordz_should_profile())) {
+    TrackCord(cord, src, method);
+  }
+}
+
+inline ABSL_ATTRIBUTE_ALWAYS_INLINE void CordzInfo::MaybeUntrackCord(
+    CordzInfo* info) {
+  if (ABSL_PREDICT_FALSE(info)) {
+    info->Untrack();
+  }
+}
+
+inline void CordzInfo::AssertHeld() ABSL_ASSERT_EXCLUSIVE_LOCK(mutex_) {
+#ifndef NDEBUG
+  mutex_.AssertHeld();
+#endif
+}
+
+inline void CordzInfo::SetCordRep(CordRep* rep) {
+  AssertHeld();
+  rep_ = rep;
+  if (rep) {
+    size_.store(rep->length);
+  }
+}
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_CORDZ_INFO_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_info_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_info_test.cc
new file mode 100644
index 0000000..5eaf4b9
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_info_test.cc
@@ -0,0 +1,302 @@
+// Copyright 2019 The Abseil Authors
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_info.h"
+
+#include <vector>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+#include "absl/debugging/stacktrace.h"
+#include "absl/debugging/symbolize.h"
+#include "absl/strings/cordz_test_helpers.h"
+#include "absl/strings/internal/cord_rep_flat.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_statistics.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+#include "absl/strings/str_cat.h"
+#include "absl/types/span.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+using ::testing::ElementsAre;
+using ::testing::Eq;
+using ::testing::HasSubstr;
+using ::testing::Ne;
+
+// Used test values
+auto constexpr kUnknownMethod = CordzUpdateTracker::kUnknown;
+auto constexpr kTrackCordMethod = CordzUpdateTracker::kConstructorString;
+auto constexpr kChildMethod = CordzUpdateTracker::kConstructorCord;
+auto constexpr kUpdateMethod = CordzUpdateTracker::kAppendString;
+
+// Local less verbose helper
+std::vector<const CordzHandle*> DeleteQueue() {
+  return CordzHandle::DiagnosticsGetDeleteQueue();
+}
+
+std::string FormatStack(absl::Span<void* const> raw_stack) {
+  static constexpr size_t buf_size = 1 << 14;
+  std::unique_ptr<char[]> buf(new char[buf_size]);
+  std::string output;
+  for (void* stackp : raw_stack) {
+    if (absl::Symbolize(stackp, buf.get(), buf_size)) {
+      absl::StrAppend(&output, "    ", buf.get(), "\n");
+    }
+  }
+  return output;
+}
+
+TEST(CordzInfoTest, TrackCord) {
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+  ASSERT_THAT(info, Ne(nullptr));
+  EXPECT_FALSE(info->is_snapshot());
+  EXPECT_THAT(CordzInfo::Head(CordzSnapshot()), Eq(info));
+  EXPECT_THAT(info->GetCordRepForTesting(), Eq(data.rep.rep));
+  info->Untrack();
+}
+
+TEST(CordzInfoTest, UntrackCord) {
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+
+  CordzSnapshot snapshot;
+  info->Untrack();
+  EXPECT_THAT(CordzInfo::Head(CordzSnapshot()), Eq(nullptr));
+  EXPECT_THAT(info->GetCordRepForTesting(), Eq(nullptr));
+  EXPECT_THAT(DeleteQueue(), ElementsAre(info, &snapshot));
+}
+
+TEST(CordzInfoTest, SetCordRep) {
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+
+  TestCordRep rep;
+  info->Lock(CordzUpdateTracker::kAppendCord);
+  info->SetCordRep(rep.rep);
+  info->Unlock();
+  EXPECT_THAT(info->GetCordRepForTesting(), Eq(rep.rep));
+
+  info->Untrack();
+}
+
+TEST(CordzInfoTest, SetCordRepNullUntracksCordOnUnlock) {
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+
+  info->Lock(CordzUpdateTracker::kAppendString);
+  info->SetCordRep(nullptr);
+  EXPECT_THAT(info->GetCordRepForTesting(), Eq(nullptr));
+  EXPECT_THAT(CordzInfo::Head(CordzSnapshot()), Eq(info));
+
+  info->Unlock();
+  EXPECT_THAT(CordzInfo::Head(CordzSnapshot()), Eq(nullptr));
+}
+
+#if GTEST_HAS_DEATH_TEST
+
+TEST(CordzInfoTest, SetCordRepRequiresMutex) {
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+  TestCordRep rep;
+  EXPECT_DEBUG_DEATH(info->SetCordRep(rep.rep), ".*");
+  info->Untrack();
+}
+
+#endif  // GTEST_HAS_DEATH_TEST
+
+TEST(CordzInfoTest, TrackUntrackHeadFirstV2) {
+  CordzSnapshot snapshot;
+  EXPECT_THAT(CordzInfo::Head(snapshot), Eq(nullptr));
+
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info1 = data.data.cordz_info();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info1));
+  EXPECT_THAT(info1->Next(snapshot), Eq(nullptr));
+
+  TestCordData data2;
+  CordzInfo::TrackCord(data2.data, kTrackCordMethod);
+  CordzInfo* info2 = data2.data.cordz_info();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info2));
+  EXPECT_THAT(info2->Next(snapshot), Eq(info1));
+  EXPECT_THAT(info1->Next(snapshot), Eq(nullptr));
+
+  info2->Untrack();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info1));
+  EXPECT_THAT(info1->Next(snapshot), Eq(nullptr));
+
+  info1->Untrack();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(nullptr));
+}
+
+TEST(CordzInfoTest, TrackUntrackTailFirstV2) {
+  CordzSnapshot snapshot;
+  EXPECT_THAT(CordzInfo::Head(snapshot), Eq(nullptr));
+
+  TestCordData data;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info1 = data.data.cordz_info();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info1));
+  EXPECT_THAT(info1->Next(snapshot), Eq(nullptr));
+
+  TestCordData data2;
+  CordzInfo::TrackCord(data2.data, kTrackCordMethod);
+  CordzInfo* info2 = data2.data.cordz_info();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info2));
+  EXPECT_THAT(info2->Next(snapshot), Eq(info1));
+  EXPECT_THAT(info1->Next(snapshot), Eq(nullptr));
+
+  info1->Untrack();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(info2));
+  EXPECT_THAT(info2->Next(snapshot), Eq(nullptr));
+
+  info2->Untrack();
+  ASSERT_THAT(CordzInfo::Head(snapshot), Eq(nullptr));
+}
+
+TEST(CordzInfoTest, StackV2) {
+  TestCordData data;
+  // kMaxStackDepth is intentionally less than 64 (which is the max depth that
+  // Cordz will record) because if the actual stack depth is over 64
+  // (which it is on Apple platforms) then the expected_stack will end up
+  // catching a few frames at the end that the actual_stack didn't get and
+  // it will no longer be subset. At the time of this writing 58 is the max
+  // that will allow this test to pass (with a minimum os version of iOS 9), so
+  // rounded down to 50 to hopefully not run into this in the future if Apple
+  // makes small modifications to its testing stack. 50 is sufficient to prove
+  // that we got a decent stack.
+  static constexpr int kMaxStackDepth = 50;
+  CordzInfo::TrackCord(data.data, kTrackCordMethod);
+  CordzInfo* info = data.data.cordz_info();
+  std::vector<void*> local_stack;
+  local_stack.resize(kMaxStackDepth);
+  // In some environments we don't get stack traces. For example in Android
+  // absl::GetStackTrace will return 0 indicating it didn't find any stack. The
+  // resultant formatted stack will be "", but that still equals the stack
+  // recorded in CordzInfo, which is also empty. The skip_count is 1 so that the
+  // line number of the current stack isn't included in the HasSubstr check.
+  local_stack.resize(absl::GetStackTrace(local_stack.data(), kMaxStackDepth,
+                                         /*skip_count=*/1));
+
+  std::string got_stack = FormatStack(info->GetStack());
+  std::string expected_stack = FormatStack(local_stack);
+  // If TrackCord is inlined, got_stack should match expected_stack. If it isn't
+  // inlined, got_stack should include an additional frame not present in
+  // expected_stack. Either way, expected_stack should be a substring of
+  // got_stack.
+  EXPECT_THAT(got_stack, HasSubstr(expected_stack));
+
+  info->Untrack();
+}
+
+// Local helper functions to get different stacks for child and parent.
+CordzInfo* TrackChildCord(InlineData& data, const InlineData& parent) {
+  CordzInfo::TrackCord(data, parent, kChildMethod);
+  return data.cordz_info();
+}
+CordzInfo* TrackParentCord(InlineData& data) {
+  CordzInfo::TrackCord(data, kTrackCordMethod);
+  return data.cordz_info();
+}
+
+TEST(CordzInfoTest, GetStatistics) {
+  TestCordData data;
+  CordzInfo* info = TrackParentCord(data.data);
+
+  CordzStatistics statistics = info->GetCordzStatistics();
+  EXPECT_THAT(statistics.size, Eq(data.rep.rep->length));
+  EXPECT_THAT(statistics.method, Eq(kTrackCordMethod));
+  EXPECT_THAT(statistics.parent_method, Eq(kUnknownMethod));
+  EXPECT_THAT(statistics.update_tracker.Value(kTrackCordMethod), Eq(1));
+
+  info->Untrack();
+}
+
+TEST(CordzInfoTest, LockCountsMethod) {
+  TestCordData data;
+  CordzInfo* info = TrackParentCord(data.data);
+
+  info->Lock(kUpdateMethod);
+  info->Unlock();
+  info->Lock(kUpdateMethod);
+  info->Unlock();
+
+  CordzStatistics statistics = info->GetCordzStatistics();
+  EXPECT_THAT(statistics.update_tracker.Value(kUpdateMethod), Eq(2));
+
+  info->Untrack();
+}
+
+TEST(CordzInfoTest, FromParent) {
+  TestCordData parent;
+  TestCordData child;
+  CordzInfo* info_parent = TrackParentCord(parent.data);
+  CordzInfo* info_child = TrackChildCord(child.data, parent.data);
+
+  std::string stack = FormatStack(info_parent->GetStack());
+  std::string parent_stack = FormatStack(info_child->GetParentStack());
+  EXPECT_THAT(stack, Eq(parent_stack));
+
+  CordzStatistics statistics = info_child->GetCordzStatistics();
+  EXPECT_THAT(statistics.size, Eq(child.rep.rep->length));
+  EXPECT_THAT(statistics.method, Eq(kChildMethod));
+  EXPECT_THAT(statistics.parent_method, Eq(kTrackCordMethod));
+  EXPECT_THAT(statistics.update_tracker.Value(kChildMethod), Eq(1));
+
+  info_parent->Untrack();
+  info_child->Untrack();
+}
+
+TEST(CordzInfoTest, FromParentInlined) {
+  InlineData parent;
+  TestCordData child;
+  CordzInfo* info = TrackChildCord(child.data, parent);
+  EXPECT_TRUE(info->GetParentStack().empty());
+  CordzStatistics statistics = info->GetCordzStatistics();
+  EXPECT_THAT(statistics.size, Eq(child.rep.rep->length));
+  EXPECT_THAT(statistics.method, Eq(kChildMethod));
+  EXPECT_THAT(statistics.parent_method, Eq(kUnknownMethod));
+  EXPECT_THAT(statistics.update_tracker.Value(kChildMethod), Eq(1));
+  info->Untrack();
+}
+
+TEST(CordzInfoTest, RecordMetrics) {
+  TestCordData data;
+  CordzInfo* info = TrackParentCord(data.data);
+
+  CordzStatistics expected;
+  expected.size = 100;
+  info->RecordMetrics(expected.size);
+
+  CordzStatistics actual = info->GetCordzStatistics();
+  EXPECT_EQ(actual.size, expected.size);
+
+  info->Untrack();
+}
+
+}  // namespace
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.cc
new file mode 100644
index 0000000..ba1270d8
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.cc
@@ -0,0 +1,64 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_sample_token.h"
+
+#include "absl/base/config.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_info.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+CordzSampleToken::Iterator& CordzSampleToken::Iterator::operator++() {
+  if (current_) {
+    current_ = current_->Next(*token_);
+  }
+  return *this;
+}
+
+CordzSampleToken::Iterator CordzSampleToken::Iterator::operator++(int) {
+  Iterator it(*this);
+  operator++();
+  return it;
+}
+
+bool operator==(const CordzSampleToken::Iterator& lhs,
+                const CordzSampleToken::Iterator& rhs) {
+  return lhs.current_ == rhs.current_ &&
+         (lhs.current_ == nullptr || lhs.token_ == rhs.token_);
+}
+
+bool operator!=(const CordzSampleToken::Iterator& lhs,
+                const CordzSampleToken::Iterator& rhs) {
+  return !(lhs == rhs);
+}
+
+CordzSampleToken::Iterator::reference CordzSampleToken::Iterator::operator*()
+    const {
+  return *current_;
+}
+
+CordzSampleToken::Iterator::pointer CordzSampleToken::Iterator::operator->()
+    const {
+  return current_;
+}
+
+CordzSampleToken::Iterator::Iterator(const CordzSampleToken* token)
+    : token_(token), current_(CordzInfo::Head(*token)) {}
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.h b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.h
new file mode 100644
index 0000000..28a1d70c
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.h
@@ -0,0 +1,97 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/base/config.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_info.h"
+
+#ifndef ABSL_STRINGS_CORDZ_SAMPLE_TOKEN_H_
+#define ABSL_STRINGS_CORDZ_SAMPLE_TOKEN_H_
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// The existence of a CordzSampleToken guarantees that a reader can traverse the
+// global_cordz_infos_head linked-list without needing to hold a mutex. When a
+// CordzSampleToken exists, all CordzInfo objects that would be destroyed are
+// instead appended to a deletion queue. When the CordzSampleToken is destroyed,
+// it will also clean up any of these CordzInfo objects.
+//
+// E.g., ST are CordzSampleToken objects and CH are CordzHandle objects.
+//   ST1 <- CH1 <- CH2 <- ST2 <- CH3 <- global_delete_queue_tail
+//
+// This list tracks that CH1 and CH2 were created after ST1, so the thread
+// holding ST1 might have a referece to CH1, CH2, ST2, and CH3. However, ST2 was
+// created later, so the thread holding the ST2 token cannot have a reference to
+// ST1, CH1, or CH2. If ST1 is cleaned up first, that thread will delete ST1,
+// CH1, and CH2. If instead ST2 is cleaned up first, that thread will only
+// delete ST2.
+//
+// If ST1 is cleaned up first, the new list will be:
+//   ST2 <- CH3 <- global_delete_queue_tail
+//
+// If ST2 is cleaned up first, the new list will be:
+//   ST1 <- CH1 <- CH2 <- CH3 <- global_delete_queue_tail
+//
+// All new CordzHandle objects are appended to the list, so if a new thread
+// comes along before either ST1 or ST2 are cleaned up, the new list will be:
+//   ST1 <- CH1 <- CH2 <- ST2 <- CH3 <- ST3 <- global_delete_queue_tail
+//
+// A thread must hold the global_delete_queue_mu mutex whenever it's altering
+// this list.
+//
+// It is safe for thread that holds a CordzSampleToken to read
+// global_cordz_infos at any time since the objects it is able to retrieve will
+// not be deleted while the CordzSampleToken exists.
+class CordzSampleToken : public CordzSnapshot {
+ public:
+  class Iterator {
+   public:
+    using iterator_category = std::input_iterator_tag;
+    using value_type = const CordzInfo&;
+    using difference_type = ptrdiff_t;
+    using pointer = const CordzInfo*;
+    using reference = value_type;
+
+    Iterator() = default;
+
+    Iterator& operator++();
+    Iterator operator++(int);
+    friend bool operator==(const Iterator& lhs, const Iterator& rhs);
+    friend bool operator!=(const Iterator& lhs, const Iterator& rhs);
+    reference operator*() const;
+    pointer operator->() const;
+
+   private:
+    friend class CordzSampleToken;
+    explicit Iterator(const CordzSampleToken* token);
+
+    const CordzSampleToken* token_ = nullptr;
+    pointer current_ = nullptr;
+  };
+
+  CordzSampleToken() = default;
+  CordzSampleToken(const CordzSampleToken&) = delete;
+  CordzSampleToken& operator=(const CordzSampleToken&) = delete;
+
+  Iterator begin() { return Iterator(this); }
+  Iterator end() { return Iterator(); }
+};
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_CORDZ_SAMPLE_TOKEN_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc
new file mode 100644
index 0000000..9f54301
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc
@@ -0,0 +1,208 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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 "absl/strings/internal/cordz_sample_token.h"
+
+#include <memory>
+#include <type_traits>
+#include <vector>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/memory/memory.h"
+#include "absl/random/random.h"
+#include "absl/strings/cordz_test_helpers.h"
+#include "absl/strings/internal/cord_rep_flat.h"
+#include "absl/strings/internal/cordz_handle.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/synchronization/internal/thread_pool.h"
+#include "absl/synchronization/notification.h"
+#include "absl/time/clock.h"
+#include "absl/time/time.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+using ::testing::ElementsAre;
+using ::testing::Eq;
+using ::testing::Ne;
+
+// Used test values
+auto constexpr kTrackCordMethod = CordzUpdateTracker::kConstructorString;
+
+TEST(CordzSampleTokenTest, IteratorTraits) {
+  static_assert(std::is_copy_constructible<CordzSampleToken::Iterator>::value,
+                "");
+  static_assert(std::is_copy_assignable<CordzSampleToken::Iterator>::value, "");
+  static_assert(std::is_move_constructible<CordzSampleToken::Iterator>::value,
+                "");
+  static_assert(std::is_move_assignable<CordzSampleToken::Iterator>::value, "");
+  static_assert(
+      std::is_same<
+          std::iterator_traits<CordzSampleToken::Iterator>::iterator_category,
+          std::input_iterator_tag>::value,
+      "");
+  static_assert(
+      std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::value_type,
+                   const CordzInfo&>::value,
+      "");
+  static_assert(
+      std::is_same<
+          std::iterator_traits<CordzSampleToken::Iterator>::difference_type,
+          ptrdiff_t>::value,
+      "");
+  static_assert(
+      std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::pointer,
+                   const CordzInfo*>::value,
+      "");
+  static_assert(
+      std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::reference,
+                   const CordzInfo&>::value,
+      "");
+}
+
+TEST(CordzSampleTokenTest, IteratorEmpty) {
+  CordzSampleToken token;
+  EXPECT_THAT(token.begin(), Eq(token.end()));
+}
+
+TEST(CordzSampleTokenTest, Iterator) {
+  TestCordData cord1, cord2, cord3;
+  CordzInfo::TrackCord(cord1.data, kTrackCordMethod);
+  CordzInfo* info1 = cord1.data.cordz_info();
+  CordzInfo::TrackCord(cord2.data, kTrackCordMethod);
+  CordzInfo* info2 = cord2.data.cordz_info();
+  CordzInfo::TrackCord(cord3.data, kTrackCordMethod);
+  CordzInfo* info3 = cord3.data.cordz_info();
+
+  CordzSampleToken token;
+  std::vector<const CordzInfo*> found;
+  for (const CordzInfo& cord_info : token) {
+    found.push_back(&cord_info);
+  }
+
+  EXPECT_THAT(found, ElementsAre(info3, info2, info1));
+
+  info1->Untrack();
+  info2->Untrack();
+  info3->Untrack();
+}
+
+TEST(CordzSampleTokenTest, IteratorEquality) {
+  TestCordData cord1;
+  TestCordData cord2;
+  TestCordData cord3;
+  CordzInfo::TrackCord(cord1.data, kTrackCordMethod);
+  CordzInfo* info1 = cord1.data.cordz_info();
+
+  CordzSampleToken token1;
+  // lhs starts with the CordzInfo corresponding to cord1 at the head.
+  CordzSampleToken::Iterator lhs = token1.begin();
+
+  CordzInfo::TrackCord(cord2.data, kTrackCordMethod);
+  CordzInfo* info2 = cord2.data.cordz_info();
+
+  CordzSampleToken token2;
+  // rhs starts with the CordzInfo corresponding to cord2 at the head.
+  CordzSampleToken::Iterator rhs = token2.begin();
+
+  CordzInfo::TrackCord(cord3.data, kTrackCordMethod);
+  CordzInfo* info3 = cord3.data.cordz_info();
+
+  // lhs is on cord1 while rhs is on cord2.
+  EXPECT_THAT(lhs, Ne(rhs));
+
+  rhs++;
+  // lhs and rhs are both on cord1, but they didn't come from the same
+  // CordzSampleToken.
+  EXPECT_THAT(lhs, Ne(rhs));
+
+  lhs++;
+  rhs++;
+  // Both lhs and rhs are done, so they are on nullptr.
+  EXPECT_THAT(lhs, Eq(rhs));
+
+  info1->Untrack();
+  info2->Untrack();
+  info3->Untrack();
+}
+
+TEST(CordzSampleTokenTest, MultiThreaded) {
+  Notification stop;
+  static constexpr int kNumThreads = 4;
+  static constexpr int kNumCords = 3;
+  static constexpr int kNumTokens = 3;
+  absl::synchronization_internal::ThreadPool pool(kNumThreads);
+
+  for (int i = 0; i < kNumThreads; ++i) {
+    pool.Schedule([&stop]() {
+      absl::BitGen gen;
+      TestCordData cords[kNumCords];
+      std::unique_ptr<CordzSampleToken> tokens[kNumTokens];
+
+      while (!stop.HasBeenNotified()) {
+        // Randomly perform one of five actions:
+        //   1) Untrack
+        //   2) Track
+        //   3) Iterate over Cords visible to a token.
+        //   4) Unsample
+        //   5) Sample
+        int index = absl::Uniform(gen, 0, kNumCords);
+        if (absl::Bernoulli(gen, 0.5)) {
+          TestCordData& cord = cords[index];
+          // Track/untrack.
+          if (cord.data.is_profiled()) {
+            // 1) Untrack
+            cord.data.cordz_info()->Untrack();
+            cord.data.clear_cordz_info();;
+          } else {
+            // 2) Track
+            CordzInfo::TrackCord(cord.data, kTrackCordMethod);
+          }
+        } else {
+          std::unique_ptr<CordzSampleToken>& token = tokens[index];
+          if (token) {
+            if (absl::Bernoulli(gen, 0.5)) {
+              // 3) Iterate over Cords visible to a token.
+              for (const CordzInfo& info : *token) {
+                // This is trivial work to allow us to compile the loop.
+                EXPECT_THAT(info.Next(*token), Ne(&info));
+              }
+            } else {
+              // 4) Unsample
+              token = nullptr;
+            }
+          } else {
+            // 5) Sample
+            token = absl::make_unique<CordzSampleToken>();
+          }
+        }
+      }
+      for (TestCordData& cord : cords) {
+        CordzInfo::MaybeUntrackCord(cord.data.cordz_info());
+      }
+    });
+  }
+  // The threads will hammer away.  Give it a little bit of time for tsan to
+  // spot errors.
+  absl::SleepFor(absl::Seconds(3));
+  stop.Notify();
+}
+
+}  // namespace
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h b/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h
new file mode 100644
index 0000000..6e335c0
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h
@@ -0,0 +1,67 @@
+// Copyright 2019 The Abseil Authors.
+//
+// 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
+//
+//      https://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.
+
+#ifndef ABSL_STRINGS_INTERNAL_CORDZ_STATISTICS_H_
+#define ABSL_STRINGS_INTERNAL_CORDZ_STATISTICS_H_
+
+#include <cstdint>
+
+#include "absl/base/config.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// CordzStatistics captures some meta information about a Cord's shape.
+struct CordzStatistics {
+  using MethodIdentifier = CordzUpdateTracker::MethodIdentifier;
+
+  // The size of the cord in bytes. This matches the result of Cord::size().
+  int64_t size = 0;
+
+  // The estimated memory used by the sampled cord. This value matches the
+  // value as reported by Cord::EstimatedMemoryUsage().
+  // A value of 0 implies the property has not been recorded.
+  int64_t estimated_memory_usage = 0;
+
+  // The effective memory used by the sampled cord, inversely weighted by the
+  // effective indegree of each allocated node. This is a representation of the
+  // fair share of memory usage that should be attributed to the sampled cord.
+  // This value is more useful for cases where one or more nodes are referenced
+  // by multiple Cord instances, and for cases where a Cord includes the same
+  // node multiple times (either directly or indirectly).
+  // A value of 0 implies the property has not been recorded.
+  int64_t estimated_fair_share_memory_usage = 0;
+
+  // The total number of nodes referenced by this cord.
+  // For ring buffer Cords, this includes the 'ring buffer' node.
+  // A value of 0 implies the property has not been recorded.
+  int64_t node_count = 0;
+
+  // The cord method responsible for sampling the cord.
+  MethodIdentifier method = MethodIdentifier::kUnknown;
+
+  // The cord method responsible for sampling the parent cord if applicable.
+  MethodIdentifier parent_method = MethodIdentifier::kUnknown;
+
+  // Update tracker tracking invocation count per cord method.
+  CordzUpdateTracker update_tracker;
+};
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_INTERNAL_CORDZ_STATISTICS_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h b/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h
new file mode 100644
index 0000000..57ba75d
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h
@@ -0,0 +1,71 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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.
+
+#ifndef ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_SCOPE_H_
+#define ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_SCOPE_H_
+
+#include "absl/base/config.h"
+#include "absl/base/optimization.h"
+#include "absl/base/thread_annotations.h"
+#include "absl/strings/internal/cord_internal.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// CordzUpdateScope scopes an update to the provided CordzInfo.
+// The class invokes `info->Lock(method)` and `info->Unlock()` to guard
+// cordrep updates. This class does nothing if `info` is null.
+// See also the 'Lock`, `Unlock` and `SetCordRep` methods in `CordzInfo`.
+class ABSL_SCOPED_LOCKABLE CordzUpdateScope {
+ public:
+  CordzUpdateScope(CordzInfo* info, CordzUpdateTracker::MethodIdentifier method)
+      ABSL_EXCLUSIVE_LOCK_FUNCTION(info)
+      : info_(info) {
+    if (ABSL_PREDICT_FALSE(info_)) {
+      info->Lock(method);
+    }
+  }
+
+  // CordzUpdateScope can not be copied or assigned to.
+  CordzUpdateScope(CordzUpdateScope&& rhs) = delete;
+  CordzUpdateScope(const CordzUpdateScope&) = delete;
+  CordzUpdateScope& operator=(CordzUpdateScope&& rhs) = delete;
+  CordzUpdateScope& operator=(const CordzUpdateScope&) = delete;
+
+  ~CordzUpdateScope() ABSL_UNLOCK_FUNCTION() {
+    if (ABSL_PREDICT_FALSE(info_)) {
+      info_->Unlock();
+    }
+  }
+
+  void SetCordRep(CordRep* rep) const {
+    if (ABSL_PREDICT_FALSE(info_)) {
+      info_->SetCordRep(rep);
+    }
+  }
+
+  CordzInfo* info() const { return info_; }
+
+ private:
+  CordzInfo* info_;
+};
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_SCOPE_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc
new file mode 100644
index 0000000..3d08c62
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc
@@ -0,0 +1,49 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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 "absl/strings/internal/cordz_update_scope.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+#include "absl/strings/cordz_test_helpers.h"
+#include "absl/strings/internal/cord_rep_flat.h"
+#include "absl/strings/internal/cordz_info.h"
+#include "absl/strings/internal/cordz_update_tracker.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+namespace {
+
+// Used test values
+auto constexpr kTrackCordMethod = CordzUpdateTracker::kConstructorString;
+
+TEST(CordzUpdateScopeTest, ScopeNullptr) {
+  CordzUpdateScope scope(nullptr, kTrackCordMethod);
+}
+
+TEST(CordzUpdateScopeTest, ScopeSampledCord) {
+  TestCordData cord;
+  CordzInfo::TrackCord(cord.data, kTrackCordMethod);
+  CordzUpdateScope scope(cord.data.cordz_info(), kTrackCordMethod);
+  cord.data.cordz_info()->SetCordRep(nullptr);
+}
+
+}  // namespace
+ABSL_NAMESPACE_END
+}  // namespace cord_internal
+
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h b/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h
new file mode 100644
index 0000000..741950b
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h
@@ -0,0 +1,107 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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.
+
+#ifndef ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_
+#define ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_
+
+#include <atomic>
+#include <cstdint>
+
+#include "absl/base/config.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+
+// CordzUpdateTracker tracks counters for Cord update methods.
+//
+// The purpose of CordzUpdateTracker is to track the number of calls to methods
+// updating Cord data for sampled cords. The class internally uses 'lossy'
+// atomic operations: Cord is thread-compatible, so there is no need to
+// synchronize updates. However, Cordz collection threads may call 'Value()' at
+// any point, so the class needs to provide thread safe access.
+//
+// This class is thread-safe. But as per above comments, all non-const methods
+// should be used single-threaded only: updates are thread-safe but lossy.
+class CordzUpdateTracker {
+ public:
+  // Tracked update methods.
+  enum MethodIdentifier {
+    kUnknown,
+    kAppendCord,
+    kAppendExternalMemory,
+    kAppendString,
+    kAssignCord,
+    kAssignString,
+    kClear,
+    kConstructorCord,
+    kConstructorString,
+    kFlatten,
+    kGetAppendRegion,
+    kMoveAppendCord,
+    kMoveAssignCord,
+    kMovePrependCord,
+    kPrependCord,
+    kPrependString,
+    kRemovePrefix,
+    kRemoveSuffix,
+    kSubCord,
+
+    // kNumMethods defines the number of entries: must be the last entry.
+    kNumMethods,
+  };
+
+  // Constructs a new instance. All counters are zero-initialized.
+  constexpr CordzUpdateTracker() noexcept : values_{} {}
+
+  // Copy constructs a new instance.
+  CordzUpdateTracker(const CordzUpdateTracker& rhs) noexcept { *this = rhs; }
+
+  // Assigns the provided value to this instance.
+  CordzUpdateTracker& operator=(const CordzUpdateTracker& rhs) noexcept {
+    for (int i = 0; i < kNumMethods; ++i) {
+      values_[i].store(rhs.values_[i].load(std::memory_order_relaxed),
+                       std::memory_order_relaxed);
+    }
+    return *this;
+  }
+
+  // Returns the value for the specified method.
+  int64_t Value(MethodIdentifier method) const {
+    return values_[method].load(std::memory_order_relaxed);
+  }
+
+  // Increases the value for the specified method by `n`
+  void LossyAdd(MethodIdentifier method, int64_t n = 1) {
+    auto& value = values_[method];
+    value.store(value.load(std::memory_order_relaxed) + n,
+                std::memory_order_relaxed);
+  }
+
+ private:
+  // Until C++20 std::atomic is not constexpr default-constructible, so we need
+  // a wrapper for this class to be constexpr constructible.
+  class Counter : public std::atomic<int64_t> {
+   public:
+    constexpr Counter() noexcept : std::atomic<int64_t>(0) {}
+  };
+
+  Counter values_[kNumMethods];
+};
+
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_STRINGS_INTERNAL_CORDZ_UPDATE_TRACKER_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc
new file mode 100644
index 0000000..eda662f
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc
@@ -0,0 +1,141 @@
+// Copyright 2021 The Abseil Authors
+//
+// 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
+//
+//     https://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 "absl/strings/internal/cordz_update_tracker.h"
+
+#include <array>
+#include <thread>  // NOLINT
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/base/attributes.h"
+#include "absl/base/config.h"
+#include "absl/synchronization/notification.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace cord_internal {
+namespace {
+
+using ::testing::AnyOf;
+using ::testing::Eq;
+
+using Method = CordzUpdateTracker::MethodIdentifier;
+using Methods = std::array<Method, Method::kNumMethods>;
+
+// Returns an array of all methods defined in `MethodIdentifier`
+Methods AllMethods() {
+  return Methods{Method::kUnknown,
+                 Method::kAppendCord,
+                 Method::kAppendExternalMemory,
+                 Method::kAppendString,
+                 Method::kAssignCord,
+                 Method::kAssignString,
+                 Method::kClear,
+                 Method::kConstructorCord,
+                 Method::kConstructorString,
+                 Method::kFlatten,
+                 Method::kGetAppendRegion,
+                 Method::kMoveAppendCord,
+                 Method::kMoveAssignCord,
+                 Method::kMovePrependCord,
+                 Method::kPrependCord,
+                 Method::kPrependString,
+                 Method::kRemovePrefix,
+                 Method::kRemoveSuffix,
+                 Method::kSubCord};
+}
+
+TEST(CordzUpdateTracker, IsConstExprAndInitializesToZero) {
+  constexpr CordzUpdateTracker tracker;
+  for (Method method : AllMethods()) {
+    ASSERT_THAT(tracker.Value(method), Eq(0));
+  }
+}
+
+TEST(CordzUpdateTracker, LossyAdd) {
+  int64_t n = 1;
+  CordzUpdateTracker tracker;
+  for (Method method : AllMethods()) {
+    tracker.LossyAdd(method, n);
+    EXPECT_THAT(tracker.Value(method), Eq(n));
+    n += 2;
+  }
+}
+
+TEST(CordzUpdateTracker, CopyConstructor) {
+  int64_t n = 1;
+  CordzUpdateTracker src;
+  for (Method method : AllMethods()) {
+    src.LossyAdd(method, n);
+    n += 2;
+  }
+
+  n = 1;
+  CordzUpdateTracker tracker(src);
+  for (Method method : AllMethods()) {
+    EXPECT_THAT(tracker.Value(method), Eq(n));
+    n += 2;
+  }
+}
+
+TEST(CordzUpdateTracker, OperatorAssign) {
+  int64_t n = 1;
+  CordzUpdateTracker src;
+  CordzUpdateTracker tracker;
+  for (Method method : AllMethods()) {
+    src.LossyAdd(method, n);
+    n += 2;
+  }
+
+  n = 1;
+  tracker = src;
+  for (Method method : AllMethods()) {
+    EXPECT_THAT(tracker.Value(method), Eq(n));
+    n += 2;
+  }
+}
+
+TEST(CordzUpdateTracker, ThreadSanitizedValueCheck) {
+  absl::Notification done;
+  CordzUpdateTracker tracker;
+
+  std::thread reader([&done, &tracker] {
+    while (!done.HasBeenNotified()) {
+      int n = 1;
+      for (Method method : AllMethods()) {
+        EXPECT_THAT(tracker.Value(method), AnyOf(Eq(n), Eq(0)));
+        n += 2;
+      }
+    }
+    int n = 1;
+    for (Method method : AllMethods()) {
+      EXPECT_THAT(tracker.Value(method), Eq(n));
+      n += 2;
+    }
+  });
+
+  int64_t n = 1;
+  for (Method method : AllMethods()) {
+    tracker.LossyAdd(method, n);
+    n += 2;
+  }
+  done.Notify();
+  reader.join();
+}
+
+}  // namespace
+}  // namespace cord_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc b/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc
index 2123be6..28ef311e 100644
--- a/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc
+++ b/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc
@@ -79,6 +79,7 @@
   // Note that, since the thread ticker is just reset, we don't need to check
   // whether the thread is idle on the very first pass of the loop.
   bool first_pass = true;
+
   while (true) {
     int32_t x = futex_.load(std::memory_order_relaxed);
     while (x != 0) {
@@ -90,7 +91,6 @@
       return true;  // Consumed a wakeup, we are done.
     }
 
-
     if (!first_pass) MaybeBecomeIdle();
     const int err = Futex::WaitUntil(&futex_, 0, t);
     if (err != 0) {
diff --git a/third_party/abseil-cpp/absl/time/duration_test.cc b/third_party/abseil-cpp/absl/time/duration_test.cc
index fb28fa9..a3617e7 100644
--- a/third_party/abseil-cpp/absl/time/duration_test.cc
+++ b/third_party/abseil-cpp/absl/time/duration_test.cc
@@ -1320,7 +1320,7 @@
 
   EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(0));
   // TODO(bww): Is the next one OK?
-  EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(0.124999999e-9));
+  EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(std::nextafter(0.125e-9, 0)));
   EXPECT_EQ(absl::Nanoseconds(1) / 4, absl::Seconds(0.125e-9));
   EXPECT_EQ(absl::Nanoseconds(1) / 4, absl::Seconds(0.250e-9));
   EXPECT_EQ(absl::Nanoseconds(1) / 2, absl::Seconds(0.375e-9));
@@ -1330,7 +1330,7 @@
   EXPECT_EQ(absl::Nanoseconds(1), absl::Seconds(0.875e-9));
   EXPECT_EQ(absl::Nanoseconds(1), absl::Seconds(1.000e-9));
 
-  EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(-0.124999999e-9));
+  EXPECT_EQ(absl::ZeroDuration(), absl::Seconds(std::nextafter(-0.125e-9, 0)));
   EXPECT_EQ(-absl::Nanoseconds(1) / 4, absl::Seconds(-0.125e-9));
   EXPECT_EQ(-absl::Nanoseconds(1) / 4, absl::Seconds(-0.250e-9));
   EXPECT_EQ(-absl::Nanoseconds(1) / 2, absl::Seconds(-0.375e-9));
diff --git a/third_party/abseil-cpp/absl/time/time.h b/third_party/abseil-cpp/absl/time/time.h
index 2df68581..48982df 100644
--- a/third_party/abseil-cpp/absl/time/time.h
+++ b/third_party/abseil-cpp/absl/time/time.h
@@ -1352,7 +1352,7 @@
 inline Duration MakePosDoubleDuration(double n) {
   const int64_t int_secs = static_cast<int64_t>(n);
   const uint32_t ticks = static_cast<uint32_t>(
-      (n - static_cast<double>(int_secs)) * kTicksPerSecond + 0.5);
+      std::round((n - static_cast<double>(int_secs)) * kTicksPerSecond));
   return ticks < kTicksPerSecond
              ? MakeDuration(int_secs, ticks)
              : MakeDuration(int_secs + 1, ticks - kTicksPerSecond);
diff --git a/third_party/abseil-cpp/absl/types/span.h b/third_party/abseil-cpp/absl/types/span.h
index 95fe792..41db342 100644
--- a/third_party/abseil-cpp/absl/types/span.h
+++ b/third_party/abseil-cpp/absl/types/span.h
@@ -243,8 +243,8 @@
   //
   template <typename LazyT = T,
             typename = EnableIfConstView<LazyT>>
-  Span(
-      std::initializer_list<value_type> v) noexcept  // NOLINT(runtime/explicit)
+  Span(std::initializer_list<value_type> v
+           ABSL_ATTRIBUTE_LIFETIME_BOUND) noexcept  // NOLINT(runtime/explicit)
       : Span(v.begin(), v.size()) {}
 
   // Accessors
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def
index 4945564..a05d35a0 100644
--- a/third_party/abseil-cpp/symbols_arm64_dbg.def
+++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -9,12 +9,16 @@
     ??$?0$$T@?$Storage@PEAUSubRange@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z
     ??$?0$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??$?0$$TAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
@@ -22,6 +26,8 @@
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAVFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUTransition@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUTransitionType@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
@@ -67,9 +73,11 @@
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@Z
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@Z
+    ??$?0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QEA$$T@Z
@@ -185,8 +193,10 @@
     ??$?0VBufferRawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAVBufferRawSink@12@@Z
     ??$?0VFILERawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAVFILERawSink@12@@Z
     ??$?4V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QEAAAEAV01@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??$?8PEAPEAVCordzHandle@cord_internal@absl@@PEAPEAV012@@__1@std@@YA_NAEBV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?8PEAUTransitionType@cctz@time_internal@absl@@PEAU0123@@__1@std@@YA_NAEBV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?8PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@PEBU0123@@__1@std@@YA_NAEBV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
+    ??$?9PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?9PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?9PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
     ??$?9VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@YA_NAEBV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@01@$$T@Z
@@ -355,6 +365,7 @@
     ??$InvokeFlush@VFILERawSink@str_format_internal@absl@@@str_format_internal@absl@@YAXPEAVFILERawSink@01@Vstring_view@1@@Z
     ??$InvokeReleaser@UStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@X@cord_internal@absl@@YAXURank0@01@$$QEAUStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@1@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@Vstring_view@1@@Z
     ??$LowLevelCallOnce@A6AXXZ$$V@base_internal@absl@@YAXPEAVonce_flag@1@A6AXXZ@Z
+    ??$MakeConstSpan@$SQEAX@absl@@YA?AV?$Span@QEAX@0@PEBQEAX_K@Z
     ??$MakeSpan@$SI$0BAA@@absl@@YA?AV?$Span@I@0@AEAY0BAA@I@Z
     ??$MakeSpan@$SI$0BIA@@absl@@YA?AV?$Span@I@0@AEAY0BIA@I@Z
     ??$MakeSpan@$SI$0CAA@@absl@@YA?AV?$Span@I@0@AEAY0CAA@I@Z
@@ -444,6 +455,8 @@
     ??$__construct_at_end@V?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXV?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_at_end@V?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXV?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAUCordRep@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@PEAPEAUCordRep@cord_internal@absl@@1AEAPEAPEAU345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@PEAVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@01@PEAPEAVCordzHandle@cord_internal@absl@@1AEAPEAPEAV345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@PEBVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@01@PEAPEBVCordzHandle@cord_internal@absl@@1AEAPEAPEBV345@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@1AEAPEAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@UTransition@cctz@time_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UTransition@cctz@time_internal@absl@@@01@PEAUTransition@cctz@time_internal@absl@@1AEAPEAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@UTransitionType@cctz@time_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@01@PEAUTransitionType@cctz@time_internal@absl@@1AEAPEAU3456@@Z
@@ -455,6 +468,8 @@
     ??$__construct_one_at_end@$$V@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ??$__construct_one_at_end@AEAVstring_view@absl@@AEBV12@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAVstring_view@absl@@AEBV34@AEA_K@Z
     ??$__construct_one_at_end@AEBQEAUCordRep@cord_internal@absl@@@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ??$__construct_one_at_end@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ??$__construct_one_at_end@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__construct_range_forward@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAUCordRep@cord_internal@absl@@PEAU456@PEAU456@PEAU456@X@__1@std@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@PEBQEAUCordRep@cord_internal@absl@@1AEAPEAPEAU345@@Z
@@ -464,8 +479,12 @@
     ??$__cxx_atomic_exchange@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZPEAU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@01@P6AX0@ZW4memory_order@01@@Z
     ??$__cxx_atomic_load@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZPEBU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@YAPEAUHashtablezInfo@container_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAVCordzHandle@cord_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAVCordzHandle@cord_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PEAVCordzInfo@cord_internal@absl@@@__1@std@@YAPEAVCordzInfo@cord_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4OnDeadlockCycle@absl@@@__1@std@@YA?AW4OnDeadlockCycle@absl@@PEBU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YA?AW4State@PerThreadSynch@base_internal@absl@@PEBU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@PEAVCordzHandle@cord_internal@absl@@@01@PEAVCordzHandle@cord_internal@absl@@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PEAVCordzInfo@cord_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@01@PEAVCordzInfo@cord_internal@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4OnDeadlockCycle@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4OnDeadlockCycle@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4State@PerThreadSynch@base_internal@absl@@W4memory_order@01@@Z
     ??$__distance@PEBUPayload@status_internal@absl@@@__1@std@@YA_JPEBUPayload@status_internal@absl@@0Urandom_access_iterator_tag@01@@Z
@@ -484,6 +503,8 @@
     ??$__move_backward@UTransition@cctz@time_internal@absl@@U1234@@__1@std@@YAPEAUTransition@cctz@time_internal@absl@@PEAU2345@00@Z
     ??$__move_backward@UTransitionType@cctz@time_internal@absl@@U1234@@__1@std@@YAPEAUTransitionType@cctz@time_internal@absl@@PEAU2345@00@Z
     ??$__push_back_slow_path@AEBQEAUCordRep@cord_internal@absl@@@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__rewrap_iter@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@0@Z
@@ -493,6 +514,8 @@
     ??$__to_address@$$CBVFormatArgImpl@str_format_internal@absl@@@__1@std@@YAPEBVFormatArgImpl@str_format_internal@absl@@PEBV234@@Z
     ??$__to_address@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@@Z
     ??$__to_address@PEAUCordRep@cord_internal@absl@@@__1@std@@YAPEAPEAUCordRep@cord_internal@absl@@PEAPEAU234@@Z
+    ??$__to_address@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAPEAVCordzHandle@cord_internal@absl@@PEAPEAV234@@Z
+    ??$__to_address@PEBVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAPEBVCordzHandle@cord_internal@absl@@PEAPEBV234@@Z
     ??$__to_address@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@PEAU2345@@Z
     ??$__to_address@UTransition@cctz@time_internal@absl@@@__1@std@@YAPEAUTransition@cctz@time_internal@absl@@PEAU2345@@Z
     ??$__to_address@UTransitionType@cctz@time_internal@absl@@@__1@std@@YAPEAUTransitionType@cctz@time_internal@absl@@PEAU2345@@Z
@@ -535,10 +558,14 @@
     ??$construct@PEAUCordRep@cord_internal@absl@@AEBQEAU123@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@PEAPEAUCordRep@cord_internal@absl@@AEBQEAU456@@Z
     ??$construct@PEAUCordRep@cord_internal@absl@@PEAU123@@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@$$QEAPEAU345@@Z
     ??$construct@PEAUCordRep@cord_internal@absl@@PEAU123@@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@1@$$QEAPEAU561@@Z
+    ??$construct@PEAVCordzHandle@cord_internal@absl@@AEBQEAV123@@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z
+    ??$construct@PEAVCordzHandle@cord_internal@absl@@AEBQEAV123@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@PEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV456@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@AEBQEBU345@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@AEBQEBU561@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@PEBU123@@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@$$QEAPEBU345@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@PEBU123@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@$$QEAPEBU561@@Z
+    ??$construct@PEBVCordzHandle@cord_internal@absl@@AEBQEBV123@@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z
+    ??$construct@PEBVCordzHandle@cord_internal@absl@@AEBQEBV123@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@PEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV456@@Z
     ??$construct@PEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV12345@@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV34567@@Z
     ??$construct@PEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV12345@X@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV45678@@Z
     ??$construct@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$tuple@$$V@23@@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@12@$$QEAV?$tuple@$$V@12@@Z
@@ -579,7 +606,9 @@
     ??$destroy@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@X@?$allocator_traits@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ??$destroy@PEAUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@1@@Z
     ??$destroy@PEAUCordRep@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@PEAPEAUCordRep@cord_internal@absl@@@Z
+    ??$destroy@PEAVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@PEBUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@@Z
+    ??$destroy@PEBVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@PEAPEBVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@XX@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$destroy@UPayload@status_internal@absl@@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@1@@Z
@@ -632,7 +661,9 @@
     ??$forward@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@AEAV123@@Z
+    ??$forward@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@AEAV123@@Z
+    ??$forward@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@AEAV123@@Z
     ??$forward@AEAV?$allocator@USubRange@absl@@@__1@std@@@absl@@YAAEAV?$allocator@USubRange@absl@@@__1@std@@AEAV123@@Z
@@ -643,7 +674,9 @@
     ??$forward@AEA_K@absl@@YAAEA_KAEA_K@Z
     ??$forward@AEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEAPEBV23456@@Z
     ??$forward@AEBQEAUCordRep@cord_internal@absl@@@__1@std@@YAAEBQEAUCordRep@cord_internal@absl@@AEBQEAU234@@Z
+    ??$forward@AEBQEAVCordzHandle@cord_internal@absl@@@__1@std@@YAAEBQEAVCordzHandle@cord_internal@absl@@AEBQEAV234@@Z
     ??$forward@AEBQEBUCordRep@cord_internal@absl@@@__1@std@@YAAEBQEBUCordRep@cord_internal@absl@@AEBQEBU234@@Z
+    ??$forward@AEBQEBVCordzHandle@cord_internal@absl@@@__1@std@@YAAEBQEBVCordzHandle@cord_internal@absl@@AEBQEBV234@@Z
     ??$forward@AEBQEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAAEBQEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV23456@@Z
     ??$forward@AEBUHashtablezInfo@container_internal@absl@@@__1@std@@YAAEBUHashtablezInfo@container_internal@absl@@AEBU234@@Z
     ??$forward@AEBUPayload@status_internal@absl@@@__1@std@@YAAEBUPayload@status_internal@absl@@AEBU234@@Z
@@ -726,7 +759,9 @@
     ??$max_size@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@12@@Z
     ??$max_size@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
     ??$max_size@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
@@ -740,6 +775,8 @@
     ??$min@VDuration@absl@@U?$__less@VDuration@absl@@V12@@__1@std@@@__1@std@@YAAEBVDuration@absl@@AEBV23@0U?$__less@VDuration@absl@@V12@@01@@Z
     ??$move@AEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAPEAPEAPEBV23456@@Z
     ??$move@AEAPEAPEAUCordRep@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEAUCordRep@cord_internal@absl@@AEAPEAPEAU234@@Z
+    ??$move@AEAPEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEAVCordzHandle@cord_internal@absl@@AEAPEAPEAV234@@Z
+    ??$move@AEAPEAPEBVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEBVCordzHandle@cord_internal@absl@@AEAPEAPEBV234@@Z
     ??$move@AEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAPEAPEBV23456@@Z
     ??$move@AEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA$$QEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAPEAU2345@@Z
     ??$move@AEAPEAUCordRep@cord_internal@absl@@@__1@std@@YA$$QEAPEAUCordRep@cord_internal@absl@@AEAPEAU234@@Z
@@ -769,6 +806,8 @@
     ??$reset@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUCordRep@cord_internal@absl@@@__1@std@@YAXAEAPEAPEAUCordRep@cord_internal@absl@@0@Z
+    ??$swap@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YAXAEAPEAPEAVCordzHandle@cord_internal@absl@@0@Z
+    ??$swap@PEAPEBVCordzHandle@cord_internal@absl@@@__1@std@@YAXAEAPEAPEBVCordzHandle@cord_internal@absl@@0@Z
     ??$swap@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAXAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
     ??$swap@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAUTransitionType@cctz@time_internal@absl@@0@Z
@@ -814,6 +853,7 @@
     ??0?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@XZ
     ??0?$Span@D@absl@@QEAA@PEAD_K@Z
     ??0?$Span@I@absl@@QEAA@PEAI_K@Z
+    ??0?$Span@QEAX@absl@@QEAA@PEBQEAX_K@Z
     ??0?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@PEAVFormatArgImpl@str_format_internal@1@_K@Z
     ??0?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAA@XZ
     ??0?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA@XZ
@@ -826,6 +866,7 @@
     ??0?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@_K@Z
     ??0?$__atomic_base@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$__compressed_pair_elem@U?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QEAA@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
@@ -839,6 +880,8 @@
     ??0?$__compressed_pair_elem@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$00$00@__1@std@@QEAA@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
@@ -848,8 +891,10 @@
     ??0?$__compressed_pair_elem@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__cxx_atomic_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@ZU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_impl@PEAUHashtablezInfo@container_internal@absl@@U?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_impl@PEAVCordzInfo@cord_internal@absl@@U?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__deque_base@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__deque_iterator@PEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@AEAPEBV12345@PEAPEAPEBV12345@_J$0A@@__1@std@@AEAA@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV34567@@Z
     ??0?$__hash_const_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAA@AEBV?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
@@ -866,6 +911,8 @@
     ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??0?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
@@ -873,18 +920,23 @@
     ??0?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QEAA@XZ
     ??0?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QEAA@XZ
     ??0?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@AEAA@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ??0?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@AEAA@PEAUTransition@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@AEAA@PEAUTransitionType@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@AEAA@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??0?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAA@XZ
+    ??0?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAA@XZ
+    ??0?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAA@XZ
     ??0?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAA@XZ
@@ -896,6 +948,7 @@
     ??0?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$atomic@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$atomic@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$atomic@PEAVCordzInfo@cord_internal@absl@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@AEAA@Ufields@1234@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAA@_J00000@Z
     ??0?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@AEAA@Ufields@1234@@Z
@@ -943,6 +996,8 @@
     ??0?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEAA@$$QEAV012@@Z
     ??0?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA@XZ
     ??0?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@V?$initializer_list@PEAUCordRep@cord_internal@absl@@@2@@Z
+    ??0?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??0?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -985,6 +1040,13 @@
     ??0CordRepRing@cord_internal@absl@@AEAA@I@Z
     ??0CordRepRingReader@cord_internal@absl@@QEAA@XZ
     ??0CordRepSubstring@cord_internal@absl@@QEAA@XZ
+    ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
+    ??0CordzHandle@cord_internal@absl@@QEAA@XZ
+    ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzStatistics@cord_internal@absl@@QEAA@XZ
+    ??0CordzUpdateScope@cord_internal@absl@@QEAA@PEAVCordzInfo@12@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzUpdateTracker@cord_internal@absl@@QEAA@XZ
+    ??0Counter@CordzUpdateTracker@cord_internal@absl@@QEAA@XZ
     ??0Duration@absl@@AEAA@_JI@Z
     ??0Duration@absl@@QEAA@XZ
     ??0ErrnoSaver@base_internal@absl@@QEAA@XZ
@@ -997,9 +1059,11 @@
     ??0HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??0HashtablezSampler@container_internal@absl@@QEAA@XZ
     ??0Impl@time_zone@cctz@time_internal@absl@@AEAA@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??0InlineData@cord_internal@absl@@QEAA@W4DefaultInitType@012@@Z
     ??0InlineData@cord_internal@absl@@QEAA@XZ
     ??0InlineRep@Cord@absl@@QEAA@$$QEAV012@@Z
     ??0InlineRep@Cord@absl@@QEAA@AEBV012@@Z
+    ??0InlineRep@Cord@absl@@QEAA@W4DefaultInitType@InlineData@cord_internal@2@@Z
     ??0InlineRep@Cord@absl@@QEAA@XZ
     ??0InputValue@UnboundConversion@str_format_internal@absl@@QEAA@XZ
     ??0KernelTimeout@synchronization_internal@absl@@QEAA@VTime@2@@Z
@@ -1048,6 +1112,8 @@
     ??0_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAPEAUTransition@cctz@time_internal@absl@@_K@Z
     ??0_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAPEAUTransitionType@cctz@time_internal@absl@@_K@Z
     ??0_ConstructTransaction@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
+    ??0_ConstructTransaction@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
+    ??0_ConstructTransaction@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
@@ -1102,6 +1168,8 @@
     ??1?$__policy_func@$$A6AXVstring_view@absl@@AEBVCord@2@@Z@__function@__1@std@@QEAA@XZ
     ??1?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1109,6 +1177,8 @@
     ??1?$__temp_value@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??1?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??1?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
@@ -1129,6 +1199,8 @@
     ??1?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1138,6 +1210,9 @@
     ??1CondVar@absl@@QEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordForest@absl@@QEAA@XZ
+    ??1CordzHandle@cord_internal@absl@@MEAA@XZ
+    ??1CordzInfo@cord_internal@absl@@EEAA@XZ
+    ??1CordzUpdateScope@cord_internal@absl@@QEAA@XZ
     ??1ErrnoSaver@base_internal@absl@@QEAA@XZ
     ??1FormatSinkImpl@str_format_internal@absl@@QEAA@XZ
     ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ
@@ -1169,6 +1244,8 @@
     ??1_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1_ConstructTransaction@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1_ConstructTransaction@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1180,10 +1257,9 @@
     ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z
     ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEAAAEAV012@$$QEAV012@@Z
     ??4Cord@absl@@QEAAAEAV01@$$QEAV01@@Z
-    ??4Cord@absl@@QEAAAEAV01@AEBV01@@Z
     ??4Cord@absl@@QEAAAEAV01@Vstring_view@1@@Z
+    ??4CordzUpdateTracker@cord_internal@absl@@QEAAAEAV012@AEBV012@@Z
     ??4InlineRep@Cord@absl@@QEAAAEAV012@$$QEAV012@@Z
-    ??4InlineRep@Cord@absl@@QEAAAEAV012@AEBV012@@Z
     ??4Payload@status_internal@absl@@QEAAAEAU012@$$QEAU012@@Z
     ??4Status@absl@@QEAAAEAV01@$$QEAV01@@Z
     ??4int128@absl@@QEAAAEAV01@H@Z
@@ -1251,6 +1327,7 @@
     ??A?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@_K@Z
     ??ACord@absl@@QEBAD_K@Z
     ??Astring_view@absl@@QEBAAEBD_K@Z
+    ??B?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzHandle@cord_internal@absl@@XZ
     ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBA_NXZ
     ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_NXZ
     ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_NXZ
@@ -1275,6 +1352,7 @@
     ??CChunkIterator@Cord@absl@@QEBAPEBVstring_view@2@XZ
     ??D?$__deque_iterator@PEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@AEAPEBV12345@PEAPEAPEBV12345@_J$0A@@__1@std@@QEBAAEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ??D?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEBAAEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@XZ
+    ??D?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBAAEAPEAVCordzHandle@cord_internal@absl@@XZ
     ??D?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@QEBAAEAUTransition@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEBAAEAUTransitionType@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBAAEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -1292,6 +1370,7 @@
     ??Dabsl@@YA?AVuint128@0@V10@0@Z
     ??E?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAAEAV012@XZ
+    ??E?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$move_iterator@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAAEAV012@XZ
@@ -1485,18 +1564,21 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAXVstring_view@3@@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QEAAXPEBD_K@Z
+    ?AppendArray@InlineRep@Cord@absl@@QEAAXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?AppendNode@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?AppendPack@str_format_internal@absl@@YAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
     ?AppendText@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_KVstring_view@4@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PEAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsValueType@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CAPEAPEAUCordRep@cord_internal@2@PEAPEAU342@@Z
     ?AsciiStrToLower@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ?AssertHeld@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?AssertHeld@Mutex@absl@@QEBAXXZ
     ?AssertNotHeld@Mutex@absl@@QEBAXXZ
     ?AssertReaderHeld@Mutex@absl@@QEBAXXZ
@@ -1548,6 +1630,7 @@
     ?CombineContiguousImpl@HashState@hash_internal@absl@@CA_K_KPEBE0U?$integral_constant@H$07@__1@std@@@Z
     ?CombineLargeContiguousImpl32@HashState@hash_internal@absl@@CA_K_KPEBE0@Z
     ?CombineLargeContiguousImpl64@HashState@hash_internal@absl@@CA_K_KPEBE0@Z
+    ?CommitTree@InlineRep@Cord@absl@@QEAAXPEBUCordRep@cord_internal@3@PEAU453@AEBVCordzUpdateScope@53@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?Compare@Cord@absl@@QEBAHVstring_view@2@@Z
     ?CompareImpl@Cord@absl@@AEBAHAEBV12@@Z
     ?CompareSlowPath@Cord@absl@@AEBAHAEBV12@_K1@Z
@@ -1605,6 +1688,7 @@
     ?Delete@CordRepExternal@cord_internal@absl@@SAXPEAUCordRep@23@@Z
     ?Delete@CordRepFlat@cord_internal@absl@@SAXPEAUCordRep@23@@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPEAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPEAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPEAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPEBDPEADH@Z
     ?Description@Impl@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -1615,6 +1699,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPEAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AEAAXXZ
     ?DestroyCordSlow@Cord@absl@@AEAAXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z
     ?DidAllocate@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
@@ -1653,6 +1740,7 @@
     ?DumpPCAndFrameSizesAndStackTrace@debugging_internal@absl@@YAXPEAXQEBQEAXQEAHHH_NP6AXPEBD0@Z0@Z
     ?DurationFromTimespec@absl@@YA?AVDuration@1@Utimespec@@@Z
     ?DurationFromTimeval@absl@@YA?AVDuration@1@Utimeval@@@Z
+    ?EmplaceTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?EmptyString@Status@absl@@CAPEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?EnableDebugLog@CondVar@absl@@QEAAXPEBD@Z
     ?EnableDebugLog@Mutex@absl@@QEAAXPEBD@Z
@@ -1683,6 +1771,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_JPEAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_KPEAD@Z
     ?Fer@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPEBV123@PEAPEAX@Z
     ?Find@ByAnyChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByLength@absl@@QEBA?AVstring_view@2@V32@_K@Z
@@ -1754,6 +1843,7 @@
     ?FromChrono@absl@@YA?AVDuration@1@AEBV?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@chrono@__1@std@@@Z
     ?FromChrono@absl@@YA?AVTime@1@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@234@@chrono@__1@std@@@Z
     ?FromCivil@absl@@YA?AVTime@1@V?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@1@VTimeZone@1@@Z
+    ?FromHost64@big_endian@absl@@YA_K_K@Z
     ?FromHost64@little_endian@absl@@YA_K_K@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0DM@$00@__1@std@@@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0OBA@$00@__1@std@@@Z
@@ -1789,8 +1879,6 @@
     ?GetAllocator@?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@XZ
     ?GetAllocator@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAV?$allocator@USubRange@absl@@@__1@std@@XZ
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K_K@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
@@ -1799,6 +1887,7 @@
     ?GetCapacity@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QEBAD_K@Z
     ?GetCond@WinHelper@Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetData@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAAAEAPEAHXZ
     ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ
@@ -1831,6 +1920,8 @@
     ?GetLeafData@CordRepRing@cord_internal@absl@@SAPEBDPEBUCordRep@23@@Z
     ?GetLock@WinHelper@Waiter@synchronization_internal@absl@@SAPEAU_RTL_SRWLOCK@@PEAV234@@Z
     ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPEAUThreadIdentity@base_internal@2@XZ
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetPayload@Status@absl@@QEBA?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPayloads@Status@absl@@AEAAPEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
     ?GetPayloads@Status@absl@@AEBAPEBV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
@@ -1858,6 +1949,7 @@
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEBAAEB_KXZ
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QEAA_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z
@@ -1882,6 +1974,7 @@
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z
     ?HashSeed@container_internal@absl@@YA_KPEBC@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?HideMask@base_internal@absl@@YA_KXZ
     ?Hours@absl@@YA?AVDuration@1@_J@Z
@@ -1919,6 +2012,7 @@
     ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z
     ?IsDataLoss@absl@@YA_NAEBVStatus@1@@Z
     ?IsDeadlineExceeded@absl@@YA_NAEBVStatus@1@@Z
+    ?IsEmpty@Queue@CordzHandle@cord_internal@absl@@QEBA_NXZ
     ?IsFailedPrecondition@absl@@YA_NAEBVStatus@1@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QEBA_NPEAVstring_view@3@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QEBA_N_K0PEAVstring_view@3@@Z
@@ -1957,6 +2051,7 @@
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransitionType@234@@Z
     ?LocalTimeZone@absl@@YA?AVTimeZone@1@XZ
+    ?Lock@CordzInfo@cord_internal@absl@@QEAAXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QEAAXXZ
     ?Lock@SpinLock@base_internal@absl@@QEAAXXZ
     ?LockSlow@Mutex@absl@@AEAAXPEBUMuHowS@2@PEBVCondition@2@H@Z
@@ -1966,9 +2061,11 @@
     ?LockWhenWithDeadline@Mutex@absl@@QEAA_NAEBVCondition@2@VTime@2@@Z
     ?LockWhenWithTimeout@Mutex@absl@@QEAA_NAEBVCondition@2@VDuration@2@@Z
     ?LogSeverityName@absl@@YAPEBDW4LogSeverity@1@@Z
+    ?LossyAdd@CordzUpdateTracker@cord_internal@absl@@QEAAXW4MethodIdentifier@123@_J@Z
     ?MakeConcat@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_JI@Z
+    ?MakeFlatWithExtraCapacity@InlineRep@Cord@absl@@QEAAPEAUCordRepFlat@cord_internal@3@_K@Z
     ?MakeInt128@absl@@YA?AVint128@1@_J_K@Z
     ?MakeNormalizedDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeNs@KernelTimeout@synchronization_internal@absl@@CA_JVTime@3@@Z
@@ -2014,6 +2111,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPEAV123@_K0@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QEAA?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QEBAPEAV123@AEBVCordzSnapshot@23@@Z
     ?NextCapacity@?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
     ?NextCapacity@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
     ?NextCapacity@?$Storage@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
@@ -2034,6 +2132,8 @@
     ?Now@UnscaledCycleClockWrapperForGetCurrentTime@time_internal@absl@@SA_JXZ
     ?Now@absl@@YA?AVTime@1@XZ
     ?NumCPUs@base_internal@absl@@YAHXZ
+    ?ODRCheck@CordzHandle@cord_internal@absl@@AEBAXXZ
+    ?ODRCheck@CordzInfo@cord_internal@absl@@AEBAXXZ
     ?OccursBefore@ViableSubstitution@strings_internal@absl@@QEBA_NAEBU123@@Z
     ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z
     ?OutOfRangeError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
@@ -2072,7 +2172,9 @@
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?PrependNode@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@Impl@time_zone@cctz@time_internal@absl@@QEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@2345@@Z
     ?PrevTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -2101,6 +2203,7 @@
     ?ReaderUnlock@Mutex@absl@@QEAAXXZ
     ?ReclaimThreadIdentity@synchronization_internal@absl@@YAXPEAX@Z
     ?RecordInsertSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
+    ?RecordMetrics@CordzInfo@cord_internal@absl@@QEAAX_J@Z
     ?Ref@CordRep@cord_internal@absl@@SAPEAU123@PEAU123@@Z
     ?Register@CycleClockSource@base_internal@absl@@CAXP6A_JXZ@Z
     ?Register@HashtablezSampler@container_internal@absl@@QEAAPEAUHashtablezInfo@23@XZ
@@ -2149,6 +2252,8 @@
     ?SetAllocatedData@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAXPEAUSubRange@3@_K@Z
     ?SetCapacityForTesting@CordRepRing@cord_internal@absl@@QEAAX_K@Z
     ?SetConversionChar@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXW4FormatConversionChar@3@PEAVFormatConversionSpecImpl@23@@Z
+    ?SetCordRep@CordzInfo@cord_internal@absl@@QEAAXPEAUCordRep@23@@Z
+    ?SetCordRep@CordzUpdateScope@cord_internal@absl@@QEBAXPEAUCordRep@23@@Z
     ?SetCurrentThreadIdentity@base_internal@absl@@YAXPEAUThreadIdentity@12@P6AXPEAX@Z@Z
     ?SetDisposeCallback@HashtablezSampler@container_internal@absl@@QEAAP6AXAEBUHashtablezInfo@23@@ZP6AX0@Z@Z
     ?SetFlags@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXUFlags@23@PEAVFormatConversionSpecImpl@23@@Z
@@ -2169,6 +2274,7 @@
     ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__1@std@@@Z
     ?SetToZero@?$BigUnsigned@$03@strings_internal@absl@@QEAAXXZ
     ?SetToZero@?$BigUnsigned@$0FE@@strings_internal@absl@@QEAAXXZ
+    ?SetTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@AEBVCordzUpdateScope@53@@Z
     ?SetValue@?$Manager@H$01@FormatArgImpl@str_format_internal@absl@@SA?ATData@234@AEBH@Z
     ?SetWidth@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPEAVFormatConversionSpecImpl@23@@Z
     ?ShiftLeft@?$BigUnsigned@$03@strings_internal@absl@@QEAAXH@Z
@@ -2278,6 +2384,7 @@
     ?ToDoubleSeconds@absl@@YANVDuration@1@@Z
     ?ToHost16@big_endian@absl@@YAGG@Z
     ?ToHost32@big_endian@absl@@YAII@Z
+    ?ToHost64@big_endian@absl@@YA_K_K@Z
     ?ToHost64@little_endian@absl@@YA_K_K@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$00@__1@std@@@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$0DLJKMKAA@@__1@std@@@Z
@@ -2310,6 +2417,9 @@
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@cctz@time_internal@absl@@YA_JAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AEAAXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QEAA_NXZ
@@ -2331,6 +2441,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?Unlock@Mutex@absl@@QEAAXXZ
     ?Unlock@SpinLock@base_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
@@ -2342,6 +2453,9 @@
     ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QEAAXPEAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QEAAXXZ
+    ?UpdateCordzStatistics@InlineRep@Cord@absl@@QEAAXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QEAAXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QEAAXUGraphId@23@HP6AHPEAPEAXH@Z@Z
     ?UsingInlinedStorage@Storage@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CA_N_K@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -2401,12 +2515,18 @@
     ?__alloc@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
@@ -2418,18 +2538,24 @@
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__annotate_contiguous_container@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
+    ?__annotate_contiguous_container@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
+    ?__annotate_contiguous_container@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_delete@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_new@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
+    ?__annotate_new@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
+    ?__annotate_new@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
@@ -2463,6 +2589,10 @@
     ?__destruct_at_end@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUTransition@cctz@time_internal@absl@@@Z
@@ -2472,6 +2602,8 @@
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUViableSubstitution@strings_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUTransition@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUTransitionType@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
@@ -2487,6 +2619,10 @@
     ?__end_cap@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAUTransition@cctz@time_internal@absl@@XZ
@@ -2497,6 +2633,10 @@
     ?__end_cap@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAUViableSubstitution@strings_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAUTransition@cctz@time_internal@absl@@XZ
@@ -2510,6 +2650,8 @@
     ?__front_spare@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2520,6 +2662,10 @@
     ?__get@?$__compressed_pair_elem@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@$0A@$0A@@__1@std@@QEAAAEAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
@@ -2561,6 +2707,10 @@
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -2578,6 +2728,8 @@
     ?__get_value@?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBAAEBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__hash@?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEBA_KXZ
     ?__invalidate_all_iterators@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
+    ?__invalidate_all_iterators@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
+    ?__invalidate_all_iterators@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
@@ -2588,6 +2740,7 @@
     ?__invalidate_iterators_past@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAUTransitionType@cctz@time_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAVFormatArgImpl@str_format_internal@absl@@@Z
+    ?__make_iter@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ?__make_iter@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__make_iter@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@PEAUTransition@cctz@time_internal@absl@@@Z
     ?__make_iter@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@PEAUTransitionType@cctz@time_internal@absl@@@Z
@@ -2596,6 +2749,8 @@
     ?__node_alloc@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__ptr@?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAPEAU123@XZ
     ?__recommend@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
+    ?__recommend@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
+    ?__recommend@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
@@ -2603,6 +2758,8 @@
     ?__recommend@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__rehash@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@AEAAX_K@Z
     ?__swap_out_circular_buffer@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@PEAU4567@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@@Z
@@ -2625,7 +2782,9 @@
     ?allocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?allocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?allocate@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAPEAPEAUCordRep@cord_internal@absl@@_K@Z
+    ?allocate@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAPEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?allocate@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAPEAPEBUCordRep@cord_internal@absl@@_K@Z
+    ?allocate@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAPEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?allocate@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?allocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?allocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2640,7 +2799,9 @@
     ?allocate@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@AEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPEAPEAUCordRep@cord_internal@2@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@_K@Z
+    ?allocate@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPEAPEBUCordRep@cord_internal@2@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@_K@Z
+    ?allocate@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@AEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@_K@Z
@@ -2673,6 +2834,7 @@
     ?back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
     ?back@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUTransitionType@cctz@time_internal@absl@@XZ
     ?back@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@XZ
+    ?base@?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBAPEAPEAVCordzHandle@cord_internal@absl@@XZ
     ?base@?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@QEBAPEAUTransition@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEBAPEAUTransitionType@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBAPEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -2693,6 +2855,7 @@
     ?begin@?$initializer_list@Vstring_view@absl@@@std@@QEBAPEBVstring_view@absl@@XZ
     ?begin@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QEBAPEBW4FormatConversionCharSet@absl@@XZ
     ?begin@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA?AV?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
+    ?begin@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@XZ
     ?begin@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?begin@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@XZ
     ?begin@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2703,17 +2866,23 @@
     ?capacity@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
+    ?capacity@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
+    ?capacity@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -2725,11 +2894,15 @@
     ?clear@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
+    ?clear@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
+    ?clear@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
+    ?clear@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
+    ?clear@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
@@ -2739,7 +2912,6 @@
     ?clear@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ
     ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ
-    ?clear_cordz_info@InlineRep@Cord@absl@@QEAAXXZ
     ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ
     ?compare_exchange_weak@?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEAA_NAEAPEAUHashtablezInfo@container_internal@absl@@PEAU456@W4memory_order@23@2@Z
     ?concat@CordRep@cord_internal@absl@@QEAAPEAUCordRepConcat@23@XZ
@@ -2747,6 +2919,9 @@
     ?consumed@CordRepRingReader@cord_internal@absl@@QEBA_KXZ
     ?conversion_char@FormatConversionSpecImpl@str_format_internal@absl@@QEBA?AW4FormatConversionChar@3@XZ
     ?cord_ring_buffer_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
+    ?cordz_info@InlineData@cord_internal@absl@@QEBAPEAVCordzInfo@23@XZ
+    ?cordz_info@InlineRep@Cord@absl@@QEBAPEAVCordzInfo@cord_internal@3@XZ
+    ?cordz_should_profile@cord_internal@absl@@YA_NXZ
     ?count@FILERawSink@str_format_internal@absl@@QEBA_KXZ
     ?data@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAPEAPEAUCordRep@cord_internal@2@XZ
     ?data@?$InlinedVector@H$0CP@V?$allocator@H@__1@std@@@absl@@QEAAPEAHXZ
@@ -2761,6 +2936,8 @@
     ?data@?$Span@I@absl@@QEBAPEAIXZ
     ?data@?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QEBAPEAVFormatArgImpl@str_format_internal@2@XZ
     ?data@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEAUCordRep@cord_internal@absl@@XZ
+    ?data@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEAVCordzHandle@cord_internal@absl@@XZ
+    ?data@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEBVCordzHandle@cord_internal@absl@@XZ
     ?data@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?data@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUTransition@cctz@time_internal@absl@@XZ
     ?data@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUTransitionType@cctz@time_internal@absl@@XZ
@@ -2781,7 +2958,9 @@
     ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?deallocate@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@_K@Z
+    ?deallocate@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@_K@Z
+    ?deallocate@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAXPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?deallocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2796,7 +2975,9 @@
     ?deallocate@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@PEAPEAUCordRep@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@2@_K@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@PEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@2@_K@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@PEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2810,7 +2991,9 @@
     ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?destroy@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?destroy@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?destroy@?$allocator@UPayload@status_internal@absl@@@__1@std@@QEAAXPEAUPayload@status_internal@absl@@@Z
     ?destroy@?$allocator@USubRange@absl@@@__1@std@@QEAAXPEAUSubRange@absl@@@Z
@@ -2850,6 +3033,7 @@
     ?end@?$initializer_list@U?$pair@Vstring_view@absl@@V12@@__1@std@@@std@@QEBAPEBU?$pair@Vstring_view@absl@@V12@@__1@2@XZ
     ?end@?$initializer_list@Vstring_view@absl@@@std@@QEBAPEBVstring_view@absl@@XZ
     ?end@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA?AV?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
+    ?end@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@XZ
     ?end@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?end@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@XZ
     ?end@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2896,6 +3080,14 @@
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
@@ -2938,7 +3130,6 @@
     ?fixed_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@AEBV?$duration@_JV?$ratio@$00$00@__1@std@@@chrono@__1@std@@@Z
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
-    ?force_tree@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@_K@Z
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
@@ -2970,6 +3161,7 @@
     ?get@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEBAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
     ?get@?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBAPEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ
     ?get@?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEAVZoneInfoSource@cctz@time_internal@absl@@XZ
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
@@ -2999,6 +3191,9 @@
     ?is_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBA_NXZ
     ?is_leap_year@impl@detail@cctz@time_internal@absl@@YA_N_J@Z
     ?is_length@ConvTag@str_format_internal@absl@@QEBA_NXZ
+    ?is_profiled@InlineData@cord_internal@absl@@QEBA_NXZ
+    ?is_profiled@InlineRep@Cord@absl@@QEBA_NXZ
+    ?is_snapshot@CordzHandle@cord_internal@absl@@QEBA_NXZ
     ?is_tree@InlineData@cord_internal@absl@@QEBA_NXZ
     ?is_tree@InlineRep@Cord@absl@@QEBA_NXZ
     ?key_eq@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@XZ
@@ -3007,6 +3202,8 @@
     ?length@string_view@absl@@QEBA_KXZ
     ?load@?$__atomic_base@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QEBAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZW4memory_order@23@@Z
     ?load@?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEBAPEAUHashtablezInfo@container_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QEBA?AW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QEBA?AW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?load_time_zone@cctz@time_internal@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAVtime_zone@123@@Z
@@ -3022,7 +3219,9 @@
     ?max_size@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEBA_KXZ
+    ?max_size@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEBA_KXZ
+    ?max_size@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBA_KXZ
@@ -3033,6 +3232,8 @@
     ?max_size@?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?max_size@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?max_size@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -3096,6 +3297,8 @@
     ?push_back@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ?push_back@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ?push_back@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ?push_back@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?push_back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ?push_front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
@@ -3151,6 +3354,12 @@
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEAAAEAV?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -3180,6 +3389,8 @@
     ?second@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ
     ?second@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ
     ?set_arg@BoundConversion@str_format_internal@absl@@QEAAXPEBVFormatArgImpl@23@@Z
+    ?set_cordz_info@InlineData@cord_internal@absl@@QEAAXPEAVCordzInfo@23@@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
     ?set_data@InlineRep@Cord@absl@@QEAAPEAD_K@Z
     ?set_data@InlineRep@Cord@absl@@QEAAXPEBD_K_N@Z
     ?set_depth@CordRepConcat@cord_internal@absl@@QEAAXE@Z
@@ -3214,6 +3425,8 @@
     ?size@?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@QEBA_KXZ
     ?size@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QEBA_KXZ
     ?size@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?size@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?size@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -3227,6 +3440,8 @@
     ?status@BadStatusOrAccess@absl@@QEBAAEBVStatus@2@XZ
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Uday_tag@1234@U51234@_J@Z
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Usecond_tag@1234@U51234@_J@Z
+    ?store@?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEAAXPEAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?store@?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEAAXPEAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QEAAXW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QEAAXW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?str@UntypedFormatSpecImpl@str_format_internal@absl@@QEBA?AVstring_view@3@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def
index a59b0b7..73aea3a 100644
--- a/third_party/abseil-cpp/symbols_arm64_rel.def
+++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -109,6 +109,8 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@QEAA@Vstring_view@1@@Z
+    ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
+    ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??0HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??0HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -129,6 +131,8 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1CondVar@absl@@QEAA@XZ
+    ??1CordzHandle@cord_internal@absl@@MEAA@XZ
+    ??1CordzInfo@cord_internal@absl@@EEAA@XZ
     ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??1HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??1HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -207,12 +211,14 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAXVstring_view@3@@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QEAAXPEBD_K@Z
+    ?AppendArray@InlineRep@Cord@absl@@QEAAXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?AppendPack@str_format_internal@absl@@YAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PEAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsciiStrToLower@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
@@ -290,6 +296,7 @@
     ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ
     ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPEAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPEAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPEAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPEBDPEADH@Z
     ?Description@TimeZoneInfo@cctz@time_internal@absl@@UEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -299,6 +306,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPEAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AEAAXXZ
     ?DestroyCordSlow@Cord@absl@@AEAAXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z
     ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ
     ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ
     ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@Vstring_view@2@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@3@Vstring_view@3@AEBVCord@3@@Z
@@ -338,6 +348,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_JPEAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_KPEAD@Z
     ?Fer@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPEBV123@PEAPEAX@Z
     ?Find@ByAnyChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByLength@absl@@QEBA?AVstring_view@2@V32@_K@Z
@@ -400,17 +411,19 @@
     ?FromUDate@absl@@YA?AVTime@1@N@Z
     ?FromUniversal@absl@@YA?AVTime@1@_J@Z
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K_K@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QEBAD_K@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAVstring_view@2@@Z
     ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetPayload@Status@absl@@QEBA?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPrependBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
     ?GetProgramCounter@debugging_internal@absl@@YAPEAXPEAX@Z
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QEAA_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z
@@ -429,6 +442,7 @@
     ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__1@std@@@Z
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?IDivDuration@time_internal@absl@@YA_J_NVDuration@2@1PEAV32@@Z
     ?In@Time@absl@@QEBA?AUBreakdown@12@VTimeZone@2@@Z
@@ -474,6 +488,7 @@
     ?LoadTimeZone@Impl@time_zone@cctz@time_internal@absl@@SA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV2345@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransitionType@234@@Z
+    ?Lock@CordzInfo@cord_internal@absl@@QEAAXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QEAAXXZ
     ?LockSlow@Mutex@absl@@AEAAXPEBUMuHowS@2@PEBVCondition@2@H@Z
     ?LockSlowLoop@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@H@Z
@@ -508,6 +523,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPEAV123@_K0@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QEAA?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QEBAPEAV123@AEBVCordzSnapshot@23@@Z
     ?NextTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?NextTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?NextTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -549,7 +565,9 @@
     ?Prepend@CordRepRing@cord_internal@absl@@SAPEAV123@PEAV123@Vstring_view@3@_K@Z
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?PrevTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -709,6 +727,9 @@
     ?ToUnixMillis@absl@@YA_JVTime@1@@Z
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AEAAXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QEAA_NXZ
@@ -719,6 +740,7 @@
     ?UnavailableError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?Unlock@Mutex@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@VDuration@1@@Z
@@ -727,6 +749,8 @@
     ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QEAAXPEAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QEAAXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QEAAXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QEAAXUGraphId@23@HP6AHPEAPEAXH@Z@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?Utf8SafeCHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -785,6 +809,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?load_time_zone@cctz@time_internal@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAVtime_zone@123@@Z
     ?local_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ
     ?lookup@time_zone@cctz@time_internal@absl@@QEBA?AUabsolute_lookup@1234@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@@Z
@@ -828,6 +853,8 @@
     ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
     ?safe_strtou32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAIH@Z
     ?safe_strtou64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_KH@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
+    ?set_tree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
     ?shallow_subcords_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
     ?shrink_to_fit@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?size@?$BigUnsigned@$03@strings_internal@absl@@QEBAHXZ
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def
index 87055e7..fd92091 100644
--- a/third_party/abseil-cpp/symbols_x64_dbg.def
+++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -9,12 +9,16 @@
     ??$?0$$T@?$Storage@PEAUSubRange@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@$$QEA$$T@Z
     ??$?0$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??$?0$$TAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@?$__compressed_pair@PEAUViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$TAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAUTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
@@ -22,6 +26,8 @@
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PEAVFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@$$QEA$$T$$QEAU__default_init_tag@12@@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUTransition@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PEAUTransitionType@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAA@$$QEA$$T@Z
@@ -67,9 +73,11 @@
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@Z
     ??$?0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@Z
+    ??$?0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAA@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QEA$$T@Z
     ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@3@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QEA$$T@Z
@@ -185,8 +193,10 @@
     ??$?0VBufferRawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAVBufferRawSink@12@@Z
     ??$?0VFILERawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QEAA@PEAVFILERawSink@12@@Z
     ??$?4V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QEAAAEAV01@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??$?8PEAPEAVCordzHandle@cord_internal@absl@@PEAPEAV012@@__1@std@@YA_NAEBV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?8PEAUTransitionType@cctz@time_internal@absl@@PEAU0123@@__1@std@@YA_NAEBV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?8PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@PEBU0123@@__1@std@@YA_NAEBV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
+    ??$?9PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?9PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?9PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA_NAEBV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
     ??$?9VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@YA_NAEBV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@01@$$T@Z
@@ -355,6 +365,7 @@
     ??$InvokeFlush@VFILERawSink@str_format_internal@absl@@@str_format_internal@absl@@YAXPEAVFILERawSink@01@Vstring_view@1@@Z
     ??$InvokeReleaser@UStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@X@cord_internal@absl@@YAXURank0@01@$$QEAUStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@1@QEAA@$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@Vstring_view@1@@Z
     ??$LowLevelCallOnce@A6AXXZ$$V@base_internal@absl@@YAXPEAVonce_flag@1@A6AXXZ@Z
+    ??$MakeConstSpan@$SQEAX@absl@@YA?AV?$Span@QEAX@0@PEBQEAX_K@Z
     ??$MakeSpan@$SI$0BAA@@absl@@YA?AV?$Span@I@0@AEAY0BAA@I@Z
     ??$MakeSpan@$SI$0BIA@@absl@@YA?AV?$Span@I@0@AEAY0BIA@I@Z
     ??$MakeSpan@$SI$0CAA@@absl@@YA?AV?$Span@I@0@AEAY0CAA@I@Z
@@ -444,6 +455,8 @@
     ??$__construct_at_end@V?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXV?$move_iterator@PEAUTransition@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_at_end@V?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXV?$move_iterator@PEAUTransitionType@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAUCordRep@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@PEAPEAUCordRep@cord_internal@absl@@1AEAPEAPEAU345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@PEAVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@01@PEAPEAVCordzHandle@cord_internal@absl@@1AEAPEAPEAV345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@PEBVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@01@PEAPEBVCordzHandle@cord_internal@absl@@1AEAPEAPEBV345@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@1AEAPEAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@UTransition@cctz@time_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UTransition@cctz@time_internal@absl@@@01@PEAUTransition@cctz@time_internal@absl@@1AEAPEAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@UTransitionType@cctz@time_internal@absl@@X@__1@std@@YAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@01@PEAUTransitionType@cctz@time_internal@absl@@1AEAPEAU3456@@Z
@@ -455,6 +468,8 @@
     ??$__construct_one_at_end@$$V@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ??$__construct_one_at_end@AEAVstring_view@absl@@AEBV12@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAVstring_view@absl@@AEBV34@AEA_K@Z
     ??$__construct_one_at_end@AEBQEAUCordRep@cord_internal@absl@@@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ??$__construct_one_at_end@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ??$__construct_one_at_end@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__construct_range_forward@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAUCordRep@cord_internal@absl@@PEAU456@PEAU456@PEAU456@X@__1@std@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@PEBQEAUCordRep@cord_internal@absl@@1AEAPEAPEAU345@@Z
@@ -464,8 +479,12 @@
     ??$__cxx_atomic_exchange@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZPEAU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@01@P6AX0@ZW4memory_order@01@@Z
     ??$__cxx_atomic_load@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZPEBU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@YAPEAUHashtablezInfo@container_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAVCordzHandle@cord_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAVCordzHandle@cord_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PEAVCordzInfo@cord_internal@absl@@@__1@std@@YAPEAVCordzInfo@cord_internal@absl@@PEBU?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4OnDeadlockCycle@absl@@@__1@std@@YA?AW4OnDeadlockCycle@absl@@PEBU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YA?AW4State@PerThreadSynch@base_internal@absl@@PEBU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@PEAVCordzHandle@cord_internal@absl@@@01@PEAVCordzHandle@cord_internal@absl@@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PEAVCordzInfo@cord_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@01@PEAVCordzInfo@cord_internal@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4OnDeadlockCycle@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4OnDeadlockCycle@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YAXPEAU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4State@PerThreadSynch@base_internal@absl@@W4memory_order@01@@Z
     ??$__distance@PEBUPayload@status_internal@absl@@@__1@std@@YA_JPEBUPayload@status_internal@absl@@0Urandom_access_iterator_tag@01@@Z
@@ -484,6 +503,8 @@
     ??$__move_backward@UTransition@cctz@time_internal@absl@@U1234@@__1@std@@YAPEAUTransition@cctz@time_internal@absl@@PEAU2345@00@Z
     ??$__move_backward@UTransitionType@cctz@time_internal@absl@@U1234@@__1@std@@YAPEAUTransitionType@cctz@time_internal@absl@@PEAU2345@00@Z
     ??$__push_back_slow_path@AEBQEAUCordRep@cord_internal@absl@@@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ??$__push_back_slow_path@AEBUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__rewrap_iter@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@0@Z
@@ -493,6 +514,8 @@
     ??$__to_address@$$CBVFormatArgImpl@str_format_internal@absl@@@__1@std@@YAPEBVFormatArgImpl@str_format_internal@absl@@PEBV234@@Z
     ??$__to_address@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEAPEBV23456@@Z
     ??$__to_address@PEAUCordRep@cord_internal@absl@@@__1@std@@YAPEAPEAUCordRep@cord_internal@absl@@PEAPEAU234@@Z
+    ??$__to_address@PEAVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAPEAVCordzHandle@cord_internal@absl@@PEAPEAV234@@Z
+    ??$__to_address@PEBVCordzHandle@cord_internal@absl@@@__1@std@@YAPEAPEBVCordzHandle@cord_internal@absl@@PEAPEBV234@@Z
     ??$__to_address@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@PEAU2345@@Z
     ??$__to_address@UTransition@cctz@time_internal@absl@@@__1@std@@YAPEAUTransition@cctz@time_internal@absl@@PEAU2345@@Z
     ??$__to_address@UTransitionType@cctz@time_internal@absl@@@__1@std@@YAPEAUTransitionType@cctz@time_internal@absl@@PEAU2345@@Z
@@ -537,10 +560,14 @@
     ??$construct@PEAUCordRep@cord_internal@absl@@AEBQEAU123@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@PEAPEAUCordRep@cord_internal@absl@@AEBQEAU456@@Z
     ??$construct@PEAUCordRep@cord_internal@absl@@PEAU123@@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@$$QEAPEAU345@@Z
     ??$construct@PEAUCordRep@cord_internal@absl@@PEAU123@@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@1@$$QEAPEAU561@@Z
+    ??$construct@PEAVCordzHandle@cord_internal@absl@@AEBQEAV123@@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV345@@Z
+    ??$construct@PEAVCordzHandle@cord_internal@absl@@AEBQEAV123@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@PEAPEAVCordzHandle@cord_internal@absl@@AEBQEAV456@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@AEBQEBU345@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@AEBQEBU123@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@AEBQEBU561@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@PEBU123@@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@$$QEAPEBU345@@Z
     ??$construct@PEBUCordRep@cord_internal@absl@@PEBU123@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@$$QEAPEBU561@@Z
+    ??$construct@PEBVCordzHandle@cord_internal@absl@@AEBQEBV123@@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV345@@Z
+    ??$construct@PEBVCordzHandle@cord_internal@absl@@AEBQEBV123@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@PEAPEBVCordzHandle@cord_internal@absl@@AEBQEBV456@@Z
     ??$construct@PEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV12345@@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV34567@@Z
     ??$construct@PEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV12345@X@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV45678@@Z
     ??$construct@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$tuple@$$V@23@@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@12@$$QEAV?$tuple@$$V@12@@Z
@@ -581,7 +608,9 @@
     ??$destroy@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@X@?$allocator_traits@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ??$destroy@PEAUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@1@@Z
     ??$destroy@PEAUCordRep@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@PEAPEAUCordRep@cord_internal@absl@@@Z
+    ??$destroy@PEAVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@PEBUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@1@@Z
+    ??$destroy@PEBVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@PEAPEBVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@XX@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$destroy@UPayload@status_internal@absl@@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@PEAUPayload@status_internal@1@@Z
@@ -634,7 +663,9 @@
     ??$forward@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@AEAV123@@Z
+    ??$forward@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@AEAV123@@Z
+    ??$forward@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@YAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@AEAV201@@Z
     ??$forward@AEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@YAAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@AEAV123@@Z
     ??$forward@AEAV?$allocator@USubRange@absl@@@__1@std@@@absl@@YAAEAV?$allocator@USubRange@absl@@@__1@std@@AEAV123@@Z
@@ -645,7 +676,9 @@
     ??$forward@AEA_K@absl@@YAAEA_KAEA_K@Z
     ??$forward@AEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEAPEBV23456@@Z
     ??$forward@AEBQEAUCordRep@cord_internal@absl@@@__1@std@@YAAEBQEAUCordRep@cord_internal@absl@@AEBQEAU234@@Z
+    ??$forward@AEBQEAVCordzHandle@cord_internal@absl@@@__1@std@@YAAEBQEAVCordzHandle@cord_internal@absl@@AEBQEAV234@@Z
     ??$forward@AEBQEBUCordRep@cord_internal@absl@@@__1@std@@YAAEBQEBUCordRep@cord_internal@absl@@AEBQEBU234@@Z
+    ??$forward@AEBQEBVCordzHandle@cord_internal@absl@@@__1@std@@YAAEBQEBVCordzHandle@cord_internal@absl@@AEBQEBV234@@Z
     ??$forward@AEBQEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAAEBQEBVImpl@time_zone@cctz@time_internal@absl@@AEBQEBV23456@@Z
     ??$forward@AEBUHashtablezInfo@container_internal@absl@@@__1@std@@YAAEBUHashtablezInfo@container_internal@absl@@AEBU234@@Z
     ??$forward@AEBUPayload@status_internal@absl@@@__1@std@@YAAEBUPayload@status_internal@absl@@AEBU234@@Z
@@ -728,7 +761,9 @@
     ??$max_size@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@12@@Z
     ??$max_size@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
     ??$max_size@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SA_KAEBV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
@@ -742,6 +777,8 @@
     ??$min@VDuration@absl@@U?$__less@VDuration@absl@@V12@@__1@std@@@__1@std@@YAAEBVDuration@absl@@AEBV23@0U?$__less@VDuration@absl@@V12@@01@@Z
     ??$move@AEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAPEAPEAPEBV23456@@Z
     ??$move@AEAPEAPEAUCordRep@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEAUCordRep@cord_internal@absl@@AEAPEAPEAU234@@Z
+    ??$move@AEAPEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEAVCordzHandle@cord_internal@absl@@AEAPEAPEAV234@@Z
+    ??$move@AEAPEAPEBVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QEAPEAPEBVCordzHandle@cord_internal@absl@@AEAPEAPEBV234@@Z
     ??$move@AEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAPEAPEBV23456@@Z
     ??$move@AEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA$$QEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAPEAU2345@@Z
     ??$move@AEAPEAUCordRep@cord_internal@absl@@@__1@std@@YA$$QEAPEAUCordRep@cord_internal@absl@@AEAPEAU234@@Z
@@ -771,6 +808,8 @@
     ??$reset@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUCordRep@cord_internal@absl@@@__1@std@@YAXAEAPEAPEAUCordRep@cord_internal@absl@@0@Z
+    ??$swap@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@YAXAEAPEAPEAVCordzHandle@cord_internal@absl@@0@Z
+    ??$swap@PEAPEBVCordzHandle@cord_internal@absl@@@__1@std@@YAXAEAPEAPEBVCordzHandle@cord_internal@absl@@0@Z
     ??$swap@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAXAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
     ??$swap@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@YAXAEAPEAUTransitionType@cctz@time_internal@absl@@0@Z
@@ -816,6 +855,7 @@
     ??0?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@XZ
     ??0?$Span@D@absl@@QEAA@PEAD_K@Z
     ??0?$Span@I@absl@@QEAA@PEAI_K@Z
+    ??0?$Span@QEAX@absl@@QEAA@PEBQEAX_K@Z
     ??0?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QEAA@PEAVFormatArgImpl@str_format_internal@1@_K@Z
     ??0?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAA@XZ
     ??0?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA@XZ
@@ -828,6 +868,7 @@
     ??0?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@_K@Z
     ??0?$__atomic_base@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$__compressed_pair_elem@U?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QEAA@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
@@ -841,6 +882,8 @@
     ??0?$__compressed_pair_elem@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$00$00@__1@std@@QEAA@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
@@ -850,8 +893,10 @@
     ??0?$__compressed_pair_elem@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAA@U__default_init_tag@12@@Z
     ??0?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__cxx_atomic_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@ZU?$__cxx_atomic_base_impl@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_impl@PEAUHashtablezInfo@container_internal@absl@@U?$__cxx_atomic_base_impl@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_impl@PEAVCordzInfo@cord_internal@absl@@U?$__cxx_atomic_base_impl@PEAVCordzInfo@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__deque_base@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__deque_iterator@PEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@AEAPEBV12345@PEAPEAPEBV12345@_J$0A@@__1@std@@AEAA@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV34567@@Z
     ??0?$__hash_const_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAA@AEBV?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@12@@Z
@@ -868,6 +913,8 @@
     ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@12@@Z
     ??0?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@_K0AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
@@ -875,18 +922,23 @@
     ??0?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QEAA@XZ
     ??0?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QEAA@XZ
     ??0?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??0?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??0?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@AEAA@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ??0?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@AEAA@PEAUTransition@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@AEAA@PEAUTransitionType@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@AEAA@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??0?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAA@XZ
+    ??0?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAA@XZ
+    ??0?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAA@XZ
     ??0?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAA@XZ
@@ -898,6 +950,7 @@
     ??0?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QEAA@XZ
     ??0?$atomic@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QEAA@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$atomic@PEAUHashtablezInfo@container_internal@absl@@@__1@std@@QEAA@PEAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$atomic@PEAVCordzInfo@cord_internal@absl@@@__1@std@@QEAA@PEAVCordzInfo@cord_internal@absl@@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@AEAA@Ufields@1234@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAA@_J00000@Z
     ??0?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@AEAA@Ufields@1234@@Z
@@ -945,6 +998,8 @@
     ??0?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEAA@$$QEAV012@@Z
     ??0?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA@XZ
     ??0?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@V?$initializer_list@PEAUCordRep@cord_internal@absl@@@2@@Z
+    ??0?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??0?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??0?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -987,6 +1042,13 @@
     ??0CordRepRing@cord_internal@absl@@AEAA@I@Z
     ??0CordRepRingReader@cord_internal@absl@@QEAA@XZ
     ??0CordRepSubstring@cord_internal@absl@@QEAA@XZ
+    ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
+    ??0CordzHandle@cord_internal@absl@@QEAA@XZ
+    ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzStatistics@cord_internal@absl@@QEAA@XZ
+    ??0CordzUpdateScope@cord_internal@absl@@QEAA@PEAVCordzInfo@12@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzUpdateTracker@cord_internal@absl@@QEAA@XZ
+    ??0Counter@CordzUpdateTracker@cord_internal@absl@@QEAA@XZ
     ??0Duration@absl@@AEAA@_JI@Z
     ??0Duration@absl@@QEAA@XZ
     ??0ErrnoSaver@base_internal@absl@@QEAA@XZ
@@ -999,9 +1061,11 @@
     ??0HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??0HashtablezSampler@container_internal@absl@@QEAA@XZ
     ??0Impl@time_zone@cctz@time_internal@absl@@AEAA@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??0InlineData@cord_internal@absl@@QEAA@W4DefaultInitType@012@@Z
     ??0InlineData@cord_internal@absl@@QEAA@XZ
     ??0InlineRep@Cord@absl@@QEAA@$$QEAV012@@Z
     ??0InlineRep@Cord@absl@@QEAA@AEBV012@@Z
+    ??0InlineRep@Cord@absl@@QEAA@W4DefaultInitType@InlineData@cord_internal@2@@Z
     ??0InlineRep@Cord@absl@@QEAA@XZ
     ??0InputValue@UnboundConversion@str_format_internal@absl@@QEAA@XZ
     ??0KernelTimeout@synchronization_internal@absl@@QEAA@VTime@2@@Z
@@ -1050,6 +1114,8 @@
     ??0_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAPEAUTransition@cctz@time_internal@absl@@_K@Z
     ??0_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@PEAPEAUTransitionType@cctz@time_internal@absl@@_K@Z
     ??0_ConstructTransaction@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
+    ??0_ConstructTransaction@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
+    ??0_ConstructTransaction@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
     ??0_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@AEAV123@_K@Z
@@ -1104,6 +1170,8 @@
     ??1?$__policy_func@$$A6AXVstring_view@absl@@AEBVCord@2@@Z@__function@__1@std@@QEAA@XZ
     ??1?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1111,6 +1179,8 @@
     ??1?$__temp_value@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??1?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
+    ??1?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
     ??1?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAA@XZ
@@ -1131,6 +1201,8 @@
     ??1?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1140,6 +1212,9 @@
     ??1CondVar@absl@@QEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordForest@absl@@QEAA@XZ
+    ??1CordzHandle@cord_internal@absl@@MEAA@XZ
+    ??1CordzInfo@cord_internal@absl@@EEAA@XZ
+    ??1CordzUpdateScope@cord_internal@absl@@QEAA@XZ
     ??1ErrnoSaver@base_internal@absl@@QEAA@XZ
     ??1FormatSinkImpl@str_format_internal@absl@@QEAA@XZ
     ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ
@@ -1171,6 +1246,8 @@
     ??1_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1_ConstructTransaction@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1_ConstructTransaction@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
@@ -1182,10 +1259,9 @@
     ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@optional_internal@absl@@IEAAAEAV012@$$QEAV012@@Z
     ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEAAAEAV012@$$QEAV012@@Z
     ??4Cord@absl@@QEAAAEAV01@$$QEAV01@@Z
-    ??4Cord@absl@@QEAAAEAV01@AEBV01@@Z
     ??4Cord@absl@@QEAAAEAV01@Vstring_view@1@@Z
+    ??4CordzUpdateTracker@cord_internal@absl@@QEAAAEAV012@AEBV012@@Z
     ??4InlineRep@Cord@absl@@QEAAAEAV012@$$QEAV012@@Z
-    ??4InlineRep@Cord@absl@@QEAAAEAV012@AEBV012@@Z
     ??4Payload@status_internal@absl@@QEAAAEAU012@$$QEAU012@@Z
     ??4Status@absl@@QEAAAEAV01@$$QEAV01@@Z
     ??4int128@absl@@QEAAAEAV01@H@Z
@@ -1253,6 +1329,7 @@
     ??A?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@_K@Z
     ??ACord@absl@@QEBAD_K@Z
     ??Astring_view@absl@@QEBAAEBD_K@Z
+    ??B?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzHandle@cord_internal@absl@@XZ
     ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBA_NXZ
     ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_NXZ
     ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_NXZ
@@ -1277,6 +1354,7 @@
     ??CChunkIterator@Cord@absl@@QEBAPEBVstring_view@2@XZ
     ??D?$__deque_iterator@PEBVImpl@time_zone@cctz@time_internal@absl@@PEAPEBV12345@AEAPEBV12345@PEAPEAPEBV12345@_J$0A@@__1@std@@QEBAAEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ??D?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEBAAEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@XZ
+    ??D?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBAAEAPEAVCordzHandle@cord_internal@absl@@XZ
     ??D?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@QEBAAEAUTransition@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEBAAEAUTransitionType@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBAAEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -1294,6 +1372,7 @@
     ??Dabsl@@YA?AVuint128@0@V10@0@Z
     ??E?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAAEAV012@XZ
+    ??E?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAAEAV012@XZ
     ??E?$move_iterator@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAAEAV012@XZ
@@ -1486,18 +1565,21 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAXVstring_view@3@@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QEAAXPEBD_K@Z
+    ?AppendArray@InlineRep@Cord@absl@@QEAAXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?AppendNode@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?AppendPack@str_format_internal@absl@@YAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
     ?AppendText@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_KVstring_view@4@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PEAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsValueType@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CAPEAPEAUCordRep@cord_internal@2@PEAPEAU342@@Z
     ?AsciiStrToLower@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ?AssertHeld@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?AssertHeld@Mutex@absl@@QEBAXXZ
     ?AssertNotHeld@Mutex@absl@@QEBAXXZ
     ?AssertReaderHeld@Mutex@absl@@QEBAXXZ
@@ -1549,6 +1631,7 @@
     ?CombineContiguousImpl@HashState@hash_internal@absl@@CA_K_KPEBE0U?$integral_constant@H$07@__1@std@@@Z
     ?CombineLargeContiguousImpl32@HashState@hash_internal@absl@@CA_K_KPEBE0@Z
     ?CombineLargeContiguousImpl64@HashState@hash_internal@absl@@CA_K_KPEBE0@Z
+    ?CommitTree@InlineRep@Cord@absl@@QEAAXPEBUCordRep@cord_internal@3@PEAU453@AEBVCordzUpdateScope@53@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?Compare@Cord@absl@@QEBAHVstring_view@2@@Z
     ?CompareImpl@Cord@absl@@AEBAHAEBV12@@Z
     ?CompareSlowPath@Cord@absl@@AEBAHAEBV12@_K1@Z
@@ -1606,6 +1689,7 @@
     ?Delete@CordRepExternal@cord_internal@absl@@SAXPEAUCordRep@23@@Z
     ?Delete@CordRepFlat@cord_internal@absl@@SAXPEAUCordRep@23@@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPEAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPEAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPEAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPEBDPEADH@Z
     ?Description@Impl@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -1616,6 +1700,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPEAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AEAAXXZ
     ?DestroyCordSlow@Cord@absl@@AEAAXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z
     ?DidAllocate@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAA_NXZ
@@ -1654,6 +1741,7 @@
     ?DumpPCAndFrameSizesAndStackTrace@debugging_internal@absl@@YAXPEAXQEBQEAXQEAHHH_NP6AXPEBD0@Z0@Z
     ?DurationFromTimespec@absl@@YA?AVDuration@1@Utimespec@@@Z
     ?DurationFromTimeval@absl@@YA?AVDuration@1@Utimeval@@@Z
+    ?EmplaceTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?EmptyString@Status@absl@@CAPEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?EnableDebugLog@CondVar@absl@@QEAAXPEBD@Z
     ?EnableDebugLog@Mutex@absl@@QEAAXPEBD@Z
@@ -1684,6 +1772,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_JPEAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_KPEAD@Z
     ?Fer@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPEBV123@PEAPEAX@Z
     ?Find@ByAnyChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByLength@absl@@QEBA?AVstring_view@2@V32@_K@Z
@@ -1755,6 +1844,7 @@
     ?FromChrono@absl@@YA?AVDuration@1@AEBV?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@chrono@__1@std@@@Z
     ?FromChrono@absl@@YA?AVTime@1@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@234@@chrono@__1@std@@@Z
     ?FromCivil@absl@@YA?AVTime@1@V?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@1@VTimeZone@1@@Z
+    ?FromHost64@big_endian@absl@@YA_K_K@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0DM@$00@__1@std@@@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0OBA@$00@__1@std@@@Z
     ?FromTM@absl@@YA?AVTime@1@AEBUtm@@VTimeZone@1@@Z
@@ -1789,8 +1879,6 @@
     ?GetAllocator@?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAV?$allocator@UPayload@status_internal@absl@@@__1@std@@XZ
     ?GetAllocator@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAV?$allocator@USubRange@absl@@@__1@std@@XZ
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K_K@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
@@ -1799,6 +1887,7 @@
     ?GetCapacity@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QEBAD_K@Z
     ?GetCond@WinHelper@Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetData@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QEAAAEAPEAHXZ
     ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ
@@ -1831,6 +1920,8 @@
     ?GetLeafData@CordRepRing@cord_internal@absl@@SAPEBDPEBUCordRep@23@@Z
     ?GetLock@WinHelper@Waiter@synchronization_internal@absl@@SAPEAU_RTL_SRWLOCK@@PEAV234@@Z
     ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPEAUThreadIdentity@base_internal@2@XZ
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetPayload@Status@absl@@QEBA?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPayloads@Status@absl@@AEAAPEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
     ?GetPayloads@Status@absl@@AEBAPEBV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
@@ -1858,6 +1949,7 @@
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAAEA_KXZ
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEBAAEB_KXZ
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QEAA_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z
@@ -1882,6 +1974,7 @@
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z
     ?HashSeed@container_internal@absl@@YA_KPEBC@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?HideMask@base_internal@absl@@YA_KXZ
     ?Hours@absl@@YA?AVDuration@1@_J@Z
@@ -1919,6 +2012,7 @@
     ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z
     ?IsDataLoss@absl@@YA_NAEBVStatus@1@@Z
     ?IsDeadlineExceeded@absl@@YA_NAEBVStatus@1@@Z
+    ?IsEmpty@Queue@CordzHandle@cord_internal@absl@@QEBA_NXZ
     ?IsFailedPrecondition@absl@@YA_NAEBVStatus@1@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QEBA_NPEAVstring_view@3@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QEBA_N_K0PEAVstring_view@3@@Z
@@ -1956,6 +2050,7 @@
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransitionType@234@@Z
     ?LocalTimeZone@absl@@YA?AVTimeZone@1@XZ
+    ?Lock@CordzInfo@cord_internal@absl@@QEAAXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QEAAXXZ
     ?Lock@SpinLock@base_internal@absl@@QEAAXXZ
     ?LockSlow@Mutex@absl@@AEAAXPEBUMuHowS@2@PEBVCondition@2@H@Z
@@ -1965,9 +2060,11 @@
     ?LockWhenWithDeadline@Mutex@absl@@QEAA_NAEBVCondition@2@VTime@2@@Z
     ?LockWhenWithTimeout@Mutex@absl@@QEAA_NAEBVCondition@2@VDuration@2@@Z
     ?LogSeverityName@absl@@YAPEBDW4LogSeverity@1@@Z
+    ?LossyAdd@CordzUpdateTracker@cord_internal@absl@@QEAAXW4MethodIdentifier@123@_J@Z
     ?MakeConcat@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_JI@Z
+    ?MakeFlatWithExtraCapacity@InlineRep@Cord@absl@@QEAAPEAUCordRepFlat@cord_internal@3@_K@Z
     ?MakeInt128@absl@@YA?AVint128@1@_J_K@Z
     ?MakeNormalizedDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeNs@KernelTimeout@synchronization_internal@absl@@CA_JVTime@3@@Z
@@ -2013,6 +2110,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPEAV123@_K0@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QEAA?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QEBAPEAV123@AEBVCordzSnapshot@23@@Z
     ?NextCapacity@?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
     ?NextCapacity@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
     ?NextCapacity@?$Storage@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SA_K_K@Z
@@ -2033,6 +2131,8 @@
     ?Now@UnscaledCycleClockWrapperForGetCurrentTime@time_internal@absl@@SA_JXZ
     ?Now@absl@@YA?AVTime@1@XZ
     ?NumCPUs@base_internal@absl@@YAHXZ
+    ?ODRCheck@CordzHandle@cord_internal@absl@@AEBAXXZ
+    ?ODRCheck@CordzInfo@cord_internal@absl@@AEBAXXZ
     ?OccursBefore@ViableSubstitution@strings_internal@absl@@QEBA_NAEBU123@@Z
     ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z
     ?OutOfRangeError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
@@ -2071,7 +2171,9 @@
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?PrependNode@CordForest@absl@@AEAAPEAUCordRep@cord_internal@2@PEAU342@0@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@Impl@time_zone@cctz@time_internal@absl@@QEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@2345@@Z
     ?PrevTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -2100,6 +2202,7 @@
     ?ReaderUnlock@Mutex@absl@@QEAAXXZ
     ?ReclaimThreadIdentity@synchronization_internal@absl@@YAXPEAX@Z
     ?RecordInsertSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
+    ?RecordMetrics@CordzInfo@cord_internal@absl@@QEAAX_J@Z
     ?Ref@CordRep@cord_internal@absl@@SAPEAU123@PEAU123@@Z
     ?Register@CycleClockSource@base_internal@absl@@CAXP6A_JXZ@Z
     ?Register@HashtablezSampler@container_internal@absl@@QEAAPEAUHashtablezInfo@23@XZ
@@ -2148,6 +2251,8 @@
     ?SetAllocatedData@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QEAAXPEAUSubRange@3@_K@Z
     ?SetCapacityForTesting@CordRepRing@cord_internal@absl@@QEAAX_K@Z
     ?SetConversionChar@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXW4FormatConversionChar@3@PEAVFormatConversionSpecImpl@23@@Z
+    ?SetCordRep@CordzInfo@cord_internal@absl@@QEAAXPEAUCordRep@23@@Z
+    ?SetCordRep@CordzUpdateScope@cord_internal@absl@@QEBAXPEAUCordRep@23@@Z
     ?SetCurrentThreadIdentity@base_internal@absl@@YAXPEAUThreadIdentity@12@P6AXPEAX@Z@Z
     ?SetDisposeCallback@HashtablezSampler@container_internal@absl@@QEAAP6AXAEBUHashtablezInfo@23@@ZP6AX0@Z@Z
     ?SetFlags@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXUFlags@23@PEAVFormatConversionSpecImpl@23@@Z
@@ -2168,6 +2273,7 @@
     ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPEAU?$atomic@H@__1@std@@@Z
     ?SetToZero@?$BigUnsigned@$03@strings_internal@absl@@QEAAXXZ
     ?SetToZero@?$BigUnsigned@$0FE@@strings_internal@absl@@QEAAXXZ
+    ?SetTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@AEBVCordzUpdateScope@53@@Z
     ?SetValue@?$Manager@H$01@FormatArgImpl@str_format_internal@absl@@SA?ATData@234@AEBH@Z
     ?SetWidth@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPEAVFormatConversionSpecImpl@23@@Z
     ?ShiftLeft@?$BigUnsigned@$03@strings_internal@absl@@QEAAXH@Z
@@ -2276,6 +2382,7 @@
     ?ToDoubleSeconds@absl@@YANVDuration@1@@Z
     ?ToHost16@big_endian@absl@@YAGG@Z
     ?ToHost32@big_endian@absl@@YAII@Z
+    ?ToHost64@big_endian@absl@@YA_K_K@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$00@__1@std@@@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$0DLJKMKAA@@__1@std@@@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$0DOI@@__1@std@@@Z
@@ -2307,6 +2414,9 @@
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@cctz@time_internal@absl@@YA_JAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AEAAXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QEAA_NXZ
@@ -2327,6 +2437,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?Unlock@Mutex@absl@@QEAAXXZ
     ?Unlock@SpinLock@base_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
@@ -2338,6 +2449,9 @@
     ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QEAAXPEAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QEAAXXZ
+    ?UpdateCordzStatistics@InlineRep@Cord@absl@@QEAAXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QEAAXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QEAAXUGraphId@23@HP6AHPEAPEAXH@Z@Z
     ?UsingInlinedStorage@Storage@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CA_N_K@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -2397,12 +2511,18 @@
     ?__alloc@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
@@ -2414,18 +2534,24 @@
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__annotate_contiguous_container@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
+    ?__annotate_contiguous_container@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
+    ?__annotate_contiguous_container@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_contiguous_container@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXPEBX000@Z
     ?__annotate_delete@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_new@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
+    ?__annotate_new@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
+    ?__annotate_new@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_new@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
@@ -2459,6 +2585,10 @@
     ?__destruct_at_end@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUTransition@cctz@time_internal@absl@@@Z
@@ -2468,6 +2598,8 @@
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXPEAUViableSubstitution@strings_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUTransition@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUTransitionType@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
@@ -2483,6 +2615,10 @@
     ?__end_cap@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAUTransition@cctz@time_internal@absl@@XZ
@@ -2493,6 +2629,10 @@
     ?__end_cap@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAUViableSubstitution@strings_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBAAEBQEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAAEAPEAUTransition@cctz@time_internal@absl@@XZ
@@ -2506,6 +2646,8 @@
     ?__front_spare@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QEAAAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2516,6 +2658,10 @@
     ?__get@?$__compressed_pair_elem@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PEAPEBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QEBAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@$0A@$0A@@__1@std@@QEAAAEAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
@@ -2557,6 +2703,10 @@
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -2574,6 +2724,8 @@
     ?__get_value@?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBAAEBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__hash@?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEBA_KXZ
     ?__invalidate_all_iterators@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
+    ?__invalidate_all_iterators@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
+    ?__invalidate_all_iterators@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__invalidate_all_iterators@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
@@ -2584,6 +2736,7 @@
     ?__invalidate_iterators_past@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAUTransitionType@cctz@time_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAUViableSubstitution@strings_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAVFormatArgImpl@str_format_internal@absl@@@Z
+    ?__make_iter@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@PEAPEAVCordzHandle@cord_internal@absl@@@Z
     ?__make_iter@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__make_iter@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@PEAUTransition@cctz@time_internal@absl@@@Z
     ?__make_iter@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@PEAUTransitionType@cctz@time_internal@absl@@@Z
@@ -2592,6 +2745,8 @@
     ?__node_alloc@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@XZ
     ?__ptr@?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAPEAU123@XZ
     ?__recommend@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
+    ?__recommend@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
+    ?__recommend@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__recommend@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
@@ -2599,6 +2754,8 @@
     ?__recommend@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBA_K_K@Z
     ?__rehash@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@AEAAX_K@Z
     ?__swap_out_circular_buffer@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@PEAU4567@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@@Z
@@ -2622,7 +2779,9 @@
     ?allocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?allocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?allocate@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAPEAPEAUCordRep@cord_internal@absl@@_K@Z
+    ?allocate@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAPEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?allocate@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAPEAPEBUCordRep@cord_internal@absl@@_K@Z
+    ?allocate@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAPEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?allocate@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?allocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?allocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2637,7 +2796,9 @@
     ?allocate@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@AEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPEAPEAUCordRep@cord_internal@2@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@_K@Z
+    ?allocate@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPEAPEBUCordRep@cord_internal@2@AEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@_K@Z
+    ?allocate@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@AEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?allocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@_K@Z
@@ -2670,6 +2831,7 @@
     ?back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
     ?back@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUTransitionType@cctz@time_internal@absl@@XZ
     ?back@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@XZ
+    ?base@?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBAPEAPEAVCordzHandle@cord_internal@absl@@XZ
     ?base@?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@__1@std@@QEBAPEAUTransition@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@__1@std@@QEBAPEAUTransitionType@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBAPEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -2690,6 +2852,7 @@
     ?begin@?$initializer_list@Vstring_view@absl@@@std@@QEBAPEBVstring_view@absl@@XZ
     ?begin@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QEBAPEBW4FormatConversionCharSet@absl@@XZ
     ?begin@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA?AV?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
+    ?begin@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@XZ
     ?begin@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?begin@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@XZ
     ?begin@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2700,17 +2863,23 @@
     ?capacity@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
+    ?capacity@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
+    ?capacity@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IEBA_KXZ
     ?capacity@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?capacity@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?capacity@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -2722,11 +2891,15 @@
     ?clear@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
+    ?clear@?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
+    ?clear@?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AEAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@?$__vector_base@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
+    ?clear@?$__vector_base@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
+    ?clear@?$__vector_base@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
     ?clear@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IEAAXXZ
@@ -2736,7 +2909,6 @@
     ?clear@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ
     ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ
-    ?clear_cordz_info@InlineRep@Cord@absl@@QEAAXXZ
     ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ
     ?compare_exchange_weak@?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEAA_NAEAPEAUHashtablezInfo@container_internal@absl@@PEAU456@W4memory_order@23@2@Z
     ?concat@CordRep@cord_internal@absl@@QEAAPEAUCordRepConcat@23@XZ
@@ -2744,6 +2916,9 @@
     ?consumed@CordRepRingReader@cord_internal@absl@@QEBA_KXZ
     ?conversion_char@FormatConversionSpecImpl@str_format_internal@absl@@QEBA?AW4FormatConversionChar@3@XZ
     ?cord_ring_buffer_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
+    ?cordz_info@InlineData@cord_internal@absl@@QEBAPEAVCordzInfo@23@XZ
+    ?cordz_info@InlineRep@Cord@absl@@QEBAPEAVCordzInfo@cord_internal@3@XZ
+    ?cordz_should_profile@cord_internal@absl@@YA_NXZ
     ?count@FILERawSink@str_format_internal@absl@@QEBA_KXZ
     ?data@?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAPEAPEAUCordRep@cord_internal@2@XZ
     ?data@?$InlinedVector@H$0CP@V?$allocator@H@__1@std@@@absl@@QEAAPEAHXZ
@@ -2758,6 +2933,8 @@
     ?data@?$Span@I@absl@@QEBAPEAIXZ
     ?data@?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QEBAPEAVFormatArgImpl@str_format_internal@2@XZ
     ?data@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEAUCordRep@cord_internal@absl@@XZ
+    ?data@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEAVCordzHandle@cord_internal@absl@@XZ
+    ?data@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAPEBQEBVCordzHandle@cord_internal@absl@@XZ
     ?data@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?data@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUTransition@cctz@time_internal@absl@@XZ
     ?data@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEBUTransitionType@cctz@time_internal@absl@@XZ
@@ -2778,7 +2955,9 @@
     ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?deallocate@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@_K@Z
+    ?deallocate@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@_K@Z
+    ?deallocate@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAXPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?deallocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2793,7 +2972,9 @@
     ?deallocate@?$allocator_traits@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@PEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@PEAPEAUCordRep@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@PEAPEAUCordRep@cord_internal@2@_K@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@PEAPEAVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAEAV?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@PEAPEBUCordRep@cord_internal@2@_K@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@PEAPEBVCordzHandle@cord_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@23@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@_K@Z
     ?deallocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@_K@Z
@@ -2807,7 +2988,9 @@
     ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?destroy@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?destroy@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEAUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEAVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEAAXPEAPEBUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEAAXPEAPEBVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEAAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?destroy@?$allocator@UPayload@status_internal@absl@@@__1@std@@QEAAXPEAUPayload@status_internal@absl@@@Z
     ?destroy@?$allocator@USubRange@absl@@@__1@std@@QEAAXPEAUSubRange@absl@@@Z
@@ -2847,6 +3030,7 @@
     ?end@?$initializer_list@U?$pair@Vstring_view@absl@@V12@@__1@std@@@std@@QEBAPEBU?$pair@Vstring_view@absl@@V12@@__1@2@XZ
     ?end@?$initializer_list@Vstring_view@absl@@@std@@QEBAPEBVstring_view@absl@@XZ
     ?end@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA?AV?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
+    ?end@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAPEAVCordzHandle@cord_internal@absl@@@23@XZ
     ?end@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA?AV?$__wrap_iter@PEBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?end@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransition@cctz@time_internal@absl@@@23@XZ
     ?end@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA?AV?$__wrap_iter@PEAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2893,6 +3077,14 @@
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAUCordRep@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVCordzHandle@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEBAAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
@@ -2935,7 +3127,6 @@
     ?fixed_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@AEBV?$duration@_JV?$ratio@$00$00@__1@std@@@chrono@__1@std@@@Z
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
-    ?force_tree@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@_K@Z
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
@@ -2967,6 +3158,7 @@
     ?get@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEBAPEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@23@XZ
     ?get@?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBAPEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ
     ?get@?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBAPEAVZoneInfoSource@cctz@time_internal@absl@@XZ
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
@@ -2996,6 +3188,9 @@
     ?is_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBA_NXZ
     ?is_leap_year@impl@detail@cctz@time_internal@absl@@YA_N_J@Z
     ?is_length@ConvTag@str_format_internal@absl@@QEBA_NXZ
+    ?is_profiled@InlineData@cord_internal@absl@@QEBA_NXZ
+    ?is_profiled@InlineRep@Cord@absl@@QEBA_NXZ
+    ?is_snapshot@CordzHandle@cord_internal@absl@@QEBA_NXZ
     ?is_tree@InlineData@cord_internal@absl@@QEBA_NXZ
     ?is_tree@InlineRep@Cord@absl@@QEBA_NXZ
     ?key_eq@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@XZ
@@ -3004,6 +3199,8 @@
     ?length@string_view@absl@@QEBA_KXZ
     ?load@?$__atomic_base@P6AXAEBUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QEBAP6AXAEBUHashtablezInfo@container_internal@absl@@@ZW4memory_order@23@@Z
     ?load@?$__atomic_base@PEAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QEBAPEAUHashtablezInfo@container_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEBAPEAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QEBA?AW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QEBA?AW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?load_time_zone@cctz@time_internal@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAVtime_zone@123@@Z
@@ -3019,7 +3216,9 @@
     ?max_size@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@QEBA_KXZ
+    ?max_size@?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEBUCordRep@cord_internal@absl@@@__1@std@@QEBA_KXZ
+    ?max_size@?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QEBA_KXZ
@@ -3030,6 +3229,8 @@
     ?max_size@?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?max_size@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?max_size@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?max_size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -3093,6 +3294,8 @@
     ?push_back@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ?push_back@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ?push_back@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ?push_back@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAX$$QEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?push_back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBUTransition@cctz@time_internal@absl@@@Z
     ?push_front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@AEAV?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXAEBQEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z
@@ -3148,6 +3351,12 @@
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEAUCordRep@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PEAPEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBAAEBV?$allocator@PEBVCordzHandle@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QEAAAEAV?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@@__1@std@@QEAAAEAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -3177,6 +3386,8 @@
     ?second@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ
     ?second@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ
     ?set_arg@BoundConversion@str_format_internal@absl@@QEAAXPEBVFormatArgImpl@23@@Z
+    ?set_cordz_info@InlineData@cord_internal@absl@@QEAAXPEAVCordzInfo@23@@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
     ?set_data@InlineRep@Cord@absl@@QEAAPEAD_K@Z
     ?set_data@InlineRep@Cord@absl@@QEAAXPEBD_K_N@Z
     ?set_depth@CordRepConcat@cord_internal@absl@@QEAAXE@Z
@@ -3211,6 +3422,8 @@
     ?size@?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@QEBA_KXZ
     ?size@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QEBA_KXZ
     ?size@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?size@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
+    ?size@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
     ?size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEBA_KXZ
@@ -3224,6 +3437,8 @@
     ?status@BadStatusOrAccess@absl@@QEBAAEBVStatus@2@XZ
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Uday_tag@1234@U51234@_J@Z
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Usecond_tag@1234@U51234@_J@Z
+    ?store@?$__atomic_base@PEAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QEAAXPEAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?store@?$__atomic_base@PEAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QEAAXPEAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QEAAXW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QEAAXW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?str@UntypedFormatSpecImpl@str_format_internal@absl@@QEBA?AVstring_view@3@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def
index bc536c8..a36e6a12 100644
--- a/third_party/abseil-cpp/symbols_x64_rel.def
+++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -111,6 +111,8 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@QEAA@Vstring_view@1@@Z
+    ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
+    ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??0HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??0HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -131,6 +133,8 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1CondVar@absl@@QEAA@XZ
+    ??1CordzHandle@cord_internal@absl@@MEAA@XZ
+    ??1CordzInfo@cord_internal@absl@@EEAA@XZ
     ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??1HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??1HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -209,12 +213,14 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAXVstring_view@3@@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QEAAXPEBD_K@Z
+    ?AppendArray@InlineRep@Cord@absl@@QEAAXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?AppendPack@str_format_internal@absl@@YAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PEAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsciiStrToLower@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
@@ -292,6 +298,7 @@
     ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ
     ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPEAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPEAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPEAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPEBDPEADH@Z
     ?Description@TimeZoneInfo@cctz@time_internal@absl@@UEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -301,6 +308,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPEAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AEAAXXZ
     ?DestroyCordSlow@Cord@absl@@AEAAXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z
     ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ
     ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ
     ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@Vstring_view@2@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@3@Vstring_view@3@AEBVCord@3@@Z
@@ -340,6 +350,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_JPEAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_KPEAD@Z
     ?Fer@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPEBV123@PEAPEAX@Z
     ?Find@ByAnyChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByLength@absl@@QEBA?AVstring_view@2@V32@_K@Z
@@ -401,17 +412,19 @@
     ?FromUDate@absl@@YA?AVTime@1@N@Z
     ?FromUniversal@absl@@YA?AVTime@1@_J@Z
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K_K@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QEBAD_K@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAVstring_view@2@@Z
     ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetPayload@Status@absl@@QEBA?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPrependBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
     ?GetProgramCounter@debugging_internal@absl@@YAPEAXPEAX@Z
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QEAA_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z
@@ -430,6 +443,7 @@
     ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__1@std@@@Z
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?IDivDuration@time_internal@absl@@YA_J_NVDuration@2@1PEAV32@@Z
     ?In@Time@absl@@QEBA?AUBreakdown@12@VTimeZone@2@@Z
@@ -474,6 +488,7 @@
     ?LoadTimeZone@Impl@time_zone@cctz@time_internal@absl@@SA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV2345@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransitionType@234@@Z
+    ?Lock@CordzInfo@cord_internal@absl@@QEAAXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QEAAXXZ
     ?LockSlow@Mutex@absl@@AEAAXPEBUMuHowS@2@PEBVCondition@2@H@Z
     ?LockSlowLoop@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@H@Z
@@ -508,6 +523,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPEAV123@_K0@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QEAA?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QEBAPEAV123@AEBVCordzSnapshot@23@@Z
     ?NextTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?NextTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?NextTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -549,7 +565,9 @@
     ?Prepend@CordRepRing@cord_internal@absl@@SAPEAV123@PEAV123@Vstring_view@3@_K@Z
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?PrevTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -709,6 +727,9 @@
     ?ToUnixMillis@absl@@YA_JVTime@1@@Z
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AEAAXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QEAA_NXZ
@@ -719,6 +740,7 @@
     ?UnavailableError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?Unlock@Mutex@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@VDuration@1@@Z
@@ -727,6 +749,8 @@
     ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QEAAXPEAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QEAAXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QEAAXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QEAAXUGraphId@23@HP6AHPEAPEAXH@Z@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?Utf8SafeCHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -784,6 +808,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?load_time_zone@cctz@time_internal@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAVtime_zone@123@@Z
     ?local_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ
@@ -828,6 +853,8 @@
     ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
     ?safe_strtou32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAIH@Z
     ?safe_strtou64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_KH@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
+    ?set_tree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
     ?shallow_subcords_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
     ?shrink_to_fit@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?size@?$BigUnsigned@$03@strings_internal@absl@@QEBAHXZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def
index 81522959..e6f752d3 100644
--- a/third_party/abseil-cpp/symbols_x64_rel_asan.def
+++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -78,6 +78,8 @@
     ??$__construct_one_at_end@$$V@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBUpiecewise_construct_t@23@V?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$tuple@$$V@23@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAA?AU?$pair@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@_N@12@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@12@AEBUpiecewise_construct_t@12@$$QEAV?$tuple@AEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@12@$$QEAV?$tuple@$$V@12@@Z
     ??$__push_back_slow_path@AEBQEAUCordRep@cord_internal@absl@@@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAUCordRep@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEAVCordzHandle@cord_internal@absl@@@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEAVCordzHandle@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@AEBQEBVCordzHandle@cord_internal@absl@@@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEBQEBVCordzHandle@cord_internal@absl@@@Z
     ??$__upper_bound@AEAUByCivilTime@Transition@cctz@time_internal@absl@@PEBU2345@U2345@@__1@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@AEAUByCivilTime@2345@@Z
     ??$assign@PEBVFormatArgImpl@str_format_internal@absl@@@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAAXPEBVFormatArgImpl@str_format_internal@absl@@0@Z
     ??$assign@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@?$optional_data_base@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@optional_internal@absl@@IEAAX$$QEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
@@ -113,6 +115,8 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@QEAA@Vstring_view@1@@Z
+    ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
+    ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??0HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??0HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -132,12 +136,15 @@
     ??0uint128@absl@@QEAA@N@Z
     ??0uint128@absl@@QEAA@O@Z
     ??1?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
+    ??1?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QEAA@XZ
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1CondVar@absl@@QEAA@XZ
+    ??1CordzHandle@cord_internal@absl@@MEAA@XZ
+    ??1CordzInfo@cord_internal@absl@@EEAA@XZ
     ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ
     ??1HashtablezInfo@container_internal@absl@@QEAA@XZ
     ??1HashtablezSampler@container_internal@absl@@QEAA@XZ
@@ -219,12 +226,14 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAXVstring_view@3@@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QEAAX_KD@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QEAA_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QEAAXPEBD_K@Z
+    ?AppendArray@InlineRep@Cord@absl@@QEAAXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?AppendPack@str_format_internal@absl@@YAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PEAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsciiStrToLower@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
@@ -301,6 +310,7 @@
     ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ
     ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPEAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPEAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPEAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPEBDPEADH@Z
     ?Description@TimeZoneInfo@cctz@time_internal@absl@@UEBA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -310,6 +320,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPEAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AEAAXXZ
     ?DestroyCordSlow@Cord@absl@@AEAAXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z
     ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ
     ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ
     ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@Vstring_view@2@AEBVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@3@Vstring_view@3@AEBVCord@3@@Z
@@ -349,6 +362,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_JPEAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPEAD_KPEAD@Z
     ?Fer@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPEBV123@PEAPEAX@Z
     ?Find@ByAnyChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByChar@absl@@QEBA?AVstring_view@2@V32@_K@Z
     ?Find@ByLength@absl@@QEBA?AVstring_view@2@V32@_K@Z
@@ -411,17 +425,19 @@
     ?FromUDate@absl@@YA?AVTime@1@N@Z
     ?FromUniversal@absl@@YA?AVTime@1@_J@Z
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QEAAXPEAPEADPEA_K_K@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QEBAD_K@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAVstring_view@2@@Z
     ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PEBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetPayload@Status@absl@@QEBA?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPrependBuffer@CordRepRing@cord_internal@absl@@QEAA?AV?$Span@D@3@_K@Z
     ?GetProgramCounter@debugging_internal@absl@@YAPEAXPEAX@Z
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QEAA_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QEBA?AV?$Span@QEAX@3@XZ
     ?GetStackFrames@absl@@YAHPEAPEAXPEAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPEAPEAXPEAHHHPEBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QEAAHUGraphId@23@PEAPEAPEAX@Z
@@ -440,6 +456,7 @@
     ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__1@std@@@Z
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?IDivDuration@time_internal@absl@@YA_J_NVDuration@2@1PEAV32@@Z
     ?In@Time@absl@@QEBA?AUBreakdown@12@VTimeZone@2@@Z
@@ -485,6 +502,7 @@
     ?LoadTimeZone@Impl@time_zone@cctz@time_internal@absl@@SA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAV2345@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@AEBA?AUabsolute_lookup@time_zone@234@_JAEBUTransitionType@234@@Z
+    ?Lock@CordzInfo@cord_internal@absl@@QEAAXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QEAAXXZ
     ?LockSlow@Mutex@absl@@AEAAXPEBUMuHowS@2@PEBVCondition@2@H@Z
     ?LockSlowLoop@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@H@Z
@@ -519,6 +537,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPEAV123@_K0@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QEAA?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QEBAPEAV123@AEBVCordzSnapshot@23@@Z
     ?NextTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?NextTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?NextTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -560,7 +579,9 @@
     ?Prepend@CordRepRing@cord_internal@absl@@SAPEAV123@PEAV123@Vstring_view@3@_K@Z
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@_K2@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPEAV123@PEAV123@PEAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@TimeZone@absl@@QEBA_NVTime@2@PEAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
     ?PrevTransition@TimeZoneLibC@cctz@time_internal@absl@@UEBA_NAEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PEAUcivil_transition@time_zone@234@@Z
@@ -720,6 +741,9 @@
     ?ToUnixMillis@absl@@YA_JVTime@1@@Z
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AEAAXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QEAA_NXZ
@@ -730,6 +754,7 @@
     ?UnavailableError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?Unlock@Mutex@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@VDuration@1@@Z
@@ -738,6 +763,8 @@
     ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QEAAXPEAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QEAAXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QEAAXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QEAAXUGraphId@23@HP6AHPEAPEAXH@Z@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?Utf8SafeCHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -764,12 +791,15 @@
     ?WyhashImpl@HashState@hash_internal@absl@@CA_KPEBE_K@Z
     ?__add_back_capacity@?$deque@PEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXXZ
     ?__annotate_delete@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
+    ?__annotate_delete@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_delete@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAXXZ
     ?__annotate_increase@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
+    ?__annotate_increase@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_increase@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_increase@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
     ?__annotate_increase@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEBAX_K@Z
@@ -795,6 +825,8 @@
     ?__move_range@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXPEAUTransitionType@cctz@time_internal@absl@@00@Z
     ?__rehash@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@AEAAX_K@Z
     ?__swap_out_circular_buffer@?$vector@PEAUCordRep@cord_internal@absl@@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAUCordRep@cord_internal@absl@@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEAVCordzHandle@cord_internal@absl@@V?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEAVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEAVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@PEBVCordzHandle@cord_internal@absl@@AEAV?$allocator@PEBVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAPEAUTransition@cctz@time_internal@absl@@AEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@PEAU4567@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AEAAXAEAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AEAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@@Z
@@ -824,6 +856,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?load_time_zone@cctz@time_internal@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEAVtime_zone@123@@Z
     ?local_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ
@@ -870,6 +903,8 @@
     ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
     ?safe_strtou32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAIH@Z
     ?safe_strtou64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_KH@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
+    ?set_tree@InlineRep@Cord@absl@@QEAAXPEAUCordRep@cord_internal@3@@Z
     ?shallow_subcords_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
     ?shrink_to_fit@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAXXZ
     ?size@?$BigUnsigned@$03@strings_internal@absl@@QEBAHXZ
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def
index d64d29b..75334b4 100644
--- a/third_party/abseil-cpp/symbols_x86_dbg.def
+++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -9,12 +9,16 @@
     ??$?0$$T@?$Storage@PAUSubRange@absl@@$00$0A@@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@$$QA$$T@Z
     ??$?0$$TAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@PAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0$$TAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??$?0$$TAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0$$TAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@?$__compressed_pair@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0$$TAAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PAUTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__compressed_pair@PAUTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
     ??$?0$$TAAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@?$__compressed_pair@PAUViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$TAAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
+    ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAUTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAUTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
@@ -22,6 +26,8 @@
     ??$?0$$TU__default_init_tag@__1@std@@@?$__compressed_pair@PAVFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@$$QA$$T$$QAU__default_init_tag@12@@Z
     ??$?0$$TX@?$__compressed_pair_elem@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PAPAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PAPAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
+    ??$?0$$TX@?$__compressed_pair_elem@PAPBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PAUTransition@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
     ??$?0$$TX@?$__compressed_pair_elem@PAUTransitionType@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QAE@$$QA$$T@Z
@@ -70,9 +76,11 @@
     ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@PAPAUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$$QA$$T@Z
     ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@Z
     ??$?0AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAE@AAV?$allocator@PAUCordRep@cord_internal@absl@@@12@@Z
+    ??$?0AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAE@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@absl@@@container_internal@absl@@QAE@AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@$$QA$$T@Z
     ??$?0AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@$$QA$$T@Z
     ??$?0AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@?$Storage@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@Z
+    ??$?0AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAE@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$?0AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$__compressed_pair_elem@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAE@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@QAE@AAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QA$$T@Z
     ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__1@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@3@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@3@AAV?$allocator@UPayload@status_internal@absl@@@__1@std@@$$QA$$T@Z
@@ -185,8 +193,10 @@
     ??$?0VBufferRawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QAE@PAVBufferRawSink@12@@Z
     ??$?0VFILERawSink@str_format_internal@absl@@$0A@@FormatRawSinkImpl@str_format_internal@absl@@QAE@PAVFILERawSink@12@@Z
     ??$?4V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QAEAAV01@$$QAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??$?8PAPAVCordzHandle@cord_internal@absl@@PAPAV012@@__1@std@@YA_NABV?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?8PAUTransitionType@cctz@time_internal@absl@@PAU0123@@__1@std@@YA_NABV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?8PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@PBU0123@@__1@std@@YA_NABV?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
+    ??$?9PAPAVCordzHandle@cord_internal@absl@@@__1@std@@YA_NABV?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@01@0@Z
     ??$?9PAUTransitionType@cctz@time_internal@absl@@@__1@std@@YA_NABV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@01@0@Z
     ??$?9PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA_NABV?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@0@Z
     ??$?9VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@YA_NABV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@01@$$T@Z
@@ -355,6 +365,7 @@
     ??$InvokeFlush@VFILERawSink@str_format_internal@absl@@@str_format_internal@absl@@YAXPAVFILERawSink@01@Vstring_view@1@@Z
     ??$InvokeReleaser@UStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@absl@@QAE@$$QAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@X@cord_internal@absl@@YAXURank0@01@$$QAUStringReleaser@?M@???$?0V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@Cord@1@QAE@$$QAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z@Vstring_view@1@@Z
     ??$LowLevelCallOnce@A6AXXZ$$V@base_internal@absl@@YAXPAVonce_flag@1@A6AXXZ@Z
+    ??$MakeConstSpan@$SQAX@absl@@YA?AV?$Span@QAX@0@PBQAXI@Z
     ??$MakeSpan@$SI$0BAA@@absl@@YA?AV?$Span@I@0@AAY0BAA@I@Z
     ??$MakeSpan@$SI$0BIA@@absl@@YA?AV?$Span@I@0@AAY0BIA@I@Z
     ??$MakeSpan@$SI$0CAA@@absl@@YA?AV?$Span@I@0@AAY0CAA@I@Z
@@ -442,6 +453,8 @@
     ??$__construct_at_end@V?$move_iterator@PAUTransition@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXV?$move_iterator@PAUTransition@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_at_end@V?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXV?$move_iterator@PAUTransitionType@cctz@time_internal@absl@@@12@0@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@PAUCordRep@cord_internal@absl@@X@__1@std@@YAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@01@PAPAUCordRep@cord_internal@absl@@1AAPAPAU345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@PAVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@01@PAPAVCordzHandle@cord_internal@absl@@1AAPAPAV345@@Z
+    ??$__construct_backward_with_exception_guarantees@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@PBVCordzHandle@cord_internal@absl@@X@__1@std@@YAXAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@01@PAPBVCordzHandle@cord_internal@absl@@1AAPAPBV345@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@__1@std@@YAXAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@1AAPAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@UTransition@cctz@time_internal@absl@@X@__1@std@@YAXAAV?$allocator@UTransition@cctz@time_internal@absl@@@01@PAUTransition@cctz@time_internal@absl@@1AAPAU3456@@Z
     ??$__construct_backward_with_exception_guarantees@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@UTransitionType@cctz@time_internal@absl@@X@__1@std@@YAXAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@01@PAUTransitionType@cctz@time_internal@absl@@1AAPAU3456@@Z
@@ -453,6 +466,8 @@
     ??$__construct_one_at_end@$$V@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
     ??$__construct_one_at_end@AAVstring_view@absl@@ABV12@AAI@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AAEXAAVstring_view@absl@@ABV34@AAI@Z
     ??$__construct_one_at_end@ABQAUCordRep@cord_internal@absl@@@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQAUCordRep@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQAVCordzHandle@cord_internal@absl@@@Z
+    ??$__construct_one_at_end@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQBVCordzHandle@cord_internal@absl@@@Z
     ??$__construct_one_at_end@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXABUTransition@cctz@time_internal@absl@@@Z
     ??$__construct_one_at_end@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AAEX$$QAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__construct_range_forward@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAUCordRep@cord_internal@absl@@PAU456@PAU456@PAU456@X@__1@std@@YAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@01@PBQAUCordRep@cord_internal@absl@@1AAPAPAU345@@Z
@@ -462,8 +477,12 @@
     ??$__cxx_atomic_exchange@P6AXABUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXABUHashtablezInfo@container_internal@absl@@@ZPAU?$__cxx_atomic_base_impl@P6AXABUHashtablezInfo@container_internal@absl@@@Z@01@P6AX0@ZW4memory_order@01@@Z
     ??$__cxx_atomic_load@P6AXABUHashtablezInfo@container_internal@absl@@@Z@__1@std@@YAP6AXABUHashtablezInfo@container_internal@absl@@@ZPBU?$__cxx_atomic_base_impl@P6AXABUHashtablezInfo@container_internal@absl@@@Z@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@PAUHashtablezInfo@container_internal@absl@@@__1@std@@YAPAUHashtablezInfo@container_internal@absl@@PBU?$__cxx_atomic_base_impl@PAUHashtablezInfo@container_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PAVCordzHandle@cord_internal@absl@@@__1@std@@YAPAVCordzHandle@cord_internal@absl@@PBU?$__cxx_atomic_base_impl@PAVCordzHandle@cord_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_load@PAVCordzInfo@cord_internal@absl@@@__1@std@@YAPAVCordzInfo@cord_internal@absl@@PBU?$__cxx_atomic_base_impl@PAVCordzInfo@cord_internal@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4OnDeadlockCycle@absl@@@__1@std@@YA?AW4OnDeadlockCycle@absl@@PBU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4memory_order@01@@Z
     ??$__cxx_atomic_load@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YA?AW4State@PerThreadSynch@base_internal@absl@@PBU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PAVCordzHandle@cord_internal@absl@@@__1@std@@YAXPAU?$__cxx_atomic_base_impl@PAVCordzHandle@cord_internal@absl@@@01@PAVCordzHandle@cord_internal@absl@@W4memory_order@01@@Z
+    ??$__cxx_atomic_store@PAVCordzInfo@cord_internal@absl@@@__1@std@@YAXPAU?$__cxx_atomic_base_impl@PAVCordzInfo@cord_internal@absl@@@01@PAVCordzInfo@cord_internal@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4OnDeadlockCycle@absl@@@__1@std@@YAXPAU?$__cxx_atomic_base_impl@W4OnDeadlockCycle@absl@@@01@W4OnDeadlockCycle@absl@@W4memory_order@01@@Z
     ??$__cxx_atomic_store@W4State@PerThreadSynch@base_internal@absl@@@__1@std@@YAXPAU?$__cxx_atomic_base_impl@W4State@PerThreadSynch@base_internal@absl@@@01@W4State@PerThreadSynch@base_internal@absl@@W4memory_order@01@@Z
     ??$__distance@PBUPayload@status_internal@absl@@@__1@std@@YAHPBUPayload@status_internal@absl@@0Urandom_access_iterator_tag@01@@Z
@@ -482,6 +501,8 @@
     ??$__move_backward@UTransition@cctz@time_internal@absl@@U1234@@__1@std@@YAPAUTransition@cctz@time_internal@absl@@PAU2345@00@Z
     ??$__move_backward@UTransitionType@cctz@time_internal@absl@@U1234@@__1@std@@YAPAUTransitionType@cctz@time_internal@absl@@PAU2345@00@Z
     ??$__push_back_slow_path@ABQAUCordRep@cord_internal@absl@@@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQAUCordRep@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@ABQAVCordzHandle@cord_internal@absl@@@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQAVCordzHandle@cord_internal@absl@@@Z
+    ??$__push_back_slow_path@ABQBVCordzHandle@cord_internal@absl@@@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXABQBVCordzHandle@cord_internal@absl@@@Z
     ??$__push_back_slow_path@ABUTransition@cctz@time_internal@absl@@@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXABUTransition@cctz@time_internal@absl@@@Z
     ??$__push_back_slow_path@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AAEX$$QAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$__rewrap_iter@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV23456@0@Z
@@ -491,6 +512,8 @@
     ??$__to_address@$$CBVFormatArgImpl@str_format_internal@absl@@@__1@std@@YAPBVFormatArgImpl@str_format_internal@absl@@PBV234@@Z
     ??$__to_address@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPAPBV23456@@Z
     ??$__to_address@PAUCordRep@cord_internal@absl@@@__1@std@@YAPAPAUCordRep@cord_internal@absl@@PAPAU234@@Z
+    ??$__to_address@PAVCordzHandle@cord_internal@absl@@@__1@std@@YAPAPAVCordzHandle@cord_internal@absl@@PAPAV234@@Z
+    ??$__to_address@PBVCordzHandle@cord_internal@absl@@@__1@std@@YAPAPBVCordzHandle@cord_internal@absl@@PAPBV234@@Z
     ??$__to_address@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@PAU2345@@Z
     ??$__to_address@UTransition@cctz@time_internal@absl@@@__1@std@@YAPAUTransition@cctz@time_internal@absl@@PAU2345@@Z
     ??$__to_address@UTransitionType@cctz@time_internal@absl@@@__1@std@@YAPAUTransitionType@cctz@time_internal@absl@@PAU2345@@Z
@@ -533,10 +556,14 @@
     ??$construct@PAUCordRep@cord_internal@absl@@ABQAU123@X@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@12@PAPAUCordRep@cord_internal@absl@@ABQAU456@@Z
     ??$construct@PAUCordRep@cord_internal@absl@@PAU123@@?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPAUCordRep@cord_internal@absl@@$$QAPAU345@@Z
     ??$construct@PAUCordRep@cord_internal@absl@@PAU123@@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@PAPAUCordRep@cord_internal@1@$$QAPAU561@@Z
+    ??$construct@PAVCordzHandle@cord_internal@absl@@ABQAV123@@?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPAVCordzHandle@cord_internal@absl@@ABQAV345@@Z
+    ??$construct@PAVCordzHandle@cord_internal@absl@@ABQAV123@X@?$allocator_traits@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@PAPAVCordzHandle@cord_internal@absl@@ABQAV456@@Z
     ??$construct@PBUCordRep@cord_internal@absl@@ABQBU123@@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPBUCordRep@cord_internal@absl@@ABQBU345@@Z
     ??$construct@PBUCordRep@cord_internal@absl@@ABQBU123@@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@1@ABQBU561@@Z
     ??$construct@PBUCordRep@cord_internal@absl@@PBU123@@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPBUCordRep@cord_internal@absl@@$$QAPBU345@@Z
     ??$construct@PBUCordRep@cord_internal@absl@@PBU123@@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@1@$$QAPBU561@@Z
+    ??$construct@PBVCordzHandle@cord_internal@absl@@ABQBV123@@?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPBVCordzHandle@cord_internal@absl@@ABQBV345@@Z
+    ??$construct@PBVCordzHandle@cord_internal@absl@@ABQBV123@X@?$allocator_traits@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@PAPBVCordzHandle@cord_internal@absl@@ABQBV456@@Z
     ??$construct@PBVImpl@time_zone@cctz@time_internal@absl@@ABQBV12345@@?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEXPAPBVImpl@time_zone@cctz@time_internal@absl@@ABQBV34567@@Z
     ??$construct@PBVImpl@time_zone@cctz@time_internal@absl@@ABQBV12345@X@?$allocator_traits@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@12@PAPBVImpl@time_zone@cctz@time_internal@absl@@ABQBV45678@@Z
     ??$construct@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@ABUpiecewise_construct_t@23@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$tuple@$$V@23@@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@12@ABUpiecewise_construct_t@12@$$QAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@12@$$QAV?$tuple@$$V@12@@Z
@@ -577,7 +604,9 @@
     ??$destroy@PAPBVImpl@time_zone@cctz@time_internal@absl@@X@?$allocator_traits@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ??$destroy@PAUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@PAPAUCordRep@cord_internal@1@@Z
     ??$destroy@PAUCordRep@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@12@PAPAUCordRep@cord_internal@absl@@@Z
+    ??$destroy@PAVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@PAPAVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@PBUCordRep@cord_internal@absl@@@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@1@@Z
+    ??$destroy@PBVCordzHandle@cord_internal@absl@@X@?$allocator_traits@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@PAPBVCordzHandle@cord_internal@absl@@@Z
     ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@XX@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@SAXAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??$destroy@UPayload@status_internal@absl@@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@UPayload@status_internal@absl@@@__1@std@@PAUPayload@status_internal@1@@Z
@@ -630,7 +659,9 @@
     ??$forward@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@YAAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@01@AAV201@@Z
     ??$forward@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@YAAAV?$allocator@PAUCordRep@cord_internal@absl@@@01@AAV201@@Z
     ??$forward@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@AAV123@@Z
+    ??$forward@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@01@AAV201@@Z
     ??$forward@AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@YAAAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@AAV123@@Z
+    ??$forward@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@YAAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@01@AAV201@@Z
     ??$forward@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@YAAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@01@AAV201@@Z
     ??$forward@AAV?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@YAAAV?$allocator@UPayload@status_internal@absl@@@__1@std@@AAV123@@Z
     ??$forward@AAV?$allocator@USubRange@absl@@@__1@std@@@absl@@YAAAV?$allocator@USubRange@absl@@@__1@std@@AAV123@@Z
@@ -640,7 +671,9 @@
     ??$forward@AAVstring_view@absl@@@__1@std@@YAAAVstring_view@absl@@AAV23@@Z
     ??$forward@ABQAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAABQAPBVImpl@time_zone@cctz@time_internal@absl@@ABQAPBV23456@@Z
     ??$forward@ABQAUCordRep@cord_internal@absl@@@__1@std@@YAABQAUCordRep@cord_internal@absl@@ABQAU234@@Z
+    ??$forward@ABQAVCordzHandle@cord_internal@absl@@@__1@std@@YAABQAVCordzHandle@cord_internal@absl@@ABQAV234@@Z
     ??$forward@ABQBUCordRep@cord_internal@absl@@@__1@std@@YAABQBUCordRep@cord_internal@absl@@ABQBU234@@Z
+    ??$forward@ABQBVCordzHandle@cord_internal@absl@@@__1@std@@YAABQBVCordzHandle@cord_internal@absl@@ABQBV234@@Z
     ??$forward@ABQBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAABQBVImpl@time_zone@cctz@time_internal@absl@@ABQBV23456@@Z
     ??$forward@ABUHashtablezInfo@container_internal@absl@@@__1@std@@YAABUHashtablezInfo@container_internal@absl@@ABU234@@Z
     ??$forward@ABUPayload@status_internal@absl@@@__1@std@@YAABUPayload@status_internal@absl@@ABU234@@Z
@@ -723,7 +756,9 @@
     ??$max_size@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAIABV?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@12@@Z
     ??$max_size@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PAUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PBUCordRep@cord_internal@absl@@@12@@Z
+    ??$max_size@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??$max_size@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@X@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@SAIABV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@12@@Z
     ??$max_size@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@X@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAIABV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
@@ -737,6 +772,8 @@
     ??$min@VDuration@absl@@U?$__less@VDuration@absl@@V12@@__1@std@@@__1@std@@YAABVDuration@absl@@ABV23@0U?$__less@VDuration@absl@@V12@@01@@Z
     ??$move@AAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@AAPAPAPBV23456@@Z
     ??$move@AAPAPAUCordRep@cord_internal@absl@@@__1@std@@YA$$QAPAPAUCordRep@cord_internal@absl@@AAPAPAU234@@Z
+    ??$move@AAPAPAVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QAPAPAVCordzHandle@cord_internal@absl@@AAPAPAV234@@Z
+    ??$move@AAPAPBVCordzHandle@cord_internal@absl@@@__1@std@@YA$$QAPAPBVCordzHandle@cord_internal@absl@@AAPAPBV234@@Z
     ??$move@AAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YA$$QAPAPBVImpl@time_zone@cctz@time_internal@absl@@AAPAPBV23456@@Z
     ??$move@AAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YA$$QAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AAPAU2345@@Z
     ??$move@AAPAUCordRep@cord_internal@absl@@@__1@std@@YA$$QAPAUCordRep@cord_internal@absl@@AAPAU234@@Z
@@ -766,6 +803,8 @@
     ??$reset@PAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@12@@Z
     ??$swap@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@YAXAAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PAPAUCordRep@cord_internal@absl@@@__1@std@@YAXAAPAPAUCordRep@cord_internal@absl@@0@Z
+    ??$swap@PAPAVCordzHandle@cord_internal@absl@@@__1@std@@YAXAAPAPAVCordzHandle@cord_internal@absl@@0@Z
+    ??$swap@PAPBVCordzHandle@cord_internal@absl@@@__1@std@@YAXAAPAPBVCordzHandle@cord_internal@absl@@0@Z
     ??$swap@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@YAXAAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@0@Z
     ??$swap@PAUTransition@cctz@time_internal@absl@@@__1@std@@YAXAAPAUTransition@cctz@time_internal@absl@@0@Z
     ??$swap@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@YAXAAPAUTransitionType@cctz@time_internal@absl@@0@Z
@@ -811,6 +850,7 @@
     ??0?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@absl@@QAE@XZ
     ??0?$Span@D@absl@@QAE@PADI@Z
     ??0?$Span@I@absl@@QAE@PAII@Z
+    ??0?$Span@QAX@absl@@QAE@PBQAXI@Z
     ??0?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QAE@PAVFormatArgImpl@str_format_internal@1@I@Z
     ??0?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QAE@XZ
     ??0?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAE@XZ
@@ -823,6 +863,7 @@
     ??0?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@AAV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@12@I@Z
     ??0?$__atomic_base@P6AXABUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QAE@P6AXABUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__atomic_base@PAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QAE@PAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__atomic_base@PAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QAE@PAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$__compressed_pair_elem@U?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QAE@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@U?$default_delete@$$CBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
@@ -836,6 +877,8 @@
     ??0?$__compressed_pair_elem@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
+    ??0?$__compressed_pair_elem@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@$00$00@__1@std@@QAE@U__value_init_tag@12@@Z
     ??0?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
@@ -845,8 +888,10 @@
     ??0?$__compressed_pair_elem@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QAE@U__default_init_tag@12@@Z
     ??0?$__cxx_atomic_base_impl@P6AXABUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QAE@P6AXABUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_base_impl@PAUHashtablezInfo@container_internal@absl@@@__1@std@@QAE@PAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_base_impl@PAVCordzInfo@cord_internal@absl@@@__1@std@@QAE@PAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__cxx_atomic_impl@P6AXABUHashtablezInfo@container_internal@absl@@@ZU?$__cxx_atomic_base_impl@P6AXABUHashtablezInfo@container_internal@absl@@@Z@__1@std@@@__1@std@@QAE@P6AXABUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$__cxx_atomic_impl@PAUHashtablezInfo@container_internal@absl@@U?$__cxx_atomic_base_impl@PAUHashtablezInfo@container_internal@absl@@@__1@std@@@__1@std@@QAE@PAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$__cxx_atomic_impl@PAVCordzInfo@cord_internal@absl@@U?$__cxx_atomic_base_impl@PAVCordzInfo@cord_internal@absl@@@__1@std@@@__1@std@@QAE@PAVCordzInfo@cord_internal@absl@@@Z
     ??0?$__deque_base@PBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__deque_iterator@PBVImpl@time_zone@cctz@time_internal@absl@@PAPBV12345@AAPBV12345@PAPAPBV12345@H$0A@@__1@std@@AAE@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@PAPBV34567@@Z
     ??0?$__hash_const_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAE@ABV?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@12@@Z
@@ -863,6 +908,8 @@
     ??0?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@PAUCordRep@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@12@@Z
+    ??0?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@12@@Z
     ??0?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@UTransition@cctz@time_internal@absl@@@12@@Z
     ??0?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@IIAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@@Z
@@ -870,18 +917,23 @@
     ??0?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QAE@XZ
     ??0?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@__1@std@@QAE@XZ
     ??0?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
+    ??0?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
+    ??0?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??0?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
+    ??0?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@__1@std@@AAE@PAPAVCordzHandle@cord_internal@absl@@@Z
     ??0?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@__1@std@@AAE@PAUTransition@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@AAE@PAUTransitionType@cctz@time_internal@absl@@@Z
     ??0?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@AAE@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ??0?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAE@XZ
     ??0?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAE@XZ
+    ??0?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QAE@XZ
     ??0?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAE@XZ
+    ??0?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QAE@XZ
     ??0?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAE@XZ
     ??0?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAE@XZ
     ??0?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QAE@XZ
@@ -893,6 +945,7 @@
     ??0?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QAE@XZ
     ??0?$atomic@P6AXABUHashtablezInfo@container_internal@absl@@@Z@__1@std@@QAE@P6AXABUHashtablezInfo@container_internal@absl@@@Z@Z
     ??0?$atomic@PAUHashtablezInfo@container_internal@absl@@@__1@std@@QAE@PAUHashtablezInfo@container_internal@absl@@@Z
+    ??0?$atomic@PAVCordzInfo@cord_internal@absl@@@__1@std@@QAE@PAVCordzInfo@cord_internal@absl@@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@AAE@Ufields@1234@@Z
     ??0?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QAE@_J00000@Z
     ??0?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@AAE@Ufields@1234@@Z
@@ -940,6 +993,8 @@
     ??0?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QAE@$$QAV012@@Z
     ??0?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAE@XZ
     ??0?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@V?$initializer_list@PAUCordRep@cord_internal@absl@@@2@@Z
+    ??0?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??0?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??0?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
@@ -982,6 +1037,13 @@
     ??0CordRepRing@cord_internal@absl@@AAE@I@Z
     ??0CordRepRingReader@cord_internal@absl@@QAE@XZ
     ??0CordRepSubstring@cord_internal@absl@@QAE@XZ
+    ??0CordzHandle@cord_internal@absl@@IAE@_N@Z
+    ??0CordzHandle@cord_internal@absl@@QAE@XZ
+    ??0CordzInfo@cord_internal@absl@@AAE@PAUCordRep@12@PBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzStatistics@cord_internal@absl@@QAE@XZ
+    ??0CordzUpdateScope@cord_internal@absl@@QAE@PAVCordzInfo@12@W4MethodIdentifier@CordzUpdateTracker@12@@Z
+    ??0CordzUpdateTracker@cord_internal@absl@@QAE@XZ
+    ??0Counter@CordzUpdateTracker@cord_internal@absl@@QAE@XZ
     ??0Duration@absl@@AAE@_JI@Z
     ??0Duration@absl@@QAE@XZ
     ??0ErrnoSaver@base_internal@absl@@QAE@XZ
@@ -994,9 +1056,11 @@
     ??0HashtablezInfo@container_internal@absl@@QAE@XZ
     ??0HashtablezSampler@container_internal@absl@@QAE@XZ
     ??0Impl@time_zone@cctz@time_internal@absl@@AAE@ABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ??0InlineData@cord_internal@absl@@QAE@W4DefaultInitType@012@@Z
     ??0InlineData@cord_internal@absl@@QAE@XZ
     ??0InlineRep@Cord@absl@@QAE@$$QAV012@@Z
     ??0InlineRep@Cord@absl@@QAE@ABV012@@Z
+    ??0InlineRep@Cord@absl@@QAE@W4DefaultInitType@InlineData@cord_internal@2@@Z
     ??0InlineRep@Cord@absl@@QAE@XZ
     ??0InputValue@UnboundConversion@str_format_internal@absl@@QAE@XZ
     ??0KernelTimeout@synchronization_internal@absl@@QAE@VTime@2@@Z
@@ -1045,6 +1109,8 @@
     ??0_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@PAPAUTransition@cctz@time_internal@absl@@I@Z
     ??0_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@PAPAUTransitionType@cctz@time_internal@absl@@I@Z
     ??0_ConstructTransaction@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
+    ??0_ConstructTransaction@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
+    ??0_ConstructTransaction@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
     ??0_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
     ??0_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
     ??0_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@AAV123@I@Z
@@ -1099,6 +1165,8 @@
     ??1?$__policy_func@$$A6AXVstring_view@absl@@ABVCord@2@@Z@__function@__1@std@@QAE@XZ
     ??1?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
@@ -1106,6 +1174,8 @@
     ??1?$__temp_value@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
+    ??1?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
+    ??1?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??1?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??1?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
     ??1?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IAE@XZ
@@ -1126,6 +1196,8 @@
     ??1?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
@@ -1135,6 +1207,9 @@
     ??1CondVar@absl@@QAE@XZ
     ??1Cord@absl@@QAE@XZ
     ??1CordForest@absl@@QAE@XZ
+    ??1CordzHandle@cord_internal@absl@@MAE@XZ
+    ??1CordzInfo@cord_internal@absl@@EAE@XZ
+    ??1CordzUpdateScope@cord_internal@absl@@QAE@XZ
     ??1ErrnoSaver@base_internal@absl@@QAE@XZ
     ??1FormatSinkImpl@str_format_internal@absl@@QAE@XZ
     ??1GraphCycles@synchronization_internal@absl@@QAE@XZ
@@ -1166,6 +1241,8 @@
     ??1_ConstructTransaction@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1_ConstructTransaction@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1_ConstructTransaction@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1_ConstructTransaction@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
+    ??1_ConstructTransaction@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1_ConstructTransaction@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1_ConstructTransaction@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
     ??1_ConstructTransaction@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE@XZ
@@ -1177,10 +1254,9 @@
     ??4?$optional_data@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@$0A@@optional_internal@absl@@IAEAAV012@$$QAV012@@Z
     ??4?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QAEAAV012@$$QAV012@@Z
     ??4Cord@absl@@QAEAAV01@$$QAV01@@Z
-    ??4Cord@absl@@QAEAAV01@ABV01@@Z
     ??4Cord@absl@@QAEAAV01@Vstring_view@1@@Z
+    ??4CordzUpdateTracker@cord_internal@absl@@QAEAAV012@ABV012@@Z
     ??4InlineRep@Cord@absl@@QAEAAV012@$$QAV012@@Z
-    ??4InlineRep@Cord@absl@@QAEAAV012@ABV012@@Z
     ??4Payload@status_internal@absl@@QAEAAU012@$$QAU012@@Z
     ??4Status@absl@@QAEAAV01@$$QAV01@@Z
     ??4int128@absl@@QAEAAV01@H@Z
@@ -1248,6 +1324,7 @@
     ??A?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEAAUViableSubstitution@strings_internal@absl@@I@Z
     ??ACord@absl@@QBEDI@Z
     ??Astring_view@absl@@QBEABDI@Z
+    ??B?$__atomic_base@PAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QBEPAVCordzHandle@cord_internal@absl@@XZ
     ??B?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QBE_NXZ
     ??B?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBE_NXZ
     ??B?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBE_NXZ
@@ -1272,6 +1349,7 @@
     ??CChunkIterator@Cord@absl@@QBEPBVstring_view@2@XZ
     ??D?$__deque_iterator@PBVImpl@time_zone@cctz@time_internal@absl@@PAPBV12345@AAPBV12345@PAPAPBV12345@H$0A@@__1@std@@QBEAAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ??D?$__hash_map_iterator@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QBEAAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@12@XZ
+    ??D?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@__1@std@@QBEAAPAVCordzHandle@cord_internal@absl@@XZ
     ??D?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@__1@std@@QBEAAUTransition@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@QBEAAUTransitionType@cctz@time_internal@absl@@XZ
     ??D?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QBEABUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -1289,6 +1367,7 @@
     ??Dabsl@@YA?AVuint128@0@V10@0@Z
     ??E?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEAAV012@XZ
     ??E?$__hash_map_iterator@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QAEAAV012@XZ
+    ??E?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@__1@std@@QAEAAV012@XZ
     ??E?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@QAEAAV012@XZ
     ??E?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QAEAAV012@XZ
     ??E?$move_iterator@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEAAV012@XZ
@@ -1480,18 +1559,21 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QAEXID@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QAEXVstring_view@3@@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QAE_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QAEXPBDI@Z
+    ?AppendArray@InlineRep@Cord@absl@@QAEXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@II@Z
     ?AppendNode@CordForest@absl@@AAEPAUCordRep@cord_internal@2@PAU342@0@Z
     ?AppendPack@str_format_internal@absl@@YAAAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@@Z
     ?AppendText@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QAEIVstring_view@4@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsValueType@?$FixedArray@PAUCordRep@cord_internal@absl@@$0PPPPPPPP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CAPAPAUCordRep@cord_internal@2@PAPAU342@@Z
     ?AsciiStrToLower@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
+    ?AssertHeld@CordzInfo@cord_internal@absl@@QAEXXZ
     ?AssertHeld@Mutex@absl@@QBEXXZ
     ?AssertNotHeld@Mutex@absl@@QBEXXZ
     ?AssertReaderHeld@Mutex@absl@@QBEXXZ
@@ -1543,6 +1625,7 @@
     ?CombineContiguousImpl@HashState@hash_internal@absl@@CA_K_KPBEIU?$integral_constant@H$07@__1@std@@@Z
     ?CombineLargeContiguousImpl32@HashState@hash_internal@absl@@CA_K_KPBEI@Z
     ?CombineLargeContiguousImpl64@HashState@hash_internal@absl@@CA_K_KPBEI@Z
+    ?CommitTree@InlineRep@Cord@absl@@QAEXPBUCordRep@cord_internal@3@PAU453@ABVCordzUpdateScope@53@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?Compare@Cord@absl@@QBEHVstring_view@2@@Z
     ?CompareImpl@Cord@absl@@ABEHABV12@@Z
     ?CompareSlowPath@Cord@absl@@ABEHABV12@II@Z
@@ -1600,6 +1683,7 @@
     ?Delete@CordRepExternal@cord_internal@absl@@SAXPAUCordRep@23@@Z
     ?Delete@CordRepFlat@cord_internal@absl@@SAXPAUCordRep@23@@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPBDPADH@Z
     ?Description@Impl@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -1610,6 +1694,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AAEXXZ
     ?DestroyCordSlow@Cord@absl@@AAEXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z
     ?DidAllocate@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QAE_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAE_NXZ
     ?DidAllocate@?$AllocationTransaction@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAE_NXZ
@@ -1648,6 +1735,7 @@
     ?DumpPCAndFrameSizesAndStackTrace@debugging_internal@absl@@YAXPAXQBQAXQAHHH_NP6AXPBD0@Z0@Z
     ?DurationFromTimespec@absl@@YA?AVDuration@1@Utimespec@@@Z
     ?DurationFromTimeval@absl@@YA?AVDuration@1@Utimeval@@@Z
+    ?EmplaceTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?EmptyString@Status@absl@@CAPBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?EnableDebugLog@CondVar@absl@@QAEXPBD@Z
     ?EnableDebugLog@Mutex@absl@@QAEXPBD@Z
@@ -1678,6 +1766,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPAD_JPAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPAD_KPAD@Z
     ?Fer@Mutex@absl@@AAEXPAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPBV123@PAPAX@Z
     ?Find@ByAnyChar@absl@@QBE?AVstring_view@2@V32@I@Z
     ?Find@ByChar@absl@@QBE?AVstring_view@2@V32@I@Z
     ?Find@ByLength@absl@@QBE?AVstring_view@2@V32@I@Z
@@ -1749,6 +1838,7 @@
     ?FromChrono@absl@@YA?AVDuration@1@ABV?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@chrono@__1@std@@@Z
     ?FromChrono@absl@@YA?AVTime@1@ABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$0PECEA@@__1@std@@@234@@chrono@__1@std@@@Z
     ?FromCivil@absl@@YA?AVTime@1@V?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@1@VTimeZone@1@@Z
+    ?FromHost64@big_endian@absl@@YA_K_K@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0DM@$00@__1@std@@@Z
     ?FromInt64@time_internal@absl@@YA?AVDuration@2@_JV?$ratio@$0OBA@$00@__1@std@@@Z
     ?FromTM@absl@@YA?AVTime@1@ABUtm@@VTimeZone@1@@Z
@@ -1783,8 +1873,6 @@
     ?GetAllocator@?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAV?$allocator@UPayload@status_internal@absl@@@__1@std@@XZ
     ?GetAllocator@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAV?$allocator@USubRange@absl@@@__1@std@@XZ
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QAE?AV?$Span@D@3@I@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QAEXPAPADPAI@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QAEXPAPADPAII@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QAEAAIXZ
     ?GetCapacity@?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAIXZ
@@ -1793,6 +1881,7 @@
     ?GetCapacity@?$AllocationTransaction@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAIXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QBEDI@Z
     ?GetCond@WinHelper@Waiter@synchronization_internal@absl@@SAPAU_RTL_CONDITION_VARIABLE@@PAV234@@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetData@?$AllocationTransaction@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@QAEAAPAHXZ
     ?GetData@?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAPAPAUCordRep@cord_internal@3@XZ
@@ -1825,6 +1914,8 @@
     ?GetLeafData@CordRepRing@cord_internal@absl@@SAPBDPBUCordRep@23@@Z
     ?GetLock@WinHelper@Waiter@synchronization_internal@absl@@SAPAU_RTL_SRWLOCK@@PAV234@@Z
     ?GetOrCreateCurrentThreadIdentity@synchronization_internal@absl@@YAPAUThreadIdentity@base_internal@2@XZ
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ
     ?GetPayload@Status@absl@@QBE?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPayloads@Status@absl@@AAEPAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
     ?GetPayloads@Status@absl@@ABEPBV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@2@XZ
@@ -1852,6 +1943,7 @@
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEAAIXZ
     ?GetSizeAndIsAllocated@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QBEABIXZ
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QAE_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ
     ?GetStackFrames@absl@@YAHPAPAXPAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPAPAXPAHHHPBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QAEHUGraphId@23@PAPAPAX@Z
@@ -1876,6 +1968,7 @@
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z
     ?HashSeed@container_internal@absl@@YAIPBC@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPAV123@ABVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?HideMask@base_internal@absl@@YAIXZ
     ?Hours@absl@@YA?AVDuration@1@_J@Z
@@ -1913,6 +2006,7 @@
     ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z
     ?IsDataLoss@absl@@YA_NABVStatus@1@@Z
     ?IsDeadlineExceeded@absl@@YA_NABVStatus@1@@Z
+    ?IsEmpty@Queue@CordzHandle@cord_internal@absl@@QBE_NXZ
     ?IsFailedPrecondition@absl@@YA_NABVStatus@1@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QBE_NIIPAVstring_view@3@@Z
     ?IsFlat@CordRepRing@cord_internal@absl@@QBE_NPAVstring_view@3@@Z
@@ -1950,6 +2044,7 @@
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@ABE?AUabsolute_lookup@time_zone@234@_JABUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@ABE?AUabsolute_lookup@time_zone@234@_JABUTransitionType@234@@Z
     ?LocalTimeZone@absl@@YA?AVTimeZone@1@XZ
+    ?Lock@CordzInfo@cord_internal@absl@@QAEXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QAEXXZ
     ?Lock@SpinLock@base_internal@absl@@QAEXXZ
     ?LockSlow@Mutex@absl@@AAEXPBUMuHowS@2@PBVCondition@2@H@Z
@@ -1959,9 +2054,11 @@
     ?LockWhenWithDeadline@Mutex@absl@@QAE_NABVCondition@2@VTime@2@@Z
     ?LockWhenWithTimeout@Mutex@absl@@QAE_NABVCondition@2@VDuration@2@@Z
     ?LogSeverityName@absl@@YAPBDW4LogSeverity@1@@Z
+    ?LossyAdd@CordzUpdateTracker@cord_internal@absl@@QAEXW4MethodIdentifier@123@_J@Z
     ?MakeConcat@CordForest@absl@@AAEPAUCordRep@cord_internal@2@PAU342@0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeDuration@time_internal@absl@@YA?AVDuration@2@_JI@Z
+    ?MakeFlatWithExtraCapacity@InlineRep@Cord@absl@@QAEPAUCordRepFlat@cord_internal@3@I@Z
     ?MakeInt128@absl@@YA?AVint128@1@_J_K@Z
     ?MakeNormalizedDuration@time_internal@absl@@YA?AVDuration@2@_J0@Z
     ?MakeNs@KernelTimeout@synchronization_internal@absl@@CA_JVTime@3@@Z
@@ -2007,6 +2104,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPAV123@II@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QAE?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QBEPAV123@ABVCordzSnapshot@23@@Z
     ?NextCapacity@?$Storage@H$0CP@V?$allocator@H@__1@std@@@inlined_vector_internal@absl@@SAII@Z
     ?NextCapacity@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SAII@Z
     ?NextCapacity@?$Storage@PAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@SAII@Z
@@ -2027,6 +2125,8 @@
     ?Now@UnscaledCycleClockWrapperForGetCurrentTime@time_internal@absl@@SA_JXZ
     ?Now@absl@@YA?AVTime@1@XZ
     ?NumCPUs@base_internal@absl@@YAHXZ
+    ?ODRCheck@CordzHandle@cord_internal@absl@@ABEXXZ
+    ?ODRCheck@CordzInfo@cord_internal@absl@@ABEXXZ
     ?OccursBefore@ViableSubstitution@strings_internal@absl@@QBE_NABU123@@Z
     ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z
     ?OutOfRangeError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
@@ -2065,7 +2165,9 @@
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@II@Z
     ?PrependNode@CordForest@absl@@AAEPAUCordRep@cord_internal@2@PAU342@0@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@Impl@time_zone@cctz@time_internal@absl@@QBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@2345@@Z
     ?PrevTransition@TimeZone@absl@@QBE_NVTime@2@PAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@time_zone@234@@Z
@@ -2094,6 +2196,7 @@
     ?ReaderUnlock@Mutex@absl@@QAEXXZ
     ?ReclaimThreadIdentity@synchronization_internal@absl@@YAXPAX@Z
     ?RecordInsertSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@II@Z
+    ?RecordMetrics@CordzInfo@cord_internal@absl@@QAEX_J@Z
     ?Ref@CordRep@cord_internal@absl@@SAPAU123@PAU123@@Z
     ?Register@CycleClockSource@base_internal@absl@@CAXP6A_JXZ@Z
     ?Register@HashtablezSampler@container_internal@absl@@QAEPAUHashtablezInfo@23@XZ
@@ -2142,6 +2245,8 @@
     ?SetAllocatedData@?$Storage@USubRange@absl@@$0CP@V?$allocator@USubRange@absl@@@__1@std@@@inlined_vector_internal@absl@@QAEXPAUSubRange@3@I@Z
     ?SetCapacityForTesting@CordRepRing@cord_internal@absl@@QAEXI@Z
     ?SetConversionChar@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXW4FormatConversionChar@3@PAVFormatConversionSpecImpl@23@@Z
+    ?SetCordRep@CordzInfo@cord_internal@absl@@QAEXPAUCordRep@23@@Z
+    ?SetCordRep@CordzUpdateScope@cord_internal@absl@@QBEXPAUCordRep@23@@Z
     ?SetCurrentThreadIdentity@base_internal@absl@@YAXPAUThreadIdentity@12@P6AXPAX@Z@Z
     ?SetDisposeCallback@HashtablezSampler@container_internal@absl@@QAEP6AXABUHashtablezInfo@23@@ZP6AX0@Z@Z
     ?SetFlags@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXUFlags@23@PAVFormatConversionSpecImpl@23@@Z
@@ -2162,6 +2267,7 @@
     ?SetThreadBlockedCounter@PerThreadSem@synchronization_internal@absl@@SAXPAU?$atomic@H@__1@std@@@Z
     ?SetToZero@?$BigUnsigned@$03@strings_internal@absl@@QAEXXZ
     ?SetToZero@?$BigUnsigned@$0FE@@strings_internal@absl@@QAEXXZ
+    ?SetTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@ABVCordzUpdateScope@53@@Z
     ?SetValue@?$Manager@H$01@FormatArgImpl@str_format_internal@absl@@SA?ATData@234@ABH@Z
     ?SetWidth@FormatConversionSpecImplFriend@str_format_internal@absl@@SAXHPAVFormatConversionSpecImpl@23@@Z
     ?ShiftLeft@?$BigUnsigned@$03@strings_internal@absl@@QAEXH@Z
@@ -2270,6 +2376,7 @@
     ?ToDoubleSeconds@absl@@YANVDuration@1@@Z
     ?ToHost16@big_endian@absl@@YAGG@Z
     ?ToHost32@big_endian@absl@@YAII@Z
+    ?ToHost64@big_endian@absl@@YA_K_K@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$00@__1@std@@@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$0DLJKMKAA@@__1@std@@@Z
     ?ToInt64@time_internal@absl@@YA_JVDuration@2@V?$ratio@$00$0DOI@@__1@std@@@Z
@@ -2301,6 +2408,9 @@
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@cctz@time_internal@absl@@YA_JABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AAEXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@ABV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QAE_NXZ
@@ -2321,6 +2431,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?Unlock@Mutex@absl@@QAEXXZ
     ?Unlock@SpinLock@base_internal@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
@@ -2332,6 +2443,9 @@
     ?UnrefTree@InlineRep@Cord@absl@@AAEXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QAEXPAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QAEXXZ
+    ?UpdateCordzStatistics@InlineRep@Cord@absl@@QAEXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QAEXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QAEXUGraphId@23@HP6AHPAPAXH@Z@Z
     ?UsingInlinedStorage@Storage@?$FixedArray@PAUCordRep@cord_internal@absl@@$0PPPPPPPP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@CA_NI@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -2391,12 +2505,18 @@
     ?__alloc@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
     ?__alloc@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@UViableSubstitution@strings_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IBEABV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEABV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__alloc@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEABV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IBEABV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
@@ -2408,18 +2528,24 @@
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IAEAAV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__alloc@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IBEABV?$allocator@VFormatArgImpl@str_format_internal@absl@@@23@XZ
     ?__annotate_contiguous_container@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
+    ?__annotate_contiguous_container@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
+    ?__annotate_contiguous_container@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_contiguous_container@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_contiguous_container@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_contiguous_container@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_contiguous_container@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@ABEXPBX000@Z
     ?__annotate_delete@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
+    ?__annotate_delete@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
+    ?__annotate_delete@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_delete@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_delete@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_delete@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_delete@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_delete@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@ABEXXZ
     ?__annotate_new@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
+    ?__annotate_new@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
+    ?__annotate_new@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
     ?__annotate_new@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
     ?__annotate_new@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
     ?__annotate_new@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEXI@Z
@@ -2453,6 +2579,10 @@
     ?__destruct_at_end@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXPAPAPBVImpl@time_zone@cctz@time_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPAUCordRep@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPAUCordRep@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPAVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
+    ?__destruct_at_end@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPBVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXPAPBVCordzHandle@cord_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXPAUTransition@cctz@time_internal@absl@@@Z
@@ -2462,6 +2592,8 @@
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEXPAUViableSubstitution@strings_internal@absl@@@Z
     ?__destruct_at_end@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEXPAUViableSubstitution@strings_internal@absl@@U?$integral_constant@_N$0A@@23@@Z
     ?__destruct_at_end@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAEXPAPAUCordRep@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEXPAPAVCordzHandle@cord_internal@absl@@@Z
+    ?__destruct_at_end@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEXPAPBVCordzHandle@cord_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEXPAUTransition@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEXPAUTransitionType@cctz@time_internal@absl@@@Z
     ?__destruct_at_end@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IAEXPAUViableSubstitution@strings_internal@absl@@@Z
@@ -2477,6 +2609,10 @@
     ?__end_cap@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEAAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEABQAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAPAUTransition@cctz@time_internal@absl@@XZ
@@ -2487,6 +2623,10 @@
     ?__end_cap@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QBEABQAUViableSubstitution@strings_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAPAPAUCordRep@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IBEABQAPAUCordRep@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAPAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEABQAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEAAPAPBVCordzHandle@cord_internal@absl@@XZ
+    ?__end_cap@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEABQAPBVCordzHandle@cord_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IAEAAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IBEABQAUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?__end_cap@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEAAPAUTransition@cctz@time_internal@absl@@XZ
@@ -2500,6 +2640,8 @@
     ?__front_spare@?$deque@PBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?__get@?$__compressed_pair_elem@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@UTransition@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@$00$0A@@__1@std@@QAEAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2510,6 +2652,10 @@
     ?__get@?$__compressed_pair_elem@PAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@$0A@$0A@@__1@std@@QBEABQAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@PAPAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QAEAAPAPAUCordRep@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PAPAUCordRep@cord_internal@absl@@$0A@$0A@@__1@std@@QBEABQAPAUCordRep@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PAPAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QAEAAPAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PAPAVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QBEABQAPAVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PAPBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QAEAAPAPBVCordzHandle@cord_internal@absl@@XZ
+    ?__get@?$__compressed_pair_elem@PAPBVCordzHandle@cord_internal@absl@@$0A@$0A@@__1@std@@QBEABQAPBVCordzHandle@cord_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PAPBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PAPBVImpl@time_zone@cctz@time_internal@absl@@$0A@$0A@@__1@std@@QBEABQAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?__get@?$__compressed_pair_elem@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@$0A@$0A@@__1@std@@QAEAAPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@XZ
@@ -2551,6 +2697,10 @@
     ?__get@?$__compressed_pair_elem@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QBEABV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QBEABV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?__get@?$__compressed_pair_elem@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@$00$00@__1@std@@QBEABV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@XZ
     ?__get@?$__compressed_pair_elem@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@$00$00@__1@std@@QAEAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -2568,6 +2718,8 @@
     ?__get_value@?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QBEABU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@XZ
     ?__hash@?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QBEIXZ
     ?__invalidate_all_iterators@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
+    ?__invalidate_all_iterators@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
+    ?__invalidate_all_iterators@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
     ?__invalidate_all_iterators@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
     ?__invalidate_all_iterators@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
     ?__invalidate_all_iterators@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXXZ
@@ -2578,6 +2730,7 @@
     ?__invalidate_iterators_past@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXPAUTransitionType@cctz@time_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@AAEXPAUViableSubstitution@strings_internal@absl@@@Z
     ?__invalidate_iterators_past@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@AAEXPAVFormatArgImpl@str_format_internal@absl@@@Z
+    ?__make_iter@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAE?AV?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@23@PAPAVCordzHandle@cord_internal@absl@@@Z
     ?__make_iter@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@ABE?AV?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?__make_iter@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAE?AV?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@23@PAUTransition@cctz@time_internal@absl@@@Z
     ?__make_iter@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAE?AV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@23@PAUTransitionType@cctz@time_internal@absl@@@Z
@@ -2586,6 +2739,8 @@
     ?__node_alloc@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAEAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@XZ
     ?__ptr@?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEPAU123@XZ
     ?__recommend@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
+    ?__recommend@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
+    ?__recommend@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
     ?__recommend@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
     ?__recommend@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
     ?__recommend@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
@@ -2593,6 +2748,8 @@
     ?__recommend@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@ABEII@Z
     ?__rehash@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@AAEXI@Z
     ?__swap_out_circular_buffer@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@AAEXAAU?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXAAU?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
+    ?__swap_out_circular_buffer@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@AAEXAAU?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@AAEXAAU?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@23@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEPAUTransition@cctz@time_internal@absl@@AAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@PAU4567@@Z
     ?__swap_out_circular_buffer@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@AAEXAAU?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@23@@Z
@@ -2616,7 +2773,9 @@
     ?allocate@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEPAPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z
     ?allocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QAEPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@I@Z
     ?allocate@?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAEPAPAUCordRep@cord_internal@absl@@I@Z
+    ?allocate@?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QAEPAPAVCordzHandle@cord_internal@absl@@I@Z
     ?allocate@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAEPAPBUCordRep@cord_internal@absl@@I@Z
+    ?allocate@?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QAEPAPBVCordzHandle@cord_internal@absl@@I@Z
     ?allocate@?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z
     ?allocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@I@Z
     ?allocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QAEPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@I@Z
@@ -2631,7 +2790,9 @@
     ?allocate@?$allocator_traits@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@AAV?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAPAPAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPAPAUCordRep@cord_internal@2@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@I@Z
+    ?allocate@?$allocator_traits@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAPAPBUCordRep@cord_internal@2@AAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@I@Z
+    ?allocate@?$allocator_traits@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAPAPBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAPAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@SAPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@AAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@I@Z
     ?allocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@I@Z
@@ -2664,6 +2825,7 @@
     ?back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ
     ?back@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEAAUTransitionType@cctz@time_internal@absl@@XZ
     ?back@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEAAUViableSubstitution@strings_internal@absl@@XZ
+    ?base@?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@__1@std@@QBEPAPAVCordzHandle@cord_internal@absl@@XZ
     ?base@?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@__1@std@@QBEPAUTransition@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@__1@std@@QBEPAUTransitionType@cctz@time_internal@absl@@XZ
     ?base@?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QBEPBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
@@ -2684,6 +2846,7 @@
     ?begin@?$initializer_list@Vstring_view@absl@@@std@@QBEPBVstring_view@absl@@XZ
     ?begin@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QBEPBW4FormatConversionCharSet@absl@@XZ
     ?begin@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAE?AV?$__hash_map_iterator@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@XZ
+    ?begin@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@23@XZ
     ?begin@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBE?AV?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?begin@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@23@XZ
     ?begin@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2694,17 +2857,23 @@
     ?capacity@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?capacity@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?capacity@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
+    ?capacity@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
+    ?capacity@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$__vector_base@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$__vector_base@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@IBEIXZ
     ?capacity@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?capacity@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?capacity@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?capacity@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
@@ -2716,11 +2885,15 @@
     ?clear@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@PAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
+    ?clear@?$__split_buffer@PAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
+    ?clear@?$__split_buffer@PBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@UConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@UTransitionType@cctz@time_internal@absl@@AAV?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__split_buffer@UViableSubstitution@strings_internal@absl@@AAV?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@?$__vector_base@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
+    ?clear@?$__vector_base@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
+    ?clear@?$__vector_base@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
     ?clear@?$__vector_base@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
     ?clear@?$__vector_base@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
     ?clear@?$__vector_base@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@IAEXXZ
@@ -2730,7 +2903,6 @@
     ?clear@?$vector@VFormatArgImpl@str_format_internal@absl@@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?clear@InlineRep@Cord@absl@@QAEPAUCordRep@cord_internal@3@XZ
     ?clear_cordz_info@InlineData@cord_internal@absl@@QAEXXZ
-    ?clear_cordz_info@InlineRep@Cord@absl@@QAEXXZ
     ?code@Status@absl@@QBE?AW4StatusCode@2@XZ
     ?compare_exchange_weak@?$__atomic_base@PAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QAE_NAAPAUHashtablezInfo@container_internal@absl@@PAU456@W4memory_order@23@2@Z
     ?concat@CordRep@cord_internal@absl@@QAEPAUCordRepConcat@23@XZ
@@ -2738,6 +2910,9 @@
     ?consumed@CordRepRingReader@cord_internal@absl@@QBEIXZ
     ?conversion_char@FormatConversionSpecImpl@str_format_internal@absl@@QBE?AW4FormatConversionChar@3@XZ
     ?cord_ring_buffer_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
+    ?cordz_info@InlineData@cord_internal@absl@@QBEPAVCordzInfo@23@XZ
+    ?cordz_info@InlineRep@Cord@absl@@QBEPAVCordzInfo@cord_internal@3@XZ
+    ?cordz_should_profile@cord_internal@absl@@YA_NXZ
     ?count@FILERawSink@str_format_internal@absl@@QBEIXZ
     ?data@?$FixedArray@PAUCordRep@cord_internal@absl@@$0PPPPPPPP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QAEPAPAUCordRep@cord_internal@2@XZ
     ?data@?$InlinedVector@H$0CP@V?$allocator@H@__1@std@@@absl@@QAEPAHXZ
@@ -2752,6 +2927,8 @@
     ?data@?$Span@I@absl@@QBEPAIXZ
     ?data@?$Span@VFormatArgImpl@str_format_internal@absl@@@absl@@QBEPAVFormatArgImpl@str_format_internal@2@XZ
     ?data@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEPBQAUCordRep@cord_internal@absl@@XZ
+    ?data@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEPBQAVCordzHandle@cord_internal@absl@@XZ
+    ?data@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEPBQBVCordzHandle@cord_internal@absl@@XZ
     ?data@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEPBUConversionItem@ParsedFormatBase@str_format_internal@absl@@XZ
     ?data@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEPBUTransition@cctz@time_internal@absl@@XZ
     ?data@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEPBUTransitionType@cctz@time_internal@absl@@XZ
@@ -2772,7 +2949,9 @@
     ?deallocate@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEXPAPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z
     ?deallocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@I@Z
     ?deallocate@?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPAUCordRep@cord_internal@absl@@I@Z
+    ?deallocate@?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPAVCordzHandle@cord_internal@absl@@I@Z
     ?deallocate@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPBUCordRep@cord_internal@absl@@I@Z
+    ?deallocate@?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPBVCordzHandle@cord_internal@absl@@I@Z
     ?deallocate@?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEXPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z
     ?deallocate@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEXPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@I@Z
     ?deallocate@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QAEXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@I@Z
@@ -2787,7 +2966,9 @@
     ?deallocate@?$allocator_traits@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@PAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@PAPAUCordRep@cord_internal@absl@@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@PAPAUCordRep@cord_internal@2@I@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@PAPAVCordzHandle@cord_internal@absl@@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@@absl@@SAXAAV?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@PAPBUCordRep@cord_internal@2@I@Z
+    ?deallocate@?$allocator_traits@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@PAPBVCordzHandle@cord_internal@absl@@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@23@PAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@SAXAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@23@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@I@Z
     ?deallocate@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@SAXAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@I@Z
@@ -2801,7 +2982,9 @@
     ?description@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
     ?destroy@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QAEXPAPAPBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?destroy@?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPAUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPAVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QAEXPAPBUCordRep@cord_internal@absl@@@Z
+    ?destroy@?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QAEXPAPBVCordzHandle@cord_internal@absl@@@Z
     ?destroy@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QAEXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?destroy@?$allocator@UPayload@status_internal@absl@@@__1@std@@QAEXPAUPayload@status_internal@absl@@@Z
     ?destroy@?$allocator@USubRange@absl@@@__1@std@@QAEXPAUSubRange@absl@@@Z
@@ -2841,6 +3024,7 @@
     ?end@?$initializer_list@U?$pair@Vstring_view@absl@@V12@@__1@std@@@std@@QBEPBU?$pair@Vstring_view@absl@@V12@@__1@2@XZ
     ?end@?$initializer_list@Vstring_view@absl@@@std@@QBEPBVstring_view@absl@@XZ
     ?end@?$unordered_map@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAE?AV?$__hash_map_iterator@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@XZ
+    ?end@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAPAVCordzHandle@cord_internal@absl@@@23@XZ
     ?end@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBE?AV?$__wrap_iter@PBUConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
     ?end@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@23@XZ
     ?end@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAE?AV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@23@XZ
@@ -2892,6 +3076,14 @@
     ?first@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPAUCordRep@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAUCordRep@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPAVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAPAPBVCordzHandle@cord_internal@absl@@XZ
+    ?first@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABQAPBVCordzHandle@cord_internal@absl@@XZ
     ?first@?$__compressed_pair@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QBEABQAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?first@?$__compressed_pair@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@@__1@std@@QAEAAPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@XZ
@@ -2929,7 +3121,6 @@
     ?fixed_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@ABV?$duration@_JV?$ratio@$00$00@__1@std@@@chrono@__1@std@@@Z
     ?flat@CordRep@cord_internal@absl@@QAEPAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QBEPBUCordRepFlat@23@XZ
-    ?force_tree@InlineRep@Cord@absl@@QAEPAUCordRep@cord_internal@3@I@Z
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@ABVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
@@ -2961,6 +3152,7 @@
     ?get@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@@__1@std@@QBEPAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@23@XZ
     ?get@?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QBEPAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ
     ?get@?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEPAVZoneInfoSource@cctz@time_internal@absl@@XZ
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QAEAAV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@23@@__1@std@@QBEABV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@@23@XZ
     ?get_deleter@?$unique_ptr@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@@__1@std@@QAEAAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@XZ
@@ -2990,6 +3182,9 @@
     ?is_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QBE_NXZ
     ?is_leap_year@impl@detail@cctz@time_internal@absl@@YA_N_J@Z
     ?is_length@ConvTag@str_format_internal@absl@@QBE_NXZ
+    ?is_profiled@InlineData@cord_internal@absl@@QBE_NXZ
+    ?is_profiled@InlineRep@Cord@absl@@QBE_NXZ
+    ?is_snapshot@CordzHandle@cord_internal@absl@@QBE_NXZ
     ?is_tree@InlineData@cord_internal@absl@@QBE_NXZ
     ?is_tree@InlineRep@Cord@absl@@QBE_NXZ
     ?key_eq@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAEAAV?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@XZ
@@ -2998,6 +3193,8 @@
     ?length@string_view@absl@@QBEIXZ
     ?load@?$__atomic_base@P6AXABUHashtablezInfo@container_internal@absl@@@Z$0A@@__1@std@@QBEP6AXABUHashtablezInfo@container_internal@absl@@@ZW4memory_order@23@@Z
     ?load@?$__atomic_base@PAUHashtablezInfo@container_internal@absl@@$0A@@__1@std@@QBEPAUHashtablezInfo@container_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QBEPAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?load@?$__atomic_base@PAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QBEPAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QBE?AW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?load@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QBE?AW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?load_time_zone@cctz@time_internal@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PAVtime_zone@123@@Z
@@ -3013,7 +3210,9 @@
     ?max_size@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@QBEIXZ
+    ?max_size@?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@PBUCordRep@cord_internal@absl@@@__1@std@@QBEIXZ
+    ?max_size@?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@QBEIXZ
@@ -3024,6 +3223,8 @@
     ?max_size@?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$allocator@VFormatArgImpl@str_format_internal@absl@@@__1@std@@QBEIXZ
     ?max_size@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?max_size@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?max_size@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?max_size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?max_size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?max_size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
@@ -3087,6 +3288,8 @@
     ?push_back@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXABQAPBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$deque@PBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXABQBVImpl@time_zone@cctz@time_internal@absl@@@Z
     ?push_back@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEXABQAUCordRep@cord_internal@absl@@@Z
+    ?push_back@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXABQAVCordzHandle@cord_internal@absl@@@Z
+    ?push_back@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEXABQBVCordzHandle@cord_internal@absl@@@Z
     ?push_back@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEX$$QAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z
     ?push_back@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXABUTransition@cctz@time_internal@absl@@@Z
     ?push_front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@AAV?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXABQAPBVImpl@time_zone@cctz@time_internal@absl@@@Z
@@ -3145,6 +3348,12 @@
     ?second@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PAPAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEABV?$allocator@PAUCordRep@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@AAV?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABV?$allocator@PAVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@AAV?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
+    ?second@?$__compressed_pair@PAPBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEABV?$allocator@PBVCordzHandle@cord_internal@absl@@@23@XZ
     ?second@?$__compressed_pair@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@__1@std@@@__1@std@@QAEAAV?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@V?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@@__1@std@@QAEAAV?$__hash_node_destructor@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@23@XZ
     ?second@?$__compressed_pair@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@AAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QAEAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@23@XZ
@@ -3171,6 +3380,8 @@
     ?second@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ
     ?second@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ
     ?set_arg@BoundConversion@str_format_internal@absl@@QAEXPBVFormatArgImpl@23@@Z
+    ?set_cordz_info@InlineData@cord_internal@absl@@QAEXPAVCordzInfo@23@@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
     ?set_data@InlineRep@Cord@absl@@QAEPADI@Z
     ?set_data@InlineRep@Cord@absl@@QAEXPBDI_N@Z
     ?set_depth@CordRepConcat@cord_internal@absl@@QAEXE@Z
@@ -3205,6 +3416,8 @@
     ?size@?$initializer_list@VFormatArgImpl@str_format_internal@absl@@@std@@QBEIXZ
     ?size@?$initializer_list@W4FormatConversionCharSet@absl@@@std@@QBEIXZ
     ?size@?$vector@PAUCordRep@cord_internal@absl@@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?size@?$vector@PAVCordzHandle@cord_internal@absl@@V?$allocator@PAVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
+    ?size@?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?size@?$vector@UConversionItem@ParsedFormatBase@str_format_internal@absl@@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?size@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
     ?size@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QBEIXZ
@@ -3218,6 +3431,8 @@
     ?status@BadStatusOrAccess@absl@@QBEABVStatus@2@XZ
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Uday_tag@1234@U51234@_J@Z
     ?step@detail@cctz@time_internal@absl@@YA?AUfields@1234@Usecond_tag@1234@U51234@_J@Z
+    ?store@?$__atomic_base@PAVCordzHandle@cord_internal@absl@@$0A@@__1@std@@QAEXPAVCordzHandle@cord_internal@absl@@W4memory_order@23@@Z
+    ?store@?$__atomic_base@PAVCordzInfo@cord_internal@absl@@$0A@@__1@std@@QAEXPAVCordzInfo@cord_internal@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4OnDeadlockCycle@absl@@$0A@@__1@std@@QAEXW4OnDeadlockCycle@absl@@W4memory_order@23@@Z
     ?store@?$__atomic_base@W4State@PerThreadSynch@base_internal@absl@@$0A@@__1@std@@QAEXW4State@PerThreadSynch@base_internal@absl@@W4memory_order@23@@Z
     ?str@UntypedFormatSpecImpl@str_format_internal@absl@@QBE?AVstring_view@3@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def
index 4d1f6f6e..e816caa 100644
--- a/third_party/abseil-cpp/symbols_x86_rel.def
+++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -109,6 +109,8 @@
     ??0Condition@absl@@QAE@P6A_NPAX@Z0@Z
     ??0Condition@absl@@QAE@PB_N@Z
     ??0Cord@absl@@QAE@Vstring_view@1@@Z
+    ??0CordzHandle@cord_internal@absl@@IAE@_N@Z
+    ??0CordzInfo@cord_internal@absl@@AAE@PAUCordRep@12@PBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QAE@XZ
     ??0HashtablezInfo@container_internal@absl@@QAE@XZ
     ??0HashtablezSampler@container_internal@absl@@QAE@XZ
@@ -129,6 +131,8 @@
     ??0uint128@absl@@QAE@O@Z
     ??1BadStatusOrAccess@absl@@UAE@XZ
     ??1CondVar@absl@@QAE@XZ
+    ??1CordzHandle@cord_internal@absl@@MAE@XZ
+    ??1CordzInfo@cord_internal@absl@@EAE@XZ
     ??1GraphCycles@synchronization_internal@absl@@QAE@XZ
     ??1HashtablezInfo@container_internal@absl@@QAE@XZ
     ??1HashtablezSampler@container_internal@absl@@QAE@XZ
@@ -205,12 +209,14 @@
     ?Append@FormatSinkImpl@str_format_internal@absl@@QAEXID@Z
     ?Append@FormatSinkImpl@str_format_internal@absl@@QAEXVstring_view@3@@Z
     ?Append@ParsedFormatConsumer@ParsedFormatBase@str_format_internal@absl@@QAE_NVstring_view@4@@Z
-    ?AppendArray@InlineRep@Cord@absl@@QAEXPBDI@Z
+    ?AppendArray@InlineRep@Cord@absl@@QAEXVstring_view@3@W4MethodIdentifier@CordzUpdateTracker@cord_internal@3@@Z
     ?AppendLeaf@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@II@Z
     ?AppendPack@str_format_internal@absl@@YAAAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PAV345@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z
     ?AppendPieces@strings_internal@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?AppendSlow@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@@Z
-    ?AppendTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@@Z
+    ?AppendTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToInlined@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?AppendTreeToTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?ApplySubstitutions@strings_internal@absl@@YAHVstring_view@2@PAV?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__1@std@@@__1@std@@PAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@56@@Z
     ?AsciiStrToLower@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
     ?AsciiStrToUpper@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@Z
@@ -288,6 +294,7 @@
     ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPAUArena@123@XZ
     ?DefaultStackUnwinder@absl@@YAHPAPAXPAHHHPBX1@Z
     ?Delete@CordRepRing@cord_internal@absl@@CAXPAV123@@Z
+    ?Delete@CordzHandle@cord_internal@absl@@SAXPAV123@@Z
     ?DeleteArena@LowLevelAlloc@base_internal@absl@@SA_NPAUArena@123@@Z
     ?Demangle@debugging_internal@absl@@YA_NPBDPADH@Z
     ?Description@TimeZoneInfo@cctz@time_internal@absl@@UBE?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ
@@ -297,6 +304,9 @@
     ?Destroy@PerThreadSem@synchronization_internal@absl@@CAXPAUThreadIdentity@base_internal@3@@Z
     ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@inlined_vector_internal@absl@@AAEXXZ
     ?DestroyCordSlow@Cord@absl@@AAEXXZ
+    ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__1@std@@@__1@std@@XZ
+    ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z
     ?Digits10@?$BigUnsigned@$03@strings_internal@absl@@SAHXZ
     ?Digits10@?$BigUnsigned@$0FE@@strings_internal@absl@@SAHXZ
     ?DummyFunction@?$AtomicHook@P6A?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@Vstring_view@2@ABVCord@2@@Z@base_internal@absl@@CA?AV?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@3@Vstring_view@3@ABVCord@3@@Z
@@ -336,6 +346,7 @@
     ?FastIntToBuffer@numbers_internal@absl@@YAPAD_JPAD@Z
     ?FastIntToBuffer@numbers_internal@absl@@YAPAD_KPAD@Z
     ?Fer@Mutex@absl@@AAEXPAUPerThreadSynch@base_internal@2@@Z
+    ?FillParentStack@CordzInfo@cord_internal@absl@@CAHPBV123@PAPAX@Z
     ?Find@ByAnyChar@absl@@QBE?AVstring_view@2@V32@I@Z
     ?Find@ByChar@absl@@QBE?AVstring_view@2@V32@I@Z
     ?Find@ByLength@absl@@QBE?AVstring_view@2@V32@I@Z
@@ -398,17 +409,19 @@
     ?FromUniversal@absl@@YA?AVTime@1@_J@Z
     ?FromUnixSeconds@cctz@time_internal@absl@@YA?AV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@_J@Z
     ?GetAppendBuffer@CordRepRing@cord_internal@absl@@QAE?AV?$Span@D@3@I@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QAEXPAPADPAI@Z
-    ?GetAppendRegion@InlineRep@Cord@absl@@QAEXPAPADPAII@Z
     ?GetCachedTID@base_internal@absl@@YAIXZ
     ?GetCharacter@CordRepRing@cord_internal@absl@@QBEDI@Z
+    ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ
     ?GetCurrentTimeNanos@absl@@YA_JXZ
     ?GetFlatAux@Cord@absl@@CA_NPAUCordRep@cord_internal@2@PAVstring_view@2@@Z
     ?GetId@GraphCycles@synchronization_internal@absl@@QAE?AUGraphId@23@PAX@Z
+    ?GetParentMethod@CordzInfo@cord_internal@absl@@CA?AW4MethodIdentifier@CordzUpdateTracker@23@PBV123@@Z
+    ?GetParentStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ
     ?GetPayload@Status@absl@@QBE?AV?$optional@VCord@absl@@@2@Vstring_view@2@@Z
     ?GetPrependBuffer@CordRepRing@cord_internal@absl@@QAE?AV?$Span@D@3@I@Z
     ?GetProgramCounter@debugging_internal@absl@@YAPAXPAX@Z
     ?GetSkipCount@ExponentialBiased@base_internal@absl@@QAE_J_J@Z
+    ?GetStack@CordzInfo@cord_internal@absl@@QBE?AV?$Span@QAX@3@XZ
     ?GetStackFrames@absl@@YAHPAPAXPAHHH@Z
     ?GetStackFramesWithContext@absl@@YAHPAPAXPAHHHPBX1@Z
     ?GetStackTrace@GraphCycles@synchronization_internal@absl@@QAEHUGraphId@23@PAPAPAX@Z
@@ -427,6 +440,7 @@
     ?HasBeenNotifiedInternal@Notification@absl@@CA_NPBU?$atomic@_N@__1@std@@@Z
     ?HasEdge@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z
     ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z
+    ?Head@CordzInfo@cord_internal@absl@@SAPAV123@ABVCordzSnapshot@23@@Z
     ?HexStringToBytes@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?IDivDuration@time_internal@absl@@YA_J_NVDuration@2@1PAV32@@Z
     ?In@Time@absl@@QBE?AUBreakdown@12@VTimeZone@2@@Z
@@ -471,6 +485,7 @@
     ?LoadTimeZone@Impl@time_zone@cctz@time_internal@absl@@SA_NABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PAV2345@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@ABE?AUabsolute_lookup@time_zone@234@_JABUTransition@234@@Z
     ?LocalTime@TimeZoneInfo@cctz@time_internal@absl@@ABE?AUabsolute_lookup@time_zone@234@_JABUTransitionType@234@@Z
+    ?Lock@CordzInfo@cord_internal@absl@@QAEXW4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Lock@Mutex@absl@@QAEXXZ
     ?LockSlow@Mutex@absl@@AAEXPBUMuHowS@2@PBVCondition@2@H@Z
     ?LockSlowLoop@Mutex@absl@@AAEXPAUSynchWaitParams@2@H@Z
@@ -504,6 +519,7 @@
     ?New@CordRepRing@cord_internal@absl@@CAPAV123@II@Z
     ?NewArena@LowLevelAlloc@base_internal@absl@@SAPAUArena@123@H@Z
     ?Next@CordRepRingReader@cord_internal@absl@@QAE?AVstring_view@3@XZ
+    ?Next@CordzInfo@cord_internal@absl@@QBEPAV123@ABVCordzSnapshot@23@@Z
     ?NextTransition@TimeZone@absl@@QBE_NVTime@2@PAUCivilTransition@12@@Z
     ?NextTransition@TimeZoneInfo@cctz@time_internal@absl@@UBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@time_zone@234@@Z
     ?NextTransition@TimeZoneLibC@cctz@time_internal@absl@@UBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@time_zone@234@@Z
@@ -545,7 +561,9 @@
     ?Prepend@CordRepRing@cord_internal@absl@@SAPAV123@PAV123@Vstring_view@3@I@Z
     ?PrependLeaf@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@II@Z
     ?PrependSlow@CordRepRing@cord_internal@absl@@CAPAV123@PAV123@PAUCordRep@23@@Z
-    ?PrependTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@@Z
+    ?PrependTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToInlined@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
+    ?PrependTreeToTree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@W4MethodIdentifier@CordzUpdateTracker@53@@Z
     ?PrevTransition@TimeZone@absl@@QBE_NVTime@2@PAUCivilTransition@12@@Z
     ?PrevTransition@TimeZoneInfo@cctz@time_internal@absl@@UBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@time_zone@234@@Z
     ?PrevTransition@TimeZoneLibC@cctz@time_internal@absl@@UBE_NABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@PAUcivil_transition@time_zone@234@@Z
@@ -705,6 +723,9 @@
     ?ToUnixMillis@absl@@YA_JVTime@1@@Z
     ?ToUnixNanos@absl@@YA_JVTime@1@@Z
     ?ToUnixSeconds@absl@@YA_JVTime@1@@Z
+    ?Track@CordzInfo@cord_internal@absl@@AAEXXZ
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@ABV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
+    ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
     ?TryLock@Mutex@absl@@QAE_NXZ
@@ -715,6 +736,7 @@
     ?UnavailableError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?UnknownError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
+    ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?Unlock@Mutex@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
     ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@VDuration@1@@Z
@@ -723,6 +745,8 @@
     ?UnrefTree@InlineRep@Cord@absl@@AAEXXZ
     ?Unregister@HashtablezSampler@container_internal@absl@@QAEXPAUHashtablezInfo@23@@Z
     ?UnsampleSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
+    ?Untrack@CordzInfo@cord_internal@absl@@QAEXXZ
+    ?UpdateCordzStatisticsSlow@InlineRep@Cord@absl@@QAEXXZ
     ?UpdateStackTrace@GraphCycles@synchronization_internal@absl@@QAEXUGraphId@23@HP6AHPAPAXH@Z@Z
     ?Utf8SafeCEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
     ?Utf8SafeCHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@Vstring_view@1@@Z
@@ -779,6 +803,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__1@std@@@967@ABVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
+    ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?load_time_zone@cctz@time_internal@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PAVtime_zone@123@@Z
     ?local_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@XZ
     ?lookup@time_zone@cctz@time_internal@absl@@QBE?AUabsolute_lookup@1234@ABV?$time_point@Vsystem_clock@chrono@__1@std@@V?$duration@_JV?$ratio@$00$00@__1@std@@@234@@chrono@__1@std@@@Z
@@ -822,6 +847,8 @@
     ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PAVuint128@2@H@Z
     ?safe_strtou32_base@numbers_internal@absl@@YA_NVstring_view@2@PAIH@Z
     ?safe_strtou64_base@numbers_internal@absl@@YA_NVstring_view@2@PA_KH@Z
+    ?set_cordz_mean_interval@cord_internal@absl@@YAXH@Z
+    ?set_tree@InlineRep@Cord@absl@@QAEXPAUCordRep@cord_internal@3@@Z
     ?shallow_subcords_enabled@cord_internal@absl@@3U?$atomic@_N@__1@std@@A
     ?shrink_to_fit@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXXZ
     ?size@?$BigUnsigned@$03@strings_internal@absl@@QBEHXZ
diff --git a/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc b/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
index 1ff0754..eba92aee 100644
--- a/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
+++ b/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
@@ -27,6 +27,13 @@
     // Not much point in going on with an empty CSP string.
     return EXIT_SUCCESS;
   }
+  if (it - data > 250) {
+    // Origins should not be too long. The origin of size 'N' is copied into 'M'
+    // policies. The fuzzer can send an input of size N+M and use O(N*M) memory.
+    // Due to this quadratic behavior, we must limit the size of the origin to
+    // prevent the fuzzer from triggering OOM crash. Note that real domain names
+    // are limited to 253 characters.
+  }
 
   String url = String(data, it - 1 - data);
   String header = String(it, size - (it - data));
diff --git a/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc b/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
index db108ee..ca5ec22d 100644
--- a/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
+++ b/third_party/blink/renderer/core/frame/csp/execution_context_csp_delegate.cc
@@ -128,12 +128,9 @@
 
   // TODO(mkwst): We only have status code information for Documents. It would
   // be nice to get them for Workers as well.
-  // TODO(crbug.com/1153336) Use network::IsUrlPotentiallyTrustworthy().
   Document* document = GetDocument();
-  if (document && !SecurityOrigin::IsSecure(document->Url()) &&
-      document->Loader()) {
+  if (document && document->Loader())
     status_code = document->Loader()->GetResponse().HttpStatusCode();
-  }
 
   return status_code;
 }
diff --git a/third_party/blink/renderer/core/html/html_slot_element.cc b/third_party/blink/renderer/core/html/html_slot_element.cc
index 16931300..a57d517 100644
--- a/third_party/blink/renderer/core/html/html_slot_element.cc
+++ b/third_party/blink/renderer/core/html/html_slot_element.cc
@@ -307,6 +307,7 @@
       children_context.next_sibling = nullptr;
       children_context.next_sibling_valid = true;
     }
+    children_context.use_previous_in_flow = true;
 
     for (auto& node : AssignedNodes())
       node->AttachLayoutTree(children_context);
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index a8daff81..ce3980b6 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -623,6 +623,7 @@
     TransformPaintPropertyNode::State state{new_translation};
     state.flags.flattens_inherited_transform =
         context_.current.should_flatten_inherited_transform;
+    state.rendering_context_id = context_.current.rendering_context_id;
     state.direct_compositing_reasons =
         full_context_.direct_compositing_reasons &
         CompositingReason::kDirectReasonsForPaintOffsetTranslationProperty;
@@ -670,6 +671,7 @@
       state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
           box_model.UniqueId(),
           CompositorElementIdNamespace::kStickyTranslation);
+      state.rendering_context_id = context_.current.rendering_context_id;
 
       auto* layer = box_model.Layer();
       const auto* scroller_properties = layer->AncestorScrollContainerLayer()
@@ -858,6 +860,7 @@
             CompositingReasonsForTransformProperty();
         state.flags.flattens_inherited_transform =
             context_.current.should_flatten_inherited_transform;
+        state.rendering_context_id = context_.current.rendering_context_id;
         state.flags.is_for_svg_child = true;
         state.compositor_element_id = GetCompositorElementId(
             CompositorElementIdNamespace::kPrimaryTransform);
@@ -1956,6 +1959,7 @@
       SetTransformNodeStateFromAffineTransform(state, content_to_parent_space);
       state.flags.flattens_inherited_transform =
           context_.current.should_flatten_inherited_transform;
+      state.rendering_context_id = context_.current.rendering_context_id;
       // TODO(crbug.com/1189428): Should this set state.rendering_context_id ?
       OnUpdate(properties_->UpdateReplacedContentTransform(
           *context_.current.transform, std::move(state)));
@@ -2128,6 +2132,7 @@
       TransformPaintPropertyNode::State state{-ToFloatSize(scroll_position)};
       state.flags.flattens_inherited_transform =
           context_.current.should_flatten_inherited_transform;
+      state.rendering_context_id = context_.current.rendering_context_id;
       state.direct_compositing_reasons =
           full_context_.direct_compositing_reasons &
           CompositingReason::kDirectReasonsForScrollTranslationProperty;
diff --git a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
index 91665cd..ed91994 100644
--- a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
+++ b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
@@ -4,7 +4,7 @@
 
 #include "third_party/blink/renderer/core/speculation_rules/speculation_rule_set.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "third_party/blink/renderer/platform/json/json_parser.h"
 #include "third_party/blink/renderer/platform/json/json_values.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
index 9357012..10b8eeb2 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -113,21 +113,21 @@
     break;                                                                     \
   }
 
-#define DEFINE_RESOURCE_HISTOGRAM(prefix)                    \
-  switch (factory.GetType()) {                               \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, CSSStyleSheet)  \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Font)           \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Image)          \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, LinkPrefetch)   \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Manifest)       \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Audio)          \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Video)          \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Mock)           \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Raw)            \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Script)         \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, SVGDocument)    \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, TextTrack)      \
-    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, XSLStyleSheet)  \
+#define DEFINE_RESOURCE_HISTOGRAM(prefix)                   \
+  switch (factory.GetType()) {                              \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, CSSStyleSheet) \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Font)          \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Image)         \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, LinkPrefetch)  \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Manifest)      \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Audio)         \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Video)         \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Mock)          \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Raw)           \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, Script)        \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, SVGDocument)   \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, TextTrack)     \
+    DEFINE_SINGLE_RESOURCE_HISTOGRAM(prefix, XSLStyleSheet) \
   }
 
 ResourceLoadPriority TypeToPriority(ResourceType type) {
@@ -985,8 +985,8 @@
       resource_request.Url());
   SCOPED_BLINK_UMA_HISTOGRAM_TIMER_THREAD_SAFE(
       "Blink.Fetch.RequestResourceTime");
-  TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url",
-               params.Url().GetString().Utf8());
+  TRACE_EVENT1("blink,blink.resource", "ResourceFetcher::requestResource",
+               "url", params.Url().GetString().Utf8());
 
   // |resource_request|'s origin can be null here, corresponding to the "client"
   // value in the spec. In that case client's origin is used.
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 4461bbd..ed7f199f 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2175,6 +2175,7 @@
     {
       name: "WebAppLinkCapturing",
       origin_trial_feature_name: "WebAppLinkCapturing",
+      origin_trial_os: ["chromeos"],
     },
     {
       name:"WebAppsLockScreen",
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index ce22197d..f1a1127 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -6442,6 +6442,9 @@
 # COOP access reporting:
 crbug.com/1090273 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html [ Timeout ]
 
+# COOP top navigation:
+crbug.com/1153648 external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html [ Failure ]
+
 # Stale revalidation shouldn't be blocked:
 crbug.com/1079188 external/wpt/fetch/stale-while-revalidate/revalidate-not-blocked-by-csp.html [ Timeout ]
 
@@ -7127,6 +7130,7 @@
 crbug.com/476553 virtual/scroll-unification/scrollbars/hidden-scrollbars-invisible.html [ Pass Failure Timeout Crash ]
 crbug.com/476553 virtual/scroll-unification/fast/scrolling/overflow-scrollability.html [ Pass Failure Timeout Crash ]
 crbug.com/476553 virtual/scroll-unification/fast/events/touch/gesture/gesture-tap-paragraph-end.html [ Pass Failure Timeout Crash ]
+crbug.com/476553 virtual/scroll-unification/fast/events/drag-and-drop-autoscroll-mainframe.html [ Pass Failure Timeout Crash ]
 
 # Sheriff 2021-04-01
 crbug.com/1167679 accessibility/aom-focus-action.html [ Pass Failure Timeout Crash ]
@@ -7274,3 +7278,19 @@
 crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Pass Failure Timeout ]
 crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Pass Failure Timeout ]
 crbug.com/1203345 [ Mac ] external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Pass Failure Timeout ]
+
+# Sheriff 2021-04-29
+crbug.com/1203963 [ Mac10.14 ] external/wpt/css/css-paint-api/idlharness.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/css/css-shapes/parsing/shape-outside-computed.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/css/css-sizing/aspect-ratio/grid-aspect-ratio-021.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/css/cssom-view/idlharness.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/fetch/api/idlharness.any.sharedworker.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/gamepad/idlharness.https.window.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/html/dom/idlharness.worker.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/input-device-capabilities/idlharness.window.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/periodic-background-sync/idlharness.https.any.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/storage/idlharness.https.any.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/storage/idlharness.https.any.worker.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/url/url-constructor.any.worker.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/webusb/idlharness.https.any.html [ Pass Failure Timeout ]
+crbug.com/1203963 [ Mac10.14 ] external/wpt/xhr/idlharness.any.sharedworker.html [ Pass Failure Timeout ]
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/report-to-directive-allowed-in-meta.https.sub.html b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/report-to-directive-allowed-in-meta.https.sub.html
index 8b95b49..ffdebe0 100644
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/report-to-directive-allowed-in-meta.https.sub.html
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/report-to-directive-allowed-in-meta.https.sub.html
@@ -37,7 +37,7 @@
           assert_equals(reports[0].body.sourceFile, document_url);
           assert_equals(reports[0].body.sample, "");
           assert_equals(reports[0].body.disposition, "enforce");
-          assert_equals(reports[0].body.statusCode, 0);
+          assert_equals(reports[0].body.statusCode, 200);
           assert_equals(reports[0].body.lineNumber, 54);
           assert_equals(reports[0].body.columnNumber, 0);
         });
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html
index ba4df62..94f14d94 100644
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html
@@ -36,7 +36,7 @@
           assert_equals(reports[0].body.sourceFile, document_url);
           assert_equals(reports[0].body.sample, "");
           assert_equals(reports[0].body.disposition, "enforce");
-          assert_equals(reports[0].body.statusCode, 0);
+          assert_equals(reports[0].body.statusCode, 200);
           assert_equals(reports[0].body.lineNumber, 53);
           assert_equals(reports[0].body.columnNumber, 0);
         });
diff --git a/third_party/blink/web_tests/external/wpt/css/css-display/display-contents-slot-attach-whitespace.html b/third_party/blink/web_tests/external/wpt/css/css-display/display-contents-slot-attach-whitespace.html
new file mode 100644
index 0000000..867f1f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-display/display-contents-slot-attach-whitespace.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<title>Attaching shadow slot with assigned whitespace separated inline elements</title>
+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-rules">
+<link rel="match" href="../reference/pass_if_two_words.html">
+<p>There should be a space between "two" and "words" below.</p>
+<div id="host"><span>two</span> <span>words</span></div>
+<script>
+  host.offsetTop;
+  host.attachShadow({mode:"open"}).innerHTML = "<slot />";
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-001.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-001.html
new file mode 100644
index 0000000..aec3b44
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-001.html
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML>
+<title>CSS Test (Transforms): position:sticky on an element in a preserve-3d scene</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Google" href="http://www.google.com/">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering">
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#stickypos-insets">
+<meta name="assert" content="3D scene intersection is done correctly in the presence of position: sticky.">
+<link rel="match" href="3dtransform-and-position-sticky-ref.html">
+
+<style>
+
+div, img {
+  height: 100px;
+  width: 100px;
+}
+
+#outer {
+  transform-style: preserve-3d;
+  perspective: 300px;
+}
+
+#middle {
+  transform-style: preserve-3d;
+  position: relative;
+}
+
+#inner1 {
+  background: aqua;
+  /* isn't really sticky because of the containing block established by transform and by transform-style */
+  position: sticky;
+  top: 0;
+  transform: translateZ(0);
+}
+
+#inner2 {
+  background: olive;
+  position: absolute;
+  top: 0;
+  left: 0;
+  transform: rotateX(30deg);
+}
+
+</style>
+
+<div id="outer">
+  <div id="middle">
+    <div id="inner1">
+    </div>
+    <div id="inner2">
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-002.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-002.html
new file mode 100644
index 0000000..bde8e27
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-002.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML>
+<title>CSS Test (Transforms): position:sticky on an element in a preserve-3d scene</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Google" href="http://www.google.com/">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering">
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#stickypos-insets">
+<meta name="assert" content="3D scene intersection is done correctly in the presence of position: sticky.">
+<link rel="match" href="3dtransform-and-position-sticky-ref.html">
+
+<style>
+
+div, img {
+  height: 100px;
+  width: 100px;
+}
+
+#outer {
+  transform-style: preserve-3d;
+  perspective: 300px;
+}
+
+#middle {
+  transform-style: preserve-3d;
+  position: relative;
+}
+
+#inner1 {
+  background: aqua;
+  /* isn't really sticky because of the containing block established by transform and by transform-style */
+  position: sticky;
+  top: 0;
+  transform: translateZ(0);
+  transform-style: preserve-3d;
+}
+
+#inner2 {
+  background: olive;
+  position: absolute;
+  top: 0;
+  left: 0;
+  transform: rotateX(30deg);
+}
+
+</style>
+
+<div id="outer">
+  <div id="middle">
+    <div id="inner1">
+    </div>
+    <div id="inner2">
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-ref.html
new file mode 100644
index 0000000..a12ce72
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/3dtransform-and-position-sticky-ref.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML>
+<title>CSS Test Reference (Transforms): position:sticky on an element in a preserve-3d scene</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Google" href="http://www.google.com/">
+
+<style>
+
+div, img {
+  height: 100px;
+  width: 100px;
+}
+
+#outer {
+  transform-style: preserve-3d;
+  perspective: 300px;
+}
+
+#middle {
+  transform-style: preserve-3d;
+  position: relative;
+  background: aqua;
+}
+
+#inner2 {
+  background: olive;
+  position: absolute;
+  top: 0;
+  left: 0;
+  transform: rotateX(30deg);
+}
+
+</style>
+
+<div id="outer">
+  <div id="middle">
+    <div id="inner2">
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/blob-popup.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/blob-popup.https.html
index a26520d8..eda150e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/blob-popup.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/blob-popup.https.html
@@ -14,7 +14,6 @@
     assert_equals(data.name.length, 0);
     assert_false(data.opener);
     assert_true(furtherPopup.closed);
-    assert_equals(furtherPopup.document.URL, "about:blank");
   });
 
   const blobContents = `<script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https-expected.txt
deleted file mode 100644
index 70a6a02..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This is a testharness.js-based test.
-PASS Navigate to about:blank from iframe with opener.top COOP: |header(Cross-Origin-Opener-Policy,same-origin), iframe origin: https://web-platform.test:8444, openee COOP: |header(Cross-Origin-Opener-Policy,same-origin), openee origin: https://web-platform.test:8444.
-PASS Navigate to about:blank from iframe with opener.top COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), iframe origin: https://web-platform.test:8444, openee COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), openee origin: https://web-platform.test:8444.
-FAIL Navigate to about:blank from iframe with opener.top COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), iframe origin: https://web-platform.test:8444, openee COOP: |header(Cross-Origin-Opener-Policy,unsafe-none), openee origin: https://www1.web-platform.test:8444. assert_equals: expected "true" but got "false"
-PASS Navigate to about:blank from iframe with opener.top COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), iframe origin: https://www1.web-platform.test:8444, openee COOP: |header(Cross-Origin-Opener-Policy,unsafe-none), openee origin: https://www1.web-platform.test:8444.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html
index 77de5a0..4aa39e3 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html
@@ -30,6 +30,10 @@
 const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
 const coop_same_origin_header =
   '|header(Cross-Origin-Opener-Policy,same-origin)';
+const coep_require_corp_header =
+  '|header(Cross-Origin-Embedder-Policy,require-corp)';
+const coop_same_origin_plus_coep_header =
+  coop_same_origin_header + coep_require_corp_header;
 const coop_same_origin_allow_popups_header =
   '|header(Cross-Origin-Opener-Policy,same-origin-allow-popups)';
 const coop_unsafe_none_header =
@@ -40,6 +44,7 @@
   iframe_origin,
   openee_COOP_header,
   openee_origin,
+  iframe_header,
   expect_openee_closed
 ){
   return promise_test(async t => {
@@ -52,7 +57,7 @@
         `&uuid=${opener_token}`;
     const openee_url = openee_origin + executor_path + openee_COOP_header +
         `&uuid=${openee_token}`;
-    const iframe_url = iframe_origin + executor_path + `&uuid=${iframe_token}`;
+    const iframe_url = iframe_origin + executor_path + iframe_header + `&uuid=${iframe_token}`;
 
     t.add_cleanup(() => {
       send(openee_token, "window.close()");
@@ -104,7 +109,6 @@
     `);
     assert_equals(await receive(this_window_token), "about:blank loaded");
 
-
     // 6. Retrieve and check the results.
     send(iframe_token, `
       send("${this_window_token}", window.openee.closed);
@@ -126,6 +130,19 @@
   same_origin,
   coop_same_origin_header,
   same_origin,
+  "",
+  false
+);
+
+// Since all navigations of openee are within same-origin pages with the
+// same COOP value, there are no browsing context group switches.
+// Test with both COOP and COEP.
+navigateToAboutBlankTest(
+  coop_same_origin_plus_coep_header,
+  same_origin,
+  coop_same_origin_plus_coep_header,
+  same_origin,
+  coep_require_corp_header,
   false
 );
 
@@ -136,6 +153,7 @@
   same_origin,
   coop_same_origin_allow_popups_header,
   same_origin,
+  "",
   false
 );
 
@@ -151,6 +169,7 @@
   same_origin,
   coop_unsafe_none_header,
   cross_origin,
+  "",
   true
 );
 
@@ -169,6 +188,7 @@
   cross_origin,
   coop_unsafe_none_header,
   cross_origin,
+  "",
   false
 );
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https-expected.txt
deleted file mode 100644
index ccad4dea..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This is a testharness.js-based test.
-PASS Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin), iframe origin: https://web-platform.test:8444
-FAIL Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin), iframe origin: https://www1.web-platform.test:8444 assert_equals: expected "true" but got "false"
-PASS Navigate top to about:blank from iframe with opener COOP: |header(Cross-Origin-Opener-Policy,same-origin-allow-popups), iframe origin: https://www1.web-platform.test:8444
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html
index 1dd65fc..c4bbe150 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html
@@ -6,6 +6,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="/common/get-host-info.sub.js"></script>
 <script src="/common/utils.js"></script>
+<script src="/html/cross-origin-opener-policy/resources/common.js"></script>
 <script src="/html/cross-origin-opener-policy/resources/dispatcher.js"></script>
 
 
@@ -64,12 +65,9 @@
     let opener_window_proxy = window.open(opener_url, opener_token);
 
     // 2. Create the iframe.
-    // The allow-top-navigation sandbox flags disables the intervention
-    // requiring a user gesture to navigate top.
     send(opener_token, `
       iframe = document.createElement('iframe');
       iframe.src = "${iframe_url}";
-      iframe.sandbox = "allow-top-navigation allow-scripts";
       document.body.appendChild(iframe);
     `);
 
@@ -84,10 +82,19 @@
     send(openee_token, `send("${this_window_token}", "Ack");`);
     assert_equals(await receive(this_window_token), "Ack");
 
-    // 5. The iframe navigates its top-level document to about:blank.
-    send(iframe_token, `
-      top.location.href = "about:blank";
-    `);
+    // 5. The iframe navigates its top-level document to about:blank. It needs
+    // to receive a user action as it may be cross-origin and it navigates top
+    // to a cross-origin document.
+    // https://github.com/WICG/interventions/issues/16
+    send(iframe_token, addScriptAndTriggerOnload(
+      "/resources/testdriver.js",
+      `${addScriptAndTriggerOnload("/resources/testdriver-vendor.js",
+        `
+        test_driver.bless('navigate top to about:blank', () => {
+          open("about:blank", "_top");
+        });
+      `)}
+    `));
 
     // 6. Ensure opener is fully loaded and then retrieve the results.
     send(openee_token, `
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-flex-expected.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex-ref.html
similarity index 96%
rename from third_party/blink/web_tests/html/details_summary/summary-display-flex-expected.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex-ref.html
index 69301654..083dba87 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-flex-expected.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex-ref.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
 <style>
 .flex-container {
   background: #333;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-flex.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex.html
similarity index 84%
rename from third_party/blink/web_tests/html/details_summary/summary-display-flex.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex.html
index 328715b..c495516 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-flex.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-flex.html
@@ -1,4 +1,10 @@
 <!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: summary with 'display: flex'</title>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
+<link rel="match" href="summary-display-flex-ref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements">
+<meta name="assert" content="Checks that styling a <summary> with 'display: flex' makes it a flex container.">
 <style>
 .flex-container {
   background: #333;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-grid-expected.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid-ref.html
similarity index 94%
rename from third_party/blink/web_tests/html/details_summary/summary-display-grid-expected.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid-ref.html
index b37e2254..a7c4c4c0 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-grid-expected.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid-ref.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
 <style>
 .grid-container {
   display: grid;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-grid.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid.html
similarity index 75%
rename from third_party/blink/web_tests/html/details_summary/summary-display-grid.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid.html
index 94d2527..934b4ff 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-grid.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-grid.html
@@ -1,4 +1,10 @@
 <!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: summary with 'display: grid'</title>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
+<link rel="match" href="summary-display-grid-ref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements">
+<meta name="assert" content="Checks that styling a <summary> with 'display: grid' makes it a grid container.">
 <style>
 .grid-container {
   display: grid;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-inline-flex-expected.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex-ref.html
similarity index 96%
rename from third_party/blink/web_tests/html/details_summary/summary-display-inline-flex-expected.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex-ref.html
index 1c5be6f..25a9b315f 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-inline-flex-expected.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex-ref.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
 <style>
 .flex-container {
   background: #333;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-inline-flex.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex.html
similarity index 84%
rename from third_party/blink/web_tests/html/details_summary/summary-display-inline-flex.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex.html
index da4d31d..2c935e4 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-inline-flex.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-flex.html
@@ -1,4 +1,10 @@
 <!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: summary with 'display: inline-flex'</title>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
+<link rel="match" href="summary-display-inline-flex-ref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements">
+<meta name="assert" content="Checks that styling a <summary> with 'display: inline-flex' makes it a flex container.">
 <style>
 .flex-container {
   background: #333;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-inline-grid-expected.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid-ref.html
similarity index 94%
rename from third_party/blink/web_tests/html/details_summary/summary-display-inline-grid-expected.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid-ref.html
index fc7add0..f6a8b04 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-inline-grid-expected.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid-ref.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
 <style>
 .grid-container {
   display: inline-grid;
diff --git a/third_party/blink/web_tests/html/details_summary/summary-display-inline-grid.html b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid.html
similarity index 74%
rename from third_party/blink/web_tests/html/details_summary/summary-display-inline-grid.html
rename to third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid.html
index 11d32be..3578f05 100644
--- a/third_party/blink/web_tests/html/details_summary/summary-display-inline-grid.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/the-details-element/summary-display-inline-grid.html
@@ -1,4 +1,10 @@
 <!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: summary with 'display: inline-grid'</title>
+<link rel="author" title="Xing Xu" href="mailto:xing.xu@intel.com">
+<link rel="match" href="summary-display-inline-grid-ref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements">
+<meta name="assert" content="Checks that styling a <summary> with 'display: inline-grid' makes it a grid container.">
 <style>
 .grid-container {
   display: inline-grid;
diff --git a/third_party/blink/web_tests/external/wpt/reporting/path-absolute-endpoint.https.sub.html b/third_party/blink/web_tests/external/wpt/reporting/path-absolute-endpoint.https.sub.html
index 6abc5ee5..ecd44c35 100644
--- a/third_party/blink/web_tests/external/wpt/reporting/path-absolute-endpoint.https.sub.html
+++ b/third_party/blink/web_tests/external/wpt/reporting/path-absolute-endpoint.https.sub.html
@@ -37,7 +37,7 @@
           assert_equals(reports[0].body.sourceFile, location.href);
           assert_equals(reports[0].body.sample, "");
           assert_equals(reports[0].body.disposition, "enforce");
-          assert_equals(reports[0].body.statusCode, 0);
+          assert_equals(reports[0].body.statusCode, 200);
           assert_equals(reports[0].body.lineNumber, 61);
           assert_equals(reports[0].body.columnNumber, 0);
         });
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index d8737e4e..12adf3a 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -6799,6 +6799,9 @@
   <int value="46" label="Foreground cache limit"/>
   <int value="47" label="Browsing instance not swapped"/>
   <int value="48" label="Disabled for delegate"/>
+  <int value="49"
+      label="BFCache-Opt-In header not present, or does not include `unload`
+             token, and an experimental config which requires it is active"/>
 </enum>
 
 <enum name="BackForwardCacheReloadsAfterHistoryNavigation">
@@ -38285,6 +38288,27 @@
       label="Search canceled because the search backend isn't available"/>
 </enum>
 
+<enum name="HermesResponseStatus">
+  <summary>
+    Statuses returned by Hermes, the Chrome OS daemon process which configures
+    eSIM profiles a device's hardware.
+  </summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="Error: Already disabled"/>
+  <int value="2" label="Error: Already enabled"/>
+  <int value="3" label="Error: Invalid activation code"/>
+  <int value="4" label="Error: Invalid ICCID"/>
+  <int value="5" label="Error: Invalid parameter"/>
+  <int value="6" label="Error: Need confirmation code"/>
+  <int value="7" label="Error: Send notification failure"/>
+  <int value="8" label="Error: Test profile in prod"/>
+  <int value="9" label="Error: Unknown"/>
+  <int value="10" label="Error: Unsupported"/>
+  <int value="11" label="Error: Wrong state"/>
+  <int value="12" label="Error: Invalid response"/>
+  <int value="13" label="Error: No response"/>
+</enum>
+
 <enum name="HIDContinueScenarioType">
   <summary>Possible detected devices combination on leaving dialog</summary>
   <int value="0" label="Pointing device only detected."/>
@@ -45813,6 +45837,7 @@
   <int value="-793383355" label="StrictOriginIsolation:enabled"/>
   <int value="-792785226" label="TemporaryUnexpireFlagsM78:disabled"/>
   <int value="-792079435" label="EnableAppsGridGapFeature:disabled"/>
+  <int value="-791778534" label="LauncherQueryHighlighting:enabled"/>
   <int value="-790900615" label="NtpShoppingTasksModule:disabled"/>
   <int value="-790036192" label="overscroll-start-threshold"/>
   <int value="-787969387" label="HTTPSServerPreviewsUsingURLLoader:enabled"/>
@@ -47012,6 +47037,7 @@
       label="AutofillImportNonFocusableCreditCardForms:enabled"/>
   <int value="313253630" label="AutofillRefreshStyleAndroid:enabled"/>
   <int value="313303258" label="WebPaymentsModifiers:disabled"/>
+  <int value="315602034" label="LauncherQueryHighlighting:disabled"/>
   <int value="316182183" label="MediaDocumentDownloadButton:disabled"/>
   <int value="317432596" label="DisplayLocking:disabled"/>
   <int value="317889969" label="AutofillAddressProfileSavePrompt:disabled"/>
diff --git a/tools/metrics/histograms/histograms_xml/apps/histograms.xml b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
index e226a09..26f0820 100644
--- a/tools/metrics/histograms/histograms_xml/apps/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
@@ -1355,6 +1355,31 @@
   </summary>
 </histogram>
 
+<histogram name="Apps.AppsCount.{AppType}" units="Apps"
+    expires_after="2021-10-28">
+  <owner>dominickn@chromium.org</owner>
+  <owner>nancylingwang@chromium.org</owner>
+  <summary>
+    The total number of installed {AppType} for each app type in Chrome OS. This
+    is logged when more than 24 hours pass after last log, or during the system
+    startup phase if more than 24 hours passed after last log. This histogram is
+    capped at 1000; values above this go into the overflow bucket.
+  </summary>
+  <token key="AppType">
+    <variant name="Arc" summary="Android apps"/>
+    <variant name="Borealis" summary="Borealis apps"/>
+    <variant name="BuiltIn" summary="BuiltIn apps"/>
+    <variant name="ChromeApp" summary="Chrome apps"/>
+    <variant name="Crostini" summary="Crostini apps"/>
+    <variant name="MacOs" summary="MacOs apps"/>
+    <variant name="PluginVm" summary="Plugin VM app"/>
+    <variant name="RemoteApp" summary="Remote apps"/>
+    <variant name="StandaloneBrowser" summary="Standalone browser"/>
+    <variant name="SystemWebApp" summary="System web apps"/>
+    <variant name="WebApp" summary="Web apps"/>
+  </token>
+</histogram>
+
 <histogram name="Apps.AppShimErrorVersion" units="units" expires_after="M78">
   <owner>jackhou@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
index 9224abb3..749c9603 100644
--- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
@@ -611,6 +611,8 @@
   <token key="NudgeType">
     <variant name="NewFeatureBadge" summary="new feature badge"/>
     <variant name="OnboardingNudge" summary="onboarding nudge"/>
+    <variant name="ScreenshotNotificationNudge"
+        summary="screenshot notification nudge"/>
     <variant name="ZeroStateNudge" summary="zero state nudge"/>
   </token>
 </histogram>
@@ -627,6 +629,8 @@
   <token key="NudgeType">
     <variant name="NewFeatureBadge" summary="new feature badge"/>
     <variant name="OnboardingNudge" summary="onboarding nudge"/>
+    <variant name="ScreenshotNotificationNudge"
+        summary="screenshot notification nudge"/>
     <variant name="ZeroStateNudge" summary="zero state nudge"/>
   </token>
   <token key="Action">
diff --git a/tools/metrics/histograms/histograms_xml/network/histograms.xml b/tools/metrics/histograms/histograms_xml/network/histograms.xml
index 7ffa43c..60e8892 100644
--- a/tools/metrics/histograms/histograms_xml/network/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/network/histograms.xml
@@ -130,6 +130,39 @@
   </summary>
 </histogram>
 
+<histogram name="Network.Cellular.ESim.InstallPendingProfile.Result"
+    enum="HermesResponseStatus" expires_after="2022-03-01">
+  <owner>azeemarshad@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <owner>cros-connectivity@google.com</owner>
+  <summary>
+    Tracks the success rate of installing a &quot;pending&quot; eSIM profile
+    found via SM-DS. SM-DS provides all profiles which a carrier has associated
+    with a device's EID; once this occurs, the user has the chance to install
+    one of these pending profiles via the UI. The installation process involves
+    making a network request to the cellular carrier and downloading a profile
+    to the device.
+
+    Emitted once the operation completes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Cellular.ESim.InstallViaQrCode.Result"
+    enum="HermesResponseStatus" expires_after="2022-03-01">
+  <owner>azeemarshad@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <owner>cros-connectivity@google.com</owner>
+  <summary>
+    Tracks the success rate of installing an eSIM profile via a QR code. During
+    this process, the user can either scan a QR code by using the device's
+    webcam or can enter the QR code's decoded contents into a text field
+    manually. Once this occurs, the device contacts the cellular carrier and
+    downloads a profile to the device.
+
+    Emitted once the operation completes.
+  </summary>
+</histogram>
+
 <histogram name="Network.Cellular.ESim.ProfileDiscovery.Latency" units="ms"
     expires_after="2022-03-01">
   <owner>azeemarshad@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index ccec1c0f7..bfd35a6 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,16 +1,16 @@
 {
     "trace_processor_shell": {
         "win": {
-            "hash": "420daabcb280c424a32d12a86da6dfb0bee3040f",
-            "remote_path": "perfetto_binaries/trace_processor_shell/win/eabc2f4aab92456471eaea253c0d6d9cc2bb5b3b/trace_processor_shell.exe"
+            "hash": "4b81d55c6b8006ceb165784d1105c8ac1deba9ef",
+            "remote_path": "perfetto_binaries/trace_processor_shell/win/ea617741a1bcc0951495c6f8fcee219e1fc563d0/trace_processor_shell.exe"
         },
         "mac": {
-            "hash": "ae04e80011f5918c2c3ec673c3c553d8a4698f18",
-            "remote_path": "perfetto_binaries/trace_processor_shell/mac/e01ad9a6a83bd8df88dc01bc86fd0ec9080296c7/trace_processor_shell"
+            "hash": "e5775e335deac073cfa3ddfb0d86952f9852801f",
+            "remote_path": "perfetto_binaries/trace_processor_shell/mac/ea617741a1bcc0951495c6f8fcee219e1fc563d0/trace_processor_shell"
         },
         "linux": {
-            "hash": "cbb9056ab2d4559ed050b53b175b17370db1429c",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/ee1e7359d1d243b3f4059a659c2bb0684c2b3fd0/trace_processor_shell"
+            "hash": "1b561da8a652ea547a1e9373542a1a88af9d4de4",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/ea617741a1bcc0951495c6f8fcee219e1fc563d0/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json b/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
index d496112..3836755d9 100644
--- a/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
+++ b/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
@@ -4,6 +4,9 @@
             "system_health.common_mobile": {
                 "abridged": false
             },
+            "system_health.memory_mobile": {
+                "abridged": false
+            },
             "jetstream": {
                 "abridged": false
             },
@@ -11,7 +14,20 @@
                 "abridged": false
             },
             "rendering.mobile": {
-                "end": 176,
+                "sections": [
+                    {
+                        "begin": 0,
+                        "end": 32
+                    },
+                    {
+                        "begin": 46,
+                        "end": 47
+                    },
+                    {
+                        "begin": 86,
+                        "end": 87
+                    }
+                ],
                 "abridged": false
             },
             "speedometer2": {
@@ -24,19 +40,18 @@
             "system_health.common_mobile": {
                 "abridged": false
             },
+            "system_health.memory_mobile": {
+                "abridged": false
+            },
             "rendering.mobile": {
                 "sections": [
                     {
-                        "begin": 46,
-                        "end": 47
+                        "begin": 32,
+                        "end": 67
                     },
                     {
                         "begin": 86,
                         "end": 87
-                    },
-                    {
-                        "begin": 176,
-                        "end": 347
                     }
                 ],
                 "abridged": false
@@ -51,6 +66,29 @@
             "system_health.common_mobile": {
                 "abridged": false
             },
+            "system_health.memory_mobile": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "sections": [
+                    {
+                        "begin": 46,
+                        "end": 47
+                    },
+                    {
+                        "begin": 67,
+                        "end": 103
+                    }
+                ],
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            }
+        }
+    },
+    "3": {
+        "benchmarks": {
             "rendering.mobile": {
                 "sections": [
                     {
@@ -62,7 +100,7 @@
                         "end": 87
                     },
                     {
-                        "begin": 347,
+                        "begin": 103,
                         "end": 419
                     }
                 ],
@@ -74,48 +112,23 @@
             "startup.mobile": {
                 "abridged": false
             },
-            "system_health.memory_mobile": {
-                "end": 25,
-                "abridged": false
-            }
-        }
-    },
-    "3": {
-        "benchmarks": {
-            "system_health.memory_mobile": {
-                "begin": 25,
-                "abridged": false
-            },
             "system_health.scroll_jank_mobile": {
                 "abridged": false
             },
             "v8.browsing_mobile": {
                 "abridged": false
-            },
-            "rendering.mobile": {
-                "sections": [
-                    {
-                        "begin": 46,
-                        "end": 47
-                    },
-                    {
-                        "begin": 86,
-                        "end": 87
-                    }
-                ],
-                "abridged": false
             }
         }
     },
     "extra_infos": {
-        "num_stories": 775,
-        "predicted_min_shard_time": 8180.0,
-        "predicted_min_shard_index": 2,
-        "predicted_max_shard_time": 8370.0,
+        "num_stories": 925,
+        "predicted_min_shard_time": 12396.0,
+        "predicted_min_shard_index": 0,
+        "predicted_max_shard_time": 12465.0,
         "predicted_max_shard_index": 3,
-        "shard #0": 8286.0,
-        "shard #1": 8294.0,
-        "shard #2": 8180.0,
-        "shard #3": 8370.0
+        "shard #0": 12396.0,
+        "shard #1": 12416.0,
+        "shard #2": 12418.0,
+        "shard #3": 12465.0
     }
 }
\ No newline at end of file
diff --git a/tools/perf/cross_device_test_config.py b/tools/perf/cross_device_test_config.py
index 0ad6419..49bf646 100644
--- a/tools/perf/cross_device_test_config.py
+++ b/tools/perf/cross_device_test_config.py
@@ -29,6 +29,7 @@
             'canvas_animation_no_clear': 4
         },
         'system_health.common_mobile': 3,
+        'system_health.memory_mobile': 3,
     },
     'android-pixel2-perf': {
         'system_health.common_mobile': {
diff --git a/tools/perf/page_sets/rendering/motionmark.py b/tools/perf/page_sets/rendering/motionmark.py
index ac39b626..5eae753 100644
--- a/tools/perf/page_sets/rendering/motionmark.py
+++ b/tools/perf/page_sets/rendering/motionmark.py
@@ -23,6 +23,9 @@
         shared_page_state_class=shared_page_state_class,
         name_suffix=name_suffix,
         extra_browser_args=['--report-silk-details', '--disable-top-sites'])
+    self._score = 0
+    self._scoreLowerBound = 0
+    self._scoreUpperBound = 0
 
   def RunNavigateSteps(self, action_runner):
     action_runner.Navigate(self.url)
@@ -32,12 +35,33 @@
   def RunPageInteractions(self, action_runner):
     action_runner.Wait(3)
     with action_runner.CreateInteraction('Filter'):
-      action_runner.Wait(5)
+      action_runner.Wait(20)
+      action_runner.WaitForJavaScriptCondition(
+          'window.benchmarkRunnerClient.results._results')
+      [score, lower, upper] = action_runner.EvaluateJavaScript(
+          '''[window.benchmarkRunnerClient.results.score,
+             window.benchmarkRunnerClient.results.scoreLowerBound,
+             window.benchmarkRunnerClient.results.scoreUpperBound]''')
+      self._score = score
+      self._scoreLowerBound = lower
+      self._scoreUpperBound = upper
 
     # Navigate to about:blank to stop rendering frames and let the device
     # cool down while the trace data for the story is processed.
     action_runner.Navigate('about:blank')
 
+  @property
+  def score(self):
+    return self._score
+
+  @property
+  def scoreLowerBound(self):
+    return self._scoreLowerBound
+
+  @property
+  def scoreUpperBound(self):
+    return self._scoreUpperBound
+
   @classmethod
   def GetUrl(cls, suite_name, test_name, complexity):
     # Strip unwanted characters from names
diff --git a/tools/perf/page_sets/rendering/rendering_shared_state.py b/tools/perf/page_sets/rendering/rendering_shared_state.py
index b642290..48b8a94 100644
--- a/tools/perf/page_sets/rendering/rendering_shared_state.py
+++ b/tools/perf/page_sets/rendering/rendering_shared_state.py
@@ -59,6 +59,15 @@
       self._EnsureScreenOn()
 
   def DidRunStory(self, results):
+    if (self.current_page.TAGS
+        and story_tags.MOTIONMARK in self.current_page.TAGS):
+      unit = 'unitless_biggerIsBetter'
+      results.AddMeasurement('motionmark', unit, [self.current_page.score])
+      results.AddMeasurement('motionmarkLower', unit,
+                             [self.current_page.scoreLowerBound])
+      results.AddMeasurement('motionmarkUpper', unit,
+                             [self.current_page.scoreUpperBound])
+
     if (self.current_page.TAGS and
         story_tags.KEY_IDLE_POWER in self.current_page.TAGS):
       try:
diff --git a/ui/gl/gl_surface_egl_x11.cc b/ui/gl/gl_surface_egl_x11.cc
index 8b48842..d85d999 100644
--- a/ui/gl/gl_surface_egl_x11.cc
+++ b/ui/gl/gl_surface_egl_x11.cc
@@ -4,7 +4,7 @@
 
 #include "ui/gl/gl_surface_egl_x11.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 #include "ui/base/x/x11_util.h"
 #include "ui/base/x/x11_xrandr_interval_only_vsync_provider.h"
 #include "ui/gfx/x/xproto.h"
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
index f593877..8c612b66 100644
--- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -89,7 +89,7 @@
     bool status = drm_->plane_manager()->Commit(std::move(commit_request),
                                                 DRM_MODE_ATOMIC_ALLOW_MODESET);
 
-    for (const ui::CrtcCommitRequest& crtc_request : commit_request)
+    for (const ui::CrtcCommitRequest& crtc_request : request_for_update)
       controller->UpdateState(crtc_request);
 
     return status;
diff --git a/ui/ozone/platform/drm/host/drm_cursor.cc b/ui/ozone/platform/drm/host/drm_cursor.cc
index 93c99fdf..d0fded5 100644
--- a/ui/ozone/platform/drm/host/drm_cursor.cc
+++ b/ui/ozone/platform/drm/host/drm_cursor.cc
@@ -72,7 +72,7 @@
 }
 
 gfx::Point DrmCursor::GetBitmapLocationLocked() {
-  return gfx::ToFlooredPoint(location_) - bitmap_->hotspot().OffsetFromOrigin();
+  return gfx::ToFlooredPoint(location_) - cursor_->hotspot().OffsetFromOrigin();
 }
 
 void DrmCursor::SetCursor(gfx::AcceleratedWidget window,
@@ -84,10 +84,10 @@
 
   base::AutoLock lock(lock_);
 
-  if (window_ != window || bitmap_ == platform_cursor)
+  if (window_ != window || cursor_ == platform_cursor)
     return;
 
-  bitmap_ = platform_cursor;
+  cursor_ = platform_cursor;
 
   SendCursorShowLocked();
 }
@@ -209,7 +209,7 @@
 
 bool DrmCursor::IsCursorVisible() {
   base::AutoLock lock(lock_);
-  return bitmap_ != nullptr && bitmap_->type() != CursorType::kNone;
+  return cursor_ != nullptr && cursor_->type() != CursorType::kNone;
 }
 
 gfx::PointF DrmCursor::GetLocation() {
@@ -242,13 +242,13 @@
 }
 
 void DrmCursor::SendCursorShowLocked() {
-  if (!bitmap_ || bitmap_->type() == CursorType::kNone) {
+  if (!cursor_ || cursor_->type() == CursorType::kNone) {
     SendCursorHideLocked();
     return;
   }
 
-  CursorSetLockTested(window_, bitmap_->bitmaps(), GetBitmapLocationLocked(),
-                      bitmap_->frame_delay());
+  CursorSetLockTested(window_, cursor_->bitmaps(), GetBitmapLocationLocked(),
+                      cursor_->frame_delay());
 }
 
 void DrmCursor::SendCursorHideLocked() {
@@ -257,7 +257,7 @@
 }
 
 void DrmCursor::SendCursorMoveLocked() {
-  if (!bitmap_ || bitmap_->type() == CursorType::kNone)
+  if (!cursor_ || cursor_->type() == CursorType::kNone)
     return;
 
   MoveLockTested(window_, GetBitmapLocationLocked());
diff --git a/ui/ozone/platform/drm/host/drm_cursor.h b/ui/ozone/platform/drm/host/drm_cursor.h
index a8e91bcb..3562826 100644
--- a/ui/ozone/platform/drm/host/drm_cursor.h
+++ b/ui/ozone/platform/drm/host/drm_cursor.h
@@ -102,7 +102,7 @@
   gfx::Point GetBitmapLocationLocked();
 
   // The current cursor bitmap (immutable).
-  scoped_refptr<BitmapCursorOzone> bitmap_;
+  scoped_refptr<BitmapCursorOzone> cursor_;
 
   // The window under the cursor.
   gfx::AcceleratedWidget window_;
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc
index 9ab376b..dfbd68f 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -170,8 +170,8 @@
   // Whenever the window gets the pointer focus back, the cursor shape must be
   // updated. Otherwise, it is invalidated upon wl_pointer::leave and is not
   // restored by the Wayland compositor.
-  if (has_pointer_focus_ && bitmap_)
-    UpdateCursorShape(bitmap_);
+  if (has_pointer_focus_ && cursor_)
+    UpdateCursorShape(cursor_);
 }
 
 bool WaylandWindow::StartDrag(const ui::OSExchangeData& data,
@@ -315,7 +315,7 @@
 void WaylandWindow::SetCursor(scoped_refptr<PlatformCursor> platform_cursor) {
   DCHECK(platform_cursor);
 
-  if (bitmap_ == platform_cursor)
+  if (cursor_ == platform_cursor)
     return;
 
   UpdateCursorShape(BitmapCursorOzone::FromPlatformCursor(platform_cursor));
@@ -886,7 +886,7 @@
   }
   // The new cursor needs to be stored last to avoid deleting the old cursor
   // while it's still in use.
-  bitmap_ = cursor;
+  cursor_ = cursor;
 }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h
index c87c288..b375127 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.h
+++ b/ui/ozone/platform/wayland/host/wayland_window.h
@@ -296,7 +296,7 @@
   std::list<WaylandSubsurface*> subsurface_stack_below_;
 
   // The current cursor bitmap (immutable).
-  scoped_refptr<BitmapCursorOzone> bitmap_;
+  scoped_refptr<BitmapCursorOzone> cursor_;
 
   // Current bounds of the platform window. This is either initialized, or the
   // requested size by the Wayland compositor. When this is set in SetBounds(),
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
index bab2f73..f1ccb840 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller.cc
@@ -372,11 +372,8 @@
 
   // Update current cursor position, so it can be retrieved later on through
   // |Screen::GetCursorScreenPoint| API.
-  int32_t scale = dragged_window_->buffer_scale();
-  gfx::PointF scaled_location =
-      gfx::ScalePoint(event->location_f(), scale, scale);
   connection_->wayland_cursor_position()->OnCursorPositionChanged(
-      gfx::ToFlooredPoint(scaled_location));
+      event->location());
 
   // Notify listeners about window bounds change (i.e: re-positioning) event.
   // To do so, set the new bounds as per the motion event location and the drag
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
index b145ebef..71ed0e52 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
@@ -726,6 +726,73 @@
   EXPECT_EQ(State::kIdle, drag_controller()->state());
 }
 
+// Test that cursor position is using DIP coordinates and is updated correctly
+// on DragMotion event.
+TEST_P(WaylandWindowDragControllerTest, CursorPositionIsUpdatedOnMotion) {
+  // Creating an output with scale 1.
+  wl::TestOutput* output1 = server_.CreateAndInitializeOutput();
+  output1->SetRect(gfx::Rect(0, 0, 1920, 1080));
+  output1->SetScale(1);
+  Sync();
+
+  // Creating an output with scale 2.
+  wl::TestOutput* output2 = server_.CreateAndInitializeOutput();
+  output2->SetRect(gfx::Rect(0, 0, 1920, 1080));
+  output2->SetScale(2);
+  Sync();
+
+  std::vector<wl::TestOutput*> outputs = {output1, output2};
+
+  // Start a window drag session.
+  SendPointerEnter(window_.get(), &delegate_);
+  SendPointerPress(window_.get(), &delegate_, BTN_LEFT);
+  SendPointerMotion(window_.get(), &delegate_, {10, 10});
+  EXPECT_EQ(gfx::Point(10, 10), screen_->GetCursorScreenPoint());
+
+  auto* wayland_extension = GetWaylandExtension(*window_);
+  wayland_extension->StartWindowDraggingSessionIfNeeded();
+  EXPECT_EQ(State::kAttached, drag_controller()->state());
+
+  auto* move_loop_handler = GetWmMoveLoopHandler(*window_);
+  ASSERT_TRUE(move_loop_handler);
+  auto test = [](WaylandWindowDragControllerTest* self, WaylandScreen* screen,
+                 wl::TestWaylandServerThread* server, WaylandWindow* window,
+                 std::vector<wl::TestOutput*>* outputs,
+                 WmMoveLoopHandler* move_loop_handler) {
+    for (auto* output : *outputs) {
+      // Resetting cursor to the initial position.
+      self->SendDndMotion({10, 10});
+      self->Sync();
+      EXPECT_EQ(gfx::Point(10, 10), screen->GetCursorScreenPoint());
+
+      // Send the window to |output|.
+      wl::MockSurface* surface = server->GetObject<wl::MockSurface>(
+          window->root_surface()->GetSurfaceId());
+      ASSERT_TRUE(surface);
+      wl_surface_send_enter(surface->resource(), output->resource());
+      self->Sync();
+      EXPECT_EQ(output->GetScale(), window->buffer_scale());
+
+      self->SendDndMotion({20, 20});
+      self->Sync();
+
+      // GetCursorScreenPoint should return the same value regardless of buffer
+      // scale.
+      EXPECT_EQ(gfx::Point(20, 20), screen->GetCursorScreenPoint());
+      wl_surface_send_leave(surface->resource(), output->resource());
+    }
+
+    move_loop_handler->EndMoveLoop();
+  };
+
+  ScheduleTestTask(base::BindOnce(
+      test, base::Unretained(this), base::Unretained(screen_.get()),
+      base::Unretained(&server_), base::Unretained(window_.get()),
+      base::Unretained(&outputs), base::Unretained(move_loop_handler)));
+  EXPECT_CALL(delegate(), DispatchEvent(_)).Times(::testing::AtLeast(1));
+  move_loop_handler->RunMoveLoop({});
+}
+
 INSTANTIATE_TEST_SUITE_P(XdgVersionStableTest,
                          WaylandWindowDragControllerTest,
                          ::testing::Values(kXdgShellStable));
diff --git a/ui/ozone/platform/wayland/test/test_output.h b/ui/ozone/platform/wayland/test/test_output.h
index a44c0157..f7a5033e 100644
--- a/ui/ozone/platform/wayland/test/test_output.h
+++ b/ui/ozone/platform/wayland/test/test_output.h
@@ -22,6 +22,7 @@
 
   const gfx::Rect GetRect() { return rect_; }
   void SetRect(const gfx::Rect& rect);
+  int32_t GetScale() const { return scale_; }
   void SetScale(int32_t factor);
 
   void Flush();
diff --git a/ui/views/accessibility/widget_ax_tree_id_map.cc b/ui/views/accessibility/widget_ax_tree_id_map.cc
index e62dfa3..617b771 100644
--- a/ui/views/accessibility/widget_ax_tree_id_map.cc
+++ b/ui/views/accessibility/widget_ax_tree_id_map.cc
@@ -4,7 +4,7 @@
 
 #include "ui/views/accessibility/widget_ax_tree_id_map.h"
 
-#include "base/stl_util.h"
+#include "base/containers/contains.h"
 
 namespace views {
 
diff --git a/ui/views/controls/views_text_services_context_menu_base.cc b/ui/views/controls/views_text_services_context_menu_base.cc
index ba7f725a..62fac34 100644
--- a/ui/views/controls/views_text_services_context_menu_base.cc
+++ b/ui/views/controls/views_text_services_context_menu_base.cc
@@ -54,8 +54,11 @@
     *accelerator = ui::Accelerator(ui::VKEY_SPACE,
                                    ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN);
     return true;
+#elif BUILDFLAG(IS_CHROMEOS_ASH)
+    *accelerator = ui::Accelerator(ui::VKEY_SPACE,
+                                   ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN);
+    return true;
 #else
-    // TODO(crbug.com/887660): Add accelerator key for Chrome OS.
     return false;
 #endif
   }
diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc
index 1d61935f..da39df7 100644
--- a/ui/views/corewm/tooltip_controller.cc
+++ b/ui/views/corewm/tooltip_controller.cc
@@ -192,8 +192,22 @@
     return;
   }
   switch (event->type()) {
-    case ui::ET_MOUSE_CAPTURE_CHANGED:
     case ui::ET_MOUSE_EXITED:
+      // TODO(bebeaudr): Keyboard-triggered tooltips that show up right where
+      // the cursor currently is are hidden as soon as they show up because of
+      // this event. Handle this case differently to fix the issue.
+      //
+      // Whenever a tooltip is closed, an ET_MOUSE_EXITED event is fired, even
+      // if the cursor is not in the tooltip's window. Make sure that these
+      // mouse exited events don't interfere with keyboard triggered tooltips by
+      // returning early.
+      if (state_manager_->tooltip_parent_window() &&
+          state_manager_->tooltip_trigger() == TooltipTrigger::kKeyboard) {
+        return;
+      }
+      SetObservedWindow(nullptr);
+      break;
+    case ui::ET_MOUSE_CAPTURE_CHANGED:
     case ui::ET_MOUSE_MOVED:
     case ui::ET_MOUSE_DRAGGED: {
       last_mouse_loc_ = event->location();
diff --git a/ui/views/corewm/tooltip_controller_unittest.cc b/ui/views/corewm/tooltip_controller_unittest.cc
index a28a232..e014678f 100644
--- a/ui/views/corewm/tooltip_controller_unittest.cc
+++ b/ui/views/corewm/tooltip_controller_unittest.cc
@@ -684,6 +684,52 @@
   EXPECT_EQ(nullptr, helper_->GetTooltipParentWindow());
 }
 
+TEST_F(TooltipControllerTest,
+       KeyboardTriggeredTooltipStaysVisibleOnMouseExitedEvent) {
+  std::u16string expected_tooltip = u"Tooltip Text";
+
+  wm::SetTooltipText(GetWindow(), &expected_tooltip);
+  view_->set_tooltip_text(expected_tooltip);
+  EXPECT_EQ(std::u16string(), helper_->GetTooltipText());
+  EXPECT_EQ(nullptr, helper_->GetTooltipParentWindow());
+
+  // For this test to execute properly, make sure that the cursor location is
+  // somewhere out of the |view_|, different than (0, 0). This shouldn't show
+  // the tooltip.
+  gfx::Point off_view_point = view_->bounds().bottom_right();
+  off_view_point.Offset(1, 1);
+  generator_->MoveMouseRelativeTo(widget_->GetNativeWindow(), off_view_point);
+  EXPECT_FALSE(helper_->IsTooltipVisible());
+
+  // Trigger the tooltip from the keyboard.
+  helper_->controller()->UpdateTooltipFromKeyboard(
+      view_->ConvertRectToWidget(view_->bounds()), GetWindow());
+
+  EXPECT_EQ(expected_tooltip, wm::GetTooltipText(GetWindow()));
+  EXPECT_EQ(expected_tooltip, helper_->GetTooltipText());
+  EXPECT_EQ(GetWindow(), helper_->GetTooltipParentWindow());
+  EXPECT_TRUE(helper_->IsTooltipVisible());
+  EXPECT_EQ(helper_->state_manager()->tooltip_trigger(),
+            TooltipTrigger::kKeyboard);
+
+  // Sending a mouse exited event shouldn't hide a keyboard triggered tooltip.
+  generator_->SendMouseExit();
+  EXPECT_TRUE(helper_->IsTooltipVisible());
+
+  helper_->HideAndReset();
+  expected_tooltip = u"Tooltip Text 2";
+  EXPECT_FALSE(helper_->IsTooltipVisible());
+
+  // However, a cursor triggered tooltip should still be hidden by a mouse
+  // exited event.
+  generator_->MoveMouseRelativeTo(widget_->GetNativeWindow(),
+                                  view_->bounds().CenterPoint());
+  EXPECT_TRUE(helper_->IsTooltipVisible());
+
+  generator_->SendMouseExit();
+  EXPECT_FALSE(helper_->IsTooltipVisible());
+}
+
 namespace {
 
 // Returns the index of |window| in its parent's children.
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 8bb2131..4952fbd 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -929,6 +929,9 @@
 
 void Widget::ThemeChanged() {
   root_view_->ThemeChanged();
+
+  for (WidgetObserver& observer : observers_)
+    observer.OnWidgetThemeChanged(this);
 }
 
 void Widget::DeviceScaleFactorChanged(float old_device_scale_factor,
diff --git a/ui/views/widget/widget_observer.h b/ui/views/widget/widget_observer.h
index 51adacf..4050dd33 100644
--- a/ui/views/widget/widget_observer.h
+++ b/ui/views/widget/widget_observer.h
@@ -49,6 +49,8 @@
   virtual void OnWidgetBoundsChanged(Widget* widget,
                                      const gfx::Rect& new_bounds) {}
 
+  virtual void OnWidgetThemeChanged(Widget* widget) {}
+
  protected:
   ~WidgetObserver() override = default;
 };
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index 9ee094d..3c00db3 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -277,8 +277,6 @@
     "browser/ssl_error_controller_client.h",
     "browser/stateful_ssl_host_state_delegate_factory.cc",
     "browser/stateful_ssl_host_state_delegate_factory.h",
-    "browser/subresource_filter_client_impl.cc",
-    "browser/subresource_filter_client_impl.h",
     "browser/subresource_filter_profile_context_factory.cc",
     "browser/subresource_filter_profile_context_factory.h",
     "browser/system_network_context_manager.cc",
@@ -299,6 +297,8 @@
     "browser/url_bar/url_bar_controller_impl.h",
     "browser/web_contents_view_delegate_impl.cc",
     "browser/web_contents_view_delegate_impl.h",
+    "browser/web_data_service_factory.cc",
+    "browser/web_data_service_factory.h",
     "browser/weblayer_browser_interface_binders.cc",
     "browser/weblayer_browser_interface_binders.h",
     "browser/weblayer_features.cc",
@@ -490,6 +490,7 @@
     "//components/web_cache/browser",
     "//components/webapps/browser",
     "//components/webapps/renderer",
+    "//components/webdata_services",
     "//components/webrtc",
     "//content:content_resources",
     "//content:dev_ui_content_resources",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS
index abfd830..0085849 100644
--- a/weblayer/browser/DEPS
+++ b/weblayer/browser/DEPS
@@ -88,6 +88,7 @@
   "+components/variations",
   "+components/version_info",
   "+components/web_cache/browser",
+  "+components/webdata_services",
   "+components/webapps/browser",
   "+components/webrtc",
   "+content/public",
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/AutofillTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/AutofillTest.java
index e62d5f0..8e3e2c08 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/AutofillTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/AutofillTest.java
@@ -56,8 +56,15 @@
         mEventsObserved = new ArrayList<>();
         mHelper = new CallbackHelper();
         mActivity = mActivityTestRule.launchShell(new Bundle());
+        // There is no way to talk to TestWebLayer before the WebLayer is created.
+        // TestAutofillManagerWrapper can only replace AutofillProvider's AutofillMangerWrapper
+        // after initialization is done. So this test can't be used to test AutofillProvider's
+        // initialization. As WebLayer doesn't have specific code in AutofillProvider
+        // initialization, the AutofillProvider initialization is sufficiently tested via
+        // AwAutofillTest.
         TestWebLayer.getTestWebLayer(mActivity.getApplicationContext())
-                .notifyOfAutofillEvents(null, () -> mHelper.notifyCalled(), mEventsObserved);
+                .notifyOfAutofillEvents(
+                        mActivity.getBrowser(), () -> mHelper.notifyCalled(), mEventsObserved);
         mWebServer = TestWebServer.start();
     }
 
@@ -93,7 +100,7 @@
 
         // Load the test page.
         mActivityTestRule.navigateAndWait(url);
-
+        int callCount = mHelper.getCallCount();
         // Select the "text1" element.
         mActivityTestRule.executeScriptSync("document.getElementById('text1').select();", false);
         // Press "a" to trigger Autofill.
@@ -108,7 +115,7 @@
 
         // Wait for Autofill events.
         mHelper.waitForCallback(
-                /* currentCallCount */ 0, /* numberOfCallsToWaitFor */ expected.size(),
+                /* currentCallCount */ callCount, /* numberOfCallsToWaitFor */ expected.size(),
                 CallbackHelper.WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
 
         Assert.assertEquals(expected, mEventsObserved);
diff --git a/weblayer/browser/browser_main_parts_impl.cc b/weblayer/browser/browser_main_parts_impl.cc
index c53a9514..3674755 100644
--- a/weblayer/browser/browser_main_parts_impl.cc
+++ b/weblayer/browser/browser_main_parts_impl.cc
@@ -44,6 +44,7 @@
 #include "weblayer/browser/subresource_filter_profile_context_factory.h"
 #include "weblayer/browser/translate_accept_languages_factory.h"
 #include "weblayer/browser/translate_ranker_factory.h"
+#include "weblayer/browser/web_data_service_factory.h"
 #include "weblayer/browser/webui/web_ui_controller_factory.h"
 #include "weblayer/grit/weblayer_resources.h"
 #include "weblayer/public/main.h"
@@ -132,6 +133,7 @@
     MediaRouterFactory::GetInstance();
   }
 #endif
+  WebDataServiceFactory::GetInstance();
 }
 
 void StopMessageLoop(base::OnceClosure quit_closure) {
diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn
index cc149c5..95f8540 100644
--- a/weblayer/browser/java/BUILD.gn
+++ b/weblayer/browser/java/BUILD.gn
@@ -275,6 +275,7 @@
     "//mojo/public/java:bindings_java",
     "//mojo/public/java:system_java",
     "//net/android:net_java",
+    "//services/data_decoder/public/cpp/android:safe_json_java",
     "//services/network/public/mojom:cookies_mojom_java",
     "//services/network/public/mojom:mojom_java",
     "//services/network/public/mojom:url_loader_base_java",
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
index eb8e5c0..d9ec7326 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
@@ -55,10 +55,12 @@
 import org.chromium.components.browser_ui.contacts_picker.ContactsPickerDialog;
 import org.chromium.components.browser_ui.photo_picker.DecoderServiceHost;
 import org.chromium.components.browser_ui.photo_picker.ImageDecoder;
+import org.chromium.components.browser_ui.photo_picker.PhotoPickerDelegateBase;
 import org.chromium.components.browser_ui.photo_picker.PhotoPickerDialog;
 import org.chromium.components.embedder_support.application.ClassLoaderContextWrapperFactory;
 import org.chromium.components.embedder_support.application.FirebaseConfig;
 import org.chromium.components.embedder_support.util.Origin;
+import org.chromium.components.payments.PaymentDetailsUpdateService;
 import org.chromium.content_public.browser.BrowserStartupController;
 import org.chromium.content_public.browser.ChildProcessCreationParams;
 import org.chromium.content_public.browser.ChildProcessLauncherHelper;
@@ -68,7 +70,6 @@
 import org.chromium.content_public.browser.SelectionPopupController;
 import org.chromium.net.NetworkChangeNotifier;
 import org.chromium.ui.base.PhotoPicker;
-import org.chromium.ui.base.PhotoPickerDelegate;
 import org.chromium.ui.base.PhotoPickerListener;
 import org.chromium.ui.base.ResourceBundle;
 import org.chromium.ui.base.SelectFileDialog;
@@ -326,21 +327,16 @@
                 });
 
         DecoderServiceHost.setIntentSupplier(() -> { return createImageDecoderServiceIntent(); });
-        SelectFileDialog.setPhotoPickerDelegate(new PhotoPickerDelegate() {
+        SelectFileDialog.setPhotoPickerDelegate(new PhotoPickerDelegateBase() {
             @Override
             public PhotoPicker showPhotoPicker(WindowAndroid windowAndroid,
                     PhotoPickerListener listener, boolean allowMultiple, List<String> mimeTypes) {
                 PhotoPickerDialog dialog = new PhotoPickerDialog(windowAndroid,
                         windowAndroid.getContext().get().getContentResolver(), listener,
-                        allowMultiple, /* animatedThumbnailsSupported = */ false, mimeTypes);
+                        allowMultiple, mimeTypes);
                 dialog.show();
                 return dialog;
             }
-
-            @Override
-            public boolean supportsVideos() {
-                return false;
-            }
         });
 
         performDexFixIfNecessary(packageInfo);
@@ -482,6 +478,12 @@
     }
 
     @Override
+    public IObjectWrapper createPaymentDetailsUpdateService() {
+        StrictModeWorkaround.apply();
+        return ObjectWrapper.wrap(new PaymentDetailsUpdateService());
+    }
+
+    @Override
     public void enumerateAllProfileNames(IObjectWrapper valueCallback) {
         StrictModeWorkaround.apply();
         final ValueCallback<String[]> callback =
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
index 14c7880..feb14c0 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IWebLayer.aidl
@@ -114,9 +114,12 @@
       in IRemoteFragmentClient remoteFragmentClient,
       in IObjectWrapper fragmentArgs) = 25;
 
-  // Creates an instance of GooglePayDataCallbacksService.
+  // Creates an instance of GooglePayDataCallbacksService. Added in Version 92.
   IObjectWrapper createGooglePayDataCallbacksService() = 26;
 
+  // Creates an instance of PaymentDetailsUpdateService. Added in Version 92.
+  IObjectWrapper createPaymentDetailsUpdateService() = 27;
+
   // WARNING: when choosing next value make sure you look back for the max, as
   // merges may mean the last function does not have the max value.
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/payments/test_support/WebLayerPaymentRequestBuilder.java b/weblayer/browser/java/org/chromium/weblayer_private/payments/test_support/WebLayerPaymentRequestBuilder.java
index a2b0eae..34d5319 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/payments/test_support/WebLayerPaymentRequestBuilder.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/payments/test_support/WebLayerPaymentRequestBuilder.java
@@ -13,6 +13,7 @@
 import org.chromium.components.payments.BrowserPaymentRequest;
 import org.chromium.components.payments.JourneyLogger;
 import org.chromium.components.payments.MojoPaymentRequestGateKeeper;
+import org.chromium.components.payments.PaymentAppFactoryInterface;
 import org.chromium.components.payments.PaymentRequestService;
 import org.chromium.components.payments.PaymentRequestSpec;
 import org.chromium.content_public.browser.RenderFrameHost;
@@ -195,4 +196,9 @@
         Mockito.doReturn(weakContext).when(window).getContext();
         return window;
     }
+
+    @Override
+    public PaymentAppFactoryInterface createAndroidPaymentAppFactory() {
+        return null;
+    }
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test/TestAutofillManagerWrapper.java b/weblayer/browser/java/org/chromium/weblayer_private/test/TestAutofillManagerWrapper.java
index c1f934f..b6dd414 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/test/TestAutofillManagerWrapper.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/test/TestAutofillManagerWrapper.java
@@ -9,6 +9,7 @@
 import android.view.View;
 import android.view.autofill.AutofillValue;
 
+import org.chromium.base.Log;
 import org.chromium.components.autofill.AutofillManagerWrapper;
 import org.chromium.weblayer_private.test_interfaces.AutofillEventType;
 
@@ -18,9 +19,13 @@
  * A test AutofillManagerWrapper for AutofillTest
  */
 public class TestAutofillManagerWrapper extends AutofillManagerWrapper {
+    public static final boolean DEBUG = false;
+    public static final String TAG = "AutofillTest";
+
     public TestAutofillManagerWrapper(
             Context context, Runnable onNewEvents, ArrayList<Integer> eventsObserved) {
         super(context);
+        if (DEBUG) Log.i(TAG, "TestAutofillManagerWrapper");
         mOnNewEvents = onNewEvents;
         mEventsObserved = eventsObserved;
     }
@@ -37,42 +42,49 @@
 
     @Override
     public void notifyVirtualViewEntered(View parent, int childId, Rect absBounds) {
+        if (DEBUG) Log.i(TAG, "notifyVirtualViewEntered");
         mEventsObserved.add(AutofillEventType.VIEW_ENTERED);
         mOnNewEvents.run();
     }
 
     @Override
     public void notifyVirtualViewExited(View parent, int childId) {
+        if (DEBUG) Log.i(TAG, "notifyVirtualViewExited");
         mEventsObserved.add(AutofillEventType.VIEW_EXITED);
         mOnNewEvents.run();
     }
 
     @Override
     public void notifyVirtualValueChanged(View parent, int childId, AutofillValue value) {
+        if (DEBUG) Log.i(TAG, "notifyVirtualValueChanged");
         mEventsObserved.add(AutofillEventType.VALUE_CHANGED);
         mOnNewEvents.run();
     }
 
     @Override
     public void commit(int submissionSource) {
+        if (DEBUG) Log.i(TAG, "commit");
         mEventsObserved.add(AutofillEventType.COMMIT);
         mOnNewEvents.run();
     }
 
     @Override
     public void cancel() {
+        if (DEBUG) Log.i(TAG, "cancel");
         mEventsObserved.add(AutofillEventType.CANCEL);
         mOnNewEvents.run();
     }
 
     @Override
     public void notifyNewSessionStarted(boolean hasServerPrediction) {
+        if (DEBUG) Log.i(TAG, "notifyNewSessionStarted");
         mEventsObserved.add(AutofillEventType.SESSION_STARTED);
         mOnNewEvents.run();
     }
 
     @Override
     public void onQueryDone(boolean success) {
+        if (DEBUG) Log.i(TAG, "onQueryDone " + success);
         mEventsObserved.add(AutofillEventType.QUERY_DONE);
         mOnNewEvents.run();
     }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
index c449af7..c345011 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
@@ -4,7 +4,6 @@
 
 package org.chromium.weblayer_private.test;
 
-import android.content.Context;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.view.View;
@@ -17,8 +16,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.annotations.UsedByReflection;
-import org.chromium.components.autofill.AutofillManagerWrapper;
-import org.chromium.components.autofill.AutofillProvider;
 import org.chromium.components.autofill.AutofillProviderTestHelper;
 import org.chromium.components.infobars.InfoBarAnimationListener;
 import org.chromium.components.infobars.InfoBarUiItem;
@@ -298,14 +295,11 @@
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             AutofillProviderTestHelper.disableDownloadServerForTesting();
-            AutofillProvider.setAutofillManagerWrapperFactoryForTesting(
-                    new AutofillProvider.AutofillManagerWrapperFactoryForTesting() {
-                        @Override
-                        public AutofillManagerWrapper create(Context context) {
-                            return new TestAutofillManagerWrapper(
-                                    context, unwrappedOnNewEvents, unwrappedEventsObserved);
-                        }
-                    });
+            BrowserImpl browserImpl = (BrowserImpl) browser;
+            TabImpl tab = browserImpl.getActiveTab();
+            tab.getAutofillProviderForTesting().replaceAutofillManagerWrapperForTesting(
+                    new TestAutofillManagerWrapper(browserImpl.getContext(), unwrappedOnNewEvents,
+                            unwrappedEventsObserved));
         });
     }
 
diff --git a/weblayer/browser/subresource_filter_client_impl.cc b/weblayer/browser/subresource_filter_client_impl.cc
deleted file mode 100644
index 6b57d3b0..0000000
--- a/weblayer/browser/subresource_filter_client_impl.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "weblayer/browser/subresource_filter_client_impl.h"
-
-#include <string>
-
-#include "base/macros.h"
-#include "build/build_config.h"
-#include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
-#include "components/subresource_filter/content/browser/ruleset_service.h"
-#include "components/subresource_filter/core/browser/subresource_filter_features.h"
-#include "components/subresource_filter/core/common/activation_decision.h"
-#include "components/subresource_filter/core/common/activation_scope.h"
-#include "components/subresource_filter/core/mojom/subresource_filter.mojom.h"
-#include "content/public/browser/navigation_handle.h"
-#include "content/public/browser/render_frame_host.h"
-#include "weblayer/browser/browser_process.h"
-#include "weblayer/browser/safe_browsing/safe_browsing_service.h"
-#include "weblayer/browser/subresource_filter_profile_context_factory.h"
-
-#if defined(OS_ANDROID)
-#include "components/safe_browsing/android/remote_database_manager.h"
-#include "weblayer/browser/infobar_service.h"
-#endif
-
-namespace safe_browsing {
-class SafeBrowsingDatabaseManager;
-}
-
-namespace weblayer {
-
-namespace {
-
-// Returns a scoped refptr to the SafeBrowsingService's database manager, if
-// available. Otherwise returns nullptr.
-const scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
-GetDatabaseManagerFromSafeBrowsingService() {
-#if defined(OS_ANDROID)
-  SafeBrowsingService* safe_browsing_service =
-      BrowserProcess::GetInstance()->GetSafeBrowsingService();
-  return safe_browsing_service
-             ? scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>(
-                   safe_browsing_service->GetSafeBrowsingDBManager())
-             : nullptr;
-#else
-  return nullptr;
-#endif
-}
-
-}  // namespace
-
-SubresourceFilterClientImpl::SubresourceFilterClientImpl() = default;
-SubresourceFilterClientImpl::~SubresourceFilterClientImpl() = default;
-
-// static
-void SubresourceFilterClientImpl::CreateThrottleManagerWithClientForWebContents(
-    content::WebContents* web_contents) {
-  subresource_filter::RulesetService* ruleset_service =
-      BrowserProcess::GetInstance()->subresource_filter_ruleset_service();
-  subresource_filter::VerifiedRulesetDealer::Handle* dealer =
-      ruleset_service ? ruleset_service->GetRulesetDealer() : nullptr;
-  subresource_filter::ContentSubresourceFilterThrottleManager::
-      CreateForWebContents(
-          web_contents, std::make_unique<SubresourceFilterClientImpl>(),
-          SubresourceFilterProfileContextFactory::GetForBrowserContext(
-              web_contents->GetBrowserContext()),
-  // Infobars are supported only on Android in WebLayer. This is not a
-  // problem as the subresource filter shows the infobar only on Android
-  // as well.
-#if defined(OS_ANDROID)
-          InfoBarService::FromWebContents(web_contents),
-#else
-          nullptr,
-#endif
-          GetDatabaseManagerFromSafeBrowsingService(), dealer);
-}
-
-}  // namespace weblayer
diff --git a/weblayer/browser/subresource_filter_client_impl.h b/weblayer/browser/subresource_filter_client_impl.h
deleted file mode 100644
index 0330b82..0000000
--- a/weblayer/browser/subresource_filter_client_impl.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_BROWSER_SUBRESOURCE_FILTER_CLIENT_IMPL_H_
-#define WEBLAYER_BROWSER_SUBRESOURCE_FILTER_CLIENT_IMPL_H_
-
-#include <memory>
-#include <utility>
-
-#include "components/subresource_filter/content/browser/subresource_filter_client.h"
-#include "url/gurl.h"
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-namespace subresource_filter {
-class ContentSubresourceFilterThrottleManager;
-}  // namespace subresource_filter
-
-namespace weblayer {
-
-// WebLayer implementation of SubresourceFilterClient. Instances are associated
-// with and owned by ContentSubresourceFilterThrottleManager instances.
-class SubresourceFilterClientImpl
-    : public subresource_filter::SubresourceFilterClient {
- public:
-  SubresourceFilterClientImpl();
-  ~SubresourceFilterClientImpl() override;
-
-  SubresourceFilterClientImpl(const SubresourceFilterClientImpl&) = delete;
-  SubresourceFilterClientImpl& operator=(const SubresourceFilterClientImpl&) =
-      delete;
-
-  // Creates a ContentSubresourceFilterThrottleManager and attaches it to
-  // |web_contents|, passing it an instance of this client and other
-  // embedder-level state.
-  static void CreateThrottleManagerWithClientForWebContents(
-      content::WebContents* web_contents);
-
-  // SubresourceFilterClient:
-  void OnNotificationShown() override {}
-
- private:
-  std::unique_ptr<subresource_filter::ContentSubresourceFilterThrottleManager>
-      throttle_manager_;
-};
-
-}  // namespace weblayer
-
-#endif  // WEBLAYER_BROWSER_SUBRESOURCE_FILTER_CLIENT_IMPL_H_
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc
index a752023..38ffa81 100644
--- a/weblayer/browser/tab_impl.cc
+++ b/weblayer/browser/tab_impl.cc
@@ -34,6 +34,8 @@
 #include "components/permissions/permission_result.h"
 #include "components/prefs/pref_service.h"
 #include "components/sessions/content/session_tab_helper.h"
+#include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
+#include "components/subresource_filter/content/browser/ruleset_service.h"
 #include "components/translate/core/browser/translate_manager.h"
 #include "components/ukm/content/source_url_recorder.h"
 #include "components/webapps/browser/installable/installable_manager.h"
@@ -78,7 +80,8 @@
 #include "weblayer/browser/persistence/browser_persister.h"
 #include "weblayer/browser/popup_navigation_delegate_impl.h"
 #include "weblayer/browser/profile_impl.h"
-#include "weblayer/browser/subresource_filter_client_impl.h"
+#include "weblayer/browser/safe_browsing/safe_browsing_service.h"
+#include "weblayer/browser/subresource_filter_profile_context_factory.h"
 #include "weblayer/browser/translate_client_impl.h"
 #include "weblayer/browser/weblayer_features.h"
 #include "weblayer/common/isolated_world_ids.h"
@@ -104,6 +107,7 @@
 #include "components/embedder_support/android/contextmenu/context_menu_builder.h"
 #include "components/embedder_support/android/delegate/color_chooser_android.h"
 #include "components/javascript_dialogs/tab_modal_dialog_manager.h"  // nogncheck
+#include "components/safe_browsing/android/remote_database_manager.h"
 #include "components/translate/core/browser/translate_manager.h"
 #include "ui/android/view_android.h"
 #include "ui/gfx/android/java_bitmap.h"
@@ -253,6 +257,46 @@
       : content::WebContentsObserver(web_contents) {}
 };
 
+// Returns a scoped refptr to the SafeBrowsingService's database manager, if
+// available. Otherwise returns nullptr.
+const scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
+GetDatabaseManagerFromSafeBrowsingService() {
+#if defined(OS_ANDROID)
+  SafeBrowsingService* safe_browsing_service =
+      BrowserProcess::GetInstance()->GetSafeBrowsingService();
+  return safe_browsing_service
+             ? scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>(
+                   safe_browsing_service->GetSafeBrowsingDBManager())
+             : nullptr;
+#else
+  return nullptr;
+#endif
+}
+
+// Creates a ContentSubresourceFilterThrottleManager for |web_contents|, passing
+// it the needed embedder-level state.
+void CreateContentSubresourceFilterThrottleManagerForWebContents(
+    content::WebContents* web_contents) {
+  subresource_filter::RulesetService* ruleset_service =
+      BrowserProcess::GetInstance()->subresource_filter_ruleset_service();
+  subresource_filter::VerifiedRulesetDealer::Handle* dealer =
+      ruleset_service ? ruleset_service->GetRulesetDealer() : nullptr;
+  subresource_filter::ContentSubresourceFilterThrottleManager::
+      CreateForWebContents(
+          web_contents,
+          SubresourceFilterProfileContextFactory::GetForBrowserContext(
+              web_contents->GetBrowserContext()),
+  // Infobars are supported only on Android in WebLayer. This is not a
+  // problem as the subresource filter shows the infobar only on Android
+  // as well.
+#if defined(OS_ANDROID)
+          InfoBarService::FromWebContents(web_contents),
+#else
+          nullptr,
+#endif
+          GetDatabaseManagerFromSafeBrowsingService(), dealer);
+}
+
 }  // namespace
 
 #if defined(OS_ANDROID)
@@ -327,7 +371,7 @@
   InfoBarService::CreateForWebContents(web_contents_.get());
 #endif
 
-  SubresourceFilterClientImpl::CreateThrottleManagerWithClientForWebContents(
+  CreateContentSubresourceFilterThrottleManagerForWebContents(
       web_contents_.get());
 
   sessions::SessionTabHelper::CreateForWebContents(
diff --git a/weblayer/browser/web_data_service_factory.cc b/weblayer/browser/web_data_service_factory.cc
new file mode 100644
index 0000000..e3214cf
--- /dev/null
+++ b/weblayer/browser/web_data_service_factory.cc
@@ -0,0 +1,56 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "weblayer/browser/web_data_service_factory.h"
+
+#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/notreached.h"
+#include "components/webdata_services/web_data_service_wrapper.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "weblayer/browser/i18n_util.h"
+
+namespace weblayer {
+
+namespace {
+
+// Callback to show error dialog on profile load error.
+void ProfileErrorCallback(WebDataServiceWrapper::ErrorType error_type,
+                          sql::InitStatus status,
+                          const std::string& diagnostics) {
+  NOTIMPLEMENTED();
+}
+
+}  // namespace
+
+WebDataServiceFactory::WebDataServiceFactory() = default;
+
+WebDataServiceFactory::~WebDataServiceFactory() = default;
+
+// static
+WebDataServiceFactory* WebDataServiceFactory::GetInstance() {
+  static base::NoDestructor<WebDataServiceFactory> instance;
+  return instance.get();
+}
+
+content::BrowserContext* WebDataServiceFactory::GetBrowserContextToUse(
+    content::BrowserContext* context) const {
+  return context;
+}
+
+KeyedService* WebDataServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  const base::FilePath& profile_path = context->GetPath();
+  return new WebDataServiceWrapper(profile_path, i18n::GetApplicationLocale(),
+                                   content::GetUIThreadTaskRunner({}),
+                                   base::BindRepeating(&ProfileErrorCallback));
+}
+
+bool WebDataServiceFactory::ServiceIsNULLWhileTesting() const {
+  return true;
+}
+
+}  // namespace weblayer
diff --git a/weblayer/browser/web_data_service_factory.h b/weblayer/browser/web_data_service_factory.h
new file mode 100644
index 0000000..99e1d793
--- /dev/null
+++ b/weblayer/browser/web_data_service_factory.h
@@ -0,0 +1,39 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBLAYER_BROWSER_WEB_DATA_SERVICE_FACTORY_H_
+#define WEBLAYER_BROWSER_WEB_DATA_SERVICE_FACTORY_H_
+
+#include "base/no_destructor.h"
+#include "components/webdata_services/web_data_service_wrapper_factory.h"
+
+namespace weblayer {
+
+// Singleton that owns all WebDataServiceWrappers and associates them with
+// Profiles.
+class WebDataServiceFactory
+    : public webdata_services::WebDataServiceWrapperFactory {
+ public:
+  WebDataServiceFactory(const WebDataServiceFactory&) = delete;
+  WebDataServiceFactory& operator=(const WebDataServiceFactory&) = delete;
+
+  static WebDataServiceFactory* GetInstance();
+
+ private:
+  friend class base::NoDestructor<WebDataServiceFactory>;
+
+  WebDataServiceFactory();
+  ~WebDataServiceFactory() override;
+
+  // |BrowserContextKeyedServiceFactory| methods:
+  content::BrowserContext* GetBrowserContextToUse(
+      content::BrowserContext* context) const override;
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* profile) const override;
+  bool ServiceIsNULLWhileTesting() const override;
+};
+
+}  // namespace weblayer
+
+#endif  // WEBLAYER_BROWSER_WEB_DATA_SERVICE_FACTORY_H_
diff --git a/weblayer/public/java/AndroidManifest.xml b/weblayer/public/java/AndroidManifest.xml
index 8b2b7f6..df5a0db 100644
--- a/weblayer/public/java/AndroidManifest.xml
+++ b/weblayer/public/java/AndroidManifest.xml
@@ -115,15 +115,25 @@
             </intent-filter>
         </service>
 
+        <!-- GooglePay payment app support -->
+        <meta-data
+            android:name="com.google.android.gms.wallet.api.enabled"
+            android:value="true" />
+
+        <!-- Service used by payment apps to notify the browser about changes in user selected
+             payment method, shipping address, or shipping option. -->
+        <service
+            android:name="org.chromium.weblayer.PaymentDetailsUpdateServiceWrapper"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
+            </intent-filter>
+        </service>
+
         <!-- Cast support -->
         <!-- TODO(crbug.com/1148410): remove this. -->
         <meta-data
             android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
             android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
-
-        <!-- GooglePay payment app support -->
-        <meta-data
-            android:name="com.google.android.gms.wallet.api.enabled"
-            android:value="true" />
     </application>
 </manifest>
diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn
index 3d23bdf..2308b18f 100644
--- a/weblayer/public/java/BUILD.gn
+++ b/weblayer/public/java/BUILD.gn
@@ -87,6 +87,7 @@
     "org/chromium/weblayer/ObserverList.java",
     "org/chromium/weblayer/OpenUrlCallback.java",
     "org/chromium/weblayer/Page.java",
+    "org/chromium/weblayer/PaymentDetailsUpdateServiceWrapper.java",
     "org/chromium/weblayer/PrerenderController.java",
     "org/chromium/weblayer/Profile.java",
     "org/chromium/weblayer/RemoteFragment.java",
diff --git a/weblayer/public/java/org/chromium/weblayer/PaymentDetailsUpdateServiceWrapper.java b/weblayer/public/java/org/chromium/weblayer/PaymentDetailsUpdateServiceWrapper.java
new file mode 100644
index 0000000..da5659e5
--- /dev/null
+++ b/weblayer/public/java/org/chromium/weblayer/PaymentDetailsUpdateServiceWrapper.java
@@ -0,0 +1,78 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.weblayer;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.os.RemoteException;
+
+import androidx.annotation.Nullable;
+
+import org.chromium.weblayer_private.interfaces.APICallException;
+import org.chromium.weblayer_private.interfaces.IObjectWrapper;
+import org.chromium.weblayer_private.interfaces.IWebLayer;
+import org.chromium.weblayer_private.interfaces.ObjectWrapper;
+
+/**
+ * A client-side service that wraps the impl-side PaymentDetailsUpdateService. WebLayer embedders
+ * export this service via //weblayer/public/java/AndroidManifest.xml so external payment apps can
+ * notify WebLayer of any updates to the selected payment details.
+ *
+ * @since 92
+ */
+public class PaymentDetailsUpdateServiceWrapper extends Service {
+    /** The impl-side of PaymentDetailsUpdateService. Can be null if WebLayer wasn't loaded yet. */
+    @Nullable
+    private Service mService;
+
+    @Override
+    public void onCreate() {
+        ThreadCheck.ensureOnUiThread();
+        Service service = createService();
+        if (service == null) {
+            stopSelf();
+            return;
+        }
+        mService = service;
+        mService.onCreate();
+    }
+
+    @Nullable
+    private Service createService() {
+        if (WebLayer.getSupportedMajorVersionInternal() < 92) {
+            throw new UnsupportedOperationException();
+        }
+
+        // WebLayer started the calling app so we assume WebLayer is still running. This service is
+        // not supposed to be started when WebLayer isn't running so we can safely ignore requests
+        // in that case.
+        if (!WebLayer.hasWebLayerInitializationStarted()) return null;
+        WebLayer webLayer = WebLayer.getLoadedWebLayer(this);
+        if (webLayer == null) return null;
+        IWebLayer iWebLayer = webLayer.getImpl();
+        if (iWebLayer == null) return null;
+
+        IObjectWrapper objectWrapper;
+        try {
+            objectWrapper = iWebLayer.createPaymentDetailsUpdateService();
+        } catch (RemoteException e) {
+            throw new APICallException(e);
+        }
+        if (objectWrapper == null) return null;
+        return ObjectWrapper.unwrap(objectWrapper, Service.class);
+    }
+
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (mService == null) return null;
+        try {
+            return mService.onBind(intent);
+        } catch (Exception e) {
+            throw new APICallException(e);
+        }
+    }
+}
diff --git a/weblayer/test/subresource_filter_browser_test_harness.cc b/weblayer/test/subresource_filter_browser_test_harness.cc
index b7f7859..8bcb7e61 100644
--- a/weblayer/test/subresource_filter_browser_test_harness.cc
+++ b/weblayer/test/subresource_filter_browser_test_harness.cc
@@ -14,7 +14,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "weblayer/browser/browser_process.h"
 #include "weblayer/browser/heavy_ad_service_factory.h"
-#include "weblayer/browser/subresource_filter_client_impl.h"
 #include "weblayer/browser/tab_impl.h"
 #include "weblayer/shell/browser/shell.h"
 #include "weblayer/test/weblayer_browser_test_utils.h"
diff --git a/weblayer/test/weblayer_browser_test_utils.cc b/weblayer/test/weblayer_browser_test_utils.cc
index 68e0b428..8774984 100644
--- a/weblayer/test/weblayer_browser_test_utils.cc
+++ b/weblayer/test/weblayer_browser_test_utils.cc
@@ -11,7 +11,6 @@
 #include "components/subresource_filter/content/browser/fake_safe_browsing_database_manager.h"
 #include "url/gurl.h"
 #include "weblayer/browser/browser_process.h"
-#include "weblayer/browser/subresource_filter_client_impl.h"
 #include "weblayer/browser/tab_impl.h"
 #include "weblayer/public/navigation_controller.h"
 #include "weblayer/public/tab.h"