diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a9c7e6948f4908a93920272bb2fcd9ea323d0b58..f9460804d8cb89b51c34d9d43ebbadb170d37710 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,6 +17,7 @@ build-docker: rules: - if: $CI_PIPELINE_SOURCE != "schedule" when: manual + allow_failure: false tags: - generic_privileged variables: @@ -34,7 +35,7 @@ build-docker: image: $CONTAINER_IMAGE rules: - if: $CI_PIPELINE_SOURCE != "schedule" - when: manual + needs: ["build-docker"] tags: - build-browser artifacts: diff --git a/Dockerfile b/Dockerfile index 604c8906a593ea967be212cd3634feb65d05586b..3560342c0c91d37cba861623fe5b09cab948bc1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,16 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 ENV CHROMIUM_DIR "/srv/chromium" -ENV CHROMIUM_VER "135.0.7049.100" +ENV CHROMIUM_VER "138.0.7204.50" +ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive \ - apt-get install -y software-properties-common && \ - add-apt-repository ppa:deadsnakes/ppa && \ - add-apt-repository ppa:git-core/ppa + apt-get install -y software-properties-common RUN dpkg --add-architecture i386 RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive \ - apt-get -f -y install sudo lsb-release cl-base64 bash wget apt-utils ccache jq python3.10 \ + apt-get -f -y install sudo lsb-release cl-base64 bash wget apt-utils ccache jq file \ python-is-python3 sed tzdata build-essential lib32gcc-9-dev g++-multilib dos2unix wiggle git curl RUN mkdir ${CHROMIUM_DIR} diff --git a/build.sh b/build.sh index cf2c491a02d506b275c904b0e6c639e1172db4a1..82452836e4d8d91f01b038d9b6d661e56d742888 100755 --- a/build.sh +++ b/build.sh @@ -103,18 +103,29 @@ setup_ccache() { patch() { cd $chromium_dir/src - echo ">> [$(date)] Applying cromite and /e/ patches" + echo ">> [$(date)] Applying cromite patches" cromite_patches_list=$(cat "${root_dir}/build/cromite_patches_list.txt") for file in $cromite_patches_list; do git am -C0 -3 --ignore-whitespace "${root_dir}/build/cromite_patches/$file" done + echo ">> [$(date)] Applying /e/ patches" + e_patches_list=$(cat "${root_dir}/build/e_patches_list.txt") for file in $e_patches_list; do git am -C0 -3 --ignore-whitespace "${root_dir}/build/e_patches/$file" done + echo ">> [$(date)] Applying third party patches" + + while read dir patch; do + [ -z "$dir" ] && continue # skip empty lines + cd $chromium_dir/src/third_party/$dir + git am -C0 -3 --ignore-whitespace "${root_dir}/build/third_party/$patch" + cd $chromium_dir/src + done < "${root_dir}/build/third_party_patches_list.txt" + # Rename Chrome to Browser rename diff --git a/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch b/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch index 438fb6423799bee41ac583086df456786918533d..4d7bbc8a0bf4e21653eb37d3933003713279e149 100644 --- a/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/cromite_patches/AImageReader-CFI-crash-mitigations.patch @@ -31,8 +31,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html gpu/config/gpu_util.cc | 8 ++++++++ gpu/config/gpu_workaround_list.txt | 1 + gpu/ipc/service/gpu_init.cc | 8 ++++++++ - gpu/ipc/service/stream_texture_android.cc | 10 +++++++++- - 12 files changed, 87 insertions(+), 1 deletion(-) + media/gpu/android/video_frame_factory_impl.cc | 4 +++- + 12 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc create mode 100644 cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc @@ -90,10 +90,10 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3268,6 +3268,10 @@ - "name": "enable-identity-in-auth-error", - "owners": [ "jlebel@chromium.org", "chrome-signin-team@google.com" ], - "expiry_milestone": 135 +@@ -3509,6 +3509,10 @@ + "chrome-signin-team@google.com" + ], + "expiry_milestone": 138 + },{ + "name": "enable-image-reader", // Bromite: do not expire + "owners": [ "vikassoni@chromium.org", "liberato@chromium.org" ], // flag @@ -119,7 +119,7 @@ new file mode 100644 diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json -@@ -2593,6 +2593,22 @@ +@@ -2613,6 +2613,22 @@ "no_downscaled_overlay_promotion" ] }, @@ -171,7 +171,7 @@ diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc -@@ -126,6 +126,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( +@@ -127,6 +127,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( #if !BUILDFLAG(IS_ANDROID) return kGpuFeatureStatusDisabled; #else @@ -215,7 +215,7 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc #endif #if BUILDFLAG(ENABLE_VULKAN) -@@ -692,6 +693,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, +@@ -687,6 +688,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, } #endif // BUILDFLAG(IS_WIN) @@ -229,24 +229,21 @@ diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc if (gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] != kGpuFeatureStatusEnabled || !InitializeVulkan()) { -diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc ---- a/gpu/ipc/service/stream_texture_android.cc -+++ b/gpu/ipc/service/stream_texture_android.cc -@@ -50,7 +50,15 @@ std::unique_ptr MakeCurrent( - } +diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc +--- a/media/gpu/android/video_frame_factory_impl.cc ++++ b/media/gpu/android/video_frame_factory_impl.cc +@@ -35,10 +35,12 @@ namespace { - TextureOwner::Mode GetTextureOwnerMode() { -- return base::android::EnableAndroidImageReader() -+ const bool a_image_reader_supported = -+ base::android::AndroidImageReader::GetInstance().IsSupported(); -+ -+ // TODO(vikassoni) : Currently we have 2 different flags to enable/disable -+ // AImageReader - one for MCVD and other for MediaPlayer here. Merge those 2 -+ // flags into a single flag. Keeping the 2 flags separate for now since finch -+ // experiment using this flag is in progress. -+ return a_image_reader_supported && base::android::EnableAndroidImageReader() && -+ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer) - ? TextureOwner::Mode::kAImageReaderInsecure - : TextureOwner::Mode::kSurfaceTextureInsecure; - } + gpu::TextureOwner::Mode GetTextureOwnerMode( + VideoFrameFactory::OverlayMode overlay_mode) { ++ const bool enabled = base::android::EnableAndroidImageReader() && ++ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer); + switch (overlay_mode) { + case VideoFrameFactory::OverlayMode::kDontRequestPromotionHints: + case VideoFrameFactory::OverlayMode::kRequestPromotionHints: +- return base::android::EnableAndroidImageReader() ++ return enabled + ? gpu::TextureOwner::Mode::kAImageReaderInsecure + : gpu::TextureOwner::Mode::kSurfaceTextureInsecure; + case VideoFrameFactory::OverlayMode::kSurfaceControlSecure: -- diff --git a/build/cromite_patches/Add-AllowUserCertificates-flag.patch b/build/cromite_patches/Add-AllowUserCertificates-flag.patch index a985da3797d1e80ccb4bef62d50ddf3a60ce6a7f..a4e93a068625bd56e65586954d1700a1388f1384 100644 --- a/build/cromite_patches/Add-AllowUserCertificates-flag.patch +++ b/build/cromite_patches/Add-AllowUserCertificates-flag.patch @@ -20,7 +20,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -227,6 +227,7 @@ import org.chromium.content_public.browser.LoadUrlParams; +@@ -233,6 +233,7 @@ import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.SelectionPopupController; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.ContentSwitches; @@ -28,7 +28,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.printing.PrintManagerDelegateImpl; import org.chromium.printing.PrintingController; import org.chromium.printing.PrintingControllerImpl; -@@ -969,6 +970,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -981,6 +982,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity super.onStartWithNative(); ChromeActivitySessionTracker.getInstance().onStartWithNative(getProfileProviderSupplier()); @@ -40,7 +40,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -160,6 +160,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -169,6 +169,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &feed::kFeedPerformanceStudy, &feed::kFeedShowSignInCommand, &feed::kFeedSignedOutViewDemotion, @@ -51,31 +51,31 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse 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 --- 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 -@@ -158,6 +158,7 @@ public abstract class ChromeFeatureList { - // Feature names. - /* Alphabetical: */ - public static final String ACT_USER_BYPASS_UX = "ActUserBypassUx"; +@@ -162,6 +162,7 @@ public abstract class ChromeFeatureList { + "AccountForSuppressedKeyboardInsets"; + public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 = + "AdaptiveButtonInTopToolbarCustomizationV2"; + public static final String ALLOW_USER_CERTIFICATES = "AllowUserCertificates"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_PAGE_SUMMARY = "AdaptiveButtonInTopToolbarPageSummary"; - public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 = -@@ -643,6 +644,8 @@ public abstract class ChromeFeatureList { - public static final CachedFlag sAndroidMinimalUiLargeScreen = - newCachedFlag(ANDROID_MINIMAL_UI_LARGE_SCREEN, false); + public static final String ALLOW_TAB_CLOSING_UPON_MINIMIZATION = +@@ -679,6 +680,8 @@ public abstract class ChromeFeatureList { + public static final CachedFlag sAndroidWindowPopupLargeScreen = + newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, false); public static final CachedFlag sAppSpecificHistory = newCachedFlag(APP_SPECIFIC_HISTORY, true); + public static final CachedFlag sAllowUserCertificates = + newCachedFlag(ALLOW_USER_CERTIFICATES, false); public static final CachedFlag sAsyncNotificationManager = newCachedFlag(ASYNC_NOTIFICATION_MANAGER, false, true); public static final CachedFlag sAsyncNotificationManagerForDownload = -@@ -878,6 +881,7 @@ public abstract class ChromeFeatureList { - public static final List sFlagsCachedFullBrowserChromium = - List.of( +@@ -940,6 +943,7 @@ public abstract class ChromeFeatureList { + sAccountForSuppressedKeyboardInsets, + sAllowTabClosingUponMinimization, sAndroidAppIntegration, + sAllowUserCertificates, sAndroidAppIntegrationModule, + sAndroidAppIntegrationMultiDataSource, sAndroidAppIntegrationV2, - sAndroidAppIntegrationWithFavicon, diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc new file mode 100644 --- /dev/null @@ -111,7 +111,7 @@ new file mode 100644 diff --git a/net/android/java/src/org/chromium/net/X509Util.java b/net/android/java/src/org/chromium/net/X509Util.java --- a/net/android/java/src/org/chromium/net/X509Util.java +++ b/net/android/java/src/org/chromium/net/X509Util.java -@@ -542,6 +542,8 @@ public class X509Util { +@@ -537,6 +537,8 @@ public class X509Util { return userRootBytes.toArray(new byte[0][]); } @@ -120,7 +120,7 @@ diff --git a/net/android/java/src/org/chromium/net/X509Util.java b/net/android/j public static AndroidCertVerifyResult verifyServerCertificates( byte[][] certChain, String authType, -@@ -642,6 +644,9 @@ public class X509Util { +@@ -637,6 +639,9 @@ public class X509Util { X509Certificate root = verifiedChain.get(verifiedChain.size() - 1); isIssuedByKnownRoot = isKnownRoot(root); } diff --git a/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch b/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch index a06517b910b8889a395f6038283b81886453c041..4ae4cb7014c0801dfeef13faca2e466370bfb40c 100644 --- a/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch +++ b/build/cromite_patches/Add-Alt-D-hotkey-to-focus-address-bar.patch @@ -4,19 +4,22 @@ Subject: Add Alt+D hotkey to focus address bar License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java | 2 ++ - 1 file changed, 2 insertions(+) + .../src/org/chromium/chrome/browser/KeyboardShortcuts.java | 5 +++++ + 1 file changed, 5 insertions(+) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java --- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java -@@ -472,6 +472,8 @@ public class KeyboardShortcuts { - R.string.keyboard_shortcut_address_bar, - KeyEvent.KEYCODE_L, - KeyEvent.META_CTRL_ON); -+ addShortcut(context, chromeFeatureShortcutGroup, R.string.keyboard_shortcut_address_bar, -+ KeyEvent.KEYCODE_D, KeyEvent.META_ALT_ON); - shortcutGroups.add(chromeFeatureShortcutGroup); +@@ -839,6 +839,11 @@ public class KeyboardShortcuts { + KeyEvent.KEYCODE_B, + (KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON)); + } ++ addShortcut(context, ++ shortcutGroupsById.get(R.string.keyboard_shortcut_chrome_feature_group_header), ++ R.string.keyboard_shortcut_address_bar, ++ KeyEvent.KEYCODE_D, ++ KeyEvent.META_ALT_ON); + return new ArrayList<>(shortcutGroupsById.values()); + } - KeyboardShortcutGroup webpageShortcutGroup = -- diff --git a/build/cromite_patches/Add-a-proxy-configuration-page.patch b/build/cromite_patches/Add-a-proxy-configuration-page.patch index e4e40be52776995e028e5d60f9038e9cb3b08738..98224260141b7ef8304973b6e0d3606e9a73aed2 100644 --- a/build/cromite_patches/Add-a-proxy-configuration-page.patch +++ b/build/cromite_patches/Add-a-proxy-configuration-page.patch @@ -38,9 +38,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../proxy_config/proxy_config_dictionary.cc | 30 +- .../proxy_config/proxy_config_dictionary.h | 7 +- .../proxy_config/proxy_policy_handler.cc | 2 +- - net/proxy_resolution/proxy_config.cc | 51 ++- + net/proxy_resolution/pac_file_fetcher_impl.cc | 8 - + net/proxy_resolution/proxy_config.cc | 53 ++- net/proxy_resolution/proxy_config.h | 3 + - 25 files changed, 984 insertions(+), 18 deletions(-) + 26 files changed, 986 insertions(+), 26 deletions(-) create mode 100644 chrome/browser/resources/proxy_config.css create mode 100644 chrome/browser/resources/proxy_config.html create mode 100644 chrome/browser/resources/proxy_config.js @@ -77,7 +78,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -81,6 +81,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -101,6 +101,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private static final String PREF_PASSWORD_LEAK_DETECTION = "password_leak_detection"; private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; @@ -88,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -333,6 +333,7 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { +@@ -372,6 +372,7 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { builtins_to_provide.push_back(chrome::kChromeUISettingsURL16); #endif builtins_to_provide.push_back(chrome::kChromeUIVersionURL16); @@ -196,7 +197,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -196,6 +196,8 @@ +@@ -204,6 +204,8 @@ #include "printing/buildflags/buildflags.h" #include "rlz/buildflags/buildflags.h" @@ -205,7 +206,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #if BUILDFLAG(ENABLE_BACKGROUND_MODE) #include "chrome/browser/background/extensions/background_mode_manager.h" #endif -@@ -1561,6 +1563,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { +@@ -1613,6 +1615,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { component_updater::RegisterPrefs(registry); domain_reliability::RegisterPrefs(registry); embedder_support::OriginTrialPrefs::RegisterPrefs(registry); @@ -217,7 +218,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc -@@ -156,7 +156,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { +@@ -160,7 +160,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { command_line()->GetSwitchValueASCII(switches::kProxyBypassList); SetValue(proxy_config::prefs::kProxy, base::Value(ProxyConfigDictionary::CreateFixedServers( @@ -660,7 +661,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -224,6 +224,8 @@ static_library("ui") { +@@ -204,6 +204,8 @@ static_library("ui") { "webui/metrics_internals/metrics_internals_ui.h", "webui/net_export_ui.cc", "webui/net_export_ui.h", @@ -672,7 +673,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_web_ui_configs.cc --- a/chrome/browser/ui/webui/chrome_web_ui_configs.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_configs.cc -@@ -54,6 +54,9 @@ +@@ -57,6 +57,9 @@ #include "extensions/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h" @@ -682,7 +683,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u #if BUILDFLAG(ENABLE_NACL) #include "chrome/browser/ui/webui/nacl_ui.h" #endif -@@ -391,7 +394,7 @@ void RegisterChromeWebUIConfigs() { +@@ -422,7 +425,7 @@ void RegisterChromeWebUIConfigs() { map.AddWebUIConfig(std::make_unique()); map.AddWebUIConfig(std::make_unique()); #endif @@ -1134,7 +1135,7 @@ new file mode 100644 diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc -@@ -50,6 +50,7 @@ bool IsSystemWebUIHost(std::string_view host) { +@@ -51,6 +51,7 @@ bool IsSystemWebUIHost(std::string_view host) { kChromeUILockScreenNetworkHost, kChromeUILockScreenStartReauthHost, kChromeUIMobileSetupHost, @@ -1142,7 +1143,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons kChromeUIMultiDeviceSetupHost, kChromeUINetworkHost, kChromeUINotificationTesterHost, -@@ -71,6 +72,7 @@ bool IsSystemWebUIHost(std::string_view host) { +@@ -72,6 +73,7 @@ bool IsSystemWebUIHost(std::string_view host) { // These hosts will also be suggested by BuiltinProvider. base::span ChromeURLHosts() { static constexpr auto kChromeURLHosts = std::to_array({ @@ -1153,10 +1154,10 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h -@@ -161,6 +161,8 @@ inline constexpr char kChromeUINetExportHost[] = "net-export"; - inline constexpr char kChromeUINetInternalsHost[] = "net-internals"; +@@ -179,6 +179,8 @@ inline constexpr char kChromeUINetInternalsHost[] = "net-internals"; inline constexpr char kChromeUINetInternalsURL[] = "chrome://net-internals/"; inline constexpr char kChromeUINewTabHost[] = "newtab"; + inline constexpr char kChromeUINewTabFooterHost[] = "newtab-footer"; +inline constexpr char16_t kChromeUIProxyConfigURL16[] = u"chrome://proxy/"; +inline constexpr char kChromeUIProxyConfigHost[] = "proxy"; inline constexpr char kChromeUINewTabPageHost[] = "new-tab-page"; @@ -1328,11 +1329,29 @@ diff --git a/components/proxy_config/proxy_policy_handler.cc b/components/proxy_ } break; } +diff --git a/net/proxy_resolution/pac_file_fetcher_impl.cc b/net/proxy_resolution/pac_file_fetcher_impl.cc +--- a/net/proxy_resolution/pac_file_fetcher_impl.cc ++++ b/net/proxy_resolution/pac_file_fetcher_impl.cc +@@ -359,14 +359,6 @@ bool PacFileFetcherImpl::ConsumeBytesRead(URLRequest* request, int num_bytes) { + return false; + } + +- // Enforce maximum size bound. +- if (num_bytes + bytes_read_so_far_.size() > +- static_cast(max_response_bytes_)) { +- result_code_ = ERR_FILE_TOO_BIG; +- request->Cancel(); +- return false; +- } +- + bytes_read_so_far_.append(buf_->data(), num_bytes); + return true; + } diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_config.cc --- a/net/proxy_resolution/proxy_config.cc +++ b/net/proxy_resolution/proxy_config.cc -@@ -129,7 +129,7 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules, - std::move(url_scheme), &single_proxies, ProxyServer::SCHEME_HTTP, +@@ -133,7 +133,7 @@ void ProxyConfig::ProxyRules::ParseFromString(std::string_view proxy_rules, + url_scheme, &single_proxies, ProxyServer::SCHEME_HTTP, allow_bracketed_proxy_chains, is_quic_allowed); type = Type::PROXY_LIST; - return; @@ -1340,7 +1359,7 @@ diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_c } // Trim whitespace off the url scheme. -@@ -160,6 +160,55 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules, +@@ -164,6 +164,57 @@ void ProxyConfig::ProxyRules::ParseFromString(std::string_view proxy_rules, } } @@ -1348,8 +1367,10 @@ diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_c + if (type == Type::PROXY_LIST) { + std::string proxy_list; + for (const auto& proxy_chain : single_proxies.AllChains()) { -+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0); -+ proxy_list += ProxyServerToProxyUri(proxy_server) + ";"; ++ if (proxy_chain.length()) { ++ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0); ++ proxy_list += ProxyServerToProxyUri(proxy_server) + ";"; ++ } + } + // remove last semicolon + if (proxy_list.length() != 0 ) { @@ -1400,7 +1421,7 @@ diff --git a/net/proxy_resolution/proxy_config.h b/net/proxy_resolution/proxy_co --- a/net/proxy_resolution/proxy_config.h +++ b/net/proxy_resolution/proxy_config.h @@ -107,6 +107,9 @@ class NET_EXPORT ProxyConfig { - void ParseFromString(const std::string& proxy_rules, + void ParseFromString(std::string_view proxy_rules, bool allow_bracketed_proxy_chains = false, bool is_quic_allowed = false); + // Returns the proxy rules in a format that can be parsed by ParseFromString; diff --git a/build/cromite_patches/Add-an-always-incognito-mode.patch b/build/cromite_patches/Add-an-always-incognito-mode.patch index 3b970c9b4a42476a821b76c2a8828634927470ec..41e4e984e8521339bd5d70762a06f4d545451e71 100644 --- a/build/cromite_patches/Add-an-always-incognito-mode.patch +++ b/build/cromite_patches/Add-an-always-incognito-mode.patch @@ -26,12 +26,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AlwaysIncognitoLinkInterceptor.java | 54 ++++++ .../chrome/browser/ChromeTabbedActivity.java | 28 ++- .../chrome/browser/app/ChromeActivity.java | 4 + - .../AppMenuPropertiesDelegateImpl.java | 28 ++- - .../ChromeContextMenuPopulator.java | 7 +- + .../AppMenuPropertiesDelegateImpl.java | 7 +- + .../ChromeContextMenuPopulator.java | 6 +- .../CustomTabActivityLifecycleUmaTracker.java | 39 ----- .../CustomTabAppMenuPropertiesDelegate.java | 4 + .../CustomTabIntentDataProvider.java | 10 ++ - .../browser/download/DownloadUtils.java | 16 +- + .../browser/download/DownloadUtils.java | 13 +- .../history/HistoryContentManager.java | 7 +- .../browser/history/HistoryManager.java | 27 ++- .../chrome/browser/history/HistoryPage.java | 16 ++ @@ -42,6 +42,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../HistoricalTabModelObserver.java | 5 +- .../tab/tab_restore/HistoricalTabSaver.java | 2 +- .../tab_restore/HistoricalTabSaverImpl.java | 17 +- + .../TabbedAppMenuPropertiesDelegate.java | 17 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +- .../browser/tabmodel/ChromeTabCreator.java | 5 +- .../tabmodel/TabModelSelectorImpl.java | 3 + @@ -68,6 +69,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/profiles/profile_selections.h | 7 +- .../browser/ui/android/native_page/BUILD.gn | 2 + .../browser/ui/native_page/NativePage.java | 22 ++- + .../browser/omnibox/LocationBarMediator.java | 10 +- .../strings/android_chrome_strings.grd | 25 +++ .../browser/toolbar/LocationBarModel.java | 5 +- chrome/browser/ui/messages/android/BUILD.gn | 1 + @@ -86,7 +88,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../add-an-always-incognito-mode.inc | 1 + .../add-an-always-incognito-mode.inc | 3 + .../add-an-always-incognito-mode.inc | 1 + - 67 files changed, 797 insertions(+), 112 deletions(-) + 69 files changed, 798 insertions(+), 113 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -99,7 +101,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -643,6 +643,7 @@ chrome_java_resources = [ +@@ -646,6 +646,7 @@ chrome_java_resources = [ "java/res/xml/main_preferences_legacy.xml", "java/res/xml/manage_sync_preferences.xml", "java/res/xml/personalize_google_services_preferences.xml", @@ -118,7 +120,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -879,6 +880,7 @@ chrome_java_sources = [ +@@ -898,6 +899,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", @@ -171,7 +173,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -91,6 +91,11 @@ found in the LICENSE file. +@@ -90,6 +90,11 @@ found in the LICENSE file. android:key="secure_dns" android:title="@string/settings_secure_dns_title" android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings" /> @@ -245,7 +247,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -71,6 +71,10 @@ import org.chromium.base.task.TaskTraits; +@@ -74,6 +74,10 @@ import org.chromium.base.task.TaskTraits; import org.chromium.build.annotations.UsedByReflection; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; @@ -253,10 +255,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct +import org.chromium.components.user_prefs.UserPrefs; +import org.chromium.chrome.browser.preferences.Pref; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.IntentHandler.ExternalAppId; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; - import org.chromium.chrome.browser.app.metrics.LaunchCauseMetrics; -@@ -727,14 +731,19 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -726,14 +730,19 @@ public class ChromeTabbedActivity extends ChromeActivity { Profile profile = mTabModelSelector.getCurrentModel().getProfile(); // For saving non-incognito tab closures for Recent Tabs. @@ -273,17 +275,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct + mTabModelSelector .getTabGroupModelFilterProvider() - .getTabGroupModelFilter(false)); -- mHistoricalTabModelObserver.addSecodaryTabModelSupplier( +- mHistoricalTabModelObserver.addSecondaryTabModelSupplier( - ArchivedTabModelOrchestrator.getForProfile(profile)::getTabModel); - + .getTabGroupModelFilter(alwaysIncognito)); -+ mHistoricalTabModelObserver.addSecodaryTabModelSupplier( ++ mHistoricalTabModelObserver.addSecondaryTabModelSupplier( + ArchivedTabModelOrchestrator.getForProfile(profile)::getTabModel); + } // Defer creation of this helper so it triggers after TabGroupModelFilter observers. mUndoRefocusHelper = new UndoRefocusHelper( -@@ -2614,8 +2623,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -2876,8 +2885,9 @@ public class ChromeTabbedActivity extends ChromeActivity { // We determine the model as soon as possible so every systems get initialized coherently. boolean startIncognito = @@ -298,15 +300,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -94,6 +94,7 @@ import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; - import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerHandler; +@@ -96,6 +96,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManagerH import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; import org.chromium.chrome.browser.device.DeviceClassManager; + import org.chromium.chrome.browser.devtools.DevToolsWindowAndroid; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.dom_distiller.DomDistillerUiUtils; + import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.download.DownloadManagerService; - import org.chromium.chrome.browser.download.DownloadUtils; -@@ -1953,6 +1954,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -1980,6 +1981,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -319,58 +321,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -38,6 +38,8 @@ import org.chromium.base.supplier.Supplier; - import org.chromium.build.BuildConfig; - import org.chromium.chrome.R; - import org.chromium.chrome.browser.ActivityTabProvider; -+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; -+import org.chromium.chrome.browser.profiles.ProfileManager; - import org.chromium.chrome.browser.bookmarks.BookmarkModel; - import org.chromium.chrome.browser.bookmarks.PowerBookmarkUtils; - import org.chromium.chrome.browser.commerce.ShoppingServiceFactory; -@@ -102,6 +104,10 @@ import java.util.ArrayList; +@@ -88,6 +88,8 @@ import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; import java.util.Iterator; - import java.util.List; -+import org.chromium.components.prefs.PrefService; -+import org.chromium.components.user_prefs.UserPrefs; -+import org.chromium.chrome.browser.preferences.Pref; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu * items based on activity state. -@@ -609,6 +615,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate - } - - private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { -+ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -+ if (always_incognito) { -+ final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); -+ if (newTabOption != null) -+ newTabOption.setVisible(false); -+ } -+ - // We have to iterate all menu items since same menu item ID may be associated with more - // than one menu items. - boolean isOverviewModeMenu = menuGroup == MenuGroup.OVERVIEW_MODE_MENU; -@@ -672,7 +685,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate - } - - if (item.getItemId() == R.id.recent_tabs_menu_id) { -- item.setVisible(!isIncognito); -+ if (always_incognito) { -+ PrefService prefService = -+ UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); -+ boolean historyEnabledInIncognito = -+ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); -+ item.setVisible(historyEnabledInIncognito); -+ } -+ else -+ item.setVisible(!isIncognito); - } - if (item.getItemId() == R.id.menu_select_tabs) { - item.setVisible(isMenuSelectTabsVisible); -@@ -877,8 +898,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -496,8 +498,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties && !isNativePage && !isFileScheme && !isContentScheme @@ -385,7 +345,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java -@@ -29,6 +29,7 @@ import org.chromium.base.ContextUtils; +@@ -31,6 +31,7 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.shared_preferences.SharedPreferencesManager; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; @@ -393,7 +353,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType; -@@ -277,6 +278,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -347,6 +348,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { public List> buildContextMenu() { mShowEphemeralTabNewLabel = null; @@ -402,16 +362,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr + List> groupedItems = new ArrayList<>(); - if (mParams.isAnchor()) { -@@ -287,6 +291,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { - if (mMode == ContextMenuMode.NORMAL) { - linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP)); - linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB)); -+ - if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) { - linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB)); - } -@@ -317,7 +322,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + if (mParams.isPage() && shouldShowEmptySpaceContextMenu()) { +@@ -415,7 +419,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { @@ -472,15 +424,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -22,6 +22,7 @@ import org.chromium.base.supplier.ObservableSupplier; +@@ -21,6 +21,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.DefaultBrowserInfo; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; - import org.chromium.chrome.browser.app.appmenu.DividerLineMenuItemViewBinder; -@@ -218,6 +219,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + import org.chromium.chrome.browser.bookmarks.BookmarkModel; +@@ -200,6 +201,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat openInChromeItemVisible = false; tryAddingReadAloud = false; } @@ -493,7 +445,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -86,6 +86,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -98,6 +98,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.net.NetId; @@ -503,7 +455,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -1183,6 +1186,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1250,6 +1253,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid return getInitialActivityWidth() > 0; } @@ -539,28 +491,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo /** A class containing some utility static methods. */ public class DownloadUtils { private static final String TAG = "download"; -@@ -298,7 +303,16 @@ public class DownloadUtils { - // Offline pages isn't supported in Incognito. This should be checked before calling - // OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found - // for incognito profile. -- if (tab.isIncognito()) return false; -+ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); -+ if (always_incognito) { +@@ -303,7 +308,13 @@ public class DownloadUtils { + public static boolean isAllowedToDownloadPage(Tab tab) { + if (tab == null) return false; + +- if (tab.isIncognito() ++ boolean historyEnabledInIncognito = false; ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { + PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); -+ boolean historyEnabledInIncognito = ++ historyEnabledInIncognito = + prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); -+ if (historyEnabledInIncognito == false) -+ return false; -+ } else { -+ if (tab.isIncognito()) return false; + } - - // Check if the page url is supported for saving. Only HTTP and HTTPS pages are allowed. - if (!OfflinePageBridge.canSavePage(tab.getUrl())) return false; ++ if (tab.isIncognito() && !historyEnabledInIncognito + && !ChromeFeatureList.isEnabled( + ChromeFeatureList.ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD)) { + return false; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryContentManager.java -@@ -300,7 +300,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -302,7 +302,9 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.generateFooterItems(); // Listen to changes in sign in state. @@ -571,7 +520,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // Create PrefChangeRegistrar to receive notifications on preference changes. mPrefChangeRegistrar = PrefServiceUtil.createFor(profile); -@@ -376,7 +378,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver +@@ -378,7 +380,8 @@ public class HistoryContentManager implements SignInStateObserver, PrefObserver mHistoryAdapter.onDestroyed(); mLargeIconBridge.destroy(); mLargeIconBridge = null; @@ -584,7 +533,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java -@@ -55,6 +55,14 @@ import org.chromium.ui.base.Clipboard; +@@ -54,6 +54,14 @@ import org.chromium.ui.base.Clipboard; import java.util.List; @@ -599,7 +548,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History /** Combines and manages the different UI components of browsing history. */ public class HistoryManager implements OnMenuItemClickListener, -@@ -157,7 +165,7 @@ public class HistoryManager +@@ -156,7 +164,7 @@ public class HistoryManager mUmaRecorder.recordOpenHistory(); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -608,7 +557,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -425,9 +433,22 @@ public class HistoryManager +@@ -406,9 +414,22 @@ public class HistoryManager onBackPressStateChanged(); } @@ -632,7 +581,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // If Incognito placeholder is shown no need to call any destroy method. return; } -@@ -487,7 +508,7 @@ public class HistoryManager +@@ -468,7 +489,7 @@ public class HistoryManager * @return True if manager handles this event, false if it decides to ignore. */ private boolean onBackPressed() { @@ -925,9 +874,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme import org.chromium.components.browser_ui.accessibility.AccessibilitySettings; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.settings.FragmentSettingsNavigation; -@@ -238,6 +239,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl - mModalDialogManagerSupplier, - SigninAndHistorySyncActivityLauncherImpl.get())); +@@ -244,6 +245,9 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl + SigninAndHistorySyncActivityLauncherImpl.get(), + new SettingsCustomTabLauncherImpl())); } + if (fragment instanceof INeedSnackbarManager) { + ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); @@ -938,16 +887,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java -@@ -29,6 +29,8 @@ import java.util.HashMap; +@@ -32,6 +32,8 @@ import java.util.HashMap; import java.util.List; import java.util.Set; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** A tab model observer for managing bulk closures. */ + @NullMarked public class HistoricalTabModelObserver implements TabModelObserver { - private final TabGroupModelFilter mTabGroupModelFilter; -@@ -77,9 +79,10 @@ public class HistoricalTabModelObserver implements TabModelObserver { +@@ -81,9 +83,10 @@ public class HistoricalTabModelObserver implements TabModelObserver { if (tabs.isEmpty() || !canRestore) return; if (tabs.size() == 1) { @@ -962,7 +911,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java -@@ -32,7 +32,7 @@ public interface HistoricalTabSaver { +@@ -34,7 +34,7 @@ public interface HistoricalTabSaver { * * @param tab The {@link Tab} to create an entry for. */ @@ -974,16 +923,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java -@@ -29,6 +29,8 @@ import java.util.Arrays; +@@ -30,6 +30,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** Creates historical entries in TabRestoreService. */ + @NullMarked @JNINamespace("historical_tab_saver") - public class HistoricalTabSaverImpl implements HistoricalTabSaver { -@@ -85,10 +87,10 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -87,10 +89,10 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { } @Override @@ -996,7 +945,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore } @Override -@@ -149,7 +151,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -151,7 +153,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { // If there is only a single valid tab remaining save it individually. if (validEntries.size() == 1 && validEntries.get(0).isSingleTab()) { @@ -1005,7 +954,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore return; } -@@ -190,14 +192,15 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -191,14 +193,15 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { CollectionUtil.integerCollectionToIntArray(savedStateVersions)); } @@ -1023,7 +972,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore } /** -@@ -205,7 +208,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -206,7 +209,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { * internal Chrome scheme, about:blank, or a native page and it cannot be incognito. */ private boolean shouldSave(Tab tab) { @@ -1032,7 +981,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore // Check the secondary tab model to see if the tab was moved instead of deleted. if (tabIdExistsInSecondaryModel(tab.getId())) return false; -@@ -295,7 +298,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -293,7 +296,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { @NativeMethods interface Natives { @@ -1041,10 +990,51 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore void createHistoricalGroup( TabModel model, +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +@@ -26,6 +26,7 @@ import org.chromium.base.supplier.Supplier; + import org.chromium.build.BuildConfig; + import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.R; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.ActivityTabProvider; + import org.chromium.chrome.browser.ai.AiAssistantService; + import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; +@@ -371,6 +372,13 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + } + + private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { ++ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ if (always_incognito) { ++ final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); ++ if (newTabOption != null) ++ newTabOption.setVisible(false); ++ } ++ + // We have to iterate all menu items since same menu item ID may be associated with more + // than one menu items. + boolean isOverviewModeMenu = menuGroup == MenuGroup.OVERVIEW_MODE_MENU; +@@ -430,7 +438,14 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + } + + if (item.getItemId() == R.id.recent_tabs_menu_id) { +- item.setVisible(!isIncognito); ++ if (always_incognito) { ++ boolean historyEnabledInIncognito = ++ UserPrefs.get(currentTab.getProfile()).getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); ++ item.setVisible(historyEnabledInIncognito); ++ } ++ else { ++ item.setVisible(!isIncognito); ++ } + } + if (item.getItemId() == R.id.menu_select_tabs) { + item.setVisible(isMenuSelectTabsVisible); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -191,6 +191,8 @@ import org.chromium.ui.InsetObserver; +@@ -214,6 +214,8 @@ import org.chromium.ui.InsetObserver; import org.chromium.ui.UiUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.DeviceFormFactor; @@ -1052,8 +1042,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.LocalizationUtils; - import org.chromium.ui.dragdrop.DragDropGlobalState; -@@ -1148,7 +1150,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { + import org.chromium.ui.display.DisplayUtil; +@@ -1212,7 +1214,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { () -> { mTabCreatorManagerSupplier .get() @@ -1065,7 +1055,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -46,6 +46,10 @@ import org.chromium.ui.base.PageTransition; +@@ -48,6 +48,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -1074,9 +1064,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome +import org.chromium.chrome.browser.tab.TabObserver; + /** This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ - public class ChromeTabCreator extends TabCreator { - private final Activity mActivity; -@@ -502,7 +506,6 @@ public class ChromeTabCreator extends TabCreator { + public class ChromeTabCreator extends TabCreator + implements NeedsTabModel, NeedsTabModelOrderController { +@@ -545,7 +549,6 @@ public class ChromeTabCreator extends TabCreator // TODO(crbug.com/40691614): Clean up the launches from SearchActivity/Chrome. public Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1093,21 +1083,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.flags.ActivityType; + import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ntp.RecentlyClosedBridge; - import org.chromium.chrome.browser.profiles.ProfileProvider; -@@ -118,6 +119,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod +@@ -119,6 +120,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod ProfileProvider profileProvider = mProfileProviderSupplier.get(); assert profileProvider != null; + AlwaysIncognitoLinkInterceptor.migrateSettingToNative(); + - ChromeTabCreator regularTabCreator = - (ChromeTabCreator) getTabCreatorManager().getTabCreator(false); - ChromeTabCreator incognitoTabCreator = + TabCreator regularTabCreator = getTabCreatorManager().getTabCreator(false); + TabCreator incognitoTabCreator = getTabCreatorManager().getTabCreator(true); + mRecentlyClosedBridge = diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java -@@ -49,6 +49,8 @@ import org.chromium.chrome.browser.tabpersistence.TabStateFileManager; +@@ -51,6 +51,8 @@ import org.chromium.chrome.browser.tabwindow.TabWindowManager; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; @@ -1116,7 +1106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; -@@ -832,6 +834,13 @@ public class TabPersistentStore { +@@ -835,6 +837,13 @@ public class TabPersistentStore { } } } @@ -1133,15 +1123,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -44,6 +44,7 @@ import org.chromium.base.supplier.Supplier; +@@ -49,6 +49,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.IntentHandler; - import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; + import org.chromium.chrome.browser.app.tabwindow.TabWindowManagerSingleton; import org.chromium.chrome.browser.back_press.BackPressManager; -@@ -748,7 +749,7 @@ public class ToolbarManager +@@ -828,7 +829,7 @@ public class ToolbarManager TraceEvent.end("isOfflinePage"); return ret; } @@ -1162,16 +1152,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI /** Stores info about a web app. */ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider { private final Drawable mCloseButtonIcon; -@@ -45,6 +47,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider - private final ColorProviderImpl mColorProvider; +@@ -46,6 +48,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider private final ColorProviderImpl mDarkColorProvider; + private @DisplayMode.EnumType int mResolvedDisplayMode = DisplayMode.UNDEFINED; + private boolean mIsIncognito = false; + /** Returns the toolbar color to use if a custom color is not specified by the webapp. */ public static int getDefaultToolbarColor() { return Color.WHITE; -@@ -80,6 +84,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -81,6 +85,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider mWebappExtras = webappExtras; mWebApkExtras = webApkExtras; mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP; @@ -1182,7 +1172,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI } @Override -@@ -175,6 +183,13 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -176,6 +184,13 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider return mWebApkExtras; } @@ -1211,7 +1201,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and using base::android::JavaParamRef; using base::android::JavaRef; using base::android::ScopedJavaLocalRef; -@@ -107,7 +112,8 @@ std::vector> StringsToUuids( +@@ -104,7 +109,8 @@ std::vector> StringsToUuids( void CreateHistoricalTab( TabAndroid* tab_android, @@ -1221,7 +1211,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!tab_android) { return; } -@@ -118,9 +124,14 @@ void CreateHistoricalTab( +@@ -115,9 +121,14 @@ void CreateHistoricalTab( return; } @@ -1238,16 +1228,16 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and if (!service) { return; } -@@ -186,7 +197,7 @@ void CreateHistoricalBulkClosure( - std::vector per_tab_root_id, +@@ -181,7 +192,7 @@ void CreateHistoricalBulkClosure( + per_tab_optional_tab_group_ids, std::vector> tabs, std::vector web_contents_state) { - DCHECK(model); + if (!model) return; - DCHECK_EQ(root_ids.size(), group_titles.size()); - DCHECK_EQ(root_ids.size(), group_colors.size()); - DCHECK_EQ(root_ids.size(), optional_tab_group_ids.size()); -@@ -318,11 +329,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( + DCHECK_EQ(tab_group_ids.size(), group_titles.size()); + DCHECK_EQ(tab_group_ids.size(), group_colors.size()); + DCHECK_EQ(tab_group_ids.size(), tab_group_ids.size()); +@@ -294,11 +305,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( JNIEnv* env, const JavaParamRef& jtab_android, const JavaParamRef& state, @@ -1265,8 +1255,8 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -374,6 +374,15 @@ ChromeAutocompleteProviderClient::GetProviderStateService() const { - return ProviderStateServiceFactory::GetForProfile(profile_); +@@ -418,6 +418,15 @@ ChromeAutocompleteProviderClient::GetTabGroupSyncService() const { + return tab_groups::TabGroupSyncServiceFactory::GetForProfile(profile_); } +bool ChromeAutocompleteProviderClient::IsAlwaysIncognitoEnabled() const { @@ -1284,9 +1274,9 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h -@@ -89,6 +89,7 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { - OnDeviceTailModelService* GetOnDeviceTailModelService() const override; +@@ -96,6 +96,7 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { ProviderStateService* GetProviderStateService() const override; + tab_groups::TabGroupSyncService* GetTabGroupSyncService() const override; bool IsOffTheRecord() const override; + bool IsAlwaysIncognitoEnabled() const override; bool IsIncognitoProfile() const override; @@ -1320,15 +1310,15 @@ diff --git a/chrome/browser/autocomplete/remote_suggestions_service_factory.cc b diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -35,6 +35,7 @@ - #include "base/numerics/safe_conversions.h" +@@ -37,6 +37,7 @@ + #include "base/strings/strcat.h" #include "base/strings/utf_string_conversions.h" #include "base/uuid.h" +#include "chrome/common/pref_names.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" #include "chrome/browser/commerce/shopping_service_factory.h" -@@ -215,6 +216,12 @@ ScopedJavaLocalRef JNI_BookmarkBridge_NativeGetForProfile( +@@ -264,6 +265,12 @@ ScopedJavaLocalRef JNI_BookmarkBridge_NativeGetForProfile( if (!profile) return nullptr; @@ -1352,7 +1342,7 @@ diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.c #include "components/content_settings/core/browser/content_settings_pref_provider.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/permissions/features.h" -@@ -105,9 +106,25 @@ scoped_refptr +@@ -117,9 +118,25 @@ scoped_refptr GetForProfile(original_profile); bool should_record_metrics = profiles::IsRegularUserProfile(profile); @@ -1379,9 +1369,9 @@ diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.c /*store_last_modified=*/true, profile->ShouldRestoreOldSessionCookies(), should_record_metrics)); -@@ -116,6 +133,9 @@ scoped_refptr - settings_map->RegisterProvider(ProviderType::kWebuiAllowlistProvider, - std::move(allowlist_provider)); +@@ -137,6 +154,9 @@ scoped_refptr + std::move(component_extension_provider)); + #endif // BUILDFLAG(IS_CHROMEOS) + if (always_incognito_enabled) + return settings_map; @@ -1402,7 +1392,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -@@ -511,6 +514,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -570,6 +573,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -1416,7 +1406,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return nullptr; -@@ -518,6 +528,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -577,6 +587,16 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -1457,7 +1447,7 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor private: explicit HistoryTabHelper(content::WebContents* web_contents); friend class content::WebContentsUserData; -@@ -89,9 +96,6 @@ class HistoryTabHelper +@@ -91,9 +98,6 @@ class HistoryTabHelper void OnLanguageDetermined( const translate::LanguageDetectionDetails& details) override; @@ -1720,7 +1710,7 @@ diff --git a/chrome/browser/offline_pages/recent_tab_helper.cc b/chrome/browser/ diff --git a/chrome/browser/offline_pages/recent_tab_helper.h b/chrome/browser/offline_pages/recent_tab_helper.h --- a/chrome/browser/offline_pages/recent_tab_helper.h +++ b/chrome/browser/offline_pages/recent_tab_helper.h -@@ -106,8 +106,10 @@ class RecentTabHelper +@@ -105,8 +105,10 @@ class RecentTabHelper bool EnsureInitialized(); void ContinueSnapshotWithIdsToPurge(SnapshotProgressInfo* snapshot_info, @@ -1731,7 +1721,7 @@ diff --git a/chrome/browser/offline_pages/recent_tab_helper.h b/chrome/browser/o OfflinePageModel::DeletePageResult result); void SavePageCallback(SnapshotProgressInfo* snapshot_info, OfflinePageModel::SavePageResult result, -@@ -129,6 +131,9 @@ class RecentTabHelper +@@ -128,6 +130,9 @@ class RecentTabHelper // Not page-specific. bool snapshots_enabled_ = false; @@ -1765,7 +1755,7 @@ diff --git a/chrome/browser/offline_pages/request_coordinator_factory.h b/chrome diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -245,6 +245,7 @@ +@@ -254,6 +254,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1773,7 +1763,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" #include "chrome/browser/android/oom_intervention/oom_intervention_decider.h" #include "chrome/browser/android/preferences/browser_prefs_android.h" -@@ -2010,6 +2011,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2068,6 +2069,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1931,10 +1921,40 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ return NativePageType.RECENT_TABS; } else if (UrlConstants.EXPLORE_HOST.equals(host)) { return NativePageType.EXPLORE; +diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java ++++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +@@ -89,6 +89,11 @@ import org.chromium.ui.base.WindowAndroid; + import org.chromium.ui.interpolators.Interpolators; + import org.chromium.url.GURL; + ++import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.components.prefs.PrefService; ++import org.chromium.chrome.browser.profiles.ProfileManager; ++import org.chromium.chrome.browser.preferences.Pref; ++ + import java.util.ArrayList; + import java.util.List; + import java.util.function.BooleanSupplier; +@@ -1232,10 +1237,13 @@ class LocationBarMediator + } + Tab tab = mLocationBarDataProvider.getTab(); + if (tab == null) return false; ++ PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); ++ boolean historyEnabledInIncognito = ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); + // The save offline button should not be shown on native pages. Currently, trying to + // save an offline page in incognito crashes, so don't show it on incognito either. + return shouldShowPageActionButtons() +- && (!tab.isOffTheRecord() ++ && (!tab.isOffTheRecord() || historyEnabledInIncognito + || ChromeFeatureList.isEnabled( + ChromeFeatureList.ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD)); + } diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -6528,6 +6528,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6682,6 +6682,31 @@ To change this setting, BEGIN_LINKdelete the Chrome d Cookies, cache, and other site data @@ -1969,7 +1989,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java -@@ -160,6 +160,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -164,6 +164,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro protected GURL mVisibleGurl = GURL.emptyGURL(); protected String mFormattedFullUrl; protected String mUrlForDisplay; @@ -1977,12 +1997,12 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow // notifyUrlChanged and notifySecurityStateChanged are usually called 3 times across a same // document navigation. The first call is usually necessary, which updates the UrlBar to reflect -@@ -183,7 +184,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -187,7 +188,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro Context context, NewTabPageDelegate newTabPageDelegate, - @NonNull UrlFormatter urlFormatter, -- @NonNull OfflineStatus offlineStatus) { -+ @NonNull OfflineStatus offlineStatus, + UrlFormatter urlFormatter, +- OfflineStatus offlineStatus) { ++ OfflineStatus offlineStatus, + boolean isAlwaysIncognito) { + mIsAlwaysIncognito = isAlwaysIncognito; // (uazo) to do, check mContext = context; @@ -1991,7 +2011,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/messages/android/BUILD.gn b/chrome/browser/ui/messages/android/BUILD.gn --- a/chrome/browser/ui/messages/android/BUILD.gn +++ b/chrome/browser/ui/messages/android/BUILD.gn -@@ -28,6 +28,7 @@ android_library("java") { +@@ -27,6 +27,7 @@ android_library("java") { srcjar_deps = [ ":jni_headers" ] sources = [ "java/src/org/chromium/chrome/browser/ui/messages/infobar/SimpleConfirmInfoBarBuilder.java", @@ -2058,7 +2078,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -4071,6 +4071,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -4106,6 +4106,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2074,7 +2094,7 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc --- a/components/content_settings/core/browser/content_settings_pref_provider.cc +++ b/components/content_settings/core/browser/content_settings_pref_provider.cc -@@ -114,10 +114,12 @@ void PrefProvider::RegisterProfilePrefs( +@@ -111,10 +111,12 @@ void PrefProvider::RegisterProfilePrefs( PrefProvider::PrefProvider(PrefService* prefs, bool off_the_record, @@ -2087,7 +2107,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov store_last_modified_(store_last_modified), clock_(base::DefaultClock::GetInstance()) { TRACE_EVENT_BEGIN("startup", "PrefProvider::PrefProvider"); -@@ -140,11 +142,13 @@ PrefProvider::PrefProvider(PrefService* prefs, +@@ -137,11 +139,13 @@ PrefProvider::PrefProvider(PrefService* prefs, WebsiteSettingsRegistry* website_settings = WebsiteSettingsRegistry::GetInstance(); for (const WebsiteSettingsInfo* info : *website_settings) { @@ -2124,7 +2144,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc --- a/components/content_settings/core/browser/host_content_settings_map.cc +++ b/components/content_settings/core/browser/host_content_settings_map.cc -@@ -247,6 +247,7 @@ struct ContentSettingEntry { +@@ -269,6 +269,7 @@ struct ContentSettingEntry { HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, bool is_off_the_record, @@ -2132,7 +2152,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics) -@@ -256,6 +257,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -278,6 +279,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, #endif prefs_(prefs), is_off_the_record_(is_off_the_record), @@ -2140,7 +2160,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. store_last_modified_(store_last_modified), allow_invalid_secondary_pattern_for_testing_(false), clock_(base::DefaultClock::GetInstance()) { -@@ -269,7 +271,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, +@@ -291,7 +293,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, policy_provider->AddObserver(this); auto pref_provider_ptr = std::make_unique( @@ -2160,7 +2180,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics); -@@ -505,6 +506,8 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -511,6 +512,8 @@ class HostContentSettingsMap : public content_settings::Observer, // Whether this settings map is for an incognito or guest session. bool is_off_the_record_; @@ -2172,7 +2192,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/components/omnibox/browser/autocomplete_provider_client.cc --- a/components/omnibox/browser/autocomplete_provider_client.cc +++ b/components/omnibox/browser/autocomplete_provider_client.cc -@@ -51,3 +51,7 @@ base::WeakPtr +@@ -65,3 +65,7 @@ base::WeakPtr AutocompleteProviderClient::GetWeakPtr() { return nullptr; } @@ -2183,7 +2203,7 @@ diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/compon diff --git a/components/omnibox/browser/autocomplete_provider_client.h b/components/omnibox/browser/autocomplete_provider_client.h --- a/components/omnibox/browser/autocomplete_provider_client.h +++ b/components/omnibox/browser/autocomplete_provider_client.h -@@ -143,6 +143,7 @@ class AutocompleteProviderClient : public OmniboxAction::Client { +@@ -152,6 +152,7 @@ class AutocompleteProviderClient : public OmniboxAction::Client { virtual bool IsOffTheRecord() const = 0; virtual bool IsIncognitoProfile() const = 0; virtual bool IsGuestSession() const = 0; @@ -2194,7 +2214,7 @@ diff --git a/components/omnibox/browser/autocomplete_provider_client.h b/compone diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omnibox/browser/base_search_provider.cc --- a/components/omnibox/browser/base_search_provider.cc +++ b/components/omnibox/browser/base_search_provider.cc -@@ -394,7 +394,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( +@@ -413,7 +413,7 @@ bool BaseSearchProvider::CanSendSuggestRequest( // Don't make a suggest request if in incognito mode; unless for the Lens // searchboxes. @@ -2206,7 +2226,7 @@ diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omn diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc --- a/components/omnibox/browser/search_provider.cc +++ b/components/omnibox/browser/search_provider.cc -@@ -913,7 +913,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( +@@ -912,7 +912,8 @@ std::unique_ptr SearchProvider::CreateSuggestLoader( // is required. // Request for suggestions in OTR contexts is not allowed; except for the Lens // searchboxes. diff --git a/build/cromite_patches/Add-autoplay-site-setting.patch b/build/cromite_patches/Add-autoplay-site-setting.patch index 98418797332109c203e391cdd345baac6a12b53b..3c4579ad6a5b5e476a4e2674db4922f36ac2295e 100644 --- a/build/cromite_patches/Add-autoplay-site-setting.patch +++ b/build/cromite_patches/Add-autoplay-site-setting.patch @@ -279,7 +279,7 @@ new file mode 100644 diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -248,7 +248,7 @@ void ContentSettingsRegistry::Init() { +@@ -249,7 +249,7 @@ void ContentSettingsRegistry::Init() { ContentSettingsInfo::INHERIT_IN_INCOGNITO, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); @@ -299,7 +299,7 @@ diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/thi #include "third_party/blink/public/platform/web_media_player.h" #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_local_frame_client.h" -@@ -337,6 +338,8 @@ void AutoplayPolicy::TryUnlockingUserGesture() { +@@ -346,6 +347,8 @@ void AutoplayPolicy::TryUnlockingUserGesture() { } bool AutoplayPolicy::IsGestureNeededForPlayback() const { @@ -308,7 +308,7 @@ diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/thi if (!IsLockedPendingUserGesture()) return false; -@@ -449,6 +452,17 @@ void AutoplayPolicy::MaybeSetAutoplayInitiated() { +@@ -458,6 +461,17 @@ void AutoplayPolicy::MaybeSetAutoplayInitiated() { } } diff --git a/build/cromite_patches/Add-bookmark-import-export-actions.patch b/build/cromite_patches/Add-bookmark-import-export-actions.patch index 0313ff4ed633b2b6c202875c3bcdf83d555b8d74..c110631330e16d6730e9c52165aa9cec7268aed7 100644 --- a/build/cromite_patches/Add-bookmark-import-export-actions.patch +++ b/build/cromite_patches/Add-bookmark-import-export-actions.patch @@ -17,7 +17,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../app/bookmarks/BookmarkActivity.java | 31 ++ .../native_page/NativePageFactory.java | 9 +- chrome/browser/BUILD.gn | 11 +- - .../bookmarks/android/bookmark_bridge.cc | 267 +++++++++++++++++ + .../bookmarks/android/bookmark_bridge.cc | 266 ++++++++++++++++ .../bookmarks/android/bookmark_bridge.h | 30 +- .../browser/bookmarks/BookmarkBridge.java | 39 +++ .../browser/bookmarks/BookmarkDelegate.java | 10 + @@ -44,7 +44,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../add-bookmark-import-export-actions.inc | 12 + .../add-bookmark-import-export-actions.inc | 4 + .../add-bookmark-import-export-actions.inc | 1 + - .../chromium/ui/base/SelectFileDialog.java | 18 +- + .../chromium/ui/base/SelectFileDialog.java | 24 +- .../java/strings/android_ui_strings.grd | 3 + ui/shell_dialogs/select_file_dialog.h | 2 + .../select_file_dialog_android.cc | 6 + @@ -52,7 +52,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog_linux.cc | 4 + ui/shell_dialogs/select_file_dialog_linux.h | 2 + ui/shell_dialogs/select_file_dialog_win.cc | 5 + - 41 files changed, 900 insertions(+), 29 deletions(-) + 41 files changed, 905 insertions(+), 29 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc @@ -132,7 +132,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B import org.chromium.base.IntentUtils; import org.chromium.build.annotations.Nullable; -@@ -28,6 +29,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -29,6 +30,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -142,7 +142,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B /** * The activity that displays the bookmark UI on the phone. It keeps a {@link * BookmarkManagerCoordinator} inside of it and creates a snackbar manager. This activity should -@@ -41,6 +45,9 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -42,6 +46,9 @@ public class BookmarkActivity extends SnackbarActivity { private @Nullable BookmarkManagerCoordinator mBookmarkManagerCoordinator; private @Nullable BookmarkOpener mBookmarkOpener; @@ -152,10 +152,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B @Override protected void onProfileAvailable(Profile profile) { super.onProfileAvailable(profile); -@@ -70,6 +77,14 @@ public class BookmarkActivity extends SnackbarActivity { - getOnBackPressedDispatcher(), - mBookmarkManagerCoordinator, - SecondaryActivity.BOOKMARK); +@@ -68,6 +75,14 @@ public class BookmarkActivity extends SnackbarActivity { + mBookmarkManagerCoordinator.updateForUrl(url); + setContentView(mBookmarkManagerCoordinator.getView()); + BackPressHelper.create(this, getOnBackPressedDispatcher(), mBookmarkManagerCoordinator); + + final boolean listenToActivityState = true; + mIntentRequestTracker = IntentRequestTracker.createFromActivity(this); @@ -167,7 +167,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B } @Override -@@ -89,6 +104,7 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -87,6 +102,7 @@ public class BookmarkActivity extends SnackbarActivity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -175,7 +175,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString( -@@ -97,6 +113,21 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -95,6 +111,21 @@ public class BookmarkActivity extends SnackbarActivity { } } @@ -233,7 +233,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat - private final Activity mActivity; + private final ChromeActivity mActivity; private final BottomSheetController mBottomSheetController; - private final Supplier mUma; + private final Supplier mNewTabPageCreationTracker; private final BrowserControlsManager mBrowserControlsManager; @@ -251,7 +252,7 @@ public class NativePageFactory { mSnackbarManagerSupplier.get(), @@ -247,7 +247,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -221,6 +221,8 @@ static_library("browser") { +@@ -222,6 +222,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -256,7 +256,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bookmarks/chrome_bookmark_client.cc", "bookmarks/chrome_bookmark_client.h", "bookmarks/managed_bookmark_service_factory.cc", -@@ -1713,6 +1715,13 @@ static_library("browser") { +@@ -1731,6 +1733,13 @@ static_library("browser") { ] } @@ -270,7 +270,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3535,8 +3544,6 @@ static_library("browser") { +@@ -3639,8 +3648,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -282,7 +282,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -66,6 +66,28 @@ +@@ -68,6 +68,27 @@ #include "content/public/browser/web_contents.h" #include "url/gurl.h" @@ -294,8 +294,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +#include "chrome/browser/importer/profile_writer.h" +#include "chrome/browser/platform_util.h" +#include "chrome/browser/ui/chrome_select_file_policy.h" -+#include "chrome/common/importer/imported_bookmark_entry.h" -+#include "chrome/common/importer/importer_data_types.h" ++#include "components/user_data_importer/common/imported_bookmark_entry.h" +#include "chrome/common/url_constants.h" +#include "components/favicon_base/favicon_usage_data.h" +#include "components/search_engines/template_url.h" @@ -311,7 +310,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/browser/bookmarks/android/jni_headers/BookmarkBridge_jni.h" -@@ -84,6 +106,57 @@ using bookmarks::android::JavaBookmarkIdGetType; +@@ -86,6 +107,57 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; @@ -369,7 +368,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse namespace { // The key used to connect the instance of the bookmark bridge to the bookmark // model. -@@ -231,6 +304,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -296,6 +368,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -380,7 +379,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -765,6 +842,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -847,6 +923,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -533,8 +532,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + return; + + // the following import logic comes from BookmarksFileImporter class -+ std::vector bookmarks; -+ std::vector search_engines; ++ std::vector bookmarks; ++ std::vector search_engines; + favicon_base::FaviconUsageDataList favicons; + + bookmark_html_reader::ImportBookmarksFile( @@ -597,8 +596,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + class BookmarkBridgeTest; - // The delegate to fetch bookmarks information for the Android native -@@ -50,7 +54,8 @@ class BookmarkBridge : public ProfileObserver, + // Values for a bitmask used to refer to a collection of bookmark nodes. +@@ -77,7 +81,8 @@ class BookmarkBridge : public ProfileObserver, public ReadingListManager::Observer, public ReadingListModelObserver, public signin::IdentityManager::Observer, @@ -608,7 +607,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser public: // All of the injected pointers must be non-null and must outlive `this`. BookmarkBridge(Profile* profile, -@@ -81,6 +86,11 @@ class BookmarkBridge : public ProfileObserver, +@@ -108,6 +113,11 @@ class BookmarkBridge : public ProfileObserver, bool IsDoingExtensiveChanges(JNIEnv* env); @@ -620,7 +619,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); -@@ -93,6 +103,17 @@ class BookmarkBridge : public ProfileObserver, +@@ -120,6 +130,17 @@ class BookmarkBridge : public ProfileObserver, jlong id, jint type); @@ -638,7 +637,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef& j_folders_obj, -@@ -362,6 +383,8 @@ class BookmarkBridge : public ProfileObserver, +@@ -390,6 +411,8 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr profile_; // weak @@ -647,7 +646,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaGlobalRef java_bookmark_model_; const raw_ptr bookmark_model_; // weak const raw_ptr -@@ -376,6 +399,7 @@ class BookmarkBridge : public ProfileObserver, +@@ -404,6 +427,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; @@ -655,9 +654,9 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -407,6 +431,10 @@ class BookmarkBridge : public ProfileObserver, - - bool suppress_observer_notifications_ = false; +@@ -437,6 +461,10 @@ class BookmarkBridge : public ProfileObserver, + base::TimeTicks load_start_time_; + bool loading_notification_sent_ = false; + const std::string FileSelectedImpl(const base::FilePath& path); + void FileSelectedImplOnUIThread(const base::FilePath& path, @@ -679,7 +678,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Provides the communication channel for Android to fetch and manipulate the bookmark model stored * in native. -@@ -52,6 +55,9 @@ class BookmarkBridge { +@@ -53,6 +56,9 @@ class BookmarkBridge { private boolean mIsNativeBookmarkModelLoaded; private boolean mInitializedPartnerBookmarks; @@ -689,7 +688,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows // Lazily set pseudo-constants. These should never change at runtime. Used to avoid crossing // JNI to fetch information. private @Nullable BookmarkId mRootFolderId; -@@ -498,6 +504,35 @@ class BookmarkBridge { +@@ -500,6 +506,35 @@ class BookmarkBridge { .getTotalBookmarkCount(mNativeBookmarkBridge, id.getId(), id.getType()); } @@ -725,7 +724,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Synchronously gets a list of bookmarks that match the specified search query. * -@@ -1120,6 +1155,10 @@ class BookmarkBridge { +@@ -1124,6 +1159,10 @@ class BookmarkBridge { void getChildIds( long nativeBookmarkBridge, long id, int type, List bookmarksList); @@ -739,7 +738,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java -@@ -65,6 +65,16 @@ public interface BookmarkDelegate { +@@ -67,6 +67,16 @@ public interface BookmarkDelegate { /** Shows the search UI. */ void openSearchUi(); @@ -759,7 +758,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerCoordinator.java -@@ -54,6 +54,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; +@@ -53,6 +53,8 @@ import org.chromium.components.image_fetcher.ImageFetcher; import org.chromium.components.image_fetcher.ImageFetcherConfig; import org.chromium.components.image_fetcher.ImageFetcherFactory; import org.chromium.ui.KeyboardVisibilityDelegate; @@ -768,7 +767,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; import org.chromium.ui.modelutil.MVCListAdapter.ListItem; -@@ -328,6 +330,13 @@ public class BookmarkManagerCoordinator +@@ -322,6 +324,13 @@ public class BookmarkManagerCoordinator // Public API implementation. @@ -785,7 +784,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java -@@ -57,6 +57,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; +@@ -59,6 +59,8 @@ import org.chromium.components.commerce.core.SubscriptionsObserver; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.PowerBookmarkType; @@ -794,7 +793,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.ui.accessibility.AccessibilityState; import org.chromium.ui.listmenu.ListMenu; import org.chromium.ui.listmenu.ListMenuItemProperties; -@@ -75,6 +77,47 @@ import java.util.function.BooleanSupplier; +@@ -77,6 +79,47 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Predicate; @@ -842,7 +841,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Responsible for BookmarkManager business logic. */ // TODO(crbug.com/40256938): Remove BookmarkDelegate if possible. class BookmarkManagerMediator -@@ -84,6 +127,9 @@ class BookmarkManagerMediator +@@ -86,6 +129,9 @@ class BookmarkManagerMediator private static boolean sPreventLoadingForTesting; @@ -852,7 +851,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** Keeps track of whether drag is enabled / active for bookmark lists. */ private class BookmarkDragStateDelegate implements DragStateDelegate { private BookmarkDelegate mBookmarkDelegate; -@@ -573,6 +619,14 @@ class BookmarkManagerMediator +@@ -583,6 +629,14 @@ class BookmarkManagerMediator mNativePage = nativePage; } @@ -867,7 +866,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** See BookmarkManager(Coordinator)#updateForUrl */ void updateForUrl(String url) { // Bookmark model is null if the manager has been destroyed. -@@ -748,6 +802,235 @@ class BookmarkManagerMediator +@@ -758,6 +812,235 @@ class BookmarkManagerMediator } } @@ -1106,7 +1105,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java -@@ -15,6 +15,9 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +@@ -16,6 +16,9 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.BasicNativePage; import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.components.embedder_support.util.UrlConstants; @@ -1116,7 +1115,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** A native page holding a {@link BookmarkManagerCoordinator} on _tablet_. */ public class BookmarkPage extends BasicNativePage { -@@ -34,7 +37,8 @@ public class BookmarkPage extends BasicNativePage { +@@ -35,7 +38,8 @@ public class BookmarkPage extends BasicNativePage { @NonNull SnackbarManager snackbarManager, @NonNull Profile profile, @NonNull NativePageHost host, @@ -1126,9 +1125,9 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows super(host); mTitle = host.getContext().getString(R.string.bookmarks); -@@ -53,6 +57,9 @@ public class BookmarkPage extends BasicNativePage { - mBookmarkOpener, - componentName); +@@ -55,6 +59,9 @@ public class BookmarkPage extends BasicNativePage { + new BookmarkManagerOpenerImpl(), + PriceDropNotificationManagerFactory.create(profile)); mBookmarkManagerCoordinator.setBasicNativePage(this); + mBookmarkManagerCoordinator.setWindow(activity.getWindowAndroid(), + new ModalDialogManager( @@ -1139,7 +1138,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java -@@ -96,6 +96,17 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -102,6 +102,17 @@ public class BookmarkToolbar extends SelectableListToolbar setOnMenuItemClickListener(dragEnabled ? null : this); } @@ -1157,7 +1156,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows void setEditButtonVisible(boolean visible) { mEditButtonVisible = visible; getMenu().findItem(R.id.edit_menu_id).setVisible(visible); -@@ -172,6 +183,12 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -178,6 +189,12 @@ public class BookmarkToolbar extends SelectableListToolbar void setCurrentFolder(BookmarkId folder) { mCurrentFolder = mBookmarkModel.getBookmarkById(folder); @@ -1170,7 +1169,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows } void setNavigateBackRunnable(Runnable navigateBackRunnable) { -@@ -191,6 +208,13 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -202,6 +219,13 @@ public class BookmarkToolbar extends SelectableListToolbar @Override public boolean onMenuItemClick(MenuItem menuItem) { hideOverflowMenu(); @@ -1181,10 +1180,10 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + mExportBookmarkRunnable.run(); + return true; + } - return mMenuIdClickedFunction.apply(menuItem.getItemId()); + return assumeNonNull(mMenuIdClickedFunction).apply(menuItem.getItemId()); } -@@ -206,6 +230,9 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -222,6 +246,9 @@ public class BookmarkToolbar extends SelectableListToolbar protected void showNormalView() { super.showNormalView(); @@ -1197,7 +1196,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java -@@ -135,6 +135,10 @@ class BookmarkToolbarMediator +@@ -140,6 +140,10 @@ class BookmarkToolbarMediator mBookmarkDelegate = bookmarkDelegate; mModel.set( BookmarkToolbarProperties.NAVIGATE_BACK_RUNNABLE, this::onNavigateBack); @@ -1211,9 +1210,9 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarProperties.java -@@ -79,6 +79,10 @@ class BookmarkToolbarProperties { +@@ -86,6 +86,10 @@ class BookmarkToolbarProperties { - static final WritableObjectPropertyKey NAVIGATE_BACK_RUNNABLE = + static final WritableObjectPropertyKey NEXT_FOCUSABLE_VIEW = new WritableObjectPropertyKey<>(); + static final WritableObjectPropertyKey IMPORT_BOOKMARK_RUNNABLE = + new WritableObjectPropertyKey<>(); @@ -1222,12 +1221,12 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows static final PropertyKey[] ALL_KEYS = { SELECTION_DELEGATE, -@@ -106,6 +110,8 @@ class BookmarkToolbarProperties { - SELECTION_MODE_SHOW_OPEN_IN_INCOGNITO, +@@ -114,6 +118,8 @@ class BookmarkToolbarProperties { SELECTION_MODE_SHOW_MOVE, SELECTION_MODE_SHOW_MARK_READ, -- SELECTION_MODE_SHOW_MARK_UNREAD -+ SELECTION_MODE_SHOW_MARK_UNREAD, + SELECTION_MODE_SHOW_MARK_UNREAD, +- NEXT_FOCUSABLE_VIEW ++ NEXT_FOCUSABLE_VIEW, + IMPORT_BOOKMARK_RUNNABLE, + EXPORT_BOOKMARK_RUNNABLE }; @@ -1235,7 +1234,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarViewBinder.java -@@ -54,6 +54,12 @@ class BookmarkToolbarViewBinder { +@@ -56,6 +56,12 @@ class BookmarkToolbarViewBinder { model.get(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID)); } else if (key == BookmarkToolbarProperties.CURRENT_FOLDER) { bookmarkToolbar.setCurrentFolder(model.get(BookmarkToolbarProperties.CURRENT_FOLDER)); @@ -1251,7 +1250,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java -@@ -47,7 +47,7 @@ public class DownloadLocationCustomView extends ScrollView +@@ -50,7 +50,7 @@ public class DownloadLocationCustomView extends ScrollView private TextView mFileSize; private Spinner mFileLocation; private TextView mLocationAvailableSpace; @@ -1259,8 +1258,8 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse + public CheckBox mDontShowAgain; private @DownloadLocationDialogType int mDialogType; private long mTotalBytes; - private Callback mOnClickedCallback; -@@ -72,7 +72,7 @@ public class DownloadLocationCustomView extends ScrollView + private @Nullable Callback mOnClickedCallback; +@@ -75,7 +75,7 @@ public class DownloadLocationCustomView extends ScrollView mDontShowAgain = findViewById(R.id.show_again_checkbox); } @@ -1269,81 +1268,84 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse @DownloadLocationDialogType int dialogType, long totalBytes, Callback onClickedCallback, -@@ -130,7 +130,7 @@ public class DownloadLocationCustomView extends ScrollView +@@ -133,7 +133,7 @@ public class DownloadLocationCustomView extends ScrollView + /** * @return The text that the user inputted as the name of the file. */ - @Nullable -- String getFileName() { -+ public String getFileName() { +- @Nullable String getFileName() { ++ @Nullable public String getFileName() { if (mFileName == null || mFileName.getText() == null) return null; return mFileName.getText().toString(); } -@@ -139,7 +139,7 @@ public class DownloadLocationCustomView extends ScrollView +@@ -141,7 +141,7 @@ public class DownloadLocationCustomView extends ScrollView + /** * @return The file path based on what the user selected as the location of the file. */ - @Nullable -- DirectoryOption getDirectoryOption() { -+ public DirectoryOption getDirectoryOption() { +- @Nullable DirectoryOption getDirectoryOption() { ++ @Nullable public DirectoryOption getDirectoryOption() { if (mFileLocation == null) return null; DirectoryOption selected = (DirectoryOption) mFileLocation.getSelectedItem(); return selected; diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java -@@ -38,18 +38,18 @@ import java.util.ArrayList; - */ +@@ -43,13 +43,13 @@ import java.util.ArrayList; + @NullMarked public class DownloadLocationDialogCoordinator implements ModalDialogProperties.Controller { - @NonNull private DownloadLocationDialogController mController; -- private PropertyModel mDialogModel; -+ protected PropertyModel mDialogModel; - private PropertyModel mDownloadLocationDialogModel; - private PropertyModelChangeProcessor + private DownloadLocationDialogController mController; +- private @Nullable PropertyModel mDialogModel; ++ protected @Nullable PropertyModel mDialogModel; + private @Nullable PropertyModel mDownloadLocationDialogModel; + private @Nullable + PropertyModelChangeProcessor mPropertyModelChangeProcessor; -- private DownloadLocationCustomView mCustomView; -- private ModalDialogManager mModalDialogManager; -+ protected DownloadLocationCustomView mCustomView; -+ protected ModalDialogManager mModalDialogManager; +- private @Nullable DownloadLocationCustomView mCustomView; +- private @Nullable ModalDialogManager mModalDialogManager; ++ protected @Nullable DownloadLocationCustomView mCustomView; ++ protected @Nullable ModalDialogManager mModalDialogManager; + private long mTotalBytes; private @DownloadLocationDialogType int mDialogType; - private String mSuggestedPath; - private Context mContext; +@@ -57,7 +57,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. + private @Nullable Context mContext; + private boolean mHasMultipleDownloadLocations; -- private Profile mProfile; -+ protected Profile mProfile; +- private @Nullable Profile mProfile; ++ protected @Nullable Profile mProfile; + private boolean mLocationDialogManaged; - /** -@@ -141,7 +141,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. +@@ -153,7 +153,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. * Called after retrieved the download directory options. * @param dirs An list of available download directories. */ - private void onDirectoryOptionsRetrieved(ArrayList dirs) { + protected void onDirectoryOptionsRetrieved(ArrayList dirs) { - // Already showing the dialog. - if (mDialogModel != null) return; - + assertNonNull(mContext); + assertNonNull(mModalDialogManager); + assertNonNull(mSuggestedPath); diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -213,6 +213,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { - &kCCTAuthTab, - &kCCTAuthTabDisableAllExternalIntents, - &kCCTAuthTabEnableHttpsRedirects, +@@ -223,6 +223,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kBatchTabRestore, + &kBlockIntentsWhileLocked, + &kBookmarkPaneAndroid, + &kBookmarksExportUseSaf, - &kCCTBeforeUnload, - &kCCTBlockTouchesDuringEnterAnimation, - &kCCTClientDataHeader, + &kBottomBrowserControlsRefactor, + &kTabClosureMethodRefactor, + &kBrowserControlsDebugging, 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 --- 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 -@@ -599,6 +599,7 @@ public abstract class ChromeFeatureList { +@@ -624,6 +624,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; + public static final String BOOKMARKS_EXPORT_USESAF = "BookmarksExportUseSaf"; - public static final String VOICE_SEARCH_AUDIO_CAPTURE_POLICY = "VoiceSearchAudioCapturePolicy"; public static final String WEB_APK_BACKUP_AND_RESTORE_BACKEND = "WebApkBackupAndRestoreBackend"; public static final String WEB_APK_INSTALL_FAILURE_NOTIFICATION = + "WebApkInstallFailureNotification"; diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc --- a/chrome/browser/importer/profile_writer.cc +++ b/chrome/browser/importer/profile_writer.cc @@ -1356,7 +1358,7 @@ diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer + +void ProfileWriter::AddBookmarksWithModel( + BookmarkModel* model, -+ const std::vector& bookmarks, ++ const std::vector& bookmarks, + const std::u16string& top_level_folder_name) { + if (bookmarks.empty()) + return; @@ -1375,13 +1377,13 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ #include "components/favicon_base/favicon_usage_data.h" #include "components/history/core/browser/history_types.h" #include "components/search_engines/template_url_service.h" -@@ -71,6 +72,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { - virtual void AddBookmarks(const std::vector& bookmarks, - const std::u16string& top_level_folder_name); +@@ -75,6 +76,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { + const std::vector& bookmarks, + const std::u16string& top_level_folder_name); + virtual void AddBookmarksWithModel( + bookmarks::BookmarkModel* model, -+ const std::vector& bookmarks, ++ const std::vector& bookmarks, + const std::u16string& top_level_folder_name); + virtual void AddFavicons(const favicon_base::FaviconUsageDataList& favicons); @@ -1390,7 +1392,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -127,6 +127,8 @@ public final class ChromePreferenceKeys { +@@ -140,6 +140,8 @@ public final class ChromePreferenceKeys { "enhanced_bookmark_last_used_parent_folder"; public static final String BOOKMARKS_SORT_ORDER = "Chrome.Bookmarks.BookmarkRowSortOrder"; public static final String BOOKMARKS_VISUALS_PREF = "Chrome.Bookmarks.BookmarkRowDisplay"; @@ -1399,8 +1401,8 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** Whether Chrome is set as the default browser. Default value is false. */ public static final String CHROME_DEFAULT_BROWSER = "applink.chrome_default_browser"; -@@ -957,6 +959,7 @@ public final class ChromePreferenceKeys { - AUXILIARY_SEARCH_IS_SCHEMA_V2_SET, +@@ -999,6 +1001,7 @@ public final class ChromePreferenceKeys { + AUXILIARY_SEARCH_SCHEMA_VERSION, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, + BOOKMARKS_LAST_EXPORT_URI, @@ -1410,7 +1412,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -246,6 +246,24 @@ CHAR_LIMIT guidelines: +@@ -249,6 +249,24 @@ CHAR_LIMIT guidelines: Sites @@ -1438,20 +1440,20 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -350,6 +350,9 @@ static_library("common_lib") { +@@ -352,6 +352,9 @@ static_library("common_lib") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", + ## Bromite dependencies for bookmark import functionality -+ "importer/imported_bookmark_entry.cc", -+ "importer/imported_bookmark_entry.h", ++ "//components/user_data_importer/common/imported_bookmark_entry.cc", ++ "//components/user_data_importer/common/imported_bookmark_entry.h", ] } else { # Non-Android. diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn -@@ -89,8 +89,6 @@ static_library("utility") { +@@ -88,8 +88,6 @@ static_library("utility") { if (!is_android) { sources += [ @@ -1460,8 +1462,8 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn "importer/bookmarks_file_importer.cc", "importer/bookmarks_file_importer.h", "importer/external_process_importer_bridge.cc", -@@ -227,6 +225,11 @@ static_library("utility") { - ] +@@ -222,6 +220,11 @@ static_library("utility") { + deps += [ "//chrome/services/pdf:lib" ] } + sources += [ @@ -1475,16 +1477,16 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/importer/bookmark_html_reader.cc --- a/chrome/utility/importer/bookmark_html_reader.cc +++ b/chrome/utility/importer/bookmark_html_reader.cc -@@ -17,7 +17,9 @@ +@@ -16,7 +16,9 @@ + #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" - #include "chrome/common/importer/imported_bookmark_entry.h" +#if !BUILDFLAG(IS_ANDROID) #include "chrome/utility/importer/favicon_reencode.h" +#endif #include "components/search_engines/search_terms_data.h" #include "components/search_engines/template_url.h" - #include "net/base/data_url.h" + #include "components/user_data_importer/common/imported_bookmark_entry.h" @@ -55,6 +57,7 @@ bool GetAttribute(const std::string& attribute_list, return true; } @@ -1510,8 +1512,8 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im + const base::RepeatingCallback cancellation_callback, + const base::RepeatingCallback valid_url_callback, const base::FilePath& file_path, - std::vector* bookmarks, - std::vector* search_engines, + std::vector* bookmarks, + std::vector* search_engines, favicon_base::FaviconUsageDataList* favicons) { std::string content; - base::ReadFileToString(file_path, &content); @@ -1528,8 +1530,8 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im + base::RepeatingCallback cancellation_callback, + base::RepeatingCallback valid_url_callback, + const std::string& content, -+ std::vector* bookmarks, -+ std::vector* search_engines, ++ std::vector* bookmarks, ++ std::vector* search_engines, + favicon_base::FaviconUsageDataList* favicons) { std::vector lines = base::SplitString( content, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); @@ -1558,16 +1560,16 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/im diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h --- a/chrome/utility/importer/bookmark_html_reader.h +++ b/chrome/utility/importer/bookmark_html_reader.h -@@ -50,6 +50,14 @@ void ImportBookmarksFile( - std::vector* search_engines, +@@ -53,6 +53,14 @@ void ImportBookmarksFile( + std::vector* search_engines, favicon_base::FaviconUsageDataList* favicons); +void ImportBookmarksFile( + const base::RepeatingCallback cancellation_callback, + const base::RepeatingCallback valid_url_callback, + const std::string& content, -+ std::vector* bookmarks, -+ std::vector* search_engines, ++ std::vector* bookmarks, ++ std::vector* search_engines, + favicon_base::FaviconUsageDataList* favicons); + // Returns true if |url| should be imported as a search engine, i.e. because it @@ -1638,19 +1640,25 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui private static final String AUDIO_TYPE = "audio"; private static final String ALL_TYPES = "*/*"; private static final String GENERIC_TYPE = "application/octet-stream"; -@@ -323,6 +325,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -323,6 +325,17 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick mMimeTypes = convertToSupportedMimeTypes(mFileTypes); } + @CalledByNative + private void showToast(String message) { -+ Toast.makeText(ContextUtils.getApplicationContext(), message, Toast.LENGTH_LONG).show(); ++ ThreadUtils.runOnUiThread( ++ new Runnable() { ++ @Override ++ public void run() { ++ Toast.makeText(ContextUtils.getApplicationContext(), message, Toast.LENGTH_LONG).show(); ++ } ++ }); + } + /** * Creates and starts an intent based on the passed fileTypes and capture value. * -@@ -407,7 +414,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -407,7 +420,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick List missingPermissions = new ArrayList<>(); String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE; boolean shouldUsePhotoPicker = shouldUsePhotoPicker(); @@ -1659,7 +1667,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui // The permission scenario for accessing media has evolved a bit over the years: // Early on, READ_EXTERNAL_STORAGE was required to access media, but that permission was // later deprecated. In its place (starting with Android T) READ_MEDIA_IMAGES and -@@ -460,7 +467,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -460,7 +473,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick // TODO(finnur): Remove once we figure out the cause of // crbug.com/950024. @@ -1668,7 +1676,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui if (permissions.length != requestPermissions.length) { throw new RuntimeException( String.format( -@@ -477,7 +484,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -477,7 +490,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick } } @@ -1677,7 +1685,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui if (permissions[i].equals(storagePermission) || permissions[i].equals( Manifest.permission.READ_MEDIA_IMAGES) -@@ -783,6 +790,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -783,6 +796,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick mimeTypes.add(mimeType); } } @@ -1685,7 +1693,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui return mimeTypes; } -@@ -1155,6 +1163,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -1155,6 +1169,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick return countAcceptTypesFor(superType) == mMimeTypes.size(); } diff --git a/build/cromite_patches/Add-cromite-flags-support.patch b/build/cromite_patches/Add-cromite-flags-support.patch index 3eecdcb2150e000c323caee8a2ecc43dd55f44dd..6723bf821f2cc1ae5cd748ab9031128f89974b89 100644 --- a/build/cromite_patches/Add-cromite-flags-support.patch +++ b/build/cromite_patches/Add-cromite-flags-support.patch @@ -41,6 +41,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../Add-cromite-flags-support.grdp | 9 + .../placeholder.txt | 1 + chrome/browser/ui/ui_features.cc | 1 + + chrome/browser/unexpire_flags.cc | 15 +- chrome/common/chrome_features.cc | 1 + .../browser_ui/accessibility/android/BUILD.gn | 1 + .../res/xml/accessibility_preferences.xml | 3 +- @@ -106,7 +107,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + - 93 files changed, 812 insertions(+), 29 deletions(-) + 94 files changed, 826 insertions(+), 30 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp @@ -143,7 +144,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/base/BUILD.gn b/base/BUILD.gn --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -164,6 +164,8 @@ use_epoll = is_linux || is_chromeos || is_android +@@ -178,6 +178,8 @@ use_epoll = is_linux || is_chromeos || is_android # This does not include test code (test support and anything in the test # directory) which should use source_set as is recommended for GN targets). component("base") { @@ -152,7 +153,7 @@ diff --git a/base/BUILD.gn b/base/BUILD.gn sources = [ "allocator/allocator_check.cc", "allocator/allocator_check.h", -@@ -1019,7 +1021,7 @@ component("base") { +@@ -1036,7 +1038,7 @@ component("base") { "//build/config/compiler:wglobal_constructors", ] @@ -291,7 +292,7 @@ diff --git a/base/feature_list.cc b/base/feature_list.cc diff --git a/base/feature_list.h b/base/feature_list.h --- a/base/feature_list.h +++ b/base/feature_list.h -@@ -167,8 +167,10 @@ enum class FeatureMacroHandshake { kSecret }; +@@ -174,8 +174,10 @@ enum class FeatureMacroHandshake { kSecret }; struct BASE_EXPORT LOGICALLY_CONST Feature { constexpr Feature(const char* name, FeatureState default_state, @@ -304,7 +305,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h #if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) if (std::string_view(name).find(BUILDFLAG(BANNED_BASE_FEATURE_PREFIX)) == 0) { -@@ -195,6 +197,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { +@@ -202,6 +204,9 @@ struct BASE_EXPORT LOGICALLY_CONST Feature { // command line switch. const FeatureState default_state; @@ -314,7 +315,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h private: friend class FeatureList; -@@ -474,6 +479,11 @@ class BASE_EXPORT FeatureList { +@@ -481,6 +486,11 @@ class BASE_EXPORT FeatureList { // instance, which is checked in builds with DCHECKs enabled. static bool IsEnabled(const Feature& feature); @@ -326,7 +327,7 @@ diff --git a/base/feature_list.h b/base/feature_list.h // Some characters are not allowed to appear in feature names or the // associated field trial names, as they are used as special characters for // command-line serialization. This function checks that the strings are ASCII -@@ -743,4 +753,62 @@ class BASE_EXPORT FeatureList { +@@ -750,4 +760,62 @@ class BASE_EXPORT FeatureList { } // namespace base @@ -436,7 +437,7 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -48,6 +48,10 @@ found in the LICENSE file. +@@ -44,6 +44,10 @@ found in the LICENSE file. android:key="do_not_track" android:title="@string/do_not_track_title" android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" /> @@ -450,24 +451,24 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java -@@ -37,7 +37,7 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { +@@ -38,7 +38,7 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); @Override -- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { -+ public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) { +- public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { ++ public void onCreatePreferencesCromite(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { mHomepageManager = HomepageManager.getInstance(); mPageTitle.set(getString(R.string.options_homepage_title)); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -84,7 +84,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment - private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); +@@ -127,7 +127,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + } @Override -- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { -+ public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) { +- public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { ++ public void onCreatePreferencesCromite(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { mPageTitle.set(getString(R.string.prefs_privacy_security)); SettingsUtils.addPreferencesFromResource(this, R.xml.privacy_preferences); @@ -482,7 +483,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplier; import org.chromium.chrome.browser.LaunchIntentDispatcher; -@@ -75,18 +76,21 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -76,18 +77,21 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl private final OneshotSupplier mSnackbarManagerSupplier; private final OneshotSupplier mBottomSheetControllerSupplier; private final ObservableSupplier mModalDialogManagerSupplier; @@ -505,7 +506,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme } @Override -@@ -95,6 +99,10 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -96,6 +100,10 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl @NonNull Fragment fragment, @NonNull Context unusedContext) { // Common dependencies attachments. @@ -527,7 +528,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -@@ -32,7 +33,9 @@ import org.chromium.base.Callback; +@@ -34,7 +35,9 @@ import org.chromium.base.Callback; import org.chromium.base.CallbackUtils; import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; @@ -537,7 +538,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeBaseAppCompatActivity; -@@ -41,12 +44,14 @@ import org.chromium.chrome.browser.back_press.SecondaryActivityBackPressUma.Seco +@@ -42,12 +45,14 @@ import org.chromium.chrome.browser.back_press.BackPressHelper; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; @@ -552,10 +553,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerFactory; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; -@@ -85,6 +90,40 @@ import java.util.Locale; - */ - public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -89,6 +94,40 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback, SnackbarManageable { + private static final String TAG = "SettingsActivity"; + + private static class RequestRestartDelegate implements ChromeBaseSettingsFragment.RequireRestartDelegate { + private OneshotSupplier mSnackbarManagerSupplier; + private Activity mActivity; @@ -593,7 +594,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public static final String EXTRA_SHOW_FRAGMENT = "show_fragment"; -@@ -151,7 +190,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -155,7 +194,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity mProfile, mSnackbarManagerSupplier, mBottomSheetControllerSupplier, @@ -632,7 +633,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/setting diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -396,6 +396,10 @@ using flags_ui::kOsLinux; +@@ -406,6 +406,10 @@ using flags_ui::kOsLinux; using flags_ui::kOsMac; using flags_ui::kOsWin; @@ -643,9 +644,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc namespace about_flags { namespace { -@@ -4428,6 +4432,10 @@ const FeatureEntry::FeatureVariation - std::size(kStandardBoundSessionCredentialsEnabledOriginTrialToken), - nullptr}}; +@@ -4705,6 +4709,10 @@ const FeatureEntry::FeatureVariation kHistorySyncOptinExpansionPillVariations[] + nullptr}}; + #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) +#define FEATURE_PARAM_SECTION +#include "cromite_flags/chrome_browser_about_flags_cc.inc" @@ -654,7 +655,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. -@@ -4454,6 +4462,9 @@ const FeatureEntry::FeatureVariation +@@ -4731,6 +4739,9 @@ const FeatureEntry::FeatureVariation kHistorySyncOptinExpansionPillVariations[] const FeatureEntry kFeatureEntries[] = { // Include generated flags for flag unexpiry; see //docs/flag_expiry.md and // //tools/flags/generate_unexpire_flags.py. @@ -667,7 +668,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -357,4 +357,5 @@ BASE_FEATURE(kRemovalOfIWAsFromTabCapture, +@@ -359,4 +359,5 @@ BASE_FEATURE(kRemovalOfIWAsFromTabCapture, "RemovalOfIWAsFromTabCapture", base::FEATURE_ENABLED_BY_DEFAULT); @@ -676,7 +677,7 @@ diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_feature diff --git a/chrome/browser/browser_features.h b/chrome/browser/browser_features.h --- a/chrome/browser/browser_features.h +++ b/chrome/browser/browser_features.h -@@ -134,6 +134,7 @@ BASE_DECLARE_FEATURE(kRemovalOfIWAsFromTabCapture); +@@ -135,6 +135,7 @@ BASE_DECLARE_FEATURE(kRemovalOfIWAsFromTabCapture); // module, e.g. // //chrome/browser//features.h // @@ -726,7 +727,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -1207,5 +1207,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, +@@ -1345,5 +1345,6 @@ BASE_FEATURE(kWebOtpCrossDeviceSimpleString, "WebOtpCrossDeviceSimpleString", base::FEATURE_DISABLED_BY_DEFAULT); @@ -736,7 +737,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -241,6 +241,7 @@ constexpr base::FeatureParam kQuickDeleteAndroidSurveyTriggerId( +@@ -285,6 +285,7 @@ constexpr base::FeatureParam kQuickDeleteAndroidSurveyTriggerId( "trigger_id", /*default_value=*/""); @@ -758,16 +759,16 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f import java.util.List; import java.util.Map; -@@ -863,7 +867,7 @@ public abstract class ChromeFeatureList { +@@ -923,7 +927,7 @@ public abstract class ChromeFeatureList { public static final CachedFlag sWebApkMinShellApkVersion = newCachedFlag(WEB_APK_MIN_SHELL_APK_VERSION, true); - public static final List sFlagsCachedFullBrowser = + public static final List sFlagsCachedFullBrowserChromium = List.of( - sAndroidAppIntegration, - sAndroidAppIntegrationModule, -@@ -968,6 +972,13 @@ public abstract class ChromeFeatureList { + sAccountForSuppressedKeyboardInsets, + sAllowTabClosingUponMinimization, +@@ -1047,6 +1051,13 @@ public abstract class ChromeFeatureList { sUseLibunwindstackNativeUnwinderAndroid, sWebApkMinShellApkVersion); @@ -855,8 +856,8 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse +++ b/chrome/browser/settings/android/java/src/org/chromium/chrome/browser/settings/ChromeBaseSettingsFragment.java @@ -8,12 +8,19 @@ import androidx.preference.PreferenceFragmentCompat; + import org.chromium.build.annotations.Initializer; import org.chromium.build.annotations.NullMarked; - import org.chromium.build.annotations.Nullable; +import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncher; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherFactory; @@ -874,8 +875,8 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse * Base class for settings in Chrome. * @@ -28,6 +35,49 @@ public abstract class ChromeBaseSettingsFragment extends PreferenceFragmentCompa - private @Nullable Profile mProfile; - private @Nullable SettingsCustomTabLauncher mCustomTabLauncher; + private Profile mProfile; + private SettingsCustomTabLauncher mCustomTabLauncher; + private Supplier mRequireRestartDelegateSupplier; + @@ -957,16 +958,48 @@ new file mode 100644 diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -371,4 +371,5 @@ BASE_FEATURE(kByDateHistoryInSidePanel, - "ByDateHistoryInSidePanel", - base::FEATURE_DISABLED_BY_DEFAULT); +@@ -500,4 +500,5 @@ bool HasTabSearchToolbarButton() { + return has_tab_search_toolbar_button; + } +#include "cromite_flags/chrome_browser_ui_ui_features_cc.inc" } // namespace features +diff --git a/chrome/browser/unexpire_flags.cc b/chrome/browser/unexpire_flags.cc +--- a/chrome/browser/unexpire_flags.cc ++++ b/chrome/browser/unexpire_flags.cc +@@ -12,6 +12,7 @@ + #include "base/containers/contains.h" + #include "base/containers/flat_map.h" + #include "base/no_destructor.h" ++#include "chrome/browser/about_flags.h" + #include "chrome/browser/expired_flags_list.h" + #include "chrome/browser/unexpire_flags_gen.h" + #include "chrome/common/chrome_version.h" +@@ -117,7 +118,19 @@ bool IsFlagExpired(const flags_ui::FlagsStorage* storage, + + // Otherwise, the flag is expired if its expiration mstone is less than the + // mstone of this copy of Chromium. +- return mstone < CHROME_VERSION_MAJOR; ++ if (mstone < CHROME_VERSION_MAJOR) { ++ if (const flags_ui::FeatureEntry* entry = ++ about_flags::GetCurrentFlagsState()->FindFeatureEntryByName( ++ internal_name)) { ++ if (const base::Feature* feature = entry->feature.feature) { ++ if (feature->is_cromite) { ++ return false; ++ } ++ } ++ } ++ return true; ++ } ++ return false; + } + + namespace testing { diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1591,4 +1591,5 @@ BASE_FEATURE(kDisableShortcutsEnableDiy, +@@ -1795,4 +1795,5 @@ BASE_FEATURE(kDisableShortcutsEnableDiy, "DisableShortcutsEnableDiy", base::FEATURE_ENABLED_BY_DEFAULT); @@ -999,27 +1032,28 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -24,8 +24,10 @@ import org.chromium.components.omnibox.OmniboxFeatures; +@@ -28,9 +28,11 @@ import org.chromium.components.omnibox.OmniboxFeatures; import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; +import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; + /** Fragment to keep track of all the accessibility related preferences. */ + @NullMarked -public class AccessibilitySettings extends PreferenceFragmentCompat +public class AccessibilitySettings extends ChromeBaseSettingsFragment implements EmbeddableSettingsPage, Preference.OnPreferenceChangeListener { public static final String PREF_PAGE_ZOOM_DEFAULT_ZOOM = "page_zoom_default_zoom"; public static final String PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT = -@@ -64,7 +66,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -69,7 +71,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat } @Override -- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { -+ public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) { +- public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { ++ public void onCreatePreferencesCromite(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { SettingsUtils.addPreferencesFromResource(this, R.xml.accessibility_preferences); - mPageZoomDefaultZoomPref = (PageZoomPreference) findPreference(PREF_PAGE_ZOOM_DEFAULT_ZOOM); + mPageZoomDefaultZoomPref = findPreference(PREF_PAGE_ZOOM_DEFAULT_ZOOM); diff --git a/components/browser_ui/settings/android/java/res/values/attrs.xml b/components/browser_ui/settings/android/java/res/values/attrs.xml --- a/components/browser_ui/settings/android/java/res/values/attrs.xml +++ b/components/browser_ui/settings/android/java/res/values/attrs.xml @@ -1037,7 +1071,7 @@ diff --git a/components/browser_ui/settings/android/java/res/values/attrs.xml b/ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java -@@ -15,6 +15,8 @@ import android.view.accessibility.AccessibilityEvent; +@@ -13,6 +13,8 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; @@ -1046,7 +1080,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; -@@ -40,6 +42,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { +@@ -38,6 +40,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { /** Indicates if the preference uses a custom layout. */ private final boolean mHasCustomLayout; @@ -1058,7 +1092,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium // TOOD(crbug.com/1451550): This is an interim solution. In the long-term, we should migrate // away from a switch with dynamically changing summaries onto a radio group. /** -@@ -59,6 +66,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { +@@ -57,6 +64,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { mHasCustomLayout = ManagedPreferencesUtils.isCustomLayoutApplied(context, attrs); mUseSummaryAsTitle = true; @@ -1116,8 +1150,8 @@ diff --git a/components/components_strings.grd b/components/components_strings.g diff --git a/components/content_settings/core/common/features.cc b/components/content_settings/core/common/features.cc --- a/components/content_settings/core/common/features.cc +++ b/components/content_settings/core/common/features.cc -@@ -163,5 +163,6 @@ BASE_FEATURE(kContentSettingsPartitioning, - "ContentSettingsPartitioning", +@@ -167,5 +167,6 @@ BASE_FEATURE(kForceAllowStorageAccess, + "ForceAllowStorageAccess", base::FEATURE_DISABLED_BY_DEFAULT); +#include "cromite_flags/components_content_settings_core_common_features_cc.inc" @@ -1152,7 +1186,7 @@ diff --git a/components/offline_pages/core/offline_page_feature.h b/components/o diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc -@@ -187,4 +187,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, +@@ -183,4 +183,5 @@ BASE_FEATURE(kImprovedPasswordChangeService, "ImprovedPasswordChangeService", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1161,7 +1195,7 @@ diff --git a/components/password_manager/core/browser/features/password_features diff --git a/components/permissions/features.cc b/components/permissions/features.cc --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -137,6 +137,8 @@ BASE_FEATURE(kOsAdditionalSecurityPermissionKillSwitch, +@@ -146,6 +146,8 @@ BASE_FEATURE(kOsAdditionalSecurityPermissionKillSwitch, "OsAdditionalSecurityPermissionKillSwitch", base::FEATURE_DISABLED_BY_DEFAULT); #endif @@ -1215,7 +1249,7 @@ diff --git a/components/variations/synthetic_trials_active_group_id_provider.h b diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flags_state.cc --- a/components/webui/flags/flags_state.cc +++ b/components/webui/flags/flags_state.cc -@@ -377,6 +377,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( +@@ -376,6 +376,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); @@ -1234,10 +1268,10 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag + } + NOTREACHED(); + } - CHECK(entry_it != name_to_switch_map.end(), base::NotFatalUntil::M130); + CHECK(entry_it != name_to_switch_map.end()); const SwitchEntry& entry = entry_it->second; -@@ -705,6 +720,27 @@ void FlagsState::GetFlagFeatureEntries( +@@ -709,6 +724,27 @@ void FlagsState::GetFlagFeatureEntries( data.Set("links", std::move(links)); } @@ -1265,7 +1299,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag switch (entry.type) { case FeatureEntry::SINGLE_VALUE: case FeatureEntry::SINGLE_DISABLE_VALUE: -@@ -832,6 +868,16 @@ void FlagsState::AddSwitchesToCommandLine( +@@ -836,6 +872,16 @@ void FlagsState::AddSwitchesToCommandLine( for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); if (entry_it == name_to_switch_map.end()) { @@ -1282,7 +1316,7 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag NOTREACHED(); } -@@ -1088,6 +1134,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( +@@ -1092,6 +1138,14 @@ const FeatureEntry* FlagsState::FindFeatureEntryByName( bool FlagsState::IsSupportedFeature(const FlagsStorage* storage, const std::string& name, int platform_mask) const { @@ -1297,10 +1331,10 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag for (const auto& entry : feature_entries_) { DCHECK(entry.IsValid()); if (!(entry.supported_platforms & platform_mask)) { -@@ -1122,6 +1176,11 @@ void FlagsState::SetFlags(FlagsStorage* flags_storage, - std::string feature_internal_name = flag.substr(0, at_index); - const flags_ui::FeatureEntry* entry = +@@ -1130,6 +1184,11 @@ void FlagsState::SetFlags( FindFeatureEntryByName(feature_internal_name); + // Since this flag is currently enabled, we know for sure that we can find + // its feature entry using its internal name. + if (!entry) { + if (base::FeatureList::IsCromiteFlag(feature_internal_name)) { + continue; @@ -1401,16 +1435,16 @@ diff --git a/components/webui/flags/resources/app.ts b/components/webui/flags/re // + "Cromite", ]; - protected selectedTabIndex_: number = 0; + protected accessor selectedTabIndex_: number = 0; @@ -150,9 +151,12 @@ export class FlagsAppElement extends CrLitElement { - protected defaultFeatures: Feature[] = []; - protected nonDefaultFeatures: Feature[] = []; + protected accessor defaultFeatures: Feature[] = []; + protected accessor nonDefaultFeatures: Feature[] = []; + protected defaultCromiteFeatures: Feature[] = []; + protected nonDefaultCromiteFeatures: Feature[] = []; - protected searching: boolean = false; - protected needsRestart: boolean = false; + protected accessor searching: boolean = false; + protected accessor needsRestart: boolean = false; + private onlyCromiteFlags: boolean = false; private announceStatusDelayMs: number = 100; @@ -1594,7 +1628,7 @@ diff --git a/components/webui/version/version_handler_helper.cc b/components/web diff --git a/content/common/features.cc b/content/common/features.cc --- a/content/common/features.cc +++ b/content/common/features.cc -@@ -509,4 +509,5 @@ BASE_FEATURE(kLimitCrossOriginNonActivatedPaintHolding, +@@ -596,4 +596,5 @@ BASE_FEATURE(kDisallowRasterInterfaceWithoutSkiaBackend, // Please keep features in alphabetical order. @@ -1603,8 +1637,8 @@ diff --git a/content/common/features.cc b/content/common/features.cc diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -1485,4 +1485,5 @@ bool IsVideoCaptureServiceEnabledForBrowserProcess() { - VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; +@@ -1521,4 +1521,5 @@ bool IsPushSubscriptionChangeEventEnabled() { + features::kPushSubscriptionChangeEventOnResubscribe); } +#include "cromite_flags/content_public_common_content_features_cc.inc" @@ -1612,9 +1646,9 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h -@@ -350,6 +350,7 @@ CONTENT_EXPORT extern const base::FeatureParam - CONTENT_EXPORT bool IsVideoCaptureServiceEnabledForOutOfProcess(); +@@ -359,6 +359,7 @@ CONTENT_EXPORT bool IsVideoCaptureServiceEnabledForOutOfProcess(); CONTENT_EXPORT bool IsVideoCaptureServiceEnabledForBrowserProcess(); + CONTENT_EXPORT bool IsPushSubscriptionChangeEventEnabled(); +#include "cromite_flags/content_public_common_content_features_h.inc" } // namespace features @@ -1958,7 +1992,7 @@ new file mode 100755 diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -1807,5 +1807,5 @@ uint32_t GetPassthroughAudioFormats() { +@@ -1843,5 +1843,5 @@ uint32_t GetPassthroughAudioFormats() { return 0; #endif // BUILDFLAG(ENABLE_PASSTHROUGH_AUDIO_CODECS) } @@ -1968,7 +2002,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc diff --git a/media/base/media_switches.h b/media/base/media_switches.h --- a/media/base/media_switches.h +++ b/media/base/media_switches.h -@@ -571,5 +571,5 @@ MEDIA_EXPORT OOPVDMode GetOutOfProcessVideoDecodingMode(); +@@ -569,5 +569,5 @@ MEDIA_EXPORT bool IsOutOfProcessVideoDecodingEnabled(); MEDIA_EXPORT uint32_t GetPassthroughAudioFormats(); } // namespace media @@ -1978,8 +2012,8 @@ diff --git a/media/base/media_switches.h b/media/base/media_switches.h diff --git a/net/base/features.cc b/net/base/features.cc --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -709,4 +709,5 @@ BASE_FEATURE(kSelfSignedLocalNetworkInterstitial, - "SelfSignedLocalNetworkInterstitial", +@@ -784,4 +784,5 @@ BASE_FEATURE(kRestrictAbusePortsOnLocalhost, + "RestrictAbusePortsOnLocalhost", base::FEATURE_DISABLED_BY_DEFAULT); +#include "cromite_flags/net_base_features_cc.inc" @@ -1987,9 +2021,9 @@ diff --git a/net/base/features.cc b/net/base/features.cc diff --git a/net/base/features.h b/net/base/features.h --- a/net/base/features.h +++ b/net/base/features.h -@@ -721,6 +721,7 @@ NET_EXPORT BASE_DECLARE_FEATURE(kUseCertTransparencyAwareApiForOsCertVerify); - // URLs. - NET_EXPORT BASE_DECLARE_FEATURE(kSelfSignedLocalNetworkInterstitial); +@@ -800,6 +800,7 @@ NET_EXPORT extern const base::FeatureParam + // Finch-controlled list of ports that should be blocked on localhost. + NET_EXPORT BASE_DECLARE_FEATURE(kRestrictAbusePortsOnLocalhost); +#include "cromite_flags/net_base_features_h.inc" } // namespace net::features @@ -1998,18 +2032,18 @@ diff --git a/net/base/features.h b/net/base/features.h diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -544,4 +544,5 @@ BASE_FEATURE_PARAM(int, - "max_ops_before_maintenance", - 1000); +@@ -617,4 +617,5 @@ BASE_FEATURE_PARAM(size_t, + /*name=*/"max_size", + 1'000'000); +#include "cromite_flags/services_network_public_cpp_features_cc.inc" } // namespace network::features diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h -@@ -261,6 +261,7 @@ BASE_DECLARE_FEATURE_PARAM(int, kInterestGroupStorageMaxNegativeGroupsPerOwner); - COMPONENT_EXPORT(NETWORK_CPP) - BASE_DECLARE_FEATURE_PARAM(int, kInterestGroupStorageMaxOpsBeforeMaintenance); +@@ -340,6 +340,7 @@ BASE_DECLARE_FEATURE_PARAM(size_t, kSharedDictionaryCacheSize); + COMPONENT_EXPORT(NETWORK_CPP_FLAGS_AND_SWITCHES) + BASE_DECLARE_FEATURE_PARAM(size_t, kSharedDictionaryCacheMaxSizeBytes); +#include "cromite_flags/services_network_public_cpp_features_h.inc" } // namespace network::features @@ -2018,7 +2052,7 @@ diff --git a/services/network/public/cpp/features.h b/services/network/public/cp diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -2744,4 +2744,5 @@ bool IsLinkPreviewTriggerTypeEnabled(LinkPreviewTriggerType type) { +@@ -2912,4 +2912,5 @@ bool IsLinkPreviewTriggerTypeEnabled(LinkPreviewTriggerType type) { // // DO NOT ADD NEW FEATURES HERE. @@ -2027,7 +2061,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -1793,6 +1793,7 @@ BLINK_COMMON_EXPORT bool IsUpdateComplexSafaAreaConstraintsEnabled(); +@@ -1896,6 +1896,7 @@ BLINK_COMMON_EXPORT bool IsUpdateComplexSafaAreaConstraintsEnabled(); // // DO NOT ADD NEW FEATURES HERE. @@ -2038,18 +2072,18 @@ diff --git a/third_party/blink/public/common/features.h b/third_party/blink/publ diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc -@@ -456,4 +456,5 @@ BASE_FEATURE(kAsyncFullscreenWindowState, - "AsyncFullscreenWindowState", - base::FEATURE_DISABLED_BY_DEFAULT); +@@ -506,4 +506,5 @@ bool IsPixelCanvasRecordingEnabled() { + return base::FeatureList::IsEnabled(features::kEnablePixelCanvasRecording); + } +#include "cromite_flags/ui_base_features_cc.inc" } // namespace features diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h --- a/ui/base/ui_base_features.h +++ b/ui/base/ui_base_features.h -@@ -230,6 +230,7 @@ BASE_DECLARE_FEATURE(kWriteBookmarkWithoutTitle); - COMPONENT_EXPORT(UI_BASE_FEATURES) - BASE_DECLARE_FEATURE(kAsyncFullscreenWindowState); +@@ -252,6 +252,7 @@ BASE_DECLARE_FEATURE(kEnablePixelCanvasRecording); + + bool COMPONENT_EXPORT(UI_BASE_FEATURES) IsPixelCanvasRecordingEnabled(); +#include "cromite_flags/ui_base_features_h.inc" } // namespace features diff --git a/build/cromite_patches/Add-custom-tab-intents-privacy-option.patch b/build/cromite_patches/Add-custom-tab-intents-privacy-option.patch index f531b22f8e1706437009935250aec57b3054d490..886e7f4b4b63565bcad5d66cdee4ccbdc25814ec 100644 --- a/build/cromite_patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/cromite_patches/Add-custom-tab-intents-privacy-option.patch @@ -18,20 +18,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../customtabs/CustomTabsConnection.java | 1 + .../IncognitoCustomTabIntentDataProvider.java | 14 ++++++ .../privacy/settings/PrivacySettings.java | 50 +++++++++++++++++++ + .../flags/android/chrome_feature_list.cc | 2 +- .../browser/flags/ChromeFeatureList.java | 3 ++ .../chrome/browser/tab/TabAssociatedApp.java | 6 ++- ...Add-custom-tab-intents-privacy-option.grdp | 25 ++++++++++ .../OriginVerifier.java | 5 ++ .../core/common/language_experiments.cc | 1 + .../add-custom-tab-intents-privacy-option.inc | 1 + - 12 files changed, 144 insertions(+), 2 deletions(-) + 13 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -56,6 +56,21 @@ found in the LICENSE file. +@@ -52,6 +52,21 @@ found in the LICENSE file. android:key="cromite_flags" android:title="@string/cromite_flags_title" app:url="@string/cromite_flags_url" /> @@ -56,7 +57,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -64,6 +64,9 @@ import java.lang.annotation.Retention; +@@ -61,6 +61,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Set; @@ -66,8 +67,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis /** * Dispatches incoming intents to the appropriate activity based on the current configuration and * Intent fired. -@@ -267,6 +270,9 @@ public class LaunchIntentDispatcher { - @OptIn(markerClass = ExperimentalAuthTab.class) +@@ -263,6 +266,9 @@ public class LaunchIntentDispatcher { + */ public static boolean isCustomTabIntent(Intent intent) { if (intent == null) return false; + if (!ContextUtils.getAppSharedPreferences() @@ -76,7 +77,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis Log.w( TAG, "CustomTabsIntent#shouldAlwaysUseBrowserUI() = " -@@ -295,6 +301,10 @@ public class LaunchIntentDispatcher { +@@ -291,6 +297,10 @@ public class LaunchIntentDispatcher { // Make sure the result of the CustomTabActivity is forwarded to the client. newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); @@ -87,7 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis // Since configureIntentForResizableCustomTab() might change the componenet/class // associated with the passed intent, it needs to be called after #setClassName(context, // CustomTabActivity.class.getName()); -@@ -490,6 +500,17 @@ public class LaunchIntentDispatcher { +@@ -483,6 +493,17 @@ public class LaunchIntentDispatcher { if (Intent.ACTION_VIEW.equals(newIntent.getAction()) && !IntentHandler.wasIntentSenderChrome(newIntent)) { @@ -108,7 +109,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -1190,7 +1190,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1257,7 +1257,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid public @CustomTabProfileType int getCustomTabMode() { return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() ? CustomTabProfileType.INCOGNITO @@ -122,7 +123,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java -@@ -981,6 +981,7 @@ public class CustomTabsConnection { +@@ -968,6 +968,7 @@ public class CustomTabsConnection { PostTask.postTask( TaskTraits.UI_DEFAULT, () -> { @@ -143,7 +144,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco /** * A model class that parses the incoming intent for incognito Custom Tabs specific customization * data. -@@ -118,6 +121,9 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD +@@ -121,6 +124,9 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD } private static boolean isIntentFromThirdPartyAllowed() { @@ -153,7 +154,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco return ChromeFeatureList.sCctIncognitoAvailableToThirdParty.isEnabled(); } -@@ -217,6 +223,10 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD +@@ -220,6 +226,10 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD } public static boolean isValidIncognitoIntent(Intent intent, boolean recordMetrics) { @@ -164,7 +165,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco if (!isIncognitoRequested(intent)) return false; var session = SessionHolder.getSessionHolderFromIntent(intent); if (isIntentFromThirdPartyAllowed() -@@ -330,6 +340,10 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD +@@ -329,6 +339,10 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD @Override public @CustomTabProfileType int getCustomTabMode() { @@ -178,9 +179,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -59,6 +59,15 @@ import org.chromium.device.DeviceFeatureList; - import org.chromium.device.DeviceFeatureMap; - import org.chromium.ui.text.SpanApplier; +@@ -80,6 +80,15 @@ import org.chromium.ui.text.SpanApplier; + import java.util.concurrent.TimeUnit; + import java.util.function.Consumer; +import android.app.role.RoleManager; +import android.content.Context; @@ -191,20 +192,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting +import org.chromium.base.IntentUtils; +import org.chromium.base.PackageManagerUtils; + - import androidx.annotation.Nullable; import androidx.preference.PreferenceCategory; import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; -@@ -107,6 +116,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment - private IncognitoLockSettings mIncognitoLockSettings; - private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); + import org.chromium.base.shared_preferences.SharedPreferencesManager; +@@ -149,6 +158,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + startTag, endTag, new ChromeClickableSpan(context, onClickCallback)); + } + private ChromeSwitchPreference allowCustomTabIntentsPref; + private ChromeSwitchPreference openExternalLinksPref; + @Override - public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) { + public void onCreatePreferencesCromite(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { mPageTitle.set(getString(R.string.prefs_privacy_security)); -@@ -336,6 +348,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -376,6 +388,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment new SpanApplier.SpanInfo("", "", servicesLink)); } @@ -214,7 +215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); -@@ -356,6 +371,31 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -396,6 +411,31 @@ public class PrivacySettings extends ChromeBaseSettingsFragment } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) { UserPrefs.get(getProfile()) .setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue); @@ -246,7 +247,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; } -@@ -388,6 +428,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -428,6 +468,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment UserPrefs.get(getProfile()).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); } @@ -263,11 +264,23 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK); if (doNotTrackPref != null) { doNotTrackPref.setSummary( +diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc +--- a/chrome/browser/flags/android/chrome_feature_list.cc ++++ b/chrome/browser/flags/android/chrome_feature_list.cc +@@ -1017,7 +1017,7 @@ BASE_FEATURE(kMagicStackAndroid, + // Enables an experimental feature which forces mayLaunchUrl to use a different + // storage partition. This may reduce performance. This should not be enabled by + // default. +-BASE_FEATURE(kMayLaunchUrlUsesSeparateStoragePartition, ++CROMITE_FEATURE(kMayLaunchUrlUsesSeparateStoragePartition, + "MayLaunchUrlUsesSeparateStoragePartition", + base::FEATURE_DISABLED_BY_DEFAULT); + 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 --- 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 -@@ -767,6 +767,8 @@ public abstract class ChromeFeatureList { - public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); +@@ -824,6 +824,8 @@ public abstract class ChromeFeatureList { + public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, false, true); public static final CachedFlag sMostVisitedTilesCustomization = newCachedFlag(MOST_VISITED_TILES_CUSTOMIZATION, false); + public static final CachedFlag sMayLaunchurlUsesSeparateStoragePartition = @@ -275,18 +288,18 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sMostVisitedTilesReselect = newCachedFlag(MOST_VISITED_TILES_RESELECT, false); public static final CachedFlag sMultiInstanceApplicationStatusCleanup = -@@ -933,6 +935,7 @@ public abstract class ChromeFeatureList { - sNotificationTrampoline, +@@ -1012,6 +1014,7 @@ public abstract class ChromeFeatureList { sMagicStackAndroid, + sMiniOriginBar, sMostVisitedTilesCustomization, + sMayLaunchurlUsesSeparateStoragePartition, sMostVisitedTilesReselect, sMultiInstanceApplicationStatusCleanup, - sNavBarColorAnimation, + sMvcUpdateViewWhenModelChanged, diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java -@@ -87,7 +87,11 @@ public final class TabAssociatedApp extends TabWebContentsUserData implements Im +@@ -88,7 +88,11 @@ public final class TabAssociatedApp extends TabWebContentsUserData implements Im public static boolean isOpenedFromExternalApp(Tab tab) { TabAssociatedApp app = get(tab); if (app == null) return false; diff --git a/build/cromite_patches/Add-exit-menu-item.patch b/build/cromite_patches/Add-exit-menu-item.patch index 0bcee1285d724e9808c7510835b70820bdadef82..f8007a65e0915070e4be98e028009360491b2c1a 100644 --- a/build/cromite_patches/Add-exit-menu-item.patch +++ b/build/cromite_patches/Add-exit-menu-item.patch @@ -16,7 +16,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml -@@ -175,6 +175,9 @@ found in the LICENSE file. +@@ -181,6 +181,9 @@ found in the LICENSE file. @@ -26,7 +26,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re -@@ -204,6 +207,9 @@ found in the LICENSE file. +@@ -213,6 +216,9 @@ found in the LICENSE file. @@ -39,28 +39,28 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -297,6 +297,8 @@ import java.util.Set; +@@ -326,6 +326,8 @@ import java.util.Map; + import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; - import java.util.function.DoubleConsumer; +import org.chromium.chrome.browser.lifetime.ApplicationLifetime; + /** * This is the main activity for ChromeMobile when not running in document mode. All the tabs are * accessible via a chrome specific tab switching UI. -@@ -3070,6 +3072,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -3361,6 +3363,8 @@ public class ChromeTabbedActivity extends ChromeActivity { .closeTabs( TabClosureParams.closeTab(currentTab).build(), /* allowDialog= */ true); RecordUserAction.record("MobileTabClosed"); + } else if (id == R.id.exit_id) { + ApplicationLifetime.terminate(false); } else if (id == R.id.close_all_tabs_menu_id) { - // Close both incognito and normal tabs. - Runnable closeAllTabsRunnable = + boolean allowUndo = TabClosureParamsUtils.shouldAllowUndo(triggeringMotion); + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -59,6 +59,7 @@ import org.chromium.base.supplier.UnownedUserDataSupplier; +@@ -60,6 +60,7 @@ import org.chromium.base.supplier.UnownedUserDataSupplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityUtils; @@ -68,7 +68,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.chrome.browser.ChromeActivitySessionTracker; import org.chromium.chrome.browser.ChromeApplicationImpl; import org.chromium.chrome.browser.ChromeKeyboardVisibilityDelegate; -@@ -2375,6 +2376,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2419,6 +2420,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity return true; } @@ -102,7 +102,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -4382,6 +4382,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4436,6 +4436,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Dark theme diff --git a/build/cromite_patches/Add-flag-for-omnibox-autocomplete-filtering.patch b/build/cromite_patches/Add-flag-for-omnibox-autocomplete-filtering.patch index 4dd75b5743615bb056b8eb3432844a9076fcac69..11ef9097ba92272b0f31cdf100f0efc8f1dd1d66 100644 --- a/build/cromite_patches/Add-flag-for-omnibox-autocomplete-filtering.patch +++ b/build/cromite_patches/Add-flag-for-omnibox-autocomplete-filtering.patch @@ -26,7 +26,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/ #include "base/feature_list.h" #include "base/format_macros.h" #include "base/functional/bind.h" -@@ -536,6 +537,15 @@ AutocompleteController::AutocompleteController( +@@ -565,6 +566,15 @@ AutocompleteController::AutocompleteController( provider_client_->GetOmniboxTriggeredFeatureService()), steady_state_omnibox_position_( metrics::OmniboxEventProto::UNKNOWN_POSITION) { @@ -45,7 +45,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/ diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc --- a/components/omnibox/browser/history_url_provider.cc +++ b/components/omnibox/browser/history_url_provider.cc -@@ -489,6 +489,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input, +@@ -488,6 +488,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input, if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY) matches_.push_back(what_you_typed_match); @@ -66,7 +66,7 @@ diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/ #include "base/functional/callback.h" #include "base/i18n/break_iterator.h" #include "base/i18n/case_conversion.h" -@@ -629,6 +630,9 @@ void SearchProvider::Run(bool query_is_private) { +@@ -628,6 +629,9 @@ void SearchProvider::Run(bool query_is_private) { } void SearchProvider::DoHistoryQuery(bool minimal_changes) { diff --git a/build/cromite_patches/Add-flag-to-disable-IPv6-probes.patch b/build/cromite_patches/Add-flag-to-disable-IPv6-probes.patch index 433eccf706c0e5257f97f79570eff41f958a7460..a72f069071d5ba80b6ea5128237a3810b774db15 100644 --- a/build/cromite_patches/Add-flag-to-disable-IPv6-probes.patch +++ b/build/cromite_patches/Add-flag-to-disable-IPv6-probes.patch @@ -45,7 +45,7 @@ new file mode 100644 diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1119,6 +1119,7 @@ component("net") { +@@ -1145,6 +1145,7 @@ component("net") { ":net_deps", "//components/miracle_parameter/common", "//components/network_time/time_tracker", @@ -56,7 +56,7 @@ diff --git a/net/BUILD.gn b/net/BUILD.gn diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc -@@ -114,6 +114,7 @@ +@@ -115,6 +115,7 @@ #include "net/log/net_log_event_type.h" #include "net/log/net_log_source.h" #include "net/log/net_log_source_type.h" @@ -64,7 +64,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc #include "net/log/net_log_with_source.h" #include "net/socket/client_socket_factory.h" #include "net/url_request/url_request_context.h" -@@ -1477,6 +1478,13 @@ int HostResolverManager::StartIPv6ReachabilityCheck( +@@ -1489,6 +1490,13 @@ int HostResolverManager::StartIPv6ReachabilityCheck( return OK; } diff --git a/build/cromite_patches/Add-flag-to-disable-external-intent-requests.patch b/build/cromite_patches/Add-flag-to-disable-external-intent-requests.patch index dbe32a8af46397716dba211b38c4d05e7411a61e..e6a8666386a2fffc3fa093650192ea6d30b9ed55 100644 --- a/build/cromite_patches/Add-flag-to-disable-external-intent-requests.patch +++ b/build/cromite_patches/Add-flag-to-disable-external-intent-requests.patch @@ -32,7 +32,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -81,7 +81,12 @@ found in the LICENSE file. +@@ -77,7 +77,12 @@ found in the LICENSE file. android:title="@string/settings_incognito_tab_lock_title" android:summary="@string/settings_incognito_tab_lock_summary_android_setting_off" android:persistent="false" /> @@ -45,11 +45,11 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi + app:needRestart="false" /> + android:title="@string/security_section_title" /> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java -@@ -36,6 +36,7 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; +@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -57,7 +57,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate; -@@ -127,6 +128,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { +@@ -126,6 +127,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { @Override public boolean shouldDisableAllExternalIntents() { @@ -141,17 +141,17 @@ new file mode 100644 diff --git a/components/external_intents/android/external_intents_features.cc b/components/external_intents/android/external_intents_features.cc --- a/components/external_intents/android/external_intents_features.cc +++ b/components/external_intents/android/external_intents_features.cc -@@ -27,7 +27,6 @@ namespace { - const base::Feature* const kFeaturesExposedToJava[] = { - &kExternalNavigationDebugLogs, &kBlockFrameRenavigations, - &kBlockIntentsToSelf}; +@@ -28,7 +28,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kExternalNavigationDebugLogs, &kBlockIntentsToSelf, + &kNavigationCaptureRefactorAndroid, &kAuxiliaryNavigationStaysInBrowser, + &kReparentTopLevelNavigationFromPWA, &kReparentAuxiliaryNavigationFromPWA}; - } // namespace // Alphabetical: -@@ -44,7 +43,13 @@ BASE_FEATURE(kBlockIntentsToSelf, - "BlockIntentsToSelf", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -57,7 +56,13 @@ BASE_FEATURE(kReparentAuxiliaryNavigationFromPWA, + "ReparentAuxiliaryNavigationFromPWA", + base::FEATURE_DISABLED_BY_DEFAULT); +CROMITE_FEATURE(kIntentBlockExternalFormRedirectsNoGesture, + "IntentBlockExternalFormRedirectsNoGesture", @@ -177,23 +177,23 @@ diff --git a/components/external_intents/android/external_intents_features.h b/c diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java -@@ -20,6 +20,12 @@ import org.chromium.build.annotations.NullMarked; +@@ -19,6 +19,12 @@ import org.chromium.build.annotations.NullMarked; @JNINamespace("external_intents") @NullMarked - public class ExternalIntentsFeatures extends Features { + public class ExternalIntentsFeatures { + public static final String INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE_NAME = + "IntentBlockExternalFormRedirectsNoGesture"; + -+ public static final ExternalIntentsFeatures INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE = -+ new ExternalIntentsFeatures(-1, INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE_NAME); ++ public static final ExternalIntentsFeature INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE = ++ new ExternalIntentsFeature(-1, INTENT_BLOCK_EXTERNAL_FORM_REDIRECT_NO_GESTURE_NAME); + public static final String EXTERNAL_NAVIGATION_DEBUG_LOGS_NAME = "ExternalNavigationDebugLogs"; - public static final String BLOCK_FRAME_RENAVIGATIONS_NAME = "BlockFrameRenavigations3"; public static final String BLOCK_INTENTS_TO_SELF_NAME = "BlockIntentsToSelf"; + public static final String NAVIGATION_CAPTURE_REFACTOR_ANDROID_NAME = diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -@@ -1529,6 +1529,12 @@ public class ExternalNavigationHandler { +@@ -1560,6 +1560,12 @@ public class ExternalNavigationHandler { || ignoreBackForwardNav(params); } @@ -206,7 +206,7 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component private OverrideUrlLoadingResult shouldOverrideUrlLoadingInternal( ExternalNavigationParams params, Intent targetIntent, -@@ -1585,6 +1591,21 @@ public class ExternalNavigationHandler { +@@ -1617,6 +1623,21 @@ public class ExternalNavigationHandler { return OverrideUrlLoadingResult.forNoOverride(); } diff --git a/build/cromite_patches/Add-flag-to-disable-vibration.patch b/build/cromite_patches/Add-flag-to-disable-vibration.patch index 35567bca49596910614f265ff9207fca238dcda0..683ffdb265145c6444bac2f717e0120d16a68ac5 100644 --- a/build/cromite_patches/Add-flag-to-disable-vibration.patch +++ b/build/cromite_patches/Add-flag-to-disable-vibration.patch @@ -104,7 +104,7 @@ diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -869,6 +869,10 @@ +@@ -987,6 +987,10 @@ { name: "CompositingDecisionAtAnimationPhaseBoundaries" }, diff --git a/build/cromite_patches/Add-lifetime-options-for-permissions.patch b/build/cromite_patches/Add-lifetime-options-for-permissions.patch index d34bde2872956a80daa3db6e520333339264f62c..6b0c81de8411b5981ed39eb2b1e8938b0d3b316a 100644 --- a/build/cromite_patches/Add-lifetime-options-for-permissions.patch +++ b/build/cromite_patches/Add-lifetime-options-for-permissions.patch @@ -21,7 +21,7 @@ There are 4 main areas affected to introduce the functionality: novel here. Therefore, `content_settings::GetConstraintSessionExpiration()` and `content_settings::IsConstraintSessionExpiration()` manage the lifetime modes of the session content-settings. - The modificaiton also adds the session pattern to the ContentSettingPatternSource so that it is available for the UI. + The modification also adds the session pattern to the ContentSettingPatternSource so that it is available for the UI. * components/permissions Lifetime support is added to the permissions; most of the changes are caused by the fact that it is necessary to report the value selected by the user from the Java UI managed by `components/browser_ui` up to @@ -80,17 +80,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../permission_prompt_android.cc | 8 +- .../permission_prompt_android.h | 3 +- .../android/permissions_android_strings.grd | 17 ++++ - .../geolocation_permission_context_android.cc | 34 ++++++-- - .../geolocation_permission_context_android.h | 13 ++- + .../geolocation_permission_context_android.cc | 32 ++++++-- + .../geolocation_permission_context_android.h | 11 ++- .../embedded_permission_prompt_flow_model.cc | 2 +- - .../permissions/permission_context_base.cc | 52 ++++++++++-- - .../permissions/permission_context_base.h | 23 +++++- + .../permissions/permission_context_base.cc | 49 +++++++++-- + .../permissions/permission_context_base.h | 20 ++++- components/permissions/permission_prompt.h | 3 +- - components/permissions/permission_request.cc | 30 ++++++- - components/permissions/permission_request.h | 16 +++- + components/permissions/permission_request.cc | 32 +++++++- + components/permissions/permission_request.h | 18 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- - 38 files changed, 493 insertions(+), 71 deletions(-) + 38 files changed, 487 insertions(+), 71 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc @@ -178,7 +178,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.cc b/chrome OneTimePermissionsTracker::~OneTimePermissionsTracker() = default; OneTimePermissionsTracker::OriginTrackEntry::OriginTrackEntry() = default; -@@ -257,6 +283,11 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( +@@ -254,6 +280,11 @@ void OneTimePermissionsTracker::NotifyLastPageFromOriginClosed( for (auto& observer : observer_list_) { observer.OnLastPageFromOriginClosed(origin); } @@ -244,9 +244,9 @@ diff --git a/chrome/browser/ui/views/permissions/chip/chip_controller.cc b/chrom diff --git a/chrome/browser/ui/views/permissions/exclusive_access_permission_prompt_view.cc b/chrome/browser/ui/views/permissions/exclusive_access_permission_prompt_view.cc --- a/chrome/browser/ui/views/permissions/exclusive_access_permission_prompt_view.cc +++ b/chrome/browser/ui/views/permissions/exclusive_access_permission_prompt_view.cc -@@ -100,7 +100,7 @@ void ExclusiveAccessPermissionPromptView::RunButtonCallback(int button_id) { - } - ButtonType button = GetButtonType(button_id); +@@ -117,7 +117,7 @@ void ExclusiveAccessPermissionPromptView::RunButtonCallback(int button_id) { + request_type(), GetPermissionActionString(button), + record_browser_always_active_value()); if (button == ButtonType::kAllowThisTime) { - delegate_->AcceptThisTime(); + delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); @@ -256,7 +256,7 @@ diff --git a/chrome/browser/ui/views/permissions/exclusive_access_permission_pro diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc -@@ -269,7 +269,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { +@@ -297,7 +297,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { delegate_->Accept(); return; case PermissionDialogButton::kAcceptOnce: @@ -264,22 +264,22 @@ diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_v + delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); return; case PermissionDialogButton::kDeny: - delegate_->Deny(); + #if BUILDFLAG(IS_CHROMEOS) diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java -@@ -10,6 +10,7 @@ import org.chromium.components.content_settings.ContentSettingValues; - import org.chromium.components.content_settings.ContentSettingsType; - import org.chromium.components.content_settings.SessionModel; +@@ -12,6 +12,7 @@ import org.chromium.components.content_settings.SessionModel; + import org.chromium.components.permissions.PermissionsAndroidFeatureList; + import org.chromium.components.permissions.PermissionsAndroidFeatureMap; import org.chromium.content_public.browser.BrowserContextHandle; +import org.chromium.components.content_settings.SessionModel; import java.io.Serializable; - + import java.util.Objects; diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -603,6 +603,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -618,6 +618,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } @RequiresNonNull({"mSite"}) @@ -290,8 +290,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c + private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); - assumeNonNull(preference); -@@ -1195,6 +1200,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment + long usage = mSite.getTotalUsage(); +@@ -1290,6 +1295,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } @@ -384,8 +384,8 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, ContentSettingsType::SMART_CARD_DATA, - }}; -@@ -256,9 +289,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { + ContentSettingsType::AR, +@@ -258,9 +291,6 @@ const std::vector& GetTypesWithTemporaryGrantsInHcsm() { ContentSettingsType::CAPTURED_SURFACE_CONTROL, #endif ContentSettingsType::KEYBOARD_LOCK, @@ -393,12 +393,12 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc - ContentSettingsType::MEDIASTREAM_MIC, - ContentSettingsType::MEDIASTREAM_CAMERA, ContentSettingsType::HAND_TRACKING, - }}; - return *types; + ContentSettingsType::AR, + ContentSettingsType::VR, diff --git a/components/content_settings/core/browser/content_settings_utils.h b/components/content_settings/core/browser/content_settings_utils.h --- a/components/content_settings/core/browser/content_settings_utils.h +++ b/components/content_settings/core/browser/content_settings_utils.h -@@ -74,6 +74,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); +@@ -73,6 +73,12 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints); // Returns whether the given type supports tracking last_visit timestamps. bool CanTrackLastVisit(ContentSettingsType type); @@ -433,7 +433,7 @@ diff --git a/components/content_settings/core/common/content_settings_enums.mojo diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java -@@ -385,9 +385,9 @@ public class PageInfoController +@@ -364,9 +364,9 @@ public class PageInfoController String name, String nameMidSentence, int type, @@ -448,7 +448,7 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java --- a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java -@@ -44,8 +44,9 @@ public class PermissionParamsListBuilder { +@@ -48,8 +48,9 @@ public class PermissionParamsListBuilder { } public void addPermissionEntry( @@ -460,18 +460,18 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ } public void clearPermissionEntries() { -@@ -86,6 +87,10 @@ public class PermissionParamsListBuilder { - permissionParams.warningTextResource = - R.string.page_info_android_permission_blocked; +@@ -85,6 +86,10 @@ public class PermissionParamsListBuilder { + } else { + warningTextResource = R.string.page_info_android_permission_blocked; } + if (permission.is_user_session) { -+ permissionParams.warningTextResource = ++ warningTextResource = + R.string.page_info_android_permission_session_permission; + } } - } - -@@ -127,13 +132,15 @@ public class PermissionParamsListBuilder { + } else { + assert permission.setting == ContentSettingValues.ASK +@@ -121,13 +126,15 @@ public class PermissionParamsListBuilder { public final String nameMidSentence; public final int type; public final @ContentSettingValues int setting; @@ -532,7 +532,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -1197,6 +1197,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1234,6 +1234,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -555,15 +555,15 @@ diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java --- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java -@@ -15,6 +15,7 @@ import org.jni_zero.NativeMethods; - import org.chromium.build.annotations.NullMarked; +@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; + import org.chromium.components.content_settings.ContentSettingsType; import org.chromium.ui.base.WindowAndroid; +import org.chromium.components.content_settings.LifetimeMode; import java.util.ArrayList; - import java.util.List; -@@ -66,6 +67,9 @@ public class PermissionDialogDelegate { + import java.util.Arrays; +@@ -72,6 +73,9 @@ public class PermissionDialogDelegate { // Prompt(screen) variant we want to display on the dialog. private @EmbeddedPromptVariant int mEmbeddedPromptVariant; @@ -573,7 +573,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** * Defines a (potentially empty) list of ranges represented as pairs of , * which shall be used by the UI to format the specified ranges as bold text. -@@ -135,6 +139,15 @@ public class PermissionDialogDelegate { +@@ -145,6 +149,15 @@ public class PermissionDialogDelegate { .acceptThisTime(mNativeDelegatePtr, PermissionDialogDelegate.this); } @@ -691,7 +691,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc -@@ -109,7 +109,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { +@@ -119,7 +119,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } @@ -704,7 +704,7 @@ diff --git a/components/permissions/android/permission_prompt/embedded_permissio diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h -@@ -44,7 +44,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { +@@ -45,7 +45,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { const override; void Closing() override; void Accept() override; @@ -782,7 +782,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.cc b/components/permissions/android/permission_prompt/permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/permission_prompt_android.cc -@@ -76,8 +76,12 @@ void PermissionPromptAndroid::Accept() { +@@ -83,8 +83,12 @@ void PermissionPromptAndroid::Accept() { delegate_->Accept(); } @@ -800,7 +800,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_prompt_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.h b/components/permissions/android/permission_prompt/permission_prompt_android.h --- a/components/permissions/android/permission_prompt/permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/permission_prompt_android.h -@@ -54,9 +54,10 @@ class PermissionPromptAndroid : public PermissionPrompt { +@@ -55,9 +55,10 @@ class PermissionPromptAndroid : public PermissionPrompt { const; virtual void Closing(); virtual void Accept(); @@ -821,7 +821,7 @@ diff --git a/components/permissions/android/permissions_android_strings.grd b/co + + -+ Remeber my decision ++ Remember my decision + + + Only this time @@ -842,30 +842,28 @@ diff --git a/components/permissions/android/permissions_android_strings.grd b/co diff --git a/components/permissions/contexts/geolocation_permission_context_android.cc b/components/permissions/contexts/geolocation_permission_context_android.cc --- a/components/permissions/contexts/geolocation_permission_context_android.cc +++ b/components/permissions/contexts/geolocation_permission_context_android.cc -@@ -168,7 +168,20 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -193,7 +193,18 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( bool is_one_time, bool is_final_decision) { DCHECK(is_final_decision); -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, ++ NotifyPermissionSetWithLifetime(request_data, + std::move(callback), persist, content_setting, is_one_time, is_final_decision, + content_settings::mojom::LifetimeMode::ALWAYS); +} +void GeolocationPermissionContextAndroid::NotifyPermissionSetWithLifetime( -+ const PermissionRequestID& id, -+ const GURL& requesting_origin, -+ const GURL& embedding_origin, ++ const PermissionRequestData& request_data, + BrowserPermissionCallback callback, + bool persist, + ContentSetting content_setting, + bool is_one_time, bool is_final_decision, + content_settings::mojom::LifetimeMode lifetime_option) { - bool is_default_search = IsRequestingOriginDSE(requesting_origin); + bool is_default_search = + IsRequestingOriginDSE(request_data.requesting_origin); if (content_setting == CONTENT_SETTING_ALLOW && - !location_settings_->IsSystemLocationSettingEnabled()) { -@@ -181,7 +194,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - if (IsInLocationSettingsBackOff(is_default_search)) { - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, +@@ -208,7 +219,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), false /* persist */, - CONTENT_SETTING_BLOCK, is_one_time); + CONTENT_SETTING_BLOCK, @@ -873,9 +871,9 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr return; } -@@ -199,7 +213,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - !location_settings_dialog_callback_.is_null()) { - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, +@@ -228,7 +240,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), false /* persist */, - CONTENT_SETTING_BLOCK, is_one_time); + CONTENT_SETTING_BLOCK, @@ -883,23 +881,23 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr return; } -@@ -211,13 +226,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( - base::BindOnce( +@@ -241,13 +254,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, - weak_factory_.GetWeakPtr(), requesting_origin, embedding_origin, -- persist, content_setting, is_one_time)); -+ persist, content_setting, is_one_time, lifetime_option)); + weak_factory_.GetWeakPtr(), request_data.requesting_origin, + request_data.embedding_origin, persist, content_setting, +- is_one_time)); ++ is_one_time, lifetime_option)); return; } - FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, - std::move(callback), persist, content_setting, -- is_one_time); -+ is_one_time, lifetime_option); + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, + request_data.embedding_origin, std::move(callback), +- persist, content_setting, is_one_time); ++ persist, content_setting, is_one_time, lifetime_option); } content::PermissionResult -@@ -390,7 +405,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -425,7 +438,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( const GURL& embedding_origin, bool persist, ContentSetting content_setting, @@ -908,7 +906,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr LocationSettingsDialogOutcome prompt_outcome) { bool is_default_search = IsRequestingOriginDSE(requesting_origin); if (prompt_outcome == GRANTED) { -@@ -409,7 +424,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( +@@ -444,7 +457,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( FinishNotifyPermissionSet(location_settings_dialog_request_id_, requesting_origin, embedding_origin, std::move(location_settings_dialog_callback_), @@ -918,7 +916,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr location_settings_dialog_request_id_ = PermissionRequestID(content::GlobalRenderFrameHostId(0, 0), -@@ -423,10 +439,10 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( +@@ -458,8 +472,8 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( BrowserPermissionCallback callback, bool persist, ContentSetting content_setting, @@ -926,22 +924,26 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr - GeolocationPermissionContext::NotifyPermissionSet( + bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { + GeolocationPermissionContext::NotifyPermissionSetWithLifetime( - id, requesting_origin, embedding_origin, std::move(callback), persist, -- content_setting, is_one_time, /*is_final_decision=*/true); -+ content_setting, is_one_time, /*is_final_decision=*/true, lifetime_option); + PermissionRequestData(this, id, + content::PermissionRequestDescription( + content::PermissionDescriptorUtil:: +@@ -467,7 +481,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + blink::PermissionType::GEOLOCATION)), + requesting_origin), + std::move(callback), persist, content_setting, is_one_time, +- /*is_final_decision=*/true); ++ /*is_final_decision=*/true, lifetime_option); } void GeolocationPermissionContextAndroid::SetLocationSettingsForTesting( diff --git a/components/permissions/contexts/geolocation_permission_context_android.h b/components/permissions/contexts/geolocation_permission_context_android.h --- a/components/permissions/contexts/geolocation_permission_context_android.h +++ b/components/permissions/contexts/geolocation_permission_context_android.h -@@ -89,6 +89,15 @@ class GeolocationPermissionContextAndroid +@@ -93,6 +93,13 @@ class GeolocationPermissionContextAndroid ContentSetting content_setting, bool is_one_time, bool is_final_decision) override; -+ void NotifyPermissionSetWithLifetime(const PermissionRequestID& id, -+ const GURL& requesting_origin, -+ const GURL& embedding_origin, ++ void NotifyPermissionSetWithLifetime(const PermissionRequestData& request_data, + BrowserPermissionCallback callback, + bool persist, + ContentSetting content_setting, @@ -951,7 +953,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr content::PermissionResult UpdatePermissionStatusWithDeviceStatus( content::WebContents* web_contents, content::PermissionResult result, -@@ -134,6 +143,7 @@ class GeolocationPermissionContextAndroid +@@ -138,6 +145,7 @@ class GeolocationPermissionContextAndroid bool persist, ContentSetting content_setting, bool is_one_time, @@ -959,7 +961,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr LocationSettingsDialogOutcome prompt_outcome); void FinishNotifyPermissionSet(const PermissionRequestID& id, -@@ -142,7 +152,8 @@ class GeolocationPermissionContextAndroid +@@ -146,7 +154,8 @@ class GeolocationPermissionContextAndroid BrowserPermissionCallback callback, bool persist, ContentSetting content_setting, @@ -984,67 +986,64 @@ diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/c diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc -@@ -267,6 +267,17 @@ const PermissionRequest* PermissionContextBase::FindPermissionRequest( - return request->second.first.get(); +@@ -253,6 +253,17 @@ PermissionContextBase::CreatePermissionRequest( + std::move(request_finished_callback), UsesAutomaticEmbargo()); } +std::unique_ptr +PermissionContextBase::CreatePermissionRequest( + content::WebContents* web_contents, -+ PermissionRequestData request_data, ++ std::unique_ptr request_data, + PermissionRequest::PermissionDecidedCallbackWithLifetime permission_decided_callback, -+ base::OnceClosure delete_callback) const { ++ base::OnceClosure request_finished_callback) const { + return std::make_unique( + std::move(request_data), std::move(permission_decided_callback), -+ std::move(delete_callback)); ++ std::move(request_finished_callback), UsesAutomaticEmbargo()); +} + - content::PermissionResult PermissionContextBase::GetPermissionStatus( - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, -@@ -526,7 +537,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time, -- bool is_final_decision) { -+ bool is_final_decision, -+ content_settings::mojom::LifetimeMode lifetime_option) { + bool PermissionContextBase::UsesAutomaticEmbargo() const { + return true; + } +@@ -540,7 +551,8 @@ void PermissionContextBase::PermissionDecided( + ContentSetting content_setting, + bool is_one_time, + bool is_final_decision, +- const PermissionRequestData& request_data) { ++ const PermissionRequestData& request_data, ++ content_settings::mojom::LifetimeMode lifetime_option) { DCHECK(content_setting == CONTENT_SETTING_ALLOW || content_setting == CONTENT_SETTING_BLOCK || content_setting == CONTENT_SETTING_DEFAULT); -@@ -541,13 +553,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -556,12 +568,13 @@ void PermissionContextBase::PermissionDecided( // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { -- NotifyPermissionSet(id, requesting_origin, embedding_origin, -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, - std::move(request->second.second), persist, -- content_setting, is_one_time, is_final_decision); -+ content_setting, is_one_time, is_final_decision, +- NotifyPermissionSet(request_data, std::move(request->second.second), ++ NotifyPermissionSetWithLifetime(request_data, std::move(request->second.second), + persist, content_setting, is_one_time, +- is_final_decision); ++ is_final_decision, + lifetime_option); } else { -- NotifyPermissionSet(id, requesting_origin, embedding_origin, -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, - base::DoNothing(), persist, content_setting, -- is_one_time, is_final_decision); -+ is_one_time, is_final_decision, lifetime_option); +- NotifyPermissionSet(request_data, base::DoNothing(), persist, +- content_setting, is_one_time, is_final_decision); ++ NotifyPermissionSetWithLifetime(request_data, base::DoNothing(), persist, ++ content_setting, is_one_time, is_final_decision, lifetime_option); } } -@@ -628,11 +641,27 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -652,10 +665,24 @@ void PermissionContextBase::NotifyPermissionSet( ContentSetting content_setting, bool is_one_time, bool is_final_decision) { + DCHECK(is_one_time == false); -+ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, std::move(callback), ++ NotifyPermissionSetWithLifetime(request_data, std::move(callback), + persist, content_setting, is_one_time, is_final_decision, + content_settings::mojom::LifetimeMode::ALWAYS); +} + +void PermissionContextBase::NotifyPermissionSetWithLifetime( -+ const PermissionRequestID& id, -+ const GURL& requesting_origin, -+ const GURL& embedding_origin, ++ const PermissionRequestData& request_data, + BrowserPermissionCallback callback, + bool persist, + ContentSetting content_setting, @@ -1054,29 +1053,27 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (persist) { - UpdateContentSetting(requesting_origin, embedding_origin, content_setting, -- is_one_time); -+ is_one_time, lifetime_option); +- UpdateContentSetting(request_data, content_setting, is_one_time); ++ UpdateContentSetting(request_data, content_setting, is_one_time, lifetime_option); } if (is_final_decision) { -@@ -673,6 +702,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time) { -+ UpdateContentSetting(requesting_origin, embedding_origin, content_setting, +@@ -696,6 +723,14 @@ void PermissionContextBase::UpdateContentSetting( + const PermissionRequestData& request_data, + ContentSetting content_setting, + bool is_one_time) { ++ UpdateContentSetting(request_data, content_setting, + is_one_time, content_settings::mojom::LifetimeMode::ALWAYS); +} + -+void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, -+ const GURL& embedding_origin, ++void PermissionContextBase::UpdateContentSetting(const PermissionRequestData& request_data, + ContentSetting content_setting, + bool is_one_time, + content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(requesting_origin, requesting_origin.DeprecatedGetOriginAsURL()); - DCHECK_EQ(embedding_origin, embedding_origin.DeprecatedGetOriginAsURL()); - DCHECK(content_setting == CONTENT_SETTING_ALLOW || -@@ -682,6 +720,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, + DCHECK_EQ(request_data.requesting_origin, + request_data.requesting_origin.DeprecatedGetOriginAsURL()); + DCHECK_EQ(request_data.embedding_origin, +@@ -707,6 +742,8 @@ void PermissionContextBase::UpdateContentSetting( constraints.set_session_model( is_one_time ? content_settings::mojom::SessionModel::ONE_TIME : content_settings::mojom::SessionModel::DURABLE); @@ -1088,53 +1085,50 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm diff --git a/components/permissions/permission_context_base.h b/components/permissions/permission_context_base.h --- a/components/permissions/permission_context_base.h +++ b/components/permissions/permission_context_base.h -@@ -166,6 +166,15 @@ class PermissionContextBase : public content_settings::Observer { +@@ -188,6 +188,13 @@ class PermissionContextBase : public content_settings::Observer { // Updates stored content setting if persist is set, updates tab indicators // and runs the callback to finish the request. -+ virtual void NotifyPermissionSetWithLifetime(const PermissionRequestID& id, -+ const GURL& requesting_origin, -+ const GURL& embedding_origin, -+ BrowserPermissionCallback callback, -+ bool persist, -+ ContentSetting content_setting, -+ bool is_one_time, -+ bool is_final_decision, -+ content_settings::mojom::LifetimeMode lifetime_option); - virtual void NotifyPermissionSet(const PermissionRequestID& id, - const GURL& requesting_origin, - const GURL& embedding_origin, -@@ -187,6 +196,11 @@ class PermissionContextBase : public content_settings::Observer { ++ virtual void NotifyPermissionSetWithLifetime(const PermissionRequestData& request_data, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, ++ bool is_final_decision, ++ content_settings::mojom::LifetimeMode lifetime_option); + virtual void NotifyPermissionSet(const PermissionRequestData& request_data, + BrowserPermissionCallback callback, + bool persist, +@@ -207,6 +214,10 @@ class PermissionContextBase : public content_settings::Observer { // Store the decided permission as a content setting. // virtual since the permission might be stored with different restrictions // (for example for desktop notifications). -+ void UpdateContentSetting(const GURL& requesting_origin, -+ const GURL& embedding_origin, -+ ContentSetting content_setting, -+ bool is_one_time, -+ content_settings::mojom::LifetimeMode lifetime_option); - virtual void UpdateContentSetting(const GURL& requesting_origin, - const GURL& embedding_origin, ++ void UpdateContentSetting(const PermissionRequestData& request_data, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::mojom::LifetimeMode lifetime_option); + virtual void UpdateContentSetting(const PermissionRequestData& request_data, ContentSetting content_setting, -@@ -217,6 +231,12 @@ class PermissionContextBase : public content_settings::Observer { + bool is_one_time); +@@ -236,6 +247,12 @@ class PermissionContextBase : public content_settings::Observer { PermissionRequest::PermissionDecidedCallback permission_decided_callback, - base::OnceClosure delete_callback) const; + base::OnceClosure request_finished_callback) const; + virtual std::unique_ptr CreatePermissionRequest( + content::WebContents* web_contents, -+ PermissionRequestData request_data, ++ std::unique_ptr request_data, + PermissionRequest::PermissionDecidedCallbackWithLifetime permission_decided_callback, -+ base::OnceClosure delete_callback) const; ++ base::OnceClosure request_finished_callback) const; + // Implementors can override this method to avoid using automatic embargo. virtual bool UsesAutomaticEmbargo() const; -@@ -249,7 +269,8 @@ class PermissionContextBase : public content_settings::Observer { - const GURL& embedding_origin, - ContentSetting content_setting, +@@ -270,7 +287,8 @@ class PermissionContextBase : public content_settings::Observer { + void PermissionDecided(ContentSetting content_setting, bool is_one_time, -- bool is_final_decision); -+ bool is_final_decision, + bool is_final_decision, +- const PermissionRequestData& request_data); ++ const PermissionRequestData& request_data, + content_settings::mojom::LifetimeMode lifetime_option); void NotifyObservers(const ContentSettingsPattern& primary_pattern, @@ -1156,22 +1150,24 @@ diff --git a/components/permissions/permission_prompt.h b/components/permissions diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc -@@ -43,6 +43,14 @@ PermissionRequest::PermissionRequest( - delete_callback_(std::move(delete_callback)), +@@ -32,6 +32,16 @@ PermissionRequest::PermissionRequest( + request_finished_callback_(std::move(request_finished_callback)), uses_automatic_embargo_(uses_automatic_embargo) {} +PermissionRequest::PermissionRequest( -+ PermissionRequestData request_data, ++ std::unique_ptr request_data, + PermissionDecidedCallbackWithLifetime permission_decided_callback, -+ base::OnceClosure delete_callback) ++ base::OnceClosure request_finished_callback, ++ bool uses_automatic_embargo) + : data_(std::move(request_data)), + permission_decided_callback_withlifetime_(std::move(permission_decided_callback)), -+ delete_callback_(std::move(delete_callback)) {} ++ request_finished_callback_(std::move(request_finished_callback)), ++ uses_automatic_embargo_(uses_automatic_embargo) {} + PermissionRequest::~PermissionRequest() { - DCHECK(delete_callback_.is_null()); + std::move(request_finished_callback_).Run(); } -@@ -404,19 +412,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -412,19 +422,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { return request_type() == RequestType::kStorageAccess; } @@ -1180,12 +1176,12 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + content_settings::mojom::LifetimeMode lifetime_option) { + if (permission_decided_callback_withlifetime_) { + std::move(permission_decided_callback_withlifetime_) -+ .Run(CONTENT_SETTING_ALLOW, is_one_time, /*is_final_decision=*/true, lifetime_option); ++ .Run(CONTENT_SETTING_ALLOW, is_one_time, /*is_final_decision=*/true, *data_, lifetime_option); + return; + } std::move(permission_decided_callback_) .Run(CONTENT_SETTING_ALLOW, is_one_time, - /*is_final_decision=*/true); + /*is_final_decision=*/true, /*request_data=*/*data_); } -void PermissionRequest::PermissionDenied() { @@ -1193,51 +1189,53 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio + content_settings::mojom::LifetimeMode lifetime_option) { + if (permission_decided_callback_withlifetime_) { + std::move(permission_decided_callback_withlifetime_) -+ .Run(CONTENT_SETTING_BLOCK, is_one_time, /*is_final_decision=*/true, lifetime_option); ++ .Run(CONTENT_SETTING_BLOCK, is_one_time, /*is_final_decision=*/true, *data_, lifetime_option); + return; + } std::move(permission_decided_callback_) .Run(CONTENT_SETTING_BLOCK, /*is_one_time=*/false, - /*is_final_decision=*/true); + /*is_final_decision=*/true, /*request_data=*/*data_); } void PermissionRequest::Cancelled(bool is_final_decision) { + if (permission_decided_callback_withlifetime_) { + std::move(permission_decided_callback_withlifetime_) -+ .Run(CONTENT_SETTING_DEFAULT, false, is_final_decision, ++ .Run(CONTENT_SETTING_DEFAULT, false, is_final_decision, *data_, + content_settings::mojom::LifetimeMode::ALWAYS); + return; + } if (permission_decided_callback_) { permission_decided_callback_.Run(CONTENT_SETTING_DEFAULT, - /*is_one_time=*/false, is_final_decision); + /*is_one_time=*/false, is_final_decision, diff --git a/components/permissions/permission_request.h b/components/permissions/permission_request.h --- a/components/permissions/permission_request.h +++ b/components/permissions/permission_request.h -@@ -43,6 +43,11 @@ class PermissionRequest { - bool /*is_one_time*/, - bool /*is_final_decision*/)>; - -+ using PermissionDecidedCallbackWithLifetime = -+ base::OnceCallback; +@@ -47,6 +47,12 @@ class PermissionRequest { + bool /*is_final_decision*/, + const PermissionRequestData& /*request_data*/)>; + ++ using PermissionDecidedCallbackWithLifetime = base::RepeatingCallback; + // `permission_decided_callback` is called when the permission request is // resolved by the user (see comment on PermissionDecidedCallback above). - // `delete_callback` is called when the permission request is no longer needed -@@ -63,6 +68,10 @@ class PermissionRequest { - base::OnceClosure delete_callback, - bool uses_automatic_embargo); + // `request_finished_callback` is called when the permission request is being +@@ -61,6 +67,11 @@ class PermissionRequest { + base::OnceClosure request_finished_callback = base::DoNothing(), + bool uses_automatic_embargo = true); -+ PermissionRequest(PermissionRequestData request_data, ++ PermissionRequest(std::unique_ptr request_data, + PermissionDecidedCallbackWithLifetime permission_decided_callback, -+ base::OnceClosure delete_callback); ++ base::OnceClosure request_finished_callback = base::DoNothing(), ++ bool uses_automatic_embargo = true); + PermissionRequest(const PermissionRequest&) = delete; PermissionRequest& operator=(const PermissionRequest&) = delete; -@@ -162,10 +171,10 @@ class PermissionRequest { +@@ -167,10 +178,10 @@ class PermissionRequest { // If |is_one_time| is true the permission will last until all tabs of // |origin| are closed or navigated away from, and then the permission will // automatically expire after 1 day. @@ -1250,67 +1248,67 @@ diff --git a/components/permissions/permission_request.h b/components/permission // Called when the user has cancelled the permission request. This // corresponds to a denial, but is segregated in case the context needs to -@@ -221,6 +230,9 @@ class PermissionRequest { +@@ -224,6 +235,9 @@ class PermissionRequest { // Called once a decision is made about the permission. PermissionDecidedCallback permission_decided_callback_; + // Called once a decision is made about the permission (with lifetime option). + PermissionDecidedCallbackWithLifetime permission_decided_callback_withlifetime_; + - // Called when the request is no longer in use so it can be deleted by the - // caller. - base::OnceClosure delete_callback_; + // Called when the request is finished to perform bookkeeping tasks. + base::OnceClosure request_finished_callback_; + diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc --- a/components/permissions/permission_request_manager.cc +++ b/components/permissions/permission_request_manager.cc -@@ -171,7 +171,7 @@ void PermissionRequestManager::AddRequest( +@@ -189,7 +189,7 @@ void PermissionRequestManager::AddRequest( if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDenyPermissionPrompts)) { - request->PermissionDenied(); + request->PermissionDenied(/*is_one_time*/false, content_settings::mojom::LifetimeMode::ALWAYS); - request->RequestFinished(); return; } -@@ -246,7 +246,7 @@ void PermissionRequestManager::AddRequest( + +@@ -258,7 +258,7 @@ void PermissionRequestManager::AddRequest( if (should_auto_approve_request) { if (should_auto_approve_request == PermissionAction::GRANTED) { - request->PermissionGranted(/*is_one_time=*/true); + request->PermissionGranted(/*is_one_time=*/true, content_settings::mojom::LifetimeMode::UNTIL_ORIGIN_CLOSED); } - request->RequestFinished(); return; -@@ -609,7 +609,8 @@ void PermissionRequestManager::Accept() { + } +@@ -623,7 +623,8 @@ void PermissionRequestManager::Accept() { (*requests_iter)->request_type(), PermissionAction::GRANTED); - PermissionGrantedIncludingDuplicates(*requests_iter, + PermissionGrantedIncludingDuplicates(requests_iter->get(), - /*is_one_time=*/false); + /*is_one_time=*/false, + content_settings::mojom::LifetimeMode::ALWAYS); #if !BUILDFLAG(IS_ANDROID) std::optional content_settings_type = -@@ -627,7 +628,7 @@ void PermissionRequestManager::Accept() { +@@ -641,7 +642,7 @@ void PermissionRequestManager::Accept() { CurrentRequestsDecided(PermissionAction::GRANTED); } -void PermissionRequestManager::AcceptThisTime() { +void PermissionRequestManager::AcceptThisTime(content_settings::mojom::LifetimeMode mode) { - if (ignore_callbacks_from_prompt_) + if (ignore_callbacks_from_prompt_) { return; - DCHECK(view_); -@@ -640,7 +641,8 @@ void PermissionRequestManager::AcceptThisTime() { + } +@@ -655,7 +656,8 @@ void PermissionRequestManager::AcceptThisTime() { (*requests_iter)->request_type(), PermissionAction::GRANTED_ONCE); - PermissionGrantedIncludingDuplicates(*requests_iter, + PermissionGrantedIncludingDuplicates(requests_iter->get(), - /*is_one_time=*/true); + /*is_one_time=*/true, + mode); } NotifyRequestDecided(PermissionAction::GRANTED_ONCE); -@@ -648,6 +650,15 @@ void PermissionRequestManager::AcceptThisTime() { +@@ -663,6 +665,15 @@ void PermissionRequestManager::AcceptThisTime() { } void PermissionRequestManager::Deny() { @@ -1323,26 +1321,26 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p + +void PermissionRequestManager::Deny_(bool is_one_time, + content_settings::mojom::LifetimeMode lifetime_option) { - if (ignore_callbacks_from_prompt_) + if (ignore_callbacks_from_prompt_) { return; - DCHECK(view_); -@@ -670,7 +681,7 @@ void PermissionRequestManager::Deny() { + } +@@ -685,7 +696,7 @@ void PermissionRequestManager::Deny() { StorePermissionActionForUMA((*requests_iter)->requesting_origin(), (*requests_iter)->request_type(), PermissionAction::DENIED); -- PermissionDeniedIncludingDuplicates(*requests_iter); -+ PermissionDeniedIncludingDuplicates(*requests_iter, is_one_time, lifetime_option); +- PermissionDeniedIncludingDuplicates(requests_iter->get()); ++ PermissionDeniedIncludingDuplicates(requests_iter->get(), is_one_time, lifetime_option); } NotifyRequestDecided(PermissionAction::DENIED); -@@ -1267,32 +1278,32 @@ PermissionRequestManager::VisitDuplicateRequests( +@@ -1300,32 +1311,32 @@ PermissionRequestManager::VisitDuplicateRequests( void PermissionRequestManager::PermissionGrantedIncludingDuplicates( PermissionRequest* request, - bool is_one_time) { + bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(1ul, std::ranges::count(requests_, request) + - pending_permission_requests_.Count(request)) + CHECK(RequestExistsExactlyOnce(request, pending_permission_requests_, + requests_)) << "Only requests in [pending_permission_]requests_ can have duplicates"; - request->PermissionGranted(is_one_time); + request->PermissionGranted(is_one_time, lifetime_option); @@ -1350,9 +1348,9 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p base::BindRepeating( - [](bool is_one_time, + [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, - const base::WeakPtr& weak_request) { -- weak_request->PermissionGranted(is_one_time); -+ weak_request->PermissionGranted(is_one_time, lifetime_option); + const std::unique_ptr& request) { +- request->PermissionGranted(is_one_time); ++ request->PermissionGranted(is_one_time, lifetime_option); }, - is_one_time), + is_one_time, lifetime_option), @@ -1362,23 +1360,23 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p void PermissionRequestManager::PermissionDeniedIncludingDuplicates( - PermissionRequest* request) { + PermissionRequest* request, bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option) { - DCHECK_EQ(1ul, std::ranges::count(requests_, request) + - pending_permission_requests_.Count(request)) + CHECK(RequestExistsExactlyOnce(request, pending_permission_requests_, + requests_)) << "Only requests in [pending_permission_]requests_ can have duplicates"; - request->PermissionDenied(); + request->PermissionDenied(is_one_time, lifetime_option); VisitDuplicateRequests( base::BindRepeating( -- [](const base::WeakPtr& weak_request) { -- weak_request->PermissionDenied(); +- [](const std::unique_ptr& request) { +- request->PermissionDenied(); - }), -+ [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, const base::WeakPtr& weak_request) { -+ weak_request->PermissionDenied(is_one_time, lifetime_option); ++ [](bool is_one_time, content_settings::mojom::LifetimeMode lifetime_option, const std::unique_ptr& request) { ++ request->PermissionDenied(is_one_time, lifetime_option); + }, is_one_time, lifetime_option), request); } -@@ -1562,7 +1573,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { +@@ -1596,7 +1607,7 @@ void PermissionRequestManager::DoAutoResponseForTesting() { } switch (auto_response_for_test_) { case ACCEPT_ONCE: @@ -1402,7 +1400,7 @@ diff --git a/components/permissions/permission_request_manager.h b/components/pe void Dismiss() override; void Ignore() override; void FinalizeCurrentRequests() override; -@@ -383,9 +385,12 @@ class PermissionRequestManager +@@ -394,9 +396,12 @@ class PermissionRequestManager // Calls PermissionGranted on a request and all its duplicates. void PermissionGrantedIncludingDuplicates(PermissionRequest* request, diff --git a/build/cromite_patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/cromite_patches/Add-menu-item-to-bookmark-all-tabs.patch index e39840c00b226c5eebb57e9f2614eca7df3f335b..c8fa1d959c57c6792de481ddd60c1161b753e12f 100644 --- a/build/cromite_patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/cromite_patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/android/bookmark_bridge.h | 8 ++++ .../browser/bookmarks/BookmarkBridge.java | 41 ++++++++++++++++++ .../browser/bookmarks/bookmark_html_writer.cc | 14 +++++- - .../bookmark_merged_surface_service.cc | 3 ++ + .../bookmarks/bookmark_parent_folder.cc | 1 + .../permanent_folder_ordering_tracker.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- .../strings/android_chrome_strings.grd | 3 ++ @@ -18,23 +18,24 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmark_bar_strings.grdp | 6 +++ .../bookmarks/browser/bookmark_codec.cc | 20 +++++++-- components/bookmarks/browser/bookmark_codec.h | 7 ++- - .../browser/bookmark_load_details.cc | 14 ++++-- + .../browser/bookmark_load_details.cc | 15 +++++-- .../bookmarks/browser/bookmark_load_details.h | 2 + .../bookmarks/browser/bookmark_model.cc | 3 +- components/bookmarks/browser/bookmark_model.h | 7 +++ - components/bookmarks/browser/bookmark_node.cc | 11 +++++ - components/bookmarks/browser/bookmark_node.h | 3 ++ + components/bookmarks/browser/bookmark_node.cc | 13 ++++++ + components/bookmarks/browser/bookmark_node.h | 4 ++ .../bookmarks/browser/bookmark_storage.cc | 2 + .../bookmarks/browser/bookmark_uuids.cc | 3 ++ components/bookmarks/browser/bookmark_uuids.h | 1 + - components/bookmarks/browser/model_loader.cc | 8 +++- + components/bookmarks/browser/model_loader.cc | 9 +++- + ...ookmark_model_merger_comparison_metrics.cc | 4 ++ .../bookmark_specifics_conversions.cc | 1 + - 25 files changed, 243 insertions(+), 14 deletions(-) + 26 files changed, 250 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml -@@ -74,6 +74,10 @@ found in the LICENSE file. +@@ -77,6 +77,10 @@ found in the LICENSE file. @@ -45,7 +46,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re -@@ -198,6 +202,9 @@ found in the LICENSE file. +@@ -207,6 +211,9 @@ found in the LICENSE file. @@ -58,7 +59,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -97,6 +97,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; +@@ -103,6 +103,7 @@ import org.chromium.chrome.browser.bookmarks.BookmarkPane; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -66,16 +67,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -253,12 +254,17 @@ import org.chromium.chrome.browser.ui.RootUiCoordinator; - import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; +@@ -275,6 +276,9 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; + import org.chromium.chrome.browser.ui.extensions.ExtensionKeybindingRegistry; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityClient; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityExtras.IntentOrigin; - import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController; + import org.chromium.chrome.browser.ui.signin.BottomSheetSigninAndHistorySyncConfig; +@@ -284,6 +288,8 @@ import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController; import org.chromium.chrome.browser.usage_stats.UsageStatsService; import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.xr.XrLayoutStateObserver; @@ -84,16 +86,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.edge_to_edge.SystemBarColorHelper; import org.chromium.components.browser_ui.edge_to_edge.TabbedSystemBarColorHelper; -@@ -3103,6 +3109,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -3394,6 +3400,8 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModelSelectorSupplier().get(), closeAllTabsRunnable); RecordUserAction.record("MobileMenuCloseAllTabs"); + } else if (id == R.id.bookmark_all_tabs_menu_id) { + bookmarkAllTabs(); } else if (id == R.id.close_all_incognito_tabs_menu_id) { - // Close only incognito tabs - Runnable closeAllTabsRunnable = -@@ -3191,6 +3199,41 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn + boolean allowUndo = TabClosureParamsUtils.shouldAllowUndo(triggeringMotion); + +@@ -3502,6 +3510,41 @@ public class ChromeTabbedActivity extends ChromeActivity { getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus); } @@ -138,7 +140,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -326,6 +326,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -390,6 +390,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -172,7 +174,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -438,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -502,6 +529,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -180,7 +182,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -531,6 +559,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -610,6 +638,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -189,8 +191,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); - if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { -@@ -1256,6 +1287,17 @@ void BookmarkBridge::GetBookmarksOfType( + if (IsPermanentFolderVisible( +@@ -1337,6 +1368,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -211,7 +213,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h --- a/chrome/browser/bookmarks/android/bookmark_bridge.h +++ b/chrome/browser/bookmarks/android/bookmark_bridge.h -@@ -79,6 +79,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -106,6 +106,10 @@ class BookmarkBridge : public ProfileObserver, jboolean AreAccountBookmarkFoldersActive(JNIEnv* env); @@ -222,7 +224,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( -@@ -223,6 +227,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -250,6 +254,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef& j_list, jint type); @@ -236,7 +238,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java -@@ -18,6 +18,7 @@ import org.jni_zero.JniType; +@@ -16,6 +16,7 @@ import org.jni_zero.JniType; import org.jni_zero.NativeMethods; import org.chromium.base.ContextUtils; @@ -252,15 +254,15 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; -@@ -46,6 +48,7 @@ import java.util.function.BiConsumer; +@@ -47,6 +49,7 @@ import java.util.function.BiConsumer; class BookmarkBridge { - private static OneshotSupplierImpl + private static final OneshotSupplierImpl sPartnerBookmarkIteratorSupplier = new OneshotSupplierImpl<>(); + private static final String TAG = "BookmarkBridge"; private final ObserverList mObservers = new ObserverList<>(); private final Profile mProfile; -@@ -383,6 +386,16 @@ class BookmarkBridge { +@@ -385,6 +388,16 @@ class BookmarkBridge { return mMobileFolderId; } @@ -275,9 +277,9 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + } + /** Returns Id representing the special "other" folder from bookmark model. */ - public BookmarkId getOtherFolderId() { + public @Nullable BookmarkId getOtherFolderId() { ThreadUtils.assertOnUiThread(); -@@ -894,6 +907,29 @@ class BookmarkBridge { +@@ -898,6 +911,29 @@ class BookmarkBridge { .addToReadingList(mNativeBookmarkBridge, parentId, title, url); } @@ -307,7 +309,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Helper method to mark an item as read. * -@@ -1111,6 +1147,9 @@ class BookmarkBridge { +@@ -1115,6 +1151,9 @@ class BookmarkBridge { BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl( long nativeBookmarkBridge, @JniType("GURL") GURL url); @@ -317,7 +319,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); void getTopLevelFolderIds( -@@ -1132,6 +1171,8 @@ class BookmarkBridge { +@@ -1136,6 +1175,8 @@ class BookmarkBridge { BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -329,7 +331,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc -@@ -173,14 +173,15 @@ class Writer : public base::RefCountedThreadSafe { +@@ -169,14 +169,15 @@ class Writer : public base::RefCountedThreadSafe { BookmarkCodec codec; local_bookmarks_ = codec.Encode(model->bookmark_bar_node(), model->other_node(), @@ -347,7 +349,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b } else { CHECK(!model->account_other_node()); CHECK(!model->account_mobile_node()); -@@ -214,6 +215,9 @@ class Writer : public base::RefCountedThreadSafe { +@@ -210,6 +211,9 @@ class Writer : public base::RefCountedThreadSafe { base::Value::Dict* mobile_folder_value = local_permanent_folders->FindDict( BookmarkCodec::kMobileBookmarkFolderNameKey); CHECK(mobile_folder_value); @@ -357,7 +359,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b base::Value::Dict* account_permanent_folders = account_bookmarks_.FindDict(BookmarkCodec::kRootsKey); -@@ -289,6 +293,10 @@ class Writer : public base::RefCountedThreadSafe { +@@ -285,6 +289,10 @@ class Writer : public base::RefCountedThreadSafe { return bookmark_html_writer::Result::kCouldNotWriteNodes; } @@ -368,7 +370,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b DecrementIndent(); if (!Write(kFolderChildrenEnd) || !Write(kNewline)) { -@@ -435,6 +443,7 @@ class Writer : public base::RefCountedThreadSafe { +@@ -431,6 +439,7 @@ class Writer : public base::RefCountedThreadSafe { case BookmarkNode::URL: case BookmarkNode::OTHER_NODE: case BookmarkNode::MOBILE: @@ -376,7 +378,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b NOTREACHED(); } -@@ -563,6 +572,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { +@@ -559,6 +568,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { ExtractUrls(model->bookmark_bar_node()); ExtractUrls(model->other_node()); ExtractUrls(model->mobile_node()); @@ -384,30 +386,21 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b if (model->account_bookmark_bar_node()) { CHECK(model->account_other_node()); -diff --git a/chrome/browser/bookmarks/bookmark_merged_surface_service.cc b/chrome/browser/bookmarks/bookmark_merged_surface_service.cc ---- a/chrome/browser/bookmarks/bookmark_merged_surface_service.cc -+++ b/chrome/browser/bookmarks/bookmark_merged_surface_service.cc -@@ -32,6 +32,7 @@ BookmarkParentFolder GetBookmarkParentFolderFromPermanentType( - BookmarkNode::Type type) { - switch (type) { +diff --git a/chrome/browser/bookmarks/bookmark_parent_folder.cc b/chrome/browser/bookmarks/bookmark_parent_folder.cc +--- a/chrome/browser/bookmarks/bookmark_parent_folder.cc ++++ b/chrome/browser/bookmarks/bookmark_parent_folder.cc +@@ -18,6 +18,7 @@ BookmarkParentFolder GetBookmarkParentFolderFromPermanentNode( + CHECK(node->is_permanent_node()); + switch (node->type()) { case bookmarks::BookmarkNode::URL: + case bookmarks::BookmarkNode::TABS_COLLECTION: NOTREACHED(); case bookmarks::BookmarkNode::FOLDER: // TODO(crbug.com/381252292): Consider extending type with a value -@@ -70,6 +71,8 @@ std::optional GetIfPermanentFolderType( - - case BookmarkNode::Type::URL: - NOTREACHED(); -+ case BookmarkNode::Type::TABS_COLLECTION: -+ NOTREACHED(); - } - NOTREACHED(); - } diff --git a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc b/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc --- a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc +++ b/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc -@@ -23,6 +23,7 @@ bool IsValidTrackedType(BookmarkNode::Type type) { +@@ -26,6 +26,7 @@ bool IsValidTrackedType(BookmarkNode::Type type) { switch (type) { case bookmarks::BookmarkNode::URL: case bookmarks::BookmarkNode::FOLDER: @@ -415,7 +408,7 @@ diff --git a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc b/chr NOTREACHED(); case bookmarks::BookmarkNode::BOOKMARK_BAR: -@@ -235,6 +236,7 @@ void PermanentFolderOrderingTracker::SetTrackedPermanentNodes() { +@@ -303,6 +304,7 @@ void PermanentFolderOrderingTracker::SetTrackedPermanentNodes() { switch (tracked_type_) { case bookmarks::BookmarkNode::URL: case bookmarks::BookmarkNode::FOLDER: @@ -426,7 +419,7 @@ diff --git a/chrome/browser/bookmarks/permanent_folder_ordering_tracker.cc b/chr diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java -@@ -85,7 +85,7 @@ public class DownloadLocationCustomView extends ScrollView +@@ -88,7 +88,7 @@ public class DownloadLocationCustomView extends ScrollView mDirectoryAdapter.update(); } @@ -435,7 +428,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse mTitle.setText(title); } -@@ -93,7 +93,7 @@ public class DownloadLocationCustomView extends ScrollView +@@ -96,7 +96,7 @@ public class DownloadLocationCustomView extends ScrollView mSubtitleView.setText(subtitle); } @@ -447,7 +440,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -4487,6 +4487,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -4541,6 +4541,9 @@ To change this setting, BEGIN_LINKdelete the Chrome d Select tabs @@ -653,16 +646,17 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ void UpdateUserFolderStatsRecursively(const BookmarkNode& node, bool top_level, -@@ -60,6 +60,8 @@ BookmarkLoadDetails::BookmarkLoadDetails() - root_node_->Add(BookmarkPermanentNode::CreateOtherBookmarks(/*id=*/0))); +@@ -63,6 +63,9 @@ BookmarkLoadDetails::BookmarkLoadDetails() mobile_folder_node_ = static_cast( - root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks(/*id=*/0))); + root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks( + /*id=*/0, /*is_account_node=*/false))); + tabs_collection_folder_node_ = static_cast( -+ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks(/*id=*/0))); ++ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks( ++ /*id=*/0, /*is_account_node=*/false))); - CHECK_EQ(kNumDefaultTopLevelPermanentFolders, root_node_->children().size()); - } -@@ -106,6 +108,10 @@ void BookmarkLoadDetails::PopulateNodeIdsForLocalOrSyncablePermanentNodes() { + // Set the nodes' `date_added` to the same time so that there is no inherent + // hierarchy in terms of their added time between them. This is relevant for +@@ -119,6 +122,10 @@ void BookmarkLoadDetails::PopulateNodeIdsForLocalOrSyncablePermanentNodes() { if (mobile_folder_node_->id() == 0) { mobile_folder_node_->set_id(max_id_++); } @@ -673,7 +667,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ } void BookmarkLoadDetails::AddManagedNode( -@@ -118,6 +124,7 @@ void BookmarkLoadDetails::AddManagedNode( +@@ -131,6 +138,7 @@ void BookmarkLoadDetails::AddManagedNode( CHECK_NE(bb_node_->id(), 0); CHECK_NE(other_folder_node_->id(), 0); CHECK_NE(mobile_folder_node_->id(), 0); @@ -681,7 +675,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ has_managed_node_ = true; root_node_->Add(std::move(managed_node)); -@@ -125,8 +132,8 @@ void BookmarkLoadDetails::AddManagedNode( +@@ -138,8 +146,8 @@ void BookmarkLoadDetails::AddManagedNode( void BookmarkLoadDetails::CreateIndices() { local_or_syncable_uuid_index_.insert(root_node_.get()); @@ -692,7 +686,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ for (const auto& child : root_node_->children()) { if (child.get() == account_bb_node_ || child.get() == account_other_folder_node_ || -@@ -145,6 +152,7 @@ void BookmarkLoadDetails::ResetPermanentNodePointers() { +@@ -158,6 +166,7 @@ void BookmarkLoadDetails::ResetPermanentNodePointers() { bb_node_ = nullptr; other_folder_node_ = nullptr; mobile_folder_node_ = nullptr; @@ -722,16 +716,16 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/b diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc -@@ -835,7 +835,7 @@ bool BookmarkModel::HasBookmarks() const { - bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return bookmark_bar_node_->children().empty() && -- other_node_->children().empty() && mobile_node_->children().empty(); -+ other_node_->children().empty() && mobile_node_->children().empty() && tabs_collection_node_->children().empty(); +@@ -908,7 +908,7 @@ bool BookmarkModel::HasUserCreatedBookmarksOrFolders() const { + (account_bookmark_bar_node_ && + !account_bookmark_bar_node_->children().empty()) || + (account_other_node_ && !account_other_node_->children().empty()) || +- (account_mobile_node_ && !account_mobile_node_->children().empty()); ++ (account_mobile_node_ && !account_mobile_node_->children().empty() && tabs_collection_node_->children().empty()); } bool BookmarkModel::IsBookmarked(const GURL& url) const { -@@ -1167,6 +1167,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { +@@ -1240,6 +1240,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -744,10 +738,10 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark +++ b/components/bookmarks/browser/bookmark_model.h @@ -150,6 +150,12 @@ class BookmarkModel : public BookmarkUndoProvider, // bookmarks in the account storage). - const BookmarkNode* account_mobile_node() const; + const BookmarkPermanentNode* account_mobile_node() const; + // Returns the 'mobile' node. This is NULL until loaded. -+ const BookmarkNode* tabs_collection_node() const { ++ const BookmarkPermanentNode* tabs_collection_node() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return tabs_collection_node_; + } @@ -755,7 +749,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark bool is_root_node(const BookmarkNode* node) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return node == root_; -@@ -611,6 +617,7 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -628,6 +634,7 @@ class BookmarkModel : public BookmarkUndoProvider, raw_ptr account_bookmark_bar_node_ = nullptr; raw_ptr account_other_node_ = nullptr; raw_ptr account_mobile_node_ = nullptr; @@ -775,17 +769,19 @@ diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmark case BookmarkNode::URL: NOTREACHED(); case BookmarkNode::FOLDER: -@@ -211,6 +213,15 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id) { - l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME))); +@@ -213,6 +215,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, + is_account_node)); } +// static +std::unique_ptr -+BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id) { ++BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id, ++ bool is_account_node) { + // base::WrapUnique() used because the constructor is private. + return base::WrapUnique(new BookmarkPermanentNode( + id, TABS_COLLECTION, base::Uuid::ParseLowercase(kTabsCollectionBookmarksNodeUuid), -+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME))); ++ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME), ++ is_account_node)); +} + BookmarkPermanentNode::BookmarkPermanentNode(int64_t id, @@ -802,12 +798,13 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks MOBILE }; -@@ -247,6 +248,8 @@ class BookmarkPermanentNode : public BookmarkNode { - int64_t id); +@@ -249,6 +250,9 @@ class BookmarkPermanentNode : public BookmarkNode { static std::unique_ptr CreateMobileBookmarks( - int64_t id); + int64_t id, + bool is_account_node); + static std::unique_ptr CreateTabsCollectionBookmarks( -+ int64_t id); ++ int64_t id, ++ bool is_account_node); // Returns whether the permanent node of type `type` should be visible even // when it is empty (i.e. no children). @@ -857,16 +854,17 @@ diff --git a/components/bookmarks/browser/bookmark_uuids.h b/components/bookmark diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc --- a/components/bookmarks/browser/model_loader.cc +++ b/components/bookmarks/browser/model_loader.cc -@@ -71,6 +71,8 @@ std::unique_ptr LoadBookmarks( - BookmarkPermanentNode::CreateOtherBookmarks(0); +@@ -74,6 +74,9 @@ std::unique_ptr LoadBookmarks( std::unique_ptr account_mobile_folder_node = - BookmarkPermanentNode::CreateMobileBookmarks(0); + BookmarkPermanentNode::CreateMobileBookmarks( + 0, /*is_account_node=*/true); + std::unique_ptr tabs_collection_folder_node = -+ BookmarkPermanentNode::CreateTabsCollectionBookmarks(0); ++ BookmarkPermanentNode::CreateTabsCollectionBookmarks( ++ 0, /*is_account_node=*/true); std::optional root_dict = LoadFileToDict(account_file_path); -@@ -78,7 +80,8 @@ std::unique_ptr LoadBookmarks( +@@ -81,7 +84,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, /*already_assigned_ids=*/{}, account_bb_node.get(), account_other_folder_node.get(), @@ -876,7 +874,7 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks &sync_metadata_str)) { ids_assigned_to_account_nodes = codec.release_assigned_ids(); -@@ -120,7 +123,8 @@ std::unique_ptr LoadBookmarks( +@@ -123,7 +127,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, std::move(ids_assigned_to_account_nodes), details->bb_node(), details->other_folder_node(), @@ -886,6 +884,27 @@ diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks &sync_metadata_str)) { details->set_local_or_syncable_sync_metadata_str( std::move(sync_metadata_str)); +diff --git a/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc b/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc +--- a/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc ++++ b/components/sync_bookmarks/bookmark_model_merger_comparison_metrics.cc +@@ -38,6 +38,7 @@ const char kOtherBookmarksTag[] = "other_bookmarks"; + constexpr char16_t kBookmarkBarFolderName[] = u"__Bookmarks bar__"; + constexpr char16_t kOtherBookmarksFolderName[] = u"__Other bookmarks__"; + constexpr char16_t kMobileBookmarksFolderName[] = u"__Mobile bookmarks__"; ++constexpr char16_t kTabsCollectionBookmarksFolderName[] = u"__Tabs collection__"; + + using RemoteForest = BookmarkModelMerger::RemoteForest; + using RemoteTreeNode = BookmarkModelMerger::RemoteTreeNode; +@@ -129,6 +130,9 @@ std::u16string_view GetBookmarkNodeTitle(const bookmarks::BookmarkNode* node) { + return kOtherBookmarksFolderName; + case bookmarks::BookmarkNode::MOBILE: + return kMobileBookmarksFolderName; ++ case bookmarks::BookmarkNode::TABS_COLLECTION: ++ return kTabsCollectionBookmarksFolderName; ++ + } + NOTREACHED(); + } diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/components/sync_bookmarks/bookmark_specifics_conversions.cc --- a/components/sync_bookmarks/bookmark_specifics_conversions.cc +++ b/components/sync_bookmarks/bookmark_specifics_conversions.cc diff --git a/build/cromite_patches/Add-menu-item-to-view-source.patch b/build/cromite_patches/Add-menu-item-to-view-source.patch index d7424b0429b2f8c70e9fa085296f7b46a127a763..037d6ca171db9ce6fb4bb7205e7ce4e0abdb9322 100644 --- a/build/cromite_patches/Add-menu-item-to-view-source.patch +++ b/build/cromite_patches/Add-menu-item-to-view-source.patch @@ -4,19 +4,20 @@ Subject: Add menu item to view source License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../android/java/res/menu/custom_tabs_menu.xml | 3 +++ - chrome/android/java/res/menu/main_menu.xml | 3 +++ - .../chrome/browser/ChromeTabbedActivity.java | 2 ++ - .../chrome/browser/app/ChromeActivity.java | 5 +++++ - .../appmenu/AppMenuPropertiesDelegateImpl.java | 18 ++++++++++++++++++ - .../CustomTabAppMenuPropertiesDelegate.java | 1 + - .../android/strings/android_chrome_strings.grd | 4 ++++ - 7 files changed, 36 insertions(+) + .../android/java/res/menu/custom_tabs_menu.xml | 3 +++ + chrome/android/java/res/menu/main_menu.xml | 3 +++ + .../chrome/browser/ChromeTabbedActivity.java | 2 ++ + .../chrome/browser/app/ChromeActivity.java | 5 +++++ + .../appmenu/AppMenuPropertiesDelegateImpl.java | 17 +++++++++++++++++ + .../CustomTabAppMenuPropertiesDelegate.java | 2 +- + .../TabbedAppMenuPropertiesDelegate.java | 6 +++--- + .../android/strings/android_chrome_strings.grd | 4 ++++ + 8 files changed, 38 insertions(+), 4 deletions(-) diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml --- a/chrome/android/java/res/menu/custom_tabs_menu.xml +++ b/chrome/android/java/res/menu/custom_tabs_menu.xml -@@ -58,6 +58,9 @@ found in the LICENSE file. +@@ -73,6 +73,9 @@ found in the LICENSE file. @@ -29,7 +30,7 @@ diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml -@@ -125,6 +125,9 @@ found in the LICENSE file. +@@ -131,6 +131,9 @@ found in the LICENSE file. @@ -42,7 +43,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -3135,6 +3135,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -3434,6 +3434,8 @@ public class ChromeTabbedActivity extends ChromeActivity { NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER); } RecordUserAction.record("MobileMenuDownloadManager"); @@ -54,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -2531,6 +2531,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2576,6 +2576,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity return doOpenWebApk(currentTab); } @@ -69,16 +70,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -587,6 +587,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate - isNativePage, isFileScheme, isContentScheme, isIncognito, url)); - - updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */, isNativePage); -+ updateViewSourceMenuItem(menu, currentTab); - - updateAutoDarkMenuItem(menu, currentTab, isNativePage); - -@@ -1328,6 +1329,23 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate - findInPageMenuRow.setVisible(itemVisible); +@@ -864,6 +864,23 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties + } } + /** @@ -104,18 +97,49 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -304,6 +304,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat - +@@ -331,7 +331,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + // --- Request Desktop Site --- updateRequestDesktopSiteMenuItem( menu, currentTab, requestDesktopSiteVisible, isNativePage); +- + updateViewSourceMenuItem(menu, currentTab); - prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible); + // --- Translate --- + prepareTranslateMenuItem(menu, currentTab); + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +@@ -173,7 +173,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + if (menuGroup == MenuGroup.PAGE_MENU) { + preparePageMenu(menu, currentTab, handler, isIncognito); } +- prepareCommonMenuItems(menu, menuGroup, isIncognito); ++ prepareCommonMenuItems(menu, menuGroup, isIncognito, currentTab); } + + private void setMenuGroupVisibility(@MenuGroup int menuGroup, Menu menu) { +@@ -338,7 +338,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + isNativePage, isFileScheme, isContentScheme, isIncognito, url)); + + updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */, isNativePage); +- ++ updateViewSourceMenuItem(menu, currentTab); + updateAutoDarkMenuItem(menu, currentTab, isNativePage); + + // Only display reader mode settings menu option if the current page is in reader mode. +@@ -371,7 +371,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm + && UrlUtilities.isNtpUrl(currentTab.getUrl()); + } + +- private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { ++ private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito, Tab currentTab) { + boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); + if (always_incognito) { + final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -315,6 +315,10 @@ CHAR_LIMIT guidelines: +@@ -321,6 +321,10 @@ CHAR_LIMIT guidelines: Collaboration diff --git a/build/cromite_patches/Add-option-to-force-tablet-UI.patch b/build/cromite_patches/Add-option-to-force-tablet-UI.patch index 892dc6109e1da577d453e0e1bcbe3a206053c09e..2953685a18aaa379f1c44118f3e9a1f709ebb5d7 100644 --- a/build/cromite_patches/Add-option-to-force-tablet-UI.patch +++ b/build/cromite_patches/Add-option-to-force-tablet-UI.patch @@ -14,6 +14,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../chrome/browser/app/ChromeActivity.java | 4 +++- .../overlays/strip/StripLayoutHelper.java | 10 ++++++++-- .../strip/StripLayoutHelperManager.java | 6 +++++- + .../scene_layer/TabStripSceneLayer.java | 8 ++++++++ .../init/ChromeBrowserInitializer.java | 2 ++ .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +++- .../chrome/browser/ui/RootUiCoordinator.java | 6 +++++- @@ -37,7 +38,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../accessibility/AccessibilitySettings.java | 13 ++++++++++++ .../AccessibilitySettingsDelegate.java | 2 ++ .../chromium/ui/base/DeviceFormFactor.java | 14 +++++++++++++ - 33 files changed, 163 insertions(+), 26 deletions(-) + 34 files changed, 171 insertions(+), 26 deletions(-) diff --git a/chrome/android/java/res/layout/custom_tabs_control_container.xml b/chrome/android/java/res/layout/custom_tabs_control_container.xml --- a/chrome/android/java/res/layout/custom_tabs_control_container.xml @@ -106,7 +107,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeManager; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; -@@ -131,6 +132,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -133,6 +134,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -118,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java -@@ -63,6 +63,7 @@ import org.chromium.content_public.browser.WebContents; +@@ -66,6 +66,7 @@ import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContentsObserver; import org.chromium.net.NetId; import org.chromium.ui.LayoutInflaterUtils; @@ -126,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.j import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayUtil; import org.chromium.url.GURL; -@@ -476,7 +477,9 @@ public class WarmupManager { +@@ -481,7 +482,9 @@ public class WarmupManager { ControlContainer controlContainer = mainView.findViewById(R.id.control_container); if (toolbarId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -140,7 +141,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -62,6 +62,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -65,6 +65,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting } } @@ -169,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -759,7 +759,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -787,7 +787,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity // Inflate the correct toolbar layout for the device. int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { @@ -183,17 +184,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -115,6 +115,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; +@@ -120,6 +120,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService; import org.chromium.components.tab_group_sync.TriggerSource; import org.chromium.components.tab_groups.TabGroupColorId; - import org.chromium.ui.MotionEventUtils; + import org.chromium.ui.accessibility.AccessibilityState; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.WindowAndroid; - import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -4113,8 +4114,13 @@ public class StripLayoutHelper - mTabMenu.setAnchorView(tabView); - // 3. Set the vertical offset to align the tab menu with bottom of the tab strip + import org.chromium.ui.util.ColorUtils; +@@ -4472,8 +4473,13 @@ public class StripLayoutHelper + mCloseButtonMenu.setAnchorView(tabView); + // 3. Set the vertical offset to align the close button menu with bottom of the tab strip int tabHeight = mManagerHost.getHeight(); - int verticalOffset = - -(tabHeight - (int) mContext.getResources().getDimension(R.dimen.tab_strip_height)); @@ -204,13 +205,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over + (int) mContext.getResources().getDimension(R.dimen.tab_strip_height_tabletui); + } + int verticalOffset = -(tabHeight - tab_strip_height); - mTabMenu.setVerticalOffset(verticalOffset); + mCloseButtonMenu.setVerticalOffset(verticalOffset); - // 4. Set the horizontal offset to align the tab menu with the right side of the tab + // 4. Set the horizontal offset to align the close button menu with the right side of the diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -93,6 +93,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa +@@ -98,6 +98,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; import org.chromium.content_public.browser.LoadUrlParams; @@ -218,10 +219,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; -@@ -450,7 +451,10 @@ public class StripLayoutHelperManager - +@@ -467,7 +468,10 @@ public class StripLayoutHelperManager mIsLayoutOptimizationsEnabled = - ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled(true); + ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled( + /* isTablet= */ true, DisplayUtil.isContextInDefaultDisplay(mContext)); - mScrollableStripHeight = res.getDimension(R.dimen.tab_strip_height) / mDensity; + mScrollableStripHeight = + (DeviceFormFactor.isForceTabletUI() @@ -230,6 +231,24 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mHeight = mIsLayoutOptimizationsEnabled ? toolbarManager.getTabStripHeightSupplier().get() / mDensity +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java +@@ -111,6 +111,14 @@ public class TabStripSceneLayer extends SceneOverlayLayer { + if (mNativePtr == 0) return; + final boolean visible = yOffset > -layoutHelper.getHeight(); + ++ if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(ContextUtils.getApplicationContext())) { ++ TintedCompositorButton newTabButton = layoutHelper.getNewTabButton(); ++ if (newTabButton.isVisible()) { ++ rightPaddingDp += newTabButton.getWidth() + layoutHelper.getNewTabBtnVisualOffset() ++ + StripLayoutGroupTitle.REORDER_BACKGROUND_PADDING_END; ++ } ++ } ++ + // This will hide the tab strips if necessary. + TabStripSceneLayerJni.get() + .beginBuildingFrame(mNativePtr, TabStripSceneLayer.this, visible); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java @@ -252,7 +271,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrow diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -664,7 +664,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -725,7 +725,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { @Override public int getControlContainerHeightResource() { @@ -266,7 +285,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -100,6 +100,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; +@@ -104,6 +104,8 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.pdf.PdfPage; @@ -275,7 +294,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl; -@@ -1616,7 +1618,9 @@ public class RootUiCoordinator +@@ -1645,7 +1647,9 @@ public class RootUiCoordinator if (!mSupportsFindInPageSupplier.getAsBoolean()) return; int stubId = R.id.find_toolbar_stub; @@ -300,7 +319,7 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -286,6 +286,7 @@ public final class ChromePreferenceKeys { +@@ -313,6 +313,7 @@ public final class ChromePreferenceKeys { /** Whether the app-specific history info text was already seen by users. */ public static final String HISTORY_APP_SPECIFIC_INFO_SEEN = "Chrome.History.AppSpecificInfoSeen"; @@ -340,7 +359,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java -@@ -57,6 +57,7 @@ public class LegacyChromePreferenceKeys { +@@ -56,6 +56,7 @@ public class LegacyChromePreferenceKeys { ChromePreferenceKeys.FIRST_RUN_FLOW_COMPLETE, ChromePreferenceKeys.FIRST_RUN_FLOW_SIGNIN_SETUP, ChromePreferenceKeys.FIRST_RUN_LIGHTWEIGHT_FLOW_COMPLETE, @@ -351,18 +370,18 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java --- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java +++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java -@@ -38,6 +38,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils.Windowing - import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState; +@@ -39,6 +39,7 @@ import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; import org.chromium.components.browser_ui.edge_to_edge.EdgeToEdgeStateProvider; + import org.chromium.ui.CaptionBarInsetsRectProvider; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.InsetObserver; import org.chromium.ui.InsetObserver.WindowInsetsConsumer; import org.chromium.ui.InsetsRectProvider; -@@ -266,6 +267,7 @@ public class AppHeaderCoordinator - private static @DesktopWindowHeuristicResult int checkIsInDesktopWindow( +@@ -267,6 +268,7 @@ public class AppHeaderCoordinator InsetsRectProvider insetsRectProvider, - @DesktopWindowHeuristicResult int currentResult) { + @DesktopWindowHeuristicResult int currentResult, + boolean isOnExternalDisplay) { + if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW; @DesktopWindowHeuristicResult int newResult; @@ -370,7 +389,7 @@ diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/c diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -790,7 +790,7 @@ public class LocationBarCoordinator +@@ -857,7 +857,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -382,8 +401,8 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1671,6 +1671,13 @@ Your Google account may have other forms of browsing history like searches and a - Hide your IP address +@@ -1654,6 +1654,13 @@ Your Google account may have other forms of browsing history like searches and a + Privacy guide explanation closed + @@ -464,7 +483,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chro --- a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml +++ b/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml @@ -10,8 +10,10 @@ found in the LICENSE file. - 10dp + 9dp - 0dp @@ -479,8 +498,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ControlContainer.java -@@ -23,7 +23,7 @@ public interface ControlContainer { - * Initialize the control container with the specified toolbar. +@@ -27,7 +27,7 @@ public interface ControlContainer { + * * @param toolbarLayoutId The ID of the toolbar layout to use. */ - void initWithToolbar(int toolbarLayoutId); @@ -491,18 +510,18 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -@@ -5,6 +5,7 @@ - package org.chromium.chrome.browser.toolbar.top; +@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.toolbar.top; + import static org.chromium.build.NullUtil.assumeNonNull; import android.content.Context; +import android.content.res.Resources; import android.graphics.Canvas; + import android.graphics.Color; import android.graphics.PorterDuff; - import android.graphics.Rect; -@@ -144,8 +145,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout - } +@@ -157,8 +158,25 @@ public class ToolbarControlContainer extends OptimizedFrameLayout @Override + @Initializer - public void initWithToolbar(int toolbarLayoutId) { + public void initWithToolbar(int toolbarLayoutId, int controlContainerHeightOverrideId) { try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) { @@ -523,21 +542,21 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow + if (view != null) + ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; + } - mToolbarContainer = - (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); + mToolbarContainer = findViewById(R.id.toolbar_container); ViewStub toolbarStub = findViewById(R.id.toolbar_stub); + toolbarStub.setLayoutResource(toolbarLayoutId); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java -@@ -63,6 +63,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; +@@ -68,6 +68,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp; import org.chromium.components.feature_engagement.Tracker; - import org.chromium.ui.MotionEventUtils; import org.chromium.ui.base.ViewUtils; + import org.chromium.ui.util.MotionEventUtils; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.util.TokenHolder; import org.chromium.url.GURL; -@@ -583,7 +584,9 @@ public abstract class ToolbarLayout extends FrameLayout +@@ -586,7 +587,9 @@ public abstract class ToolbarLayout extends FrameLayout * not have a tab strip. */ protected int getTabStripHeightFromResource() { @@ -551,7 +570,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java -@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; +@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripHeightObserver; import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionDelegate; import org.chromium.ui.base.ViewUtils; @@ -559,7 +578,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import org.chromium.ui.resources.dynamics.DynamicResourceReadyOnceCallback; import org.chromium.ui.util.TokenHolder; -@@ -556,6 +557,7 @@ class HeightTransitionHandler { +@@ -559,6 +560,7 @@ class HeightTransitionHandler { if (TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting != null) { return TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting; } @@ -577,8 +596,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow +import org.chromium.ui.base.DeviceFormFactor; /** Class used to manage tab strip visibility and height updates. */ - public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHeaderObserver { -@@ -154,7 +155,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea + @NullMarked +@@ -153,7 +154,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea mTabStripReservedTopPadding = controlContainerView() .getResources() @@ -608,15 +627,15 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -25,6 +25,7 @@ import org.chromium.content_public.browser.ContentFeatureList; +@@ -29,6 +29,7 @@ import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment; +import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate.BooleanPreferenceDelegate; /** Fragment to keep track of all the accessibility related preferences. */ - public class AccessibilitySettings extends ChromeBaseSettingsFragment -@@ -39,6 +40,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment + @NullMarked +@@ -44,6 +45,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment public static final String PREF_ZOOM_INFO = "zoom_info"; public static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions"; @@ -626,7 +645,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomIncludeOSAdjustment; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -105,6 +109,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -108,6 +112,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getReaderAccessibilityDelegate().getValue()); readerForAccessibilityPref.setOnPreferenceChangeListener(this); @@ -639,7 +658,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -163,6 +173,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -167,6 +177,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment public boolean onPreferenceChange(Preference preference, Object newValue) { if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { mDelegate.getForceEnableZoomAccessibilityDelegate().setValue((Boolean) newValue); @@ -647,12 +666,12 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c + mForceTabletUIDelegate.setValue((Boolean) newValue); + mDelegate.requestRestart(getActivity()); } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) { - mDelegate.getReaderAccessibilityDelegate().setValue((Boolean) newValue); - } else if (PREF_PAGE_ZOOM_DEFAULT_ZOOM.equals(preference.getKey())) { + boolean readerModeEnabled = (Boolean) newValue; + mDelegate.getReaderAccessibilityDelegate().setValue(readerModeEnabled); diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -39,6 +39,8 @@ public interface AccessibilitySettingsDelegate { +@@ -41,6 +41,8 @@ public interface AccessibilitySettingsDelegate { */ BrowserContextHandle getBrowserContextHandle(); @@ -664,7 +683,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java -@@ -69,6 +69,14 @@ public class DeviceFormFactor { +@@ -83,6 +83,14 @@ public class DeviceFormFactor { return BuildConfig.IS_DESKTOP_ANDROID; } @@ -679,7 +698,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** * Each activity could be on a different display, and this will just tell you whether the * display associated with the application context is "tablet sized". Use {@link -@@ -77,6 +85,7 @@ public class DeviceFormFactor { +@@ -91,6 +99,7 @@ public class DeviceFormFactor { @CalledByNative @Deprecated public static boolean isTablet() { @@ -687,7 +706,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui if (sIsTabletForTesting != null) { return sIsTabletForTesting; } -@@ -107,6 +116,7 @@ public class DeviceFormFactor { +@@ -121,6 +130,7 @@ public class DeviceFormFactor { * E.g. http://developer.samsung.com/samsung-dex/testing */ public static boolean isNonMultiDisplayContextOnTablet(Context context) { @@ -695,7 +714,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; } -@@ -142,6 +152,7 @@ public class DeviceFormFactor { +@@ -156,6 +166,7 @@ public class DeviceFormFactor { * @return The screen width bucket the device is in (see constants at the top of this class). */ private static int detectScreenWidthBucket(Context context) { @@ -703,7 +722,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -149,6 +160,7 @@ public class DeviceFormFactor { +@@ -163,6 +174,7 @@ public class DeviceFormFactor { ThreadUtils.assertOnUiThread(); Context context = windowAndroid.getContext().get(); if (context == null) return 0; @@ -711,7 +730,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return context.getResources().getInteger(R.integer.min_screen_width_bucket); } -@@ -158,6 +170,7 @@ public class DeviceFormFactor { +@@ -172,6 +184,7 @@ public class DeviceFormFactor { */ @UiThread public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) { @@ -719,7 +738,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context)); } -@@ -166,6 +179,7 @@ public class DeviceFormFactor { +@@ -180,6 +193,7 @@ public class DeviceFormFactor { * layout. */ public static int getMinimumTabletWidthPx(DisplayAndroid display) { diff --git a/build/cromite_patches/Add-option-to-not-persist-tabs-across-sessions.patch b/build/cromite_patches/Add-option-to-not-persist-tabs-across-sessions.patch index 24e3a9677e4fd1797b2e398e56c2fda2ac61cc0f..d5caee1d263fc4ca91901f46f418bb8420f7619b 100644 --- a/build/cromite_patches/Add-option-to-not-persist-tabs-across-sessions.patch +++ b/build/cromite_patches/Add-option-to-not-persist-tabs-across-sessions.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -96,6 +96,11 @@ found in the LICENSE file. +@@ -95,6 +95,11 @@ found in the LICENSE file. android:title="@string/incognito_settings_title" android:summary="@string/incognito_settings_summary" android:fragment="org.chromium.chrome.browser.privacy.settings.IncognitoSettings"/> @@ -28,7 +28,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -45,6 +45,7 @@ import org.chromium.base.Callback; +@@ -47,6 +47,7 @@ import org.chromium.base.Callback; import org.chromium.base.CallbackController; import org.chromium.base.CallbackUtils; import org.chromium.base.CommandLine; @@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.base.IntentUtils; import org.chromium.base.Log; import org.chromium.base.MemoryPressureListener; -@@ -1695,8 +1696,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn +@@ -1849,8 +1850,10 @@ public class ChromeTabbedActivity extends ChromeActivity { boolean hadCipherData = CipherLazyHolder.sCipherInstance.restoreFromBundle(getSavedInstanceState()); @@ -51,33 +51,34 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.privacy.settings; - import static org.chromium.components.content_settings.PrefNames.COOKIE_CONTROLS_MODE; +@@ -8,6 +8,7 @@ import static org.chromium.components.content_settings.PrefNames.COOKIE_CONTROLS - import android.os.Build; + import android.content.Context; + import android.content.Intent; +import android.content.SharedPreferences; + import android.graphics.drawable.Drawable; + import android.os.Build; import android.os.Bundle; - import android.text.SpannableString; - import android.text.style.ClickableSpan; -@@ -22,6 +23,8 @@ import org.chromium.base.metrics.RecordHistogram; - import org.chromium.base.metrics.RecordUserAction; - import org.chromium.base.supplier.ObservableSupplier; - import org.chromium.base.supplier.ObservableSupplierImpl; -+import org.chromium.base.ContextUtils; +@@ -21,7 +22,9 @@ import android.view.View; + import androidx.annotation.VisibleForTesting; + import androidx.preference.Preference; + +import org.chromium.base.BuildInfo; - import org.chromium.chrome.R; - import org.chromium.chrome.browser.enterprise.util.ManagedBrowserUtils; - import org.chromium.chrome.browser.flags.ChromeFeatureList; -@@ -92,6 +95,8 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + import org.chromium.base.Callback; ++import org.chromium.base.ContextUtils; + import org.chromium.base.IntentUtils; + import org.chromium.base.metrics.RecordHistogram; + import org.chromium.base.metrics.RecordUserAction; +@@ -113,6 +116,8 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private final SharedPreferencesManager mSharedPreferencesManager = ChromeSharedPreferences.getInstance(); + private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit"; + private ManagedPreferenceDelegate mManagedPreferenceDelegate; - @VisibleForTesting static final String PREF_FP_PROTECTION = "fp_protection"; - @VisibleForTesting static final String PREF_IP_PROTECTION = "ip_protection"; -@@ -333,7 +338,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + @VisibleForTesting static final String PREF_THIRD_PARTY_COOKIES = "third_party_cookies"; + @VisibleForTesting static final String PREF_TRACKING_PROTECTION = "tracking_protection"; +@@ -373,7 +378,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); @@ -90,7 +91,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting UserPrefs.get(getProfile()) .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); } else if (PREF_HTTPS_FIRST_MODE_LEGACY.equals(key)) { -@@ -409,6 +418,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -433,6 +442,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment getContext(), getProfile())); } @@ -105,7 +106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -5541,6 +5541,12 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -5714,6 +5714,12 @@ To change this setting, BEGIN_LINKdelete the Chrome d IMAGE diff --git a/build/cromite_patches/Add-option-to-use-home-page-as-NTP.patch b/build/cromite_patches/Add-option-to-use-home-page-as-NTP.patch index aae0e8e1deebb9c0cf3a223278f5ff57ee60fcc2..f61088a43e2cb30d7ac33c6c294bd04b0b1229e2 100644 --- a/build/cromite_patches/Add-option-to-use-home-page-as-NTP.patch +++ b/build/cromite_patches/Add-option-to-use-home-page-as-NTP.patch @@ -24,9 +24,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java -@@ -99,6 +99,9 @@ import java.util.Map; - import java.util.Objects; +@@ -114,6 +114,9 @@ import java.util.Objects; import java.util.Optional; + import java.util.Set; +import org.chromium.chrome.browser.homepage.HomepageManager; +import org.chromium.url.GURL; @@ -34,7 +34,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * A mediator for the TabGridDialog component, responsible for communicating with the components' * coordinator as well as managing the business logic for dialog show/hide. -@@ -930,9 +933,15 @@ public class TabGridDialogMediator +@@ -1028,9 +1031,15 @@ public class TabGridDialogMediator return; } @@ -54,15 +54,15 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.collaboration.CollaborationServiceFactory; - import org.chromium.chrome.browser.data_sharing.DataSharingServiceFactory; +@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.data_sharing.DataSharingServiceFactory; + import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesConfig; import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesCoordinator; import org.chromium.chrome.browser.layouts.LayoutStateProvider; +import org.chromium.chrome.browser.homepage.HomepageManager; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; import org.chromium.chrome.browser.layouts.LayoutType; import org.chromium.chrome.browser.profiles.Profile; -@@ -401,10 +402,15 @@ public class TabGroupUiMediator implements BackPressHandler, ThemeColorObserver, +@@ -415,10 +416,15 @@ public class TabGroupUiMediator implements BackPressHandler { assert relatedTabs.size() > 0; Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); @@ -97,7 +97,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java -@@ -66,6 +66,9 @@ import org.chromium.ui.text.EmptyTextWatcher; +@@ -71,6 +71,9 @@ import org.chromium.ui.text.EmptyTextWatcher; import org.chromium.ui.widget.AnchoredPopupWindow.HorizontalOrientation; import org.chromium.ui.widget.RectProvider; @@ -107,9 +107,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over /** * A coordinator for the context menu on the tab strip by long-pressing on the group titles. It is * responsible for creating a list of menu items, setting up the menu and displaying the menu. -@@ -199,9 +202,15 @@ public class TabGroupContextMenuCoordinator extends TabGroupOverflowMenuCoordina +@@ -208,9 +211,15 @@ public class TabGroupContextMenuCoordinator extends TabGroupOverflowMenuCoordina /* didCloseCallback= */ null); - recordUserAction("DeleteGroup"); + RecordUserAction.record("MobileToolbarTabGroupMenu.DeleteGroup"); } else if (menuId == org.chromium.chrome.R.id.open_new_tab_in_group) { + String url = UrlConstants.NTP_URL; + if (UrlConstants.NTP_URL.equals(url) @@ -123,11 +123,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over + url, tabId, TabLaunchType.FROM_TAB_GROUP_UI); - recordUserAction("NewTabInGroup"); + RecordUserAction.record("MobileToolbarTabGroupMenu.NewTabInGroup"); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -237,6 +237,22 @@ public class HomepageManager +@@ -231,6 +231,22 @@ public class HomepageManager notifyHomepageUpdated(); } @@ -153,7 +153,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/Homepa diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java -@@ -24,6 +24,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; +@@ -25,6 +25,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.url.GURL; @@ -161,7 +161,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settin /** Fragment that allows the user to configure homepage related preferences. */ public class HomepageSettings extends ChromeBaseSettingsFragment { -@@ -32,6 +33,8 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { +@@ -33,6 +34,8 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { @VisibleForTesting public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group"; @@ -170,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settin private HomepageManager mHomepageManager; private RadioButtonGroupHomepagePreference mRadioButtons; private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); -@@ -67,6 +70,15 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { +@@ -69,6 +72,15 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { }); mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup()); @@ -200,15 +200,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchM diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask; +@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFact + import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.browser.new_tab_url.DseNewTabUrlManager; +import org.chromium.chrome.browser.homepage.HomepageManager; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesState; import org.chromium.chrome.browser.profiles.Profile; -@@ -487,6 +488,13 @@ public class ChromeTabCreator extends TabCreator { +@@ -530,6 +531,13 @@ public class ChromeTabCreator extends TabCreator * @return the created tab. */ public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) { @@ -225,7 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -299,6 +299,7 @@ public final class ChromePreferenceKeys { +@@ -326,6 +326,7 @@ public final class ChromePreferenceKeys { public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP"; public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled"; @@ -236,7 +236,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java -@@ -61,6 +61,7 @@ public class LegacyChromePreferenceKeys { +@@ -60,6 +60,7 @@ public class LegacyChromePreferenceKeys { ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, ChromePreferenceKeys.HOMEPAGE_ENABLED, ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, @@ -247,7 +247,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1492,6 +1492,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1480,6 +1480,9 @@ Your Google account may have other forms of browsing history like searches and a Last hour @@ -260,10 +260,10 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -90,6 +90,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterBooleanPref( - prefs::kShowForwardButton, true, - GetHomeAndForwardButtonAndHomePageIsNewTabPageFlags()); +@@ -107,6 +107,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { + + registry->RegisterBooleanPref(prefs::kPinSplitTabButton, false, + pref_registration_flags); + registry->RegisterBooleanPref(prefs::kNewTabPageIsHomePage, false, + PrefRegistry::NO_REGISTRATION_FLAGS); @@ -272,7 +272,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1319,6 +1319,10 @@ inline constexpr char kShowForwardButton[] = "browser.show_forward_button"; +@@ -1328,6 +1328,10 @@ inline constexpr char kPinSplitTabButton[] = "browser.pin_split_tab_button"; // by enterprise policy. inline constexpr char kGeminiSettings[] = "browser.gemini_settings"; diff --git a/build/cromite_patches/Add-search-engine.patch b/build/cromite_patches/Add-search-engine.patch index 26d7de69ea474f074da8886c1ec5971805271248..752b62e8d91ba8a3901937c09b575aa950db9973 100644 --- a/build/cromite_patches/Add-search-engine.patch +++ b/build/cromite_patches/Add-search-engine.patch @@ -9,20 +9,18 @@ Add DuckDuckGo Lite License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- .../search_engine_choice/default_favicon.png | Bin 0 -> 903 bytes - ...search_engine_choice_scaled_resources.grdp | 1 + components/search_engines/BUILD.gn | 3 ++ components/search_engines/cromite/BUILD.gn | 12 ++++++ .../cromite/cromite_prepopulated_engines.json | 37 ++++++++++++++++++ .../search_engine_choice_utils.cc | 5 +-- - .../search_engine_countries-inc.cc | 2 + .../search_engines/search_engine_type.h | 5 +++ - .../template_url_prepopulate_data.cc | 3 +- - .../template_url_prepopulate_data.h | 7 ---- + .../template_url_prepopulate_data.cc | 21 +++++++++- + .../template_url_prepopulate_data.h | 9 ----- tools/json_to_struct/json_to_struct.gni | 9 +++++ tools/json_to_struct/json_to_struct.py | 26 ++++++++---- tools/json_to_struct/struct_generator.py | 10 +++-- tools/variations/fieldtrial_to_struct.py | 4 +- - 14 files changed, 99 insertions(+), 25 deletions(-) + 12 files changed, 113 insertions(+), 28 deletions(-) create mode 100644 components/resources/default_100_percent/search_engine_choice/default_favicon.png create mode 100644 components/search_engines/cromite/BUILD.gn create mode 100644 components/search_engines/cromite/cromite_prepopulated_engines.json @@ -54,17 +52,6 @@ d#;kFnu^?NN9uE_uZ002ovPDHLkV1m60sc!%P literal 0 HcmV?d00001 -diff --git a/components/resources/search_engine_choice_scaled_resources.grdp b/components/resources/search_engine_choice_scaled_resources.grdp ---- a/components/resources/search_engine_choice_scaled_resources.grdp -+++ b/components/resources/search_engine_choice_scaled_resources.grdp -@@ -5,6 +5,7 @@ - - - -+ - - - diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUILD.gn --- a/components/search_engines/BUILD.gn +++ b/components/search_engines/BUILD.gn @@ -76,7 +63,7 @@ diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUIL ] deps = [ -@@ -157,6 +158,7 @@ source_set("search_engine_utils") { +@@ -163,6 +164,7 @@ source_set("search_engine_utils") { ":search_engine_type", "//components/google/core/common", "//third_party/search_engines_data:prepopulated_engines", @@ -84,7 +71,7 @@ diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUIL ] deps = [ "//url" ] -@@ -237,6 +239,7 @@ source_set("unit_tests") { +@@ -252,6 +254,7 @@ source_set("unit_tests") { "//testing/gmock", "//testing/gtest", "//third_party/search_engines_data:prepopulated_engines", @@ -166,29 +153,19 @@ diff --git a/components/search_engines/search_engine_choice/search_engine_choice } void RecordChoiceScreenPositionsCountryMismatch(bool has_mismatch) { -diff --git a/components/search_engines/search_engine_countries-inc.cc b/components/search_engines/search_engine_countries-inc.cc ---- a/components/search_engines/search_engine_countries-inc.cc -+++ b/components/search_engines/search_engine_countries-inc.cc -@@ -1453,5 +1453,7 @@ const std::vector GetPrepopulationSetFromCountryID( - for (size_t i = 0; i < num_engines; i++) { - t_url.push_back(engines[i]); - } -+ t_url.push_back({SearchEngineTier::kTopEngines, &googleen}); -+ t_url.push_back({SearchEngineTier::kTopEngines, &duckduckgo_light}); - return t_url; - } diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h --- a/components/search_engines/search_engine_type.h +++ b/components/search_engines/search_engine_type.h -@@ -94,10 +94,15 @@ enum SearchEngineType { - SEARCH_ENGINE_STARTPAGE = 75, - SEARCH_ENGINE_STARTER_PACK_PAGE = 76, +@@ -97,11 +97,16 @@ enum SearchEngineType { SEARCH_ENGINE_MCAFEE = 77, -+ SEARCH_ENGINE_GOOGLE_EN = 78, -+ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 79, + SEARCH_ENGINE_FREESPOKE = 78, + SEARCH_ENGINE_KAGI = 79, ++ SEARCH_ENGINE_GOOGLE_EN = 80, ++ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 81, SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; + // LINT.ThenChange(//tools/metrics/histograms/enums.xml:OmniboxSearchEngineType) +static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT == (SEARCH_ENGINE_MAX - 1), + "Please check this patch"); @@ -200,7 +177,7 @@ diff --git a/components/search_engines/template_url_prepopulate_data.cc b/compon --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc @@ -28,6 +28,8 @@ - #include "components/version_info/version_info.h" + #include "components/search_engines/template_url_data_util.h" #include "third_party/search_engines_data/resources/definitions/prepopulated_engines.h" +#include "components/search_engines/cromite/cromite_prepopulated_engines.h" @@ -208,18 +185,52 @@ diff --git a/components/search_engines/template_url_prepopulate_data.cc b/compon namespace TemplateURLPrepopulateData { // Helpers -------------------------------------------------------------------- -@@ -67,7 +69,6 @@ GetPrepopulatedEnginesForEeaRegionCountries(CountryID country_id, - generator.seed(profile_seed); - std::shuffle(t_urls.begin(), t_urls.end(), generator); +@@ -123,7 +125,7 @@ int GetDataVersion(PrefService* prefs) { + kCurrentDataVersion; + } -- CHECK_LE(t_urls.size(), kMaxEeaPrepopulatedEngines); - return t_urls; +-std::vector> GetPrepopulatedEngines( ++std::vector> GetPrepopulatedEnginesChromium( + PrefService& prefs, + std::vector + regional_prepopulated_engines) { +@@ -139,6 +141,17 @@ std::vector> GetPrepopulatedEngines( + &PrepopulatedEngineToTemplateURLData); } ++std::vector> GetPrepopulatedEngines( ++ PrefService& prefs, ++ std::vector ++ regional_prepopulated_engines) { ++ std::vector> t_urls = ++ GetPrepopulatedEnginesChromium(prefs, regional_prepopulated_engines); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(googleen)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(duckduckgo_light)); ++ return t_urls; ++} ++ + std::unique_ptr GetPrepopulatedEngine( + PrefService& prefs, + std::vector +@@ -160,9 +173,13 @@ std::vector> GetLocalPrepopulatedEngines( + return std::vector>(); + } + +- return base::ToVector( ++ std::vector> t_urls = ++ base::ToVector( + regional_capabilities::GetPrepopulatedEngines(country_id, prefs), + &PrepopulatedEngineToTemplateURLData); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(googleen)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(duckduckgo_light)); ++ return t_urls; + } + + #endif diff --git a/components/search_engines/template_url_prepopulate_data.h b/components/search_engines/template_url_prepopulate_data.h --- a/components/search_engines/template_url_prepopulate_data.h +++ b/components/search_engines/template_url_prepopulate_data.h -@@ -31,13 +31,6 @@ struct PrepopulatedEngine; +@@ -27,15 +27,6 @@ struct PrepopulatedEngine; extern const int kMaxPrepopulatedEngineID; @@ -228,15 +239,17 @@ diff --git a/components/search_engines/template_url_prepopulate_data.h b/compone -// -// Note: If this is increased, please also increase the declared variant count -// for the `Search.ChoiceScreenShowedEngineAt.Index{Index}` histogram. +-// TODO(crbug.com/408932087): Investigate moving it to the file that actually +-// populates these, `//c/regional_capabilities/r*c*_util.cc`. -inline constexpr size_t kMaxEeaPrepopulatedEngines = 8; - // The maximum number of prepopulated search engines that can be returned in // in the rest of the world by `GetPrepopulatedEngines()`. - inline constexpr size_t kMaxRowPrepopulatedEngines = 5; + // TODO(crbug.com/408932087): Investigate deduping it with the constant diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json_to_struct.gni --- a/tools/json_to_struct/json_to_struct.gni +++ b/tools/json_to_struct/json_to_struct.gni -@@ -25,6 +25,11 @@ template("json_to_struct") { +@@ -39,6 +39,11 @@ template("json_to_struct") { action_name = target_name + "_action" source_set_name = target_name @@ -247,8 +260,8 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json + action(action_name) { visibility = [ ":$source_set_name" ] - script = "//tools/json_to_struct/json_to_struct.py" -@@ -49,6 +54,10 @@ template("json_to_struct") { + script = "//build/gn_run_binary.py" +@@ -63,6 +68,10 @@ template("json_to_struct") { "--namespace=" + invoker.namespace, "--schema=" + rebase_path(invoker.schema_file, root_build_dir), ] @@ -262,7 +275,7 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_to_struct.py --- a/tools/json_to_struct/json_to_struct.py +++ b/tools/json_to_struct/json_to_struct.py -@@ -97,7 +97,7 @@ def _GenerateHeaderGuard(h_filename): +@@ -103,7 +103,7 @@ def _GenerateHeaderGuard(h_filename): return re.sub(u'^_*', '', result) + u'_' # Remove leading underscores. @@ -271,7 +284,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .h file containing the definition of the structure specified by the schema. -@@ -133,11 +133,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -147,11 +147,15 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#include "%s"\n' % header) f.write(u'\n') @@ -288,7 +301,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ schema['type_name'], schema['schema'])) f.write(u'\n') -@@ -162,7 +166,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): +@@ -176,7 +180,7 @@ def _GenerateH(basepath, fileroot, head, namespace, schema, description): f.write(u'#endif // %s\n' % header_guard) @@ -297,16 +310,16 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates the .cc file containing the static initializers for the of the elements specified in the description. -@@ -191,7 +195,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): +@@ -211,7 +215,7 @@ def _GenerateCC(basepath, fileroot, head, namespace, schema, description): f.write(element_generator.GenerateElements(schema['type_name'], schema['schema'], description)) -- if 'generate_array' in description: -+ if excludetype == False and 'generate_array' in description: - f.write(u'\n') - f.write( - u'const %s* const array_%s[] = {\n' % -@@ -283,7 +287,7 @@ def GenerateClass(basepath, +- if not aggregation.export_items: ++ if excludetype == False and not aggregation.export_items: + f.write('\n} // anonymous namespace \n\n') + + aggregated = GenerateCCAggregation(schema['type_name'], aggregation) +@@ -298,7 +302,7 @@ def GenerateClass(basepath, def GenerateStruct(basepath, output_root, namespace, schema, description, @@ -315,7 +328,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ """Generates a C++ struct from a JSON description. Args: -@@ -302,8 +306,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, +@@ -317,8 +321,8 @@ def GenerateStruct(basepath, output_root, namespace, schema, description, """ year = int(year) if year else datetime.now().year head = HEAD % (year, schema_filename, description_filename) @@ -326,7 +339,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ if __name__ == '__main__': parser = optparse.OptionParser( -@@ -318,11 +322,17 @@ if __name__ == '__main__': +@@ -333,11 +337,17 @@ if __name__ == '__main__': parser.add_option('-s', '--schema', help='path to the schema file, ' 'mandatory.') parser.add_option('-o', '--output', help='output filename, ') @@ -344,7 +357,7 @@ diff --git a/tools/json_to_struct/json_to_struct.py b/tools/json_to_struct/json_ description_filename = os.path.normpath(args[0]) root, ext = os.path.splitext(description_filename) shortroot = opts.output if opts.output else os.path.split(root)[1] -@@ -339,4 +349,4 @@ if __name__ == '__main__': +@@ -354,4 +364,4 @@ if __name__ == '__main__': schema = _Load(opts.schema) description = _Load(description_filename) GenerateStruct(basepath, output_root, opts.namespace, schema, description, @@ -384,7 +397,7 @@ diff --git a/tools/json_to_struct/struct_generator.py b/tools/json_to_struct/str diff --git a/tools/variations/fieldtrial_to_struct.py b/tools/variations/fieldtrial_to_struct.py --- a/tools/variations/fieldtrial_to_struct.py +++ b/tools/variations/fieldtrial_to_struct.py -@@ -232,14 +232,14 @@ def main(arguments): +@@ -235,14 +235,14 @@ def main(arguments): json_to_struct.GenerateStruct( basepath, output_root, opts.namespace, schema, description, os.path.split(description_filename)[1], os.path.split(opts.schema)[1], diff --git a/build/cromite_patches/Add-site-engagement-flag.patch b/build/cromite_patches/Add-site-engagement-flag.patch index add02cd563af76a48c5591cc066aab278e906154..22444d6fd3552efea31d4af861a888d1d3043682 100644 --- a/build/cromite_patches/Add-site-engagement-flag.patch +++ b/build/cromite_patches/Add-site-engagement-flag.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -161,6 +161,7 @@ +@@ -164,6 +164,7 @@ #include "components/sensitive_content/features.h" #include "components/services/heap_profiling/public/cpp/switches.h" #include "components/services/storage/public/cpp/buckets/bucket_info.h" @@ -35,7 +35,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc --- a/chrome/browser/engagement/important_sites_util.cc +++ b/chrome/browser/engagement/important_sites_util.cc -@@ -32,6 +32,7 @@ +@@ -31,6 +31,7 @@ #include "components/prefs/scoped_user_pref_update.h" #include "components/site_engagement/content/site_engagement_score.h" #include "components/site_engagement/content/site_engagement_service.h" @@ -43,7 +43,7 @@ diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/ #include "components/site_engagement/core/mojom/site_engagement_details.mojom.h" #include "components/webapps/browser/banners/app_banner_settings_helper.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" -@@ -349,6 +350,10 @@ void ImportantSitesUtil::RegisterProfilePrefs( +@@ -344,6 +345,10 @@ void ImportantSitesUtil::RegisterProfilePrefs( // static std::set ImportantSitesUtil::GetInstalledRegisterableDomains( Profile* profile) { @@ -54,7 +54,7 @@ diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/ std::set installed_origins = GetOriginsWithInstalledWebApps(profile); std::set registerable_domains; -@@ -363,6 +368,10 @@ std::vector +@@ -358,6 +363,10 @@ std::vector ImportantSitesUtil::GetImportantRegisterableDomains(Profile* profile, size_t max_results) { SCOPED_UMA_HISTOGRAM_TIMER("Storage.ImportantSites.GenerationTime"); diff --git a/build/cromite_patches/Add-support-for-ISupportHelpAndFeedback.patch b/build/cromite_patches/Add-support-for-ISupportHelpAndFeedback.patch index 9aa51e144788df099923800215ff93c007a27103..bb1088fc8ad6ae1fe5b7741dc72ec57a53fb8e9d 100644 --- a/build/cromite_patches/Add-support-for-ISupportHelpAndFeedback.patch +++ b/build/cromite_patches/Add-support-for-ISupportHelpAndFeedback.patch @@ -12,15 +12,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -55,6 +55,7 @@ import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; +@@ -56,6 +56,7 @@ import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerFactory; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; +import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; import org.chromium.components.browser_ui.settings.EmbeddableSettingsPage; - import org.chromium.components.browser_ui.util.TraceEventVectorDrawableCompat; -@@ -441,8 +442,12 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity + import org.chromium.components.browser_ui.settings.SettingsFragment; +@@ -466,8 +467,12 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity finishCurrentSettings(mainFragment); return true; } else if (item.getItemId() == R.id.menu_id_general_help) { @@ -38,13 +38,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java --- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java +++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java -@@ -93,4 +93,8 @@ public class SettingsUtils { - ToolbarUtils.setOverflowMenuVisibility(toolbar, visibility); - return true; - } -+ +@@ -28,6 +28,10 @@ import org.chromium.ui.drawable.StateListDrawableBuilder; + /** A helper class for Settings. */ + @NullMarked + public class SettingsUtils { + public interface ISupportHelpAndFeedback { + void onHelpAndFeebackPressed(); + } - } ++ + /** + * A helper that is used to load preferences from XML resources without causing a + * StrictModeViolation. See http://crbug.com/692125. -- diff --git a/build/cromite_patches/Add-support-for-writing-URIs.patch b/build/cromite_patches/Add-support-for-writing-URIs.patch index 4b1848148d606c83c47244ce541a08bdd283d639..e1041e0d308da187d5b9d1bc552584da487160cf 100644 --- a/build/cromite_patches/Add-support-for-writing-URIs.patch +++ b/build/cromite_patches/Add-support-for-writing-URIs.patch @@ -9,13 +9,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- base/android/content_uri_utils.cc | 10 ++++++ base/android/content_uri_utils.h | 4 +++ - .../org/chromium/base/ContentUriUtils.java | 34 +++++++++++++++++++ - 3 files changed, 48 insertions(+) + .../org/chromium/base/ContentUriUtils.java | 33 +++++++++++++++++++ + 3 files changed, 47 insertions(+) diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc --- a/base/android/content_uri_utils.cc +++ b/base/android/content_uri_utils.cc -@@ -119,6 +119,16 @@ void JNI_ContentUriUtils_AddFileInfoToVector(JNIEnv* env, +@@ -134,6 +134,16 @@ void JNI_ContentUriUtils_AddFileInfoToVector(JNIEnv* env, Time::FromMillisecondsSinceUnixEpoch(last_modified)); } @@ -35,9 +35,9 @@ diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils. diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h --- a/base/android/content_uri_utils.h +++ b/base/android/content_uri_utils.h -@@ -33,6 +33,10 @@ BASE_EXPORT std::optional TranslateOpenFlagsToJavaMode( - // Returns -1 if the URI is invalid. - int OpenContentUri(const FilePath& content_uri, uint32_t open_flags); +@@ -46,6 +46,10 @@ int ContentUriGetFd( + void ContentUriClose( + const base::android::JavaRef& java_parcel_file_descriptor); +// Opens a content URI for write and returns the file descriptor to the caller. +// Returns -1 if the URI is invalid. @@ -49,15 +49,7 @@ diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base/android/java/src/org/chromium/base/ContentUriUtils.java --- a/base/android/java/src/org/chromium/base/ContentUriUtils.java +++ b/base/android/java/src/org/chromium/base/ContentUriUtils.java -@@ -12,6 +12,7 @@ import android.content.res.AssetFileDescriptor; - import android.database.Cursor; - import android.net.Uri; - import android.os.Build; -+import android.os.ParcelFileDescriptor; - import android.provider.DocumentsContract; - import android.provider.MediaStore; - import android.text.TextUtils; -@@ -30,6 +31,9 @@ import org.chromium.build.annotations.Nullable; +@@ -31,6 +31,9 @@ import org.chromium.build.annotations.Nullable; import java.io.IOException; import java.util.List; @@ -67,8 +59,8 @@ diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base /** This class provides methods to access content URI schemes. */ @JNINamespace("base") @NullMarked -@@ -64,6 +68,36 @@ public abstract class ContentUriUtils { - return -1; +@@ -72,6 +75,36 @@ public abstract class ContentUriUtils { + StreamUtil.closeQuietly(parcelFileDescriptor); } + @CalledByNative diff --git a/build/cromite_patches/Add-webGL-site-setting.patch b/build/cromite_patches/Add-webGL-site-setting.patch index ee7d0d32d4133a86257e67c1cf039330ab8d5405..615e1671c9b75c613fdb224bc3127c7bb5e7ab36 100644 --- a/build/cromite_patches/Add-webGL-site-setting.patch +++ b/build/cromite_patches/Add-webGL-site-setting.patch @@ -189,7 +189,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -85,6 +85,13 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor( +@@ -86,6 +86,13 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor( return settings; } @@ -218,7 +218,7 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc -@@ -299,6 +299,13 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits( +@@ -339,6 +339,13 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits( } } @@ -232,7 +232,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba unsigned WebGLRenderingContextBase::CurrentMaxGLContexts() { base::AutoLock locker(WebGLContextLimitLock()); DCHECK(webgl_context_limits_initialized_); -@@ -568,25 +575,6 @@ static String ExtractWebGLContextCreationError( +@@ -608,25 +615,6 @@ static String ExtractWebGLContextCreationError( const Platform::GraphicsInfo& info) { StringBuilder builder; builder.Append("Could not create a WebGL context"); @@ -258,7 +258,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba FormatWebGLStatusString("ErrorMessage", info.error_message.Utf8().c_str(), builder); builder.Append('.'); -@@ -646,6 +634,12 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider( +@@ -686,6 +674,12 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider( const CanvasContextCreationAttributesCore& attributes, Platform::ContextType context_type, Platform::GraphicsInfo* graphics_info) { @@ -274,7 +274,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h -@@ -1931,6 +1931,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, +@@ -1932,6 +1932,8 @@ class MODULES_EXPORT WebGLRenderingContextBase DOMArrayBufferView* pixels, int64_t offset); diff --git a/build/cromite_patches/Add-webRTC-site-settings.patch b/build/cromite_patches/Add-webRTC-site-settings.patch index 4009e2b61a4c74c0a33ccef0b6d15d45b7c2f0a6..07e95cad56f652b14443a79053e98058a88bf065 100644 --- a/build/cromite_patches/Add-webRTC-site-settings.patch +++ b/build/cromite_patches/Add-webRTC-site-settings.patch @@ -210,7 +210,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc -@@ -14,6 +14,8 @@ +@@ -16,6 +16,8 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" @@ -219,7 +219,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver. #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h" -@@ -286,6 +288,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, +@@ -288,6 +290,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; @@ -237,7 +237,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver. diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc -@@ -19,6 +19,8 @@ +@@ -21,6 +21,8 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" @@ -246,7 +246,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoding_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" -@@ -1033,6 +1035,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, +@@ -1035,6 +1037,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; diff --git a/build/cromite_patches/Allow-building-without-enable_reporting.patch b/build/cromite_patches/Allow-building-without-enable_reporting.patch index e55898929b9f879f758bf029ec70ee33a9e27b01..9c00afe7321fd59d28ee1556c25eb2cf6990352d 100644 --- a/build/cromite_patches/Allow-building-without-enable_reporting.patch +++ b/build/cromite_patches/Allow-building-without-enable_reporting.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/network/reporting_service_proxy.cc | 3 +++ .../renderer_host/render_frame_host_impl.cc | 6 ------ .../coop/cross_origin_opener_policy_reporter.cc | 16 +++++++--------- - .../dip/document_isolation_policy_reporter.cc | 2 ++ + .../dip/document_isolation_policy_reporter.cc | 3 +++ .../web_package/signed_exchange_reporter.cc | 2 ++ ...content_switch_dependent_feature_overrides.cc | 1 + .../Allow-building-without-enable_reporting.inc | 2 ++ @@ -26,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/core/frame/reporting_context.cc | 9 +++++++++ .../renderer/core/frame/reporting_context.h | 7 +++++-- .../renderer/core/frame/reporting_observer.cc | 3 +-- - 22 files changed, 63 insertions(+), 25 deletions(-) + 22 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chrome_report_sender.cc @@ -43,7 +43,7 @@ diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chr diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc -@@ -1474,6 +1474,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { +@@ -1484,6 +1484,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { } } @@ -51,7 +51,7 @@ diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/brow std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { std::vector urls; frame_host->ForEachRenderFrameHostImplWithAction( -@@ -1487,6 +1488,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { +@@ -1497,6 +1498,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { }); return urls; } @@ -108,7 +108,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse #include "content/browser/service_worker/service_worker_host.h" #include "content/browser/worker_host/dedicated_worker_host.h" #include "content/browser/worker_host/shared_worker_host.h" -@@ -226,12 +227,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy { +@@ -240,12 +241,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy { const std::string& group, const std::string& type, base::Value::Dict body) { @@ -126,14 +126,14 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc -@@ -15759,12 +15759,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( +@@ -15928,12 +15928,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( } } } - - // Send the crash report to the Reporting API. - GetProcess()->GetStoragePartition()->GetNetworkContext()->QueueReport( -- /*type=*/"crash", /*group=*/"default", last_committed_url_, +- /*type=*/"crash", crash_reporting_group_, last_committed_url_, - GetReportingSource(), isolation_info_.network_anonymization_key(), - std::move(body)); } @@ -177,7 +177,7 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { switch (coop_value) { case network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone: -@@ -64,6 +57,7 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { +@@ -59,6 +52,7 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { return "noopener-allow-popups"; } } @@ -185,7 +185,7 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c FrameTreeNode* TopLevelOpener(FrameTreeNode* frame) { FrameTreeNode* opener = -@@ -235,6 +229,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( +@@ -230,6 +224,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( network::mojom::SourceLocationPtr source_location, const std::string& reported_window_url, const std::string& initial_popup_url) const { @@ -193,7 +193,7 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c // Cross-Origin-Opener-Policy-Report-Only is not required to provide // endpoints. if (!coop_.report_only_reporting_endpoint) -@@ -282,12 +277,14 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( +@@ -277,12 +272,14 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( storage_partition_->GetNetworkContext()->QueueReport( "coop", endpoint, context_url_, reporting_source_, network_anonymization_key_, std::move(body)); @@ -208,7 +208,7 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c body.Set(kDisposition, is_report_only ? kDispositionReporting : kDispositionEnforce); body.Set(kEffectivePolicy, -@@ -295,6 +292,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationReport( +@@ -290,6 +287,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationReport( storage_partition_->GetNetworkContext()->QueueReport( "coop", endpoint, context_url_, reporting_source_, network_anonymization_key_, std::move(body)); @@ -219,7 +219,15 @@ diff --git a/content/browser/security/coop/cross_origin_opener_policy_reporter.c diff --git a/content/browser/security/dip/document_isolation_policy_reporter.cc b/content/browser/security/dip/document_isolation_policy_reporter.cc --- a/content/browser/security/dip/document_isolation_policy_reporter.cc +++ b/content/browser/security/dip/document_isolation_policy_reporter.cc -@@ -94,11 +94,13 @@ void DocumentIsolationPolicyReporter::QueueAndNotify( +@@ -7,6 +7,7 @@ + #include + + #include "base/values.h" ++#include "net/net_buildflags.h" + #include "content/public/browser/storage_partition.h" + #include "services/network/public/cpp/request_destination.h" + #include "services/network/public/mojom/network_context.mojom.h" +@@ -94,11 +95,13 @@ void DocumentIsolationPolicyReporter::QueueAndNotify( } body_to_pass.Set("disposition", disposition); @@ -284,7 +292,7 @@ diff --git a/net/reporting/reporting_header_parser.cc b/net/reporting/reporting_ diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc --- a/net/reporting/reporting_service.cc +++ b/net/reporting/reporting_service.cc -@@ -225,6 +225,12 @@ class ReportingServiceImpl : public ReportingService { +@@ -236,6 +236,12 @@ class ReportingServiceImpl : public ReportingService { int depth, base::TimeTicks queued_ticks, ReportingTargetType target_type) { @@ -295,12 +303,12 @@ diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_servic +#error Attempting to build with enable_reporting +#endif DCHECK(initialized_); - context_->cache()->AddReport(reporting_source, network_anonymization_key, - sanitized_url, user_agent, group, type, + context_->cache()->AddReport( + reporting_source, network_anonymization_key, sanitized_url, user_agent, diff --git a/services/network/network_context.h b/services/network/network_context.h --- a/services/network/network_context.h +++ b/services/network/network_context.h -@@ -475,14 +475,14 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -486,14 +486,14 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext const GURL& url, const std::optional& reporting_source, const net::NetworkAnonymizationKey& network_anonymization_key, @@ -321,7 +329,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte diff --git a/services/network/public/cpp/parsed_headers.cc b/services/network/public/cpp/parsed_headers.cc --- a/services/network/public/cpp/parsed_headers.cc +++ b/services/network/public/cpp/parsed_headers.cc -@@ -115,6 +115,7 @@ mojom::ParsedHeadersPtr PopulateParsedHeaders( +@@ -125,6 +125,7 @@ mojom::ParsedHeadersPtr PopulateParsedHeaders( } #if BUILDFLAG(ENABLE_REPORTING) @@ -332,7 +340,7 @@ diff --git a/services/network/public/cpp/parsed_headers.cc b/services/network/pu diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn --- a/services/network/public/mojom/BUILD.gn +++ b/services/network/public/mojom/BUILD.gn -@@ -1668,7 +1668,6 @@ mojom("mojom") { +@@ -1791,7 +1791,6 @@ mojom("mojom") { export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" if (enable_reporting) { @@ -343,7 +351,7 @@ diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mo diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1208,6 +1208,7 @@ interface NetworkContext { +@@ -1234,6 +1234,7 @@ interface NetworkContext { // provided `network_anonymization_key`. // // Spec: https://w3c.github.io/reporting/#concept-reports @@ -351,7 +359,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw QueueReport(string type, string group, url.mojom.Url url, -@@ -1215,6 +1216,7 @@ interface NetworkContext { +@@ -1241,6 +1242,7 @@ interface NetworkContext { NetworkAnonymizationKey network_anonymization_key, mojo_base.mojom.DictionaryValue body); @@ -359,7 +367,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw QueueEnterpriseReport(string type, string group, url.mojom.Url url, -@@ -1225,6 +1227,7 @@ interface NetworkContext { +@@ -1251,6 +1253,7 @@ interface NetworkContext { // Note that this queued report will never be delivered if no reporting // endpoint matching is registered for with the provided // `network_anonymization_key`. @@ -377,8 +385,8 @@ diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.c +#include "net/net_buildflags.h" #include "base/containers/contains.h" #include "base/debug/dump_without_crashing.h" - #include "services/network/public/cpp/web_sandbox_flags.h" -@@ -1345,6 +1346,7 @@ void ContentSecurityPolicy::ReportViolation( + #include "base/feature_list.h" +@@ -1260,6 +1261,7 @@ void ContentSecurityPolicy::ReportViolation( return; } @@ -386,7 +394,7 @@ diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.c PostViolationReport(violation_data, context_frame, report_endpoints, use_reporting_api); -@@ -1352,6 +1354,7 @@ void ContentSecurityPolicy::ReportViolation( +@@ -1267,6 +1269,7 @@ void ContentSecurityPolicy::ReportViolation( // `context_frame` (i.e. we're not processing 'frame-ancestors'). if (delegate_ && !context_frame) delegate_->DispatchViolationEvent(*violation_data, element); @@ -405,7 +413,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ #include "services/network/public/cpp/features.h" #include "services/network/public/mojom/content_security_policy.mojom-blink.h" #include "services/network/public/mojom/source_location.mojom-blink.h" -@@ -2752,9 +2753,11 @@ DocumentResourceCoordinator* LocalFrame::GetDocumentResourceCoordinator() { +@@ -2740,9 +2741,11 @@ DocumentResourceCoordinator* LocalFrame::GetDocumentResourceCoordinator() { return CHECK_DEREF(GetDocument()).GetResourceCoordinator(); } @@ -427,8 +435,8 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b +#include "net/net_buildflags.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" - #include "services/metrics/public/cpp/ukm_source_id.h" -@@ -650,7 +651,9 @@ class CORE_EXPORT LocalFrame final + #include "net/storage_access_api/status.h" +@@ -667,7 +668,9 @@ class CORE_EXPORT LocalFrame final return client_hints_preferences_; } @@ -449,7 +457,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ #include "third_party/blink/public/platform/browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" -@@ -58,7 +59,9 @@ const char ReportingContext::kSupplementName[] = "ReportingContext"; +@@ -59,7 +60,9 @@ const char ReportingContext::kSupplementName[] = "ReportingContext"; ReportingContext::ReportingContext(ExecutionContext& context) : Supplement(context), execution_context_(context), @@ -459,7 +467,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ receivers_(this, &context) {} // static -@@ -125,7 +128,9 @@ void ReportingContext::Trace(Visitor* visitor) const { +@@ -126,7 +129,9 @@ void ReportingContext::Trace(Visitor* visitor) const { visitor->Trace(observers_); visitor->Trace(report_buffer_); visitor->Trace(execution_context_); @@ -469,7 +477,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ visitor->Trace(receivers_); Supplement::Trace(visitor); } -@@ -148,6 +153,7 @@ void ReportingContext::CountReport(Report* report) { +@@ -149,6 +154,7 @@ void ReportingContext::CountReport(Report* report) { UseCounter::Count(execution_context_, feature); } @@ -477,7 +485,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ const HeapMojoRemote& ReportingContext::GetReportingService() const { if (!reporting_service_.is_bound()) { -@@ -157,6 +163,7 @@ ReportingContext::GetReportingService() const { +@@ -158,6 +164,7 @@ ReportingContext::GetReportingService() const { } return reporting_service_; } @@ -485,7 +493,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ void ReportingContext::NotifyInternal(Report* report) { if (!ShouldReportBeVisibleToObservers(report)) { -@@ -183,6 +190,7 @@ void ReportingContext::NotifyInternal(Report* report) { +@@ -184,6 +191,7 @@ void ReportingContext::NotifyInternal(Report* report) { void ReportingContext::SendToReportingAPI(Report* report, const String& endpoint) const { @@ -493,7 +501,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_ const String& type = report->type(); if (!(type == ReportType::kCSPViolation || type == ReportType::kCSPHash || type == ReportType::kDeprecation || -@@ -255,6 +263,7 @@ void ReportingContext::SendToReportingAPI(Report* report, +@@ -263,6 +271,7 @@ void ReportingContext::SendToReportingAPI(Report* report, url, endpoint, body->featureId(), body->disposition(), body->message(), body->sourceFile(), line_number, column_number); } @@ -512,7 +520,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_p #include "third_party/blink/public/mojom/frame/reporting_observer.mojom-blink.h" #include "third_party/blink/public/mojom/reporting/reporting.mojom-blink.h" #include "third_party/blink/renderer/core/core_export.h" -@@ -55,10 +56,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, +@@ -56,10 +57,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, private: // Counts the use of a report type via UseCounter. void CountReport(Report*); @@ -525,7 +533,7 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_p void NotifyInternal(Report* report); // Send |report| via the Reporting API to |endpoint|. void SendToReportingAPI(Report* report, const String& endpoint) const; -@@ -69,8 +70,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, +@@ -71,8 +72,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, // This is declared mutable so that the service endpoint can be cached by // const methods. diff --git a/build/cromite_patches/Allow-building-without-supervised-users.patch b/build/cromite_patches/Allow-building-without-supervised-users.patch index 2fe30d8e554f4992ae90c8a8dacf1dd676e11b80..07b977a90cca4db559bcbe7fb266bb942d4fe7b3 100644 --- a/build/cromite_patches/Allow-building-without-supervised-users.patch +++ b/build/cromite_patches/Allow-building-without-supervised-users.patch @@ -11,19 +11,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/profiles/profile_attributes_entry.cc | 2 +- chrome/browser/profiles/profile_impl.cc | 5 +---- chrome/browser/profiles/profile_manager.cc | 7 ------- + .../supervised_user/supervised_user_browser_utils.cc | 1 + chrome/browser/ui/webui/managed_ui_handler.cc | 4 ---- .../browser/ui/webui/management/management_ui_handler.cc | 4 ---- .../core/browser/supervised_user_pref_store.cc | 1 + .../core/browser/supervised_user_preferences.cc | 6 +++++- - .../core/browser/supervised_user_service.cc | 5 +---- - .../supervised_user/core/browser/supervised_user_utils.cc | 1 + - components/supervised_user/core/common/features.cc | 6 ++++++ - 14 files changed, 17 insertions(+), 30 deletions(-) + .../core/browser/supervised_user_service.cc | 1 + + components/supervised_user/core/common/features.cc | 2 +- + extensions/browser/api/management/management_api.cc | 1 + + 15 files changed, 13 insertions(+), 27 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -786,7 +786,6 @@ if (current_toolchain == default_toolchain) { +@@ -805,7 +805,6 @@ if (_is_default_toolchain) { "//components/offline_pages/core:offline_page_model_enums_java", "//components/sharing_message:sharing_dialog_type_generated_enum", "//components/sharing_message:sharing_send_message_result_generated_enum", @@ -76,7 +77,7 @@ diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browse diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc -@@ -469,7 +469,7 @@ bool ProfileAttributesEntry::IsSigninRequired() const { +@@ -467,7 +467,7 @@ bool ProfileAttributesEntry::IsSigninRequired() const { } std::string ProfileAttributesEntry::GetSupervisedUserId() const { @@ -88,7 +89,7 @@ diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browse diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc -@@ -675,10 +675,6 @@ void ProfileImpl::DoFinalInit(CreateMode create_mode) { +@@ -674,10 +674,6 @@ void ProfileImpl::DoFinalInit(CreateMode create_mode) { prefs->SetTime(prefs::kProfileCreationTime, path_creation_time_); pref_change_registrar_.Init(prefs); @@ -99,7 +100,7 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/p // Changes in the profile avatar. pref_change_registrar_.Add( -@@ -1623,6 +1619,7 @@ GURL ProfileImpl::GetHomePage() { +@@ -1619,6 +1615,7 @@ GURL ProfileImpl::GetHomePage() { } void ProfileImpl::UpdateSupervisedUserIdInStorage() { @@ -110,7 +111,7 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/p diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -1191,10 +1191,6 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) { +@@ -1192,10 +1192,6 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) { profile->GetPrefs()->SetString(prefs::kProfileName, profile_name); } @@ -121,7 +122,7 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile #if !BUILDFLAG(IS_ANDROID) if (profile->IsNewProfile()) { profile->GetPrefs()->SetBoolean(prefs::kHasSeenWelcomePage, false); -@@ -1976,9 +1972,6 @@ void ProfileManager::AddProfileToStorage(Profile* profile) { +@@ -1978,9 +1974,6 @@ void ProfileManager::AddProfileToStorage(Profile* profile) { init_params.icon_index = profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); @@ -131,6 +132,17 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profile #if BUILDFLAG(IS_CHROMEOS) user_manager::User* user = ash::ProfileHelper::Get()->GetUserByProfile(profile); +diff --git a/chrome/browser/supervised_user/supervised_user_browser_utils.cc b/chrome/browser/supervised_user/supervised_user_browser_utils.cc +--- a/chrome/browser/supervised_user/supervised_user_browser_utils.cc ++++ b/chrome/browser/supervised_user/supervised_user_browser_utils.cc +@@ -99,6 +99,7 @@ bool SupervisedUserCanSkipExtensionParentApprovals(const Profile* profile) { + } + + bool AreExtensionsPermissionsEnabled(Profile* profile) { ++ if ((true)) return false; + #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) + return profile->IsChild(); + #else diff --git a/chrome/browser/ui/webui/managed_ui_handler.cc b/chrome/browser/ui/webui/managed_ui_handler.cc --- a/chrome/browser/ui/webui/managed_ui_handler.cc +++ b/chrome/browser/ui/webui/managed_ui_handler.cc @@ -162,7 +174,7 @@ diff --git a/chrome/browser/ui/webui/management/management_ui_handler.cc b/chrom diff --git a/components/supervised_user/core/browser/supervised_user_pref_store.cc b/components/supervised_user/core/browser/supervised_user_pref_store.cc --- a/components/supervised_user/core/browser/supervised_user_pref_store.cc +++ b/components/supervised_user/core/browser/supervised_user_pref_store.cc -@@ -126,6 +126,7 @@ SupervisedUserPrefStore::~SupervisedUserPrefStore() = default; +@@ -142,6 +142,7 @@ SupervisedUserPrefStore::~SupervisedUserPrefStore() = default; void SupervisedUserPrefStore::OnNewSettingsAvailable( const base::Value::Dict& settings) { @@ -173,7 +185,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_pref_store. diff --git a/components/supervised_user/core/browser/supervised_user_preferences.cc b/components/supervised_user/core/browser/supervised_user_preferences.cc --- a/components/supervised_user/core/browser/supervised_user_preferences.cc +++ b/components/supervised_user/core/browser/supervised_user_preferences.cc -@@ -155,6 +155,10 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -164,6 +164,10 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { } void EnableParentalControls(PrefService& pref_service) { @@ -183,8 +195,8 @@ diff --git a/components/supervised_user/core/browser/supervised_user_preferences + } pref_service.SetString(prefs::kSupervisedUserId, supervised_user::kChildAccountSUID); - SetIsChildAccountStatusKnown(pref_service); -@@ -177,7 +181,7 @@ bool IsSafeSitesEnabled(const PrefService& pref_service) { + #if BUILDFLAG(IS_CHROMEOS) +@@ -197,7 +201,7 @@ bool IsSafeSitesEnabled(const PrefService& pref_service) { } bool IsSubjectToParentalControls(const PrefService& pref_service) { @@ -192,52 +204,44 @@ diff --git a/components/supervised_user/core/browser/supervised_user_preferences + return false; } - } // namespace supervised_user + bool IsGoogleSafeSearchEnforced(const PrefService& pref_service) { diff --git a/components/supervised_user/core/browser/supervised_user_service.cc b/components/supervised_user/core/browser/supervised_user_service.cc --- a/components/supervised_user/core/browser/supervised_user_service.cc +++ b/components/supervised_user/core/browser/supervised_user_service.cc -@@ -50,10 +50,6 @@ void SupervisedUserService::Init() { - DCHECK(settings_service_->IsReady()); - - pref_change_registrar_.Init(&user_prefs_.get()); -- pref_change_registrar_.Add( -- prefs::kSupervisedUserId, -- base::BindRepeating(&SupervisedUserService::OnSupervisedUserIdChanged, -- base::Unretained(this))); - SetActive(supervised_user::IsSubjectToParentalControls(user_prefs_.get())); - } - -@@ -139,6 +135,7 @@ SupervisedUserService::SupervisedUserService( +@@ -168,6 +168,7 @@ SupervisedUserService::SupervisedUserService( } - void SupervisedUserService::SetActive(bool active) { + void SupervisedUserService::SetSettingsServiceActive(bool active) { + active = false; - if (active_ == active) { - return; - } -diff --git a/components/supervised_user/core/browser/supervised_user_utils.cc b/components/supervised_user/core/browser/supervised_user_utils.cc ---- a/components/supervised_user/core/browser/supervised_user_utils.cc -+++ b/components/supervised_user/core/browser/supervised_user_utils.cc -@@ -308,6 +308,7 @@ GURL NormalizeUrl(const GURL& url) { - } + settings_service_->SetActive(active); - bool AreWebFilterPrefsDefault(const PrefService& pref_service) { -+ if ((true)) return true; - return pref_service - .FindPreference(prefs::kDefaultSupervisedUserFilteringBehavior) - ->IsDefaultValue() || + // Trigger a sync reconfig to enable/disable the right SU data types. diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc --- a/components/supervised_user/core/common/features.cc +++ b/components/supervised_user/core/common/features.cc -@@ -185,4 +185,10 @@ BASE_FEATURE(kReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS, - "ReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -35,7 +35,6 @@ BASE_FEATURE(kAllowSubframeLocalWebApprovals, + #else + base::FEATURE_DISABLED_BY_DEFAULT); #endif -+ +- + #if BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_WIN) + const int kLocalWebApprovalBottomSheetLoadTimeoutDefaultValueMs = 5000; +@@ -148,4 +147,5 @@ BASE_FEATURE(kDecoupleSafeSitesFromMainSwitch, + "DecoupleSafeSitesFromMainSwitch", + base::FEATURE_ENABLED_BY_DEFAULT); + +SET_CROMITE_FEATURE_DISABLED(kLocalWebApprovals); -+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) -+SET_CROMITE_FEATURE_DISABLED(kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); -+#endif -+ } // namespace supervised_user +diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc +--- a/extensions/browser/api/management/management_api.cc ++++ b/extensions/browser/api/management/management_api.cc +@@ -310,6 +310,7 @@ void AddExtensionInfo(const Extension* source_extension, + } + + bool PlatformSupportsApprovalFlowForExtensions() { ++ if ((true)) return false; + #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_WIN) + return true; -- diff --git a/build/cromite_patches/Allow-playing-audio-in-background.patch b/build/cromite_patches/Allow-playing-audio-in-background.patch index 1f07a677c41770439b17f7de071bf73b1a717a41..16b671d43cf098eb1c71088157fc691bc7a6fe38 100644 --- a/build/cromite_patches/Allow-playing-audio-in-background.patch +++ b/build/cromite_patches/Allow-playing-audio-in-background.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc --- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc -@@ -1343,6 +1343,12 @@ void WebMediaPlayerImpl::OnSelectedVideoTrackChanged( +@@ -1340,6 +1340,12 @@ void WebMediaPlayerImpl::OnSelectedVideoTrackChanged( pipeline_controller_->OnSelectedVideoTrackChanged(selected); } @@ -24,7 +24,7 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc void WebMediaPlayerImpl::EnabledAudioTracksChanged( const std::vector& enabled_track_ids) { DCHECK(main_task_runner_->BelongsToCurrentThread()); -@@ -3749,7 +3755,10 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { +@@ -3710,7 +3716,10 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { : HasAudio(); // Audio only stream is allowed to play when in background. @@ -35,11 +35,11 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc + if (!HasVideoNonEmptySize() && preserve_audio) return false; - // MediaPlayer always signals audio and video, so use an empty natural size to + // Video PiP is the only exception when background video playback is disabled. diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b/third_party/blink/renderer/platform/media/web_media_player_impl.h --- a/third_party/blink/renderer/platform/media/web_media_player_impl.h +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.h -@@ -211,6 +211,9 @@ class PLATFORM_EXPORT WebMediaPlayerImpl +@@ -212,6 +212,9 @@ class PLATFORM_EXPORT WebMediaPlayerImpl bool HasVideo() const override; bool HasAudio() const override; diff --git a/build/cromite_patches/Always-use-new-tab-page-for-default-home-page.patch b/build/cromite_patches/Always-use-new-tab-page-for-default-home-page.patch index 6237297fdc81b1bbee322e1bd5c10ccb4b13c65b..ffc6d88266c525fc72fa8c4133296d9e546c4ce5 100644 --- a/build/cromite_patches/Always-use-new-tab-page-for-default-home-page.patch +++ b/build/cromite_patches/Always-use-new-tab-page-for-default-home-page.patch @@ -7,18 +7,19 @@ Ignore any partner-provided home page. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../org/chromium/chrome/browser/homepage/HomepageManager.java | 4 ---- + .../chrome/browser/new_tab_url/DseNewTabUrlManager.java | 1 + .../partnerbookmarks/PartnerBookmarksProviderIterator.java | 1 + .../partnercustomizations/PartnerBrowserCustomizations.java | 2 +- .../org/chromium/components/search_engines/TemplateUrl.java | 1 + .../search_engines/android/template_url_service_android.cc | 1 + - .../always-use-new-tab-page-for-default-home-page.inc | 2 ++ - 6 files changed, 6 insertions(+), 5 deletions(-) + .../always-use-new-tab-page-for-default-home-page.inc | 1 + + 7 files changed, 6 insertions(+), 5 deletions(-) create mode 100755 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -155,10 +155,6 @@ public class HomepageManager +@@ -148,10 +148,6 @@ public class HomepageManager * tab page if the homepage button is force enabled via flag. */ public GURL getDefaultHomepageGurl() { @@ -29,10 +30,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/Homepa String homepagePartnerDefaultGurlSerialized = ChromeSharedPreferences.getInstance() .readString( +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/new_tab_url/DseNewTabUrlManager.java b/chrome/android/java/src/org/chromium/chrome/browser/new_tab_url/DseNewTabUrlManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/new_tab_url/DseNewTabUrlManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/new_tab_url/DseNewTabUrlManager.java +@@ -54,6 +54,7 @@ public class DseNewTabUrlManager { + + /** Returns whether the feature NewTabSearchEngineUrlAndroid is enabled. */ + public static boolean isNewTabSearchEngineUrlAndroidEnabled() { ++ if ((true)) return false; + return ChromeSharedPreferences.getInstance() + .readBoolean(ChromePreferenceKeys.IS_EEA_CHOICE_COUNTRY, false) + || (OmniboxFeatures.sOmniboxMobileParityUpdate.isEnabled() diff --git a/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java b/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java --- a/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java +++ b/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java -@@ -68,6 +68,7 @@ public class PartnerBookmarksProviderIterator implements PartnerBookmark.Bookmar +@@ -70,6 +70,7 @@ public class PartnerBookmarksProviderIterator implements PartnerBookmark.Bookmar new AsyncTask<@Nullable Cursor>() { @Override protected @Nullable Cursor doInBackground() { @@ -55,7 +67,7 @@ diff --git a/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/b diff --git a/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java b/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java --- a/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java +++ b/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java -@@ -74,6 +74,7 @@ public class TemplateUrl { +@@ -85,6 +85,7 @@ public class TemplateUrl { * prepopulated_engines.json. */ public String getNewTabURL() { @@ -66,19 +78,18 @@ diff --git a/components/search_engines/android/java/src/org/chromium/components/ diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc -@@ -404,6 +404,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( +@@ -403,6 +403,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( jimage_translate_source_language_param_key, const base::android::JavaParamRef& jimage_translate_target_language_param_key) { + if ((true)) return false; // The function is scheduled to run only when the service is loaded, see // `TemplateUrlService#runWhenLoaded()`. - CHECK(template_url_service_->loaded(), base::NotFatalUntil::M128); + CHECK(template_url_service_->loaded()); diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc new file mode 100755 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc -@@ -0,0 +1,2 @@ -+SET_CROMITE_FEATURE_DISABLED(kNewTabSearchEngineUrlAndroid); +@@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kPartnerCustomizationsUma); -- diff --git a/build/cromite_patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/cromite_patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index 27974571753223a4b622b12af007cf53b6b1c688..b28a2a8d5ddd20ec00cd417d8e4680ed8f1e8e75 100644 --- a/build/cromite_patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/cromite_patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -52,7 +52,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.cc b/third_party/blink/renderer/modules/webaudio/audio_buffer.cc --- a/third_party/blink/renderer/modules/webaudio/audio_buffer.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.cc -@@ -202,6 +202,20 @@ AudioBuffer::AudioBuffer(AudioBus* bus) +@@ -199,6 +199,20 @@ AudioBuffer::AudioBuffer(AudioBus* bus) } } @@ -76,7 +76,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.cc b/third diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.h b/third_party/blink/renderer/modules/webaudio/audio_buffer.h --- a/third_party/blink/renderer/modules/webaudio/audio_buffer.h +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.h -@@ -115,6 +115,8 @@ class MODULES_EXPORT AudioBuffer final : public ScriptWrappable { +@@ -116,6 +116,8 @@ class MODULES_EXPORT AudioBuffer final : public ScriptWrappable { std::unique_ptr CreateSharedAudioBuffer(); @@ -96,7 +96,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/thir #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/web_audio_latency_hint.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" -@@ -639,7 +640,9 @@ double AudioContext::baseLatency() const { +@@ -660,7 +661,9 @@ double AudioContext::baseLatency() const { DCHECK_CALLED_ON_VALID_SEQUENCE(main_thread_sequence_checker_); DCHECK(destination()); @@ -118,7 +118,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h" #include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h" #include "third_party/blink/public/platform/platform.h" -@@ -709,6 +710,17 @@ LocalDOMWindow* BaseAudioContext::GetWindow() const { +@@ -715,6 +716,17 @@ LocalDOMWindow* BaseAudioContext::GetWindow() const { return To(GetExecutionContext()); } @@ -146,7 +146,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.h b/ + static float ShuffleAudioData(float data, unsigned index); + protected: - enum ContextType { kRealtimeContext, kOfflineContext }; + enum class ContextType { kRealtimeContext, kOfflineContext }; diff --git a/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc b/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc --- a/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc @@ -207,7 +207,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc b/ diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -479,9 +479,8 @@ +@@ -562,9 +562,8 @@ { // AudioContext.playoutStats interface. // https://chromestatus.com/feature/5172818344148992 diff --git a/build/cromite_patches/Block-qjz9zk-or-trk-requests.patch b/build/cromite_patches/Block-qjz9zk-or-trk-requests.patch index d2ebe964fe93abecb66639fe52fc6053e085c365..5ce968cc6799133fa4f04820aae3d55dabc507e3 100644 --- a/build/cromite_patches/Block-qjz9zk-or-trk-requests.patch +++ b/build/cromite_patches/Block-qjz9zk-or-trk-requests.patch @@ -49,7 +49,7 @@ diff --git a/chrome/browser/history/history_utils.cc b/chrome/browser/history/hi diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_tabs.cc --- a/chrome/browser/ui/singleton_tabs.cc +++ b/chrome/browser/ui/singleton_tabs.cc -@@ -128,6 +128,11 @@ int GetIndexOfExistingTab(Browser* browser, const NavigateParams& params) { +@@ -136,6 +136,11 @@ int GetIndexOfExistingTab(Browser* browser, const NavigateParams& params) { continue; } @@ -64,7 +64,7 @@ diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_t diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc --- a/components/omnibox/browser/autocomplete_input.cc +++ b/components/omnibox/browser/autocomplete_input.cc -@@ -96,10 +96,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) { +@@ -92,10 +92,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) { bool HasScheme(const std::u16string& input, const char* scheme) { std::string utf8_input(base::UTF16ToUTF8(input)); url::Component view_source_scheme; @@ -80,7 +80,7 @@ diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnib return url::FindAndCompareScheme(utf8_input, scheme, nullptr); } -@@ -582,7 +587,8 @@ void AutocompleteInput::ParseForEmphasizeComponents( +@@ -578,7 +583,8 @@ void AutocompleteInput::ParseForEmphasizeComponents( // For the view-source and blob schemes, we should emphasize the host of the // URL qualified by the view-source or blob prefix. if ((base::EqualsCaseInsensitiveASCII(scheme_str, kViewSourceScheme) || @@ -107,7 +107,7 @@ diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/ur diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc --- a/content/browser/child_process_security_policy_impl.cc +++ b/content/browser/child_process_security_policy_impl.cc -@@ -951,6 +951,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() +@@ -950,6 +950,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() RegisterPseudoScheme(url::kJavaScriptScheme); RegisterPseudoScheme(kViewSourceScheme); RegisterPseudoScheme(kGoogleChromeScheme); @@ -118,7 +118,7 @@ diff --git a/content/browser/child_process_security_policy_impl.cc b/content/bro diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1087,6 +1087,8 @@ component("net") { +@@ -1115,6 +1115,8 @@ component("net") { "url_request/url_request_http_job.cc", "url_request/url_request_http_job.h", "url_request/url_request_interceptor.cc", @@ -203,7 +203,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc #include "base/synchronization/lock.h" #include "base/task/single_thread_task_runner.h" #include "base/types/optional_util.h" -@@ -54,6 +55,7 @@ +@@ -55,6 +56,7 @@ #include "net/url_request/url_request_redirect_job.h" #include "url/gurl.h" #include "url/origin.h" @@ -211,7 +211,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc namespace net { -@@ -642,6 +644,12 @@ URLRequest::URLRequest(base::PassKey pass_key, +@@ -653,6 +655,12 @@ URLRequest::URLRequest(base::PassKey pass_key, // Sanity check out environment. DCHECK(base::SingleThreadTaskRunner::HasCurrentDefault()); @@ -227,7 +227,7 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc -@@ -49,6 +49,7 @@ +@@ -53,6 +53,7 @@ #include "net/socket/network_binding_client_socket_factory.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/url_request/static_http_user_agent_settings.h" @@ -235,7 +235,7 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_job_factory.h" #include "url/url_constants.h" -@@ -594,6 +595,8 @@ std::unique_ptr URLRequestContextBuilder::Build() { +@@ -610,6 +611,8 @@ std::unique_ptr URLRequestContextBuilder::Build() { job_factory->SetProtocolHandler(scheme_handler.first, std::move(scheme_handler.second)); } diff --git a/build/cromite_patches/Bookmarks-select-all-menu-entry.patch b/build/cromite_patches/Bookmarks-select-all-menu-entry.patch index 6165bbc28308204354454b6fdf37074474e2c996..7b81a2c4cdb3d50323dfcc11e1c32e0d87705cdd 100644 --- a/build/cromite_patches/Bookmarks-select-all-menu-entry.patch +++ b/build/cromite_patches/Bookmarks-select-all-menu-entry.patch @@ -31,7 +31,7 @@ diff --git a/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml b/c diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java -@@ -24,6 +24,7 @@ import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelega +@@ -28,6 +28,7 @@ import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelega import java.util.ArrayList; import java.util.List; import java.util.function.Function; @@ -39,7 +39,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows /** * Main toolbar of bookmark UI. It is responsible for displaying title and buttons associated with -@@ -184,6 +185,11 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -190,6 +191,11 @@ public class BookmarkToolbar extends SelectableListToolbar void setCurrentFolder(BookmarkId folder) { mCurrentFolder = mBookmarkModel.getBookmarkById(folder); enableImportExportMenu(); @@ -51,7 +51,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows } void enableImportExportMenu() { -@@ -215,6 +221,17 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -226,6 +232,17 @@ public class BookmarkToolbar extends SelectableListToolbar mExportBookmarkRunnable.run(); return true; } @@ -66,10 +66,10 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + } + return true; + } - return mMenuIdClickedFunction.apply(menuItem.getItemId()); + return assumeNonNull(mMenuIdClickedFunction).apply(menuItem.getItemId()); } -@@ -232,6 +249,7 @@ public class BookmarkToolbar extends SelectableListToolbar +@@ -248,6 +265,7 @@ public class BookmarkToolbar extends SelectableListToolbar getMenu().findItem(R.id.import_menu_id).setVisible(mCurrentFolder != null); getMenu().findItem(R.id.export_menu_id).setVisible(mCurrentFolder != null); @@ -80,7 +80,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -246,6 +246,9 @@ CHAR_LIMIT guidelines: +@@ -249,6 +249,9 @@ CHAR_LIMIT guidelines: Sites diff --git a/build/cromite_patches/Bromite-package-name.patch b/build/cromite_patches/Bromite-package-name.patch index 139e2d5408d622621585b93c8ecb11e9dffa9363..3b5387abce47bcd24490d9c7ee95f779f0ed13da 100644 --- a/build/cromite_patches/Bromite-package-name.patch +++ b/build/cromite_patches/Bromite-package-name.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -26,7 +26,7 @@ declare_args() { +@@ -27,7 +27,7 @@ declare_args() { # WebView providers which declare one of a handful of package names. See # https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md#Changing-package-name # for details. diff --git a/build/cromite_patches/Bromite-subresource-adblocker.patch b/build/cromite_patches/Bromite-subresource-adblocker.patch index afecc126f057187405d0d3f78faf1a2dc10c2dfc..9ec8640bddc0442580f66f00c65ae81a8bf58f96 100644 --- a/build/cromite_patches/Bromite-subresource-adblocker.patch +++ b/build/cromite_patches/Bromite-subresource-adblocker.patch @@ -44,14 +44,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../component_updater/download_filters_task.h | 129 ++++++++ ...ent_subresource_filter_throttle_manager.cc | 15 + ...tent_subresource_filter_throttle_manager.h | 2 + - .../content/shared/browser/ruleset_service.cc | 47 ++- + .../content/shared/browser/ruleset_service.cc | 44 ++- .../content/shared/browser/ruleset_service.h | 8 +- .../unindexed_ruleset_stream_generator.cc | 3 + .../core/browser/ruleset_version.h | 4 + - .../browser/subresource_filter_features.cc | 114 +------ + .../browser/subresource_filter_features.cc | 118 +------- .../core/browser/verified_ruleset_dealer.cc | 4 + .../core/common/indexed_ruleset.cc | 5 +- - 39 files changed, 1271 insertions(+), 129 deletions(-) + 39 files changed, 1269 insertions(+), 132 deletions(-) create mode 100644 chrome/android/java/res/layout/adblock_editor.xml create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java @@ -66,7 +66,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -320,6 +320,7 @@ if (current_toolchain == default_toolchain) { +@@ -328,6 +328,7 @@ if (_is_default_toolchain) { "//chrome/android/features/tab_ui/public:ui_java_resources", "//chrome/android/modules/stack_unwinder/provider:java", "//chrome/android/webapk/libs/client:client_java", @@ -77,7 +77,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -443,6 +443,7 @@ chrome_java_resources = [ +@@ -440,6 +440,7 @@ chrome_java_resources = [ "java/res/layout/account_divider_preference.xml", "java/res/layout/account_management_account_row.xml", "java/res/layout/app_history_filter.xml", @@ -85,7 +85,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/layout/auto_sign_in_first_run_dialog.xml", "java/res/layout/autofill_billing_address_dropdown.xml", "java/res/layout/autofill_card_name_and_number.xml", -@@ -631,6 +632,7 @@ chrome_java_resources = [ +@@ -634,6 +635,7 @@ chrome_java_resources = [ "java/res/xml/account_management_preferences.xml", "java/res/xml/ad_services_config.xml", "java/res/xml/appearance_preferences.xml", @@ -96,7 +96,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -874,6 +874,8 @@ chrome_java_sources = [ +@@ -893,6 +893,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/permissions/PermissionBlockedDialog.java", "java/src/org/chromium/chrome/browser/permissions/PermissionUpdateRequester.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java", @@ -180,8 +180,8 @@ new file mode 100644 diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res/values/styles.xml --- a/chrome/android/java/res/values/styles.xml +++ b/chrome/android/java/res/values/styles.xml -@@ -251,6 +251,24 @@ found in the LICENSE file. - +@@ -263,6 +263,24 @@ found in the LICENSE file. + 20sp + @@ -273,8 +273,8 @@ diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/DefaultSearchEngineFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/DefaultSearchEngineFirstRunFragment.java --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/DefaultSearchEngineFirstRunFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/DefaultSearchEngineFirstRunFragment.java -@@ -54,15 +54,12 @@ public class DefaultSearchEngineFirstRunFragment extends Fragment implements Fir - Profile profile = getPageDelegate().getProfileProviderSupplier().get().getOriginalProfile(); +@@ -58,15 +58,12 @@ public class DefaultSearchEngineFirstRunFragment extends Fragment implements Fir + Profile profile = delegate.getProfileProviderSupplier().get().getOriginalProfile(); assert TemplateUrlServiceFactory.getForProfile(profile).isLoaded(); - mSearchEnginePromoDialogType = LocaleManager.getInstance().getSearchEnginePromoShowType(); @@ -282,8 +282,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/Defaul new DefaultSearchEngineDialogHelper( mSearchEnginePromoDialogType, LocaleManager.getInstance(), - mEngineLayout, - mButton, + engineLayout, + button, getPageDelegate()::advanceToNextPage); - } @@ -302,7 +302,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.signin.DialogWhenLargeContentLayout; import org.chromium.chrome.browser.ui.signin.SigninUtils; -@@ -234,7 +233,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -235,7 +234,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa /** Creates first page and sets up adapter. Should result UI being shown on the screen. */ private void createFirstPage() { BooleanSupplier showWelcomePage = () -> !FirstRunStatus.shouldSkipWelcomePage(); @@ -311,7 +311,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR mFreProgressStates.add(MobileFreProgress.WELCOME_SHOWN); mPagerAdapter = new FirstRunPagerAdapter(FirstRunActivity.this, mPages); mPager.setAdapter(mPagerAdapter); -@@ -259,7 +258,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -260,7 +259,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa // // TODO(b/245912657): explicitly sign in supervised users in {@link // FullscreenSigninMediator#handleContinueWithNative} rather than relying on SigninChecker. @@ -319,7 +319,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR mFirstRunFlowSequencer.updateFirstRunProperties(mFreProperties); -@@ -274,18 +272,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -275,18 +273,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa mFreProgressStates.add(MobileFreProgress.DEFAULT_SEARCH_ENGINE_SHOWN); } @@ -338,7 +338,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR if (mPagerAdapter != null) { mPagerAdapter.notifyDataSetChanged(); } -@@ -697,11 +683,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa +@@ -702,11 +688,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa public void acceptTermsOfService(boolean allowMetricsAndCrashUploading) { assert mNativeInitializationPromise.isFulfilled(); @@ -401,28 +401,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR } } -@@ -137,18 +115,8 @@ public abstract class FirstRunFlowSequencer { +@@ -136,18 +114,6 @@ public abstract class FirstRunFlowSequencer { * method. */ void start() { - AccountManagerFacadeProvider.getInstance() -- .getCoreAccountInfos() +- .getAccounts() - .then( -- coreAccountInfos -> { +- accounts -> { - RecordHistogram.recordCount1MHistogram( - "Signin.AndroidDeviceAccountsNumberWhenEnteringFRE", -- Math.min(coreAccountInfos.size(), 2)); +- Math.min(accounts.size(), 2)); - - assert !mAccountsAvailable; - mAccountsAvailable = true; - maybeProcessFreEnvironmentPreNative(); - }); -+ mIsChild = false; -+ maybeProcessFreEnvironmentPreNative(); } @VisibleForTesting -@@ -167,14 +135,10 @@ public abstract class FirstRunFlowSequencer { +@@ -166,9 +132,6 @@ public abstract class FirstRunFlowSequencer { } private void maybeProcessFreEnvironmentPreNative() { @@ -431,13 +429,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR - if (mIsFlowKnown) return; mIsFlowKnown = true; - - Bundle freProperties = new Bundle(); -- freProperties.putBoolean(SyncConsentFirstRunFragment.IS_CHILD_ACCOUNT, mIsChild); - - onFlowIsKnown(freProperties); - } -@@ -185,8 +149,8 @@ public abstract class FirstRunFlowSequencer { + onFlowIsKnown(mIsChild); +@@ -180,8 +143,8 @@ public abstract class FirstRunFlowSequencer { * @param freProperties Resulting FRE properties bundle. */ public void updateFirstRunProperties(Bundle freProperties) { @@ -448,7 +441,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR assert freProperties != null; freProperties.putBoolean( FirstRunActivity.SHOW_HISTORY_SYNC_PAGE, shouldShowHistorySyncOptIn()); -@@ -205,8 +169,6 @@ public abstract class FirstRunFlowSequencer { +@@ -200,8 +163,6 @@ public abstract class FirstRunFlowSequencer { // Mark the FRE flow as complete. FirstRunStatus.setFirstRunFlowComplete(true); @@ -457,7 +450,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR } /** -@@ -305,9 +267,6 @@ public abstract class FirstRunFlowSequencer { +@@ -300,9 +261,6 @@ public abstract class FirstRunFlowSequencer { Log.d(TAG, "Redirecting user through FRE."); CrashKeys.getInstance().set(CrashKeyIndex.FIRST_RUN, "yes"); @@ -467,7 +460,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR if (inSameTask) { FreIntentCreator intentCreator = new FreIntentCreator(); Intent freIntent = -@@ -333,13 +292,17 @@ public abstract class FirstRunFlowSequencer { +@@ -328,13 +286,17 @@ public abstract class FirstRunFlowSequencer { if (!(caller instanceof Activity)) { freIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } @@ -490,19 +483,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java -@@ -63,6 +63,7 @@ public class FirstRunUtils { - * collect stats. +@@ -41,6 +41,7 @@ public class FirstRunUtils { + * collect stats. */ static void acceptTermsOfService(boolean allowMetricsAndCrashUploading) { + allowMetricsAndCrashUploading = false; UmaSessionStats.changeMetricsReportingConsent( allowMetricsAndCrashUploading, ChangeMetricsReportingStateCalledFrom.UI_FIRST_RUN); - ChromeSharedPreferences.getInstance() + setEulaAccepted(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java -@@ -0,0 +1,335 @@ +@@ -0,0 +1,321 @@ +// Copyright 2015 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -790,21 +783,7 @@ new file mode 100644 + } + + private boolean getUmaCheckBoxInitialState() { -+ // Metrics and crash reporting could not be permitted by policy. -+ if (!isWaitingForNativeAndPolicyInit() -+ && !PrivacyPreferencesManagerImpl.getInstance() -+ .isUsageAndCrashReportingPermittedByPolicy()) { -+ return false; -+ } -+ -+ // A user could start FRE and accept terms of service, then close the browser and start -+ // again. In this case we rely on whatever state the user has already set. -+ if (FirstRunUtils.didAcceptTermsOfService()) { -+ return PrivacyPreferencesManagerImpl.getInstance() -+ .isUsageAndCrashReportingPermittedByUser(); -+ } -+ -+ return FirstRunActivity.DEFAULT_METRICS_AND_CRASH_REPORTING; ++ return false; + } + + // Exposed methods for ToSAndUMACCTFirstRunFragment @@ -1182,13 +1161,14 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAccountStatusSupplier.java -@@ -41,7 +41,10 @@ public class ChildAccountStatusSupplier implements OneshotSupplier { +@@ -41,7 +41,11 @@ public class ChildAccountStatusSupplier implements OneshotSupplier { */ public ChildAccountStatusSupplier( AccountManagerFacade accountManagerFacade, AppRestrictionSupplier appRestrictionInfo) { + mHasRestriction = false; + mChildAccountStatusFromAccountManagerFacade = false; mChildAccountStatusStartTime = SystemClock.elapsedRealtime(); ++ mValue.set(false); + if ((true)) return; appRestrictionInfo.getHasAppRestriction(this::onAppRestrictionDetected); @@ -1196,7 +1176,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ChildAcc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/FullscreenSigninAndHistorySyncActivityBase.java -@@ -25,8 +25,6 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; +@@ -24,8 +24,6 @@ import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.components.browser_ui.widget.gesture.BackPressHandler; import org.chromium.components.policy.PolicyService; @@ -1205,7 +1185,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/Fullscre /** Base class for First run experience and fullscreen signin and history sync promos. */ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncInitializationActivity -@@ -92,9 +90,7 @@ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncIn +@@ -91,9 +89,7 @@ public abstract class FullscreenSigninAndHistorySyncActivityBase extends AsyncIn @Override @CallSuper public void triggerLayoutInflation() { @@ -1219,7 +1199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/Fullscre diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java --- a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java +++ b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -@@ -375,8 +375,9 @@ public class LocaleManagerDelegate { +@@ -389,8 +389,9 @@ public class LocaleManagerDelegate { /** @see LocaleManager#getSearchEnginesForPromoDialog */ public List getSearchEnginesForPromoDialog(@SearchEnginePromoType int promoType) { diff --git a/build/cromite_patches/autofill-miscellaneous.patch b/build/cromite_patches/autofill-miscellaneous.patch index 9b16b243a33957234abe07fd7d6258b65c6ff51d..76c7aa82fcc4bcc213d4208e3d9740bc5b0ec143 100644 --- a/build/cromite_patches/autofill-miscellaneous.patch +++ b/build/cromite_patches/autofill-miscellaneous.patch @@ -15,20 +15,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../ui/autofill/chrome_autofill_client.h | 1 - .../browser/android_autofill_client.cc | 11 ---- .../browser/android_autofill_client.h | 1 - - .../autofill_crowdsourcing_manager.cc | 66 ++----------------- + .../autofill_crowdsourcing_manager.cc | 63 ++----------------- .../autofill_crowdsourcing_manager.h | 2 - - .../browser/crowdsourcing/votes_uploader.cc | 6 -- + .../browser/crowdsourcing/votes_uploader.cc | 3 - .../browser/foundations/autofill_client.h | 4 -- .../browser/foundations/autofill_manager.cc | 11 ---- .../autofill/core/common/autofill_features.cc | 2 + - .../autofill/core/common/autofill_prefs.cc | 10 +-- + .../autofill/core/common/autofill_prefs.cc | 8 +-- .../password_generation_frame_helper.cc | 5 -- - 13 files changed, 12 insertions(+), 120 deletions(-) + 13 files changed, 11 insertions(+), 113 deletions(-) diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc -@@ -1058,10 +1058,6 @@ ChromePasswordManagerClient::GetHttpAuthManager() { +@@ -1074,10 +1074,6 @@ ChromePasswordManagerClient::GetHttpAuthManager() { autofill::AutofillCrowdsourcingManager* ChromePasswordManagerClient::GetAutofillCrowdsourcingManager() { @@ -42,7 +42,7 @@ diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc -@@ -378,15 +378,6 @@ ChromeAutofillClient::GetURLLoaderFactory() { +@@ -393,15 +393,6 @@ ChromeAutofillClient::GetURLLoaderFactory() { ->GetURLLoaderFactoryForBrowserProcess(); } @@ -93,18 +93,18 @@ diff --git a/components/android_autofill/browser/android_autofill_client.cc b/co diff --git a/components/android_autofill/browser/android_autofill_client.h b/components/android_autofill/browser/android_autofill_client.h --- a/components/android_autofill/browser/android_autofill_client.h +++ b/components/android_autofill/browser/android_autofill_client.h -@@ -86,7 +86,6 @@ class AndroidAutofillClient : public autofill::ContentAutofillClient { +@@ -87,7 +87,6 @@ class AndroidAutofillClient : public autofill::ContentAutofillClient { const std::string& GetAppLocale() const final; bool IsOffTheRecord() const final; scoped_refptr GetURLLoaderFactory() final; - autofill::AutofillCrowdsourcingManager& GetCrowdsourcingManager() final; autofill::VotesUploader& GetVotesUploader() override; autofill::PersonalDataManager& GetPersonalDataManager() final; - autofill::EntityDataManager* GetEntityDataManager() override; + autofill::ValuablesDataManager* GetValuablesDataManager() override; diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_manager.cc b/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_manager.cc --- a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_manager.cc +++ b/components/autofill/core/browser/crowdsourcing/autofill_crowdsourcing_manager.cc -@@ -487,33 +487,6 @@ std::optional GetUploadPayloadForApi( +@@ -513,33 +513,6 @@ std::optional GetUploadPayloadForApi( return std::move(payload); } @@ -138,7 +138,7 @@ diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourci // Gets HTTP body payload for API POST request. std::optional GetAPIBodyPayload(std::string payload, RequestType type) { -@@ -545,15 +518,7 @@ std::optional GetAPIQueryPayload( +@@ -571,15 +544,7 @@ std::optional GetAPIQueryPayload( } std::string GetAPIKeyForUrl(version_info::Channel channel) { @@ -155,7 +155,7 @@ diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourci } std::optional>& GetActiveExperiments() { -@@ -860,34 +825,13 @@ size_t AutofillCrowdsourcingManager::GetPayloadLength( +@@ -899,31 +864,13 @@ size_t AutofillCrowdsourcingManager::GetPayloadLength( std::tuple AutofillCrowdsourcingManager::GetRequestURLAndMethod( const FormRequestData& request_data) const { @@ -168,9 +168,6 @@ diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourci - if (GetPayloadLength(request_data.payload) <= kMaxQueryGetSize) { - resource_id = request_data.payload; - method = "GET"; -- base::UmaHistogramBoolean(kUmaApiUrlIsTooLong, false); -- } else { -- base::UmaHistogramBoolean(kUmaApiUrlIsTooLong, true); - } - base::UmaHistogramBoolean(kUmaMethod, method != "GET"); - } @@ -209,15 +206,12 @@ diff --git a/components/autofill/core/browser/crowdsourcing/autofill_crowdsourci diff --git a/components/autofill/core/browser/crowdsourcing/votes_uploader.cc b/components/autofill/core/browser/crowdsourcing/votes_uploader.cc --- a/components/autofill/core/browser/crowdsourcing/votes_uploader.cc +++ b/components/autofill/core/browser/crowdsourcing/votes_uploader.cc -@@ -396,12 +396,6 @@ void VotesUploader::UploadVote( - non_empty_types.contains(CREDIT_CARD_NUMBER)) { - non_empty_types.insert(CREDIT_CARD_VERIFICATION_CODE); +@@ -409,9 +409,6 @@ void VotesUploader::UploadVote( + client_->GetUkmRecorder(), ukm_source_id, *submitted_form, + submission_timestamp); } - client_->GetCrowdsourcingManager().StartUploadRequest( -- /*upload_contents=*/EncodeUploadRequest(*submitted_form, non_empty_types, -- /*login_form_signature=*/{}, -- observed_submission), -- submitted_form->submission_source(), +- std::move(upload_contents), submitted_form->submission_source(), - /*is_password_manager_upload=*/false); } @@ -225,7 +219,7 @@ diff --git a/components/autofill/core/browser/crowdsourcing/votes_uploader.cc b/ diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/components/autofill/core/browser/foundations/autofill_client.h --- a/components/autofill/core/browser/foundations/autofill_client.h +++ b/components/autofill/core/browser/foundations/autofill_client.h -@@ -243,10 +243,6 @@ class AutofillClient { +@@ -249,10 +249,6 @@ class AutofillClient { // Returns the VotesUploader. virtual VotesUploader& GetVotesUploader() = 0; @@ -239,10 +233,10 @@ diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/co diff --git a/components/autofill/core/browser/foundations/autofill_manager.cc b/components/autofill/core/browser/foundations/autofill_manager.cc --- a/components/autofill/core/browser/foundations/autofill_manager.cc +++ b/components/autofill/core/browser/foundations/autofill_manager.cc -@@ -326,17 +326,6 @@ void AutofillManager::OnFormsParsed(const std::vector& forms) { - driver().SendTypePredictionsToRenderer(queryable_forms); - LogTypePredictionsAvailable(log_manager(), non_queryable_forms); - LogTypePredictionsAvailable(log_manager(), queryable_forms); +@@ -307,17 +307,6 @@ void AutofillManager::OnFormsParsed(const std::vector& forms) { + if (base::FeatureList::IsEnabled(features::test::kShowDomNodeIDs)) { + driver().ExposeDomNodeIDs(); + } - - // Query the server if at least one of the forms was parsed. - if (!queryable_forms.empty()) { @@ -260,7 +254,7 @@ diff --git a/components/autofill/core/browser/foundations/autofill_manager.cc b/ diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc -@@ -909,6 +909,8 @@ BASE_FEATURE(kAutofillUploadThrottling, +@@ -942,6 +942,8 @@ BASE_FEATURE(kAutofillUploadThrottling, "AutofillUploadThrottling", base::FEATURE_ENABLED_BY_DEFAULT); @@ -272,40 +266,37 @@ diff --git a/components/autofill/core/common/autofill_features.cc b/components/a diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -21,7 +21,7 @@ namespace prefs { +@@ -29,7 +29,7 @@ constexpr char kAutofillRanQuasiDuplicateExtraDeduplication[] = void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { // Synced prefs. Used for cross-device choices, e.g., credit card Autofill. registry->RegisterBooleanPref( -- prefs::kAutofillProfileEnabled, true, -+ prefs::kAutofillProfileEnabled, false, +- kAutofillProfileEnabled, true, ++ kAutofillProfileEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterIntegerPref( - prefs::kAutofillLastVersionDeduped, 0, -@@ -30,10 +30,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { - prefs::kAutofillHasSeenIban, false, + kAutofillLastVersionDeduped, 0, +@@ -38,10 +38,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + kAutofillHasSeenIban, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( -- prefs::kAutofillCreditCardEnabled, true, -+ prefs::kAutofillCreditCardEnabled, false, +- kAutofillCreditCardEnabled, true, ++ kAutofillCreditCardEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( -- prefs::kAutofillPaymentCvcStorage, true, -+ prefs::kAutofillPaymentCvcStorage, false, +- kAutofillPaymentCvcStorage, true, ++ kAutofillPaymentCvcStorage, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( kAutofillPaymentCardBenefits, true, -@@ -77,9 +77,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -83,7 +83,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { #endif // Deprecated prefs registered for migration. -- registry->RegisterBooleanPref(prefs::kAutofillEnabledDeprecated, true); -+ registry->RegisterBooleanPref(prefs::kAutofillEnabledDeprecated, false); - registry->RegisterBooleanPref(prefs::kAutofillOrphanRowsRemoved, false); -- registry->RegisterBooleanPref(prefs::kAutofillIbanEnabled, true); -+ registry->RegisterBooleanPref(prefs::kAutofillIbanEnabled, false); - registry->RegisterIntegerPref( - prefs::kAutofillLastVersionDisusedAddressesDeleted, 0); - registry->RegisterIntegerPref( +- registry->RegisterBooleanPref(kAutofillEnabledDeprecated, true); ++ registry->RegisterBooleanPref(kAutofillEnabledDeprecated, false); + registry->RegisterStringPref(kAutofillAblationSeedPref, ""); + registry->RegisterBooleanPref(kAutofillRanQuasiDuplicateExtraDeduplication, + false); diff --git a/components/password_manager/core/browser/password_generation_frame_helper.cc b/components/password_manager/core/browser/password_generation_frame_helper.cc --- a/components/password_manager/core/browser/password_generation_frame_helper.cc +++ b/components/password_manager/core/browser/password_generation_frame_helper.cc diff --git a/build/cromite_patches/bromite-build-utils.patch b/build/cromite_patches/bromite-build-utils.patch index f86be8bd6c8f41ad7a5743a6a15cb4f8b5875b97..f0f9594929734826f08e9cf5bd4e5b0516c89135 100644 --- a/build/cromite_patches/bromite-build-utils.patch +++ b/build/cromite_patches/bromite-build-utils.patch @@ -14,13 +14,13 @@ Subject: bromite build utils build/config/android/rules.gni | 6 +- .../ChromeAccessibilitySettingsDelegate.java | 5 + chrome/browser/flags/BUILD.gn | 10 +- - .../flags/android/cromite_native_utils.cc | 57 ++++++++++ + .../flags/android/cromite_native_utils.cc | 92 +++++++++++++++ .../flags/android/cromite_native_utils.h | 14 +++ .../browser/flags/CromiteNativeUtils.java | 46 ++++++++ mojo/public/tools/mojom/mojom_parser.py | 22 +++- tools/grit/grit/grd_reader.py | 27 ++++- tools/grit/preprocess_if_expr.py | 32 +++++- - 17 files changed, 502 insertions(+), 19 deletions(-) + 17 files changed, 537 insertions(+), 19 deletions(-) create mode 100644 build/bromite/bromite_utils.gni create mode 100644 build/bromite/gyp/cpp_bromite_include.py create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps @@ -426,7 +426,7 @@ new file mode 100644 diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn -@@ -764,3 +764,5 @@ if (is_component_build) { +@@ -844,3 +844,5 @@ if (is_component_build) { set_defaults("component") { configs = default_component_configs } @@ -458,7 +458,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -13,6 +13,11 @@ import org.chromium.components.browser_ui.settings.SettingsNavigation; +@@ -15,6 +15,11 @@ import org.chromium.components.browser_ui.settings.SettingsNavigation; import org.chromium.components.user_prefs.UserPrefs; import org.chromium.content_public.browser.BrowserContextHandle; @@ -468,8 +468,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s +import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; + /** The Chrome implementation of AccessibilitySettingsDelegate. */ + @NullMarked public class ChromeAccessibilitySettingsDelegate implements AccessibilitySettingsDelegate { - private static class TextSizeContrastAccessibilityDelegate diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn --- a/chrome/browser/flags/BUILD.gn +++ b/chrome/browser/flags/BUILD.gn @@ -508,7 +508,7 @@ diff --git a/chrome/browser/flags/android/cromite_native_utils.cc b/chrome/brows new file mode 100755 --- /dev/null +++ b/chrome/browser/flags/android/cromite_native_utils.cc -@@ -0,0 +1,57 @@ +@@ -0,0 +1,92 @@ +#include "chrome/browser/flags/android/cromite_native_utils.h" + +#include "chrome/browser/browser_process.h" @@ -531,10 +531,33 @@ new file mode 100755 + entries.erase(internal_name + "@1"); // enabled + entries.erase(internal_name + "@2"); // disabled + -+ if (isEnabled) -+ entries.insert(internal_name + "@1"); -+ else -+ entries.insert(internal_name + "@2"); ++ bool is_switch = false; ++ if (const flags_ui::FeatureEntry* entry = ++ about_flags::GetCurrentFlagsState()->FindFeatureEntryByName( ++ internal_name)) { ++ if (entry->type == flags_ui::FeatureEntry::SINGLE_DISABLE_VALUE) { ++ entries.erase(entry->switches.command_line_switch); ++ if (isEnabled) { ++ entries.insert(entry->switches.command_line_switch); ++ } ++ is_switch = true; ++ } else if (entry->type == flags_ui::FeatureEntry::ENABLE_DISABLE_VALUE) { ++ entries.erase(entry->switches.command_line_switch); ++ entries.erase(entry->switches.disable_command_line_switch); ++ if (isEnabled) { ++ entries.insert(entry->switches.disable_command_line_switch); ++ } ++ is_switch = true; ++ } ++ } ++ ++ if (!is_switch) { ++ if (isEnabled) { ++ entries.insert(internal_name + "@1"); ++ } else { ++ entries.insert(internal_name + "@2"); ++ } ++ } + + flags_storage.SetFlags(entries); + flags_storage.CommitPendingWrites(); @@ -548,6 +571,18 @@ new file mode 100755 + g_browser_process->local_state()); + std::set entries = flags_storage.GetFlags(); + ++ if (const flags_ui::FeatureEntry* entry = ++ about_flags::GetCurrentFlagsState()->FindFeatureEntryByName( ++ internal_name)) { ++ if (entry->type == flags_ui::FeatureEntry::SINGLE_DISABLE_VALUE && ++ entries.count(entry->switches.command_line_switch)) { ++ return true; ++ } else if (entry->type == flags_ui::FeatureEntry::ENABLE_DISABLE_VALUE && ++ entries.count(entry->switches.disable_command_line_switch)) { ++ return true; ++ } ++ } ++ + const std::string enabled_entry = internal_name + "@1"; + if (entries.count(enabled_entry)) + return true; @@ -688,7 +723,7 @@ diff --git a/mojo/public/tools/mojom/mojom_parser.py b/mojo/public/tools/mojom/m diff --git a/tools/grit/grit/grd_reader.py b/tools/grit/grit/grd_reader.py --- a/tools/grit/grit/grd_reader.py +++ b/tools/grit/grit/grd_reader.py -@@ -93,11 +93,28 @@ class GrdContentHandler(xml.sax.handler.ContentHandler): +@@ -96,11 +96,28 @@ class GrdContentHandler(xml.sax.handler.ContentHandler): raise exception.FileNotFound(partname) # Exceptions propagate to the handler in grd_reader.Parse(). oldsource = self.source diff --git a/build/cromite_patches/disable-AdsBlockedInfoBar.patch b/build/cromite_patches/disable-AdsBlockedInfoBar.patch index f3e2b226bb40ae154444f292c91542213732b122..bedbd15fe5795fe93f9eb9d93541d38b77f83122 100644 --- a/build/cromite_patches/disable-AdsBlockedInfoBar.patch +++ b/build/cromite_patches/disable-AdsBlockedInfoBar.patch @@ -10,12 +10,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/components/subresource_filter/content/browser/profile_interaction_manager.cc b/components/subresource_filter/content/browser/profile_interaction_manager.cc --- a/components/subresource_filter/content/browser/profile_interaction_manager.cc +++ b/components/subresource_filter/content/browser/profile_interaction_manager.cc -@@ -129,6 +129,7 @@ mojom::ActivationLevel ProfileInteractionManager::OnPageActivationComputed( +@@ -128,6 +128,7 @@ mojom::ActivationLevel ProfileInteractionManager::OnPageActivationComputed( } void ProfileInteractionManager::MaybeShowNotification() { + if ((true)) return; // The caller should make sure this is only called from pages that are // currently primary. - CHECK(page_, base::NotFatalUntil::M129); + CHECK(page_); -- diff --git a/build/cromite_patches/disable-WebView-variations-support.patch b/build/cromite_patches/disable-WebView-variations-support.patch index e8329174fd8ecd506c2d6bae543cccc157b3c77a..48c993981e7b302787ddc2d7407e38d04220ebbb 100644 --- a/build/cromite_patches/disable-WebView-variations-support.patch +++ b/build/cromite_patches/disable-WebView-variations-support.patch @@ -5,32 +5,33 @@ Subject: disable WebView variations support Original License: MIT - https://spdx.org/licenses/MIT.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../com/android/webview/chromium/WebViewChromiumAwInit.java | 6 ------ - .../webview/chromium/WebViewChromiumFactoryProvider.java | 4 ---- - 2 files changed, 10 deletions(-) + .../android/webview/chromium/WebViewChromiumAwInit.java | 7 ------- + .../webview/chromium/WebViewChromiumFactoryProvider.java | 4 ---- + 2 files changed, 11 deletions(-) diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java -@@ -342,12 +342,6 @@ public class WebViewChromiumAwInit { +@@ -409,13 +409,6 @@ public class WebViewChromiumAwInit { + } - AwBrowserProcess.configureChildProcessLauncher(); - -- // finishVariationsInitLocked() must precede native initialization so the seed is -- // available when AwFeatureListCreator::SetUpFieldTrials() runs. -- if (!FastVariationsSeedSafeModeAction.hasRun()) { -- finishVariationsInitLocked(); -- } + AwBrowserProcess.configureChildProcessLauncher(); - - AwBrowserProcess.start(); - - // TODO(crbug.com/332706093): See if this can be moved before loading native. +- // finishVariationsInitLocked() must precede native initialization so +- // the seed is available when AwFeatureListCreator::SetUpFieldTrials() +- // runs. +- if (!FastVariationsSeedSafeModeAction.hasRun()) { +- finishVariationsInitLocked(); +- } + }); + tasks.addLast(AwBrowserProcess::start); + tasks.addLast( diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java -@@ -591,10 +591,6 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { - } - } +@@ -577,10 +577,6 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { + mAwInit.setStartupTaskExperimentEnabled(enableStartupTasksExperiment); + AwBrowserMainParts.setWebViewStartupTasksLogicIsEnabled(enableStartupTasksExperiment); - if (!FastVariationsSeedSafeModeAction.hasRun()) { - mAwInit.startVariationsInit(); diff --git a/build/cromite_patches/do-not-add-suffix-to-package-name.patch b/build/cromite_patches/do-not-add-suffix-to-package-name.patch index a2dd93b2e987d72b8fb0b6dfb2ae8f39d58df417..bba7880a9d68ff7ce3090e49a517946c2769c058 100644 --- a/build/cromite_patches/do-not-add-suffix-to-package-name.patch +++ b/build/cromite_patches/do-not-add-suffix-to-package-name.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -29,7 +29,7 @@ declare_args() { +@@ -30,7 +30,7 @@ declare_args() { chrome_public_manifest_package = "org.chromium.chrome" if (use_stable_package_name_for_trichrome) { chrome_public_manifest_package += ".stable" diff --git a/build/cromite_patches/enable-ftrivial-auto-var-init-zero.patch b/build/cromite_patches/enable-ftrivial-auto-var-init-zero.patch index 315e57d08dc3de7e12b1bf47bb916e515477bebc..2f97b2b09b419e34d126180487a2acd8e629f705 100644 --- a/build/cromite_patches/enable-ftrivial-auto-var-init-zero.patch +++ b/build/cromite_patches/enable-ftrivial-auto-var-init-zero.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -398,6 +398,10 @@ config("compiler") { +@@ -411,6 +411,10 @@ config("compiler") { cflags += [ "-fwrapv" ] } diff --git a/build/cromite_patches/exit-on-failure-of-inclusion.patch b/build/cromite_patches/exit-on-failure-of-inclusion.patch index 631cad9c05bc896438dd14d25d6e654b12af558f..8df2c7f9c873c57c62cdfbece9d2abd8fe8a0acf 100644 --- a/build/cromite_patches/exit-on-failure-of-inclusion.patch +++ b/build/cromite_patches/exit-on-failure-of-inclusion.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/installer/linux/debian/build.sh b/chrome/installer/linux/debian/build.sh --- a/chrome/installer/linux/debian/build.sh +++ b/chrome/installer/linux/debian/build.sh -@@ -246,15 +246,15 @@ DEB_CHANGELOG="${TMPFILEDIR}/changelog" +@@ -250,15 +250,15 @@ DEB_CHANGELOG="${TMPFILEDIR}/changelog" DEB_FILES="${TMPFILEDIR}/files" DEB_CONTROL="${TMPFILEDIR}/control" diff --git a/build/cromite_patches/eyeo-133.0.6943.49-android_api.patch b/build/cromite_patches/eyeo-133.0.6943.49-android_api.patch index 3a2de0624e518ccaa9dc1d6728450b940de01314..520dc96e634f32dd2af7da7446d2646768991012 100644 --- a/build/cromite_patches/eyeo-133.0.6943.49-android_api.patch +++ b/build/cromite_patches/eyeo-133.0.6943.49-android_api.patch @@ -6,7 +6,7 @@ Based on Chromium 133.0.6943.49 Pre-requisites: eyeo Browser Ad filtering Solution: Base Module --- - chrome/android/BUILD.gn | 14 + + chrome/android/BUILD.gn | 13 + chrome/android/chrome_java_sources.gni | 4 + .../browser/adblock/TabIdTranslator.java | 36 ++ chrome/browser/BUILD.gn | 4 + @@ -46,7 +46,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module .../adblock/TestVerificationUtils.java | 220 +++++++ ...esource_classification_notifier_android.cc | 163 +++++ ...resource_classification_notifier_android.h | 72 +++ - 40 files changed, 5610 insertions(+) + 40 files changed, 5609 insertions(+) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/adblock/TabIdTranslator.java create mode 100644 chrome/browser/android/adblock/tab_id_translator_jni.cc create mode 100644 components/adblock/android/BUILD.gn @@ -95,17 +95,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn +# This source code is a part of eyeo Chromium SDK. +# Use of this source code is governed by the GPLv3 that can be found in the components/adblock/LICENSE file. - import("//build/android/resource_sizes.gni") import("//build/config/android/config.gni") -@@ -288,6 +291,7 @@ if (current_toolchain == default_toolchain) { - if (enable_screen_capture) { - deps += [ "//chrome/browser:screen_capture_java_resources" ] - } -+ - } - - android_resources("java_overlay_resources") { -@@ -532,6 +536,7 @@ if (current_toolchain == default_toolchain) { + import("//build/config/cronet/config.gni") +@@ -548,6 +551,7 @@ if (_is_default_toolchain) { "//chrome/browser/xsurface:java", "//chrome/browser/xsurface_provider:dependency_provider_impl_java", "//chrome/browser/xsurface_provider:java", @@ -113,7 +105,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/android_autofill/browser:java", "//components/autofill/android:autofill_features_java", "//components/autofill/android:autofill_java", -@@ -1331,6 +1336,7 @@ if (current_toolchain == default_toolchain) { +@@ -1357,6 +1361,7 @@ if (_is_default_toolchain) { "javatests:chrome_test_java_org.chromium.chrome.browser.toolbar", "javatests:chrome_test_java_org.chromium.chrome.browser.webapps", "javatests:chrome_test_java_various", @@ -121,7 +113,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/android/browserservices/verification:javatests", "//chrome/browser/android/httpclient:javatests", "//chrome/browser/android/metrics:ukm_javatests", -@@ -1399,6 +1405,7 @@ if (current_toolchain == default_toolchain) { +@@ -1426,6 +1431,7 @@ if (_is_default_toolchain) { "//chrome/test/data/translate/", "//chrome/test/data/webauthn/", "//chrome/test/media_router/resources/", @@ -129,27 +121,27 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/test/data/autofill/", "//components/test/data/payments/", "//content/test/data/browsing_data/", -@@ -3200,6 +3207,12 @@ generate_jni("chrome_jni_headers") { - sources += [ "java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialogBridge.java" ] - } +@@ -3225,6 +3231,12 @@ if (_is_default_toolchain) { + sources += [ "java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialogBridge.java" ] + } -+ ### Android API module start -+ sources += -+ [ "java/src/org/chromium/chrome/browser/adblock/TabIdTranslator.java" ] -+ -+ ### Android API module end -+ - # Used for testing only, should not be shipped to end users. - if (enable_offline_pages_harness) { - sources += [ "java/src/org/chromium/chrome/browser/offlinepages/evaluation/OfflinePageEvaluationBridge.java" ] -@@ -3290,6 +3303,7 @@ group("jni_headers") { - "//chrome/browser/ui/messages/android:jni_headers", - "//chrome/browser/util:jni_headers", - "//chrome/browser/webauthn/android:jni_headers", -+ "//components/adblock/android:jni_headers", - "//components/browser_ui/device_lock/android:device_lock_bridge_jni_headers", - "//components/content_relationship_verification/android:jni_headers", - "//components/image_fetcher:jni_headers", ++ ### Android API module start ++ sources += ++ [ "java/src/org/chromium/chrome/browser/adblock/TabIdTranslator.java" ] ++ ++ ### Android API module end ++ + # Used for testing only, should not be shipped to end users. + if (enable_offline_pages_harness) { + sources += [ "java/src/org/chromium/chrome/browser/offlinepages/evaluation/OfflinePageEvaluationBridge.java" ] +@@ -3320,6 +3332,7 @@ if (_is_default_toolchain) { + "//chrome/browser/ui/plus_addresses/android:jni_headers", + "//chrome/browser/util:jni_headers", + "//chrome/browser/webauthn/android:jni_headers", ++ "//components/adblock/android:jni_headers", + "//components/browser_ui/device_lock/android:device_lock_bridge_jni_headers", + "//components/content_relationship_verification/android:jni_headers", + "//components/image_fetcher:jni_headers", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni @@ -163,7 +155,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java import("//content/public/common/features.gni") -@@ -54,6 +57,7 @@ chrome_java_sources = [ +@@ -55,6 +58,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/accessibility/AccessibilityTabHelper.java", "java/src/org/chromium/chrome/browser/accessibility/PageZoomIphController.java", "java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java", @@ -215,7 +207,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3251,6 +3251,10 @@ static_library("browser") { +@@ -3336,6 +3336,10 @@ static_library("browser") { "touch_to_fill/password_manager/touch_to_fill_controller_webauthn_delegate.h", ] @@ -275,9 +267,9 @@ new file mode 100644 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1003,6 +1003,12 @@ static_library("ui") { +@@ -986,6 +986,12 @@ static_library("ui") { deps += [ - "//chrome/browser/search/background:ntp_background_proto", + "//components/themes:ntp_background_proto", ] + ### Android API module start + deps += [ diff --git a/build/cromite_patches/eyeo-133.0.6943.49-android_settings.patch b/build/cromite_patches/eyeo-133.0.6943.49-android_settings.patch index 9d7ae27b35a54efa3025ca6de3482ce44a7afc64..fe092f88148eb1d07715281f1aa5110f33a0b3b0 100644 --- a/build/cromite_patches/eyeo-133.0.6943.49-android_settings.patch +++ b/build/cromite_patches/eyeo-133.0.6943.49-android_settings.patch @@ -239,10 +239,10 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -292,6 +292,10 @@ if (current_toolchain == default_toolchain) { +@@ -298,6 +298,10 @@ if (_is_default_toolchain) { + if (enable_screen_capture) { deps += [ "//chrome/browser:screen_capture_java_resources" ] } - + ### Android UI module start + deps += [ "//chrome/browser/adblock/android:java_ui_resources" ] + @@ -250,7 +250,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn } android_resources("java_overlay_resources") { -@@ -776,6 +780,10 @@ if (current_toolchain == default_toolchain) { +@@ -794,6 +798,10 @@ if (_is_default_toolchain) { "//url/mojom:url_mojom_origin_java", ] diff --git a/build/cromite_patches/eyeo-133.0.6943.49-base.patch b/build/cromite_patches/eyeo-133.0.6943.49-base.patch index 3ab554e10b9a70550ab6b2b3c2daea5ececd0a59..0504aeb735f4e56f666287bc1bd560b8fb92c150 100644 --- a/build/cromite_patches/eyeo-133.0.6943.49-base.patch +++ b/build/cromite_patches/eyeo-133.0.6943.49-base.patch @@ -4,13 +4,12 @@ Subject: eyeo Browser Ad filtering Solution: Base Module Based on Chromium 133.0.6943.49 --- - BUILD.gn | 4 + - DEPS | 12 + + DEPS | 10 + LICENSE | 15 + README.md | 12 + base/threading/thread_restrictions.h | 9 + base/trace_event/builtin_categories.h | 1 + - components/BUILD.gn | 10 + + components/BUILD.gn | 7 + components/adblock/BUILD.gn | 36 + components/adblock/CHANGELOG.md | 746 +++++++++ components/adblock/LICENSE | 674 ++++++++ @@ -23,7 +22,7 @@ Based on Chromium 133.0.6943.49 .../content/browser/adblock_filter_match.h | 30 + .../browser/adblock_internals_page_handler.cc | 171 ++ .../browser/adblock_internals_page_handler.h | 61 + - .../content/browser/adblock_internals_ui.cc | 68 + + .../content/browser/adblock_internals_ui.cc | 67 + .../content/browser/adblock_internals_ui.h | 49 + .../browser/adblock_url_loader_factory.cc | 813 ++++++++++ .../browser/adblock_url_loader_factory.h | 100 ++ @@ -366,7 +365,7 @@ Based on Chromium 133.0.6943.49 tools/eyeo/update_git_grafts.py | 138 ++ tools/gritsettings/resource_ids.spec | 12 + .../histograms/metadata/extensions/enums.xml | 8 +- - 362 files changed, 48854 insertions(+), 8 deletions(-) + 361 files changed, 48844 insertions(+), 8 deletions(-) create mode 100644 components/adblock/BUILD.gn create mode 100644 components/adblock/CHANGELOG.md create mode 100644 components/adblock/LICENSE @@ -698,39 +697,10 @@ Based on Chromium 133.0.6943.49 create mode 100644 tools/eyeo/git-grafts.txt create mode 100755 tools/eyeo/update_git_grafts.py -diff --git a/BUILD.gn b/BUILD.gn ---- a/BUILD.gn -+++ b/BUILD.gn -@@ -1,6 +1,9 @@ - # Copyright 2013 The Chromium Authors - # Use of this source code is governed by a BSD-style license that can be - # found in the LICENSE file. -+# -+# This source code is a part of eyeo Chromium SDK. -+# Use of this source code is governed by the GPLv3 that can be found in the components/adblock/LICENSE file. - - # This is the root build file for GN. GN will start processing by loading this - # file, and recursively load all dependencies until all dependencies are either -@@ -440,6 +443,7 @@ group("gn_all") { - "//chrome/browser/android/examples/partner_browser_customizations_provider:partner_browser_customizations_example_apk", - "//content/shell/android:content_shell_test_apk", - ] -+ - } - - if (enable_chrome_android_internal) { diff --git a/DEPS b/DEPS --- a/DEPS +++ b/DEPS -@@ -168,6 +168,7 @@ vars = { - # flag is set True. - 'checkout_wpr_archives': False, - -+ - # By default, do not check out WebKit for iOS, as it is not needed unless - # running against ToT WebKit rather than system WebKit. This can be overridden - # e.g. with custom_vars. -@@ -262,6 +263,7 @@ vars = { +@@ -282,6 +282,7 @@ vars = { 'download_libvpx_testdata': False, 'android_git': 'https://android.googlesource.com', @@ -738,9 +708,9 @@ diff --git a/DEPS b/DEPS 'aomedia_git': 'https://aomedia.googlesource.com', 'boringssl_git': 'https://boringssl.googlesource.com', 'chrome_git': 'https://chrome-internal.googlesource.com', -@@ -502,6 +504,11 @@ vars = { +@@ -529,6 +530,11 @@ vars = { # and whatever else without interference from each other. - 'llvm_libc_revision': 'a02de4d0d992b110c8b180fdec91258e7b60265f', + 'compiler_rt_revision': '57196dd146582915c955f6d388e31aea93220c51', + # Three lines of non-changing comments so that + # the commit queue can handle CLs rolling feed @@ -749,8 +719,8 @@ diff --git a/DEPS b/DEPS + # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '7f8b68f91ca8b192375f5e71cd81fb3ed9650ef3', -@@ -1460,6 +1467,10 @@ deps = { + 'libcxx_revision': 'a01c02c9d4acbdae3b7e8a2f3ee58579a9c29f96', +@@ -1516,6 +1522,10 @@ deps = { 'condition': 'checkout_android and checkout_src_internal', }, @@ -759,16 +729,8 @@ diff --git a/DEPS b/DEPS + }, + 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '441c86221443f48e818335d51f84cf1880c35aa4', - }, -@@ -1589,6 +1600,7 @@ deps = { - 'url': Var('chromium_git') + '/external/github.com/google/Accessibility-Test-Framework-for-Android.git' + '@' + '4a764c690353ea136c82f1a696a70bf38d1ef5fe', + 'url': Var('chromium_git') + '/website.git' + '@' + 'd21d90790d8ea421b317c4cb52a0d94133422796', }, - -+ - 'src/third_party/android_build_tools/protoc/cipd': { - 'packages': [ - { diff --git a/LICENSE b/LICENSE --- a/LICENSE +++ b/LICENSE @@ -832,9 +794,9 @@ diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restri +class SubscriptionServiceFactory; +} // namespace adblock namespace ash { - class BrowserDataBackMigrator; class LoginEventRecorder; -@@ -660,6 +667,8 @@ class BASE_EXPORT ScopedAllowBlocking { + class StartupCustomizationDocument; +@@ -661,6 +668,8 @@ class BASE_EXPORT ScopedAllowBlocking { friend class ::BrowserStateDirectoryBuilder; #endif @@ -846,7 +808,7 @@ diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restri diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h --- a/base/trace_event/builtin_categories.h +++ b/base/trace_event/builtin_categories.h -@@ -96,6 +96,7 @@ PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS( +@@ -123,6 +123,7 @@ PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS( perfetto::Category("exo"), perfetto::Category("extensions"), perfetto::Category("explore_sites"), @@ -867,7 +829,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn import("//base/debug/debug.gni") import("//build/config/chrome_build.gni") -@@ -177,6 +180,7 @@ test("components_unittests") { +@@ -179,6 +182,7 @@ test("components_unittests") { deps = [ "//base", @@ -875,7 +837,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "//components/affiliations/core/browser:unit_tests", "//components/aggregation_service:unit_tests", "//components/apdu:unit_tests", -@@ -893,6 +897,7 @@ test("components_unittests") { +@@ -918,6 +922,7 @@ test("components_unittests") { repack("components_tests_pak") { sources = [ @@ -883,7 +845,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "$root_gen_dir/components/arc/input_overlay_resources.pak", "$root_gen_dir/components/autofill/core/browser/geo/autofill_address_rewriter_resources.pak", "$root_gen_dir/components/components_resources.pak", -@@ -909,6 +914,7 @@ repack("components_tests_pak") { +@@ -934,6 +939,7 @@ repack("components_tests_pak") { # TODO(b/207518736): Input overlay resources will be changed to proto soon, # thus not going to move this resource pak to under ash. "//chromeos/ash/experiences/arc/input_overlay/resources:resources_grit", @@ -891,7 +853,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "//components/autofill/core/browser:autofill_address_rewriter_resources", "//components/metrics:server_urls_grd", "//components/omnibox/resources:omnibox_pedal_synonyms", -@@ -1010,6 +1016,7 @@ if (use_blink) { +@@ -1035,6 +1041,7 @@ if (use_blink) { deps = [ "//base", "//base/test:test_support", @@ -899,16 +861,6 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "//components/autofill/content/browser", "//components/autofill/content/browser:browser_tests", "//components/autofill/content/renderer", -@@ -1219,6 +1226,9 @@ if (use_blink) { - - deps = [ - "//base", -+ "//components/adblock/core/classifier:perf_tests", -+ "//components/adblock/core/converter:perf_tests", -+ "//components/adblock/core/subscription:perf_tests", - "//components/attribution_reporting", - "//components/bookmarks/test", - "//components/discardable_memory/common", diff --git a/components/adblock/BUILD.gn b/components/adblock/BUILD.gn new file mode 100644 --- /dev/null @@ -3513,7 +3465,7 @@ diff --git a/components/adblock/content/browser/adblock_internals_ui.cc b/compon new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/adblock_internals_ui.cc -@@ -0,0 +1,68 @@ +@@ -0,0 +1,67 @@ + +/* \ + * This file is part of eyeo Chromium SDK, \ @@ -3565,8 +3517,7 @@ new file mode 100644 + "trusted-types static-types " + // Add TrustedTypes policies necessary for using Polymer. + "polymer-html-literal polymer-template-event-attribute-policy;"); -+ source->AddResourcePaths( -+ base::span(kAdblockInternalsResources, kAdblockInternalsResourcesSize)); ++ source->AddResourcePaths(kAdblockInternalsResources); + source->SetDefaultResource(IDR_ADBLOCK_INTERNALS_ADBLOCK_INTERNALS_HTML); +} + @@ -18739,7 +18690,7 @@ new file mode 100644 +build_webui("build") { + grd_prefix = "adblock_internals" + static_files = [ "adblock_internals.html" ] -+ non_web_component_files = [ "adblock_internals.ts" ] ++ ts_files = [ "adblock_internals.ts" ] + mojo_files_deps = [ "//components/adblock/content/browser/mojom:adblock_internals_ts__generator" ] + mojo_files = [ "$root_gen_dir/components/adblock/content/browser/mojom/adblock_internals.mojom-webui.ts" ] + ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ] @@ -50302,7 +50253,7 @@ diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/brow #include "content/browser/loader/navigation_url_loader_impl.h" #include -@@ -1212,7 +1216,7 @@ void NavigationURLLoaderImpl::OnReceiveRedirect( +@@ -1254,7 +1258,7 @@ void NavigationURLLoaderImpl::OnReceiveRedirect( LogQueueTimeHistogram("Navigation.QueueTime.OnReceiveRedirect", resource_request_->is_outermost_main_frame); net::Error error = net::OK; @@ -50325,7 +50276,7 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b #include "content/browser/renderer_host/render_frame_host_impl.h" -@@ -3464,6 +3468,12 @@ void RenderFrameHostImpl::ExecuteJavaScriptMethod( +@@ -3513,6 +3517,12 @@ void RenderFrameHostImpl::ExecuteJavaScriptMethod( std::move(callback)); } @@ -50352,7 +50303,7 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/br #ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_IMPL_H_ #define CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_IMPL_H_ -@@ -495,6 +499,10 @@ class CONTENT_EXPORT RenderFrameHostImpl +@@ -499,6 +503,10 @@ class CONTENT_EXPORT RenderFrameHostImpl const std::u16string& method_name, base::Value::List arguments, JavaScriptResultCallback callback) override; @@ -50377,7 +50328,7 @@ diff --git a/content/public/browser/render_frame_host.h b/content/public/browser #ifndef CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_H_ #define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_H_ -@@ -552,6 +556,9 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, +@@ -551,6 +555,9 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, virtual void AddMessageToConsole(blink::mojom::ConsoleMessageLevel level, const std::string& message) = 0; @@ -50426,7 +50377,7 @@ diff --git a/content/public/test/fake_local_frame.cc b/content/public/test/fake_ #include "content/public/test/fake_local_frame.h" -@@ -95,6 +99,9 @@ void FakeLocalFrame::RequestVideoFrameAtWithBoundsHint( +@@ -99,6 +103,9 @@ void FakeLocalFrame::RequestVideoFrameAtWithBoundsHint( void FakeLocalFrame::PluginActionAt(const gfx::Point& location, blink::mojom::PluginActionType action) {} @@ -50450,7 +50401,7 @@ diff --git a/content/public/test/fake_local_frame.h b/content/public/test/fake_l #ifndef CONTENT_PUBLIC_TEST_FAKE_LOCAL_FRAME_H_ #define CONTENT_PUBLIC_TEST_FAKE_LOCAL_FRAME_H_ -@@ -78,6 +82,7 @@ class FakeLocalFrame : public blink::mojom::LocalFrame { +@@ -80,6 +84,7 @@ class FakeLocalFrame : public blink::mojom::LocalFrame { RequestVideoFrameAtWithBoundsHintCallback callback) override; void PluginActionAt(const gfx::Point& location, blink::mojom::PluginActionType action) override; @@ -50547,16 +50498,16 @@ diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_ #include "content/shell/app/shell_main_delegate.h" -@@ -30,7 +34,7 @@ +@@ -32,7 +36,7 @@ #include "content/public/common/main_function_params.h" #include "content/public/common/url_constants.h" #include "content/shell/app/shell_crash_reporter_client.h" -#include "content/shell/browser/shell_content_browser_client.h" +#include "content/shell/browser/adblock/adblock_shell_content_browser_client.h" - #include "content/shell/browser/shell_paths.h" #include "content/shell/common/shell_content_client.h" + #include "content/shell/common/shell_paths.h" #include "content/shell/common/shell_switches.h" -@@ -446,7 +450,7 @@ ContentBrowserClient* ShellMainDelegate::CreateContentBrowserClient() { +@@ -447,7 +451,7 @@ ContentBrowserClient* ShellMainDelegate::CreateContentBrowserClient() { return browser_client_.get(); } #endif @@ -50883,7 +50834,7 @@ diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_ #include "extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h" #include -@@ -453,6 +457,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnReceiveRedirect( +@@ -452,6 +456,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnReceiveRedirect( TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); if (redirect_url_ != redirect_info.new_url && @@ -50930,7 +50881,7 @@ diff --git a/services/network/public/cpp/net_ipc_param_traits.h b/services/netwo #ifndef SERVICES_NETWORK_PUBLIC_CPP_NET_IPC_PARAM_TRAITS_H_ #define SERVICES_NETWORK_PUBLIC_CPP_NET_IPC_PARAM_TRAITS_H_ -@@ -269,6 +273,7 @@ IPC_STRUCT_TRAITS_BEGIN(net::RedirectInfo) +@@ -275,6 +279,7 @@ IPC_STRUCT_TRAITS_BEGIN(net::RedirectInfo) IPC_STRUCT_TRAITS_MEMBER(new_referrer) IPC_STRUCT_TRAITS_MEMBER(insecure_scheme_was_upgraded) IPC_STRUCT_TRAITS_MEMBER(is_signed_exchange_fallback_redirect) @@ -50952,7 +50903,7 @@ diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blin module blink.mojom; -@@ -968,6 +972,10 @@ interface LocalFrame { +@@ -979,6 +983,10 @@ interface LocalFrame { // the given point in the view coordinate space. PluginActionAt(gfx.mojom.Point location, blink.mojom.PluginActionType action); @@ -50977,7 +50928,7 @@ diff --git a/third_party/blink/public/web/web_document.h b/third_party/blink/pub #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_DOCUMENT_H_ #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_DOCUMENT_H_ -@@ -143,6 +147,14 @@ class BLINK_EXPORT WebDocument : public WebNode { +@@ -151,6 +155,14 @@ class BLINK_EXPORT WebDocument : public WebNode { WebCssOrigin = WebCssOrigin::kAuthor, BackForwardCacheAware = BackForwardCacheAware::kAllow); @@ -51006,7 +50957,7 @@ diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_ #include "third_party/blink/renderer/core/dom/events/event_target.h" #include -@@ -867,7 +871,10 @@ bool EventTarget::dispatchEventForBindings(Event* event, +@@ -882,7 +886,10 @@ bool EventTarget::dispatchEventForBindings(Event* event, if (!GetExecutionContext()) return false; @@ -51021,7 +50972,7 @@ diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_ diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_party/blink/renderer/core/exported/web_document.cc --- a/third_party/blink/renderer/core/exported/web_document.cc +++ b/third_party/blink/renderer/core/exported/web_document.cc -@@ -266,6 +266,56 @@ WebStyleSheetKey WebDocument::InsertStyleSheet( +@@ -276,6 +276,56 @@ WebStyleSheetKey WebDocument::InsertStyleSheet( return injection_key; } @@ -51121,7 +51072,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame_mojo_handler.h b/ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_LOCAL_FRAME_MOJO_HANDLER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_LOCAL_FRAME_MOJO_HANDLER_H_ -@@ -112,6 +116,7 @@ class LocalFrameMojoHandler +@@ -114,6 +118,7 @@ class LocalFrameMojoHandler void AddMessageToConsole(mojom::blink::ConsoleMessageLevel level, const WTF::String& message, bool discard_duplicates) final; @@ -51143,7 +51094,7 @@ diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/ #include "third_party/blink/renderer/core/html/html_element.h" #include "base/containers/enum_set.h" -@@ -2414,7 +2418,13 @@ void HTMLElement::setSpellcheck(bool enable) { +@@ -2494,7 +2498,13 @@ void HTMLElement::setSpellcheck(bool enable) { } void HTMLElement::click() { @@ -51822,7 +51773,7 @@ diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ # This file is used to assign starting resource ids for resources and strings # used by Chromium. This is done to ensure that resource ids are unique # across all the grd files. If you are adding a new grd file, please add -@@ -1109,6 +1113,14 @@ +@@ -1161,6 +1165,14 @@ "components/user_scripts/browser/resources/browser_resources.grd": { "includes": [7620], }, @@ -51860,10 +51811,10 @@ diff --git a/tools/metrics/histograms/metadata/extensions/enums.xml b/tools/metr -@@ -3196,6 +3200,8 @@ Called by update_extension_permission.py.--> - +@@ -3209,6 +3213,8 @@ Called by update_extension_permission.py.--> + + + diff --git a/build/cromite_patches/eyeo-133.0.6943.49-chrome_integration.patch b/build/cromite_patches/eyeo-133.0.6943.49-chrome_integration.patch index 270c03f025a4670b361d6c41ec74cf650e67baab..7a2b35f10ff917e76c1295dac69cda292f68f15f 100644 --- a/build/cromite_patches/eyeo-133.0.6943.49-chrome_integration.patch +++ b/build/cromite_patches/eyeo-133.0.6943.49-chrome_integration.patch @@ -50,7 +50,6 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module .../profile_keyed_service_browsertest.cc | 18 + chrome/browser/resources/BUILD.gn | 5 + .../safe_browsing_blocking_page_test.cc | 7 +- - .../sessions/session_restore_browsertest.cc | 8 +- ...subresource_filter_browser_test_harness.cc | 8 +- chrome/browser/ui/BUILD.gn | 4 + chrome/browser/ui/prefs/pref_watcher.cc | 13 + @@ -59,7 +58,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module chrome/common/BUILD.gn | 3 + chrome/test/BUILD.gn | 14 + chrome/test/base/in_process_browser_test.cc | 24 +- - 53 files changed, 3309 insertions(+), 7 deletions(-) + 52 files changed, 3302 insertions(+), 6 deletions(-) create mode 100644 chrome/browser/adblock/README.md create mode 100644 chrome/browser/adblock/adblock_chrome_content_browser_client.cc create mode 100644 chrome/browser/adblock/adblock_chrome_content_browser_client.h @@ -106,7 +105,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. -@@ -42,6 +46,7 @@ +@@ -43,6 +47,7 @@ #include "base/timer/timer.h" #include "base/trace_event/trace_event_impl.h" #include "build/build_config.h" @@ -114,7 +113,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #include "chrome/browser/buildflags.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_resource_bundle_helper.h" -@@ -1630,7 +1635,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { +@@ -1625,7 +1630,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { content::ContentBrowserClient* ChromeMainDelegate::CreateContentBrowserClient() { chrome_content_browser_client_ = @@ -136,24 +135,24 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn import("//base/allocator/allocator.gni") import("//build/buildflag_header.gni") -@@ -171,6 +174,8 @@ static_library("browser") { +@@ -174,6 +177,8 @@ static_library("browser") { "accessibility/page_colors_factory.h", "accessibility/prefers_default_scrollbar_styles_prefs.cc", "accessibility/prefers_default_scrollbar_styles_prefs.h", + "adblock/adblock_chrome_content_browser_client.cc", + "adblock/adblock_chrome_content_browser_client.h", - "affiliations/affiliation_service_factory.cc", - "affiliations/affiliation_service_factory.h", "after_startup_task_utils.cc", -@@ -2024,6 +2029,7 @@ static_library("browser") { + "after_startup_task_utils.h", + "app_mode/app_mode_utils.cc", +@@ -2083,6 +2088,7 @@ static_library("browser") { "//chrome/common/notifications", "//chrome/installer/util:with_no_strings", "//chrome/services/speech/buildflags", + "//components/adblock/content:browser", + "//components/application_locale_storage", "//components/assist_ranker", - "//components/autofill/core/browser", - "//components/back_forward_cache", -@@ -3245,6 +3251,7 @@ static_library("browser") { + "//components/autofill/content/browser", +@@ -3330,6 +3336,7 @@ static_library("browser") { "touch_to_fill/password_manager/touch_to_fill_controller_webauthn_delegate.h", ] @@ -161,7 +160,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn deps += [ ":delta_file_proto", ":profile_token", -@@ -8313,6 +8320,7 @@ static_library("browser_public_dependencies") { +@@ -8511,6 +8518,7 @@ static_library("browser_public_dependencies") { "//chrome/services/file_util/public/mojom", "//components/account_id", "//components/autofill/content/browser", @@ -3442,7 +3441,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows #include "chrome/browser/chrome_browser_main.h" -@@ -76,6 +80,7 @@ +@@ -77,6 +81,7 @@ #include "chrome/grit/branded_strings.h" #include "chrome/grit/generated_resources.h" #include "chrome/installer/util/google_update_settings.h" @@ -3450,7 +3449,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows #include "components/color/color_mixers.h" #include "components/device_event_log/device_event_log.h" #include "components/embedder_support/origin_trials/component_updater_utils.h" -@@ -1545,6 +1550,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { +@@ -1535,6 +1540,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { // called inside PostProfileInit. content::WebUIControllerFactory::RegisterFactory( ChromeWebUIControllerFactory::GetInstance()); @@ -3500,7 +3499,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL import("//build/config/chromebox_for_meetings/buildflags.gni") import("//build/config/chromeos/ui_mode.gni") -@@ -271,6 +274,7 @@ source_set("extensions") { +@@ -424,6 +427,7 @@ source_set("extensions") { "window_controller_list.h", "window_controller_list_observer.h", ] @@ -3508,7 +3507,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL configs += [ "//build/config:precompiled_headers", "//build/config/compiler:wexit_time_destructors", -@@ -725,6 +729,7 @@ source_set("extensions") { +@@ -775,6 +779,7 @@ source_set("extensions") { ] } @@ -3562,15 +3561,15 @@ diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load #include "components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h" -@@ -21,6 +25,7 @@ - #include "chrome/browser/ui/browser.h" +@@ -23,6 +27,7 @@ #include "chrome/test/base/in_process_browser_test.h" + #include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/core/features.h" #include "components/heavy_ad_intervention/heavy_ad_features.h" #include "components/page_load_metrics/browser/ads_page_load_metrics_test_waiter.h" - #include "components/page_load_metrics/browser/observers/ad_metrics/ad_intervention_browser_test_utils.h" -@@ -1499,7 +1504,7 @@ class AdsPageLoadMetricsObserverResourceBrowserTest + #include "components/page_load_metrics/browser/features.h" +@@ -1513,7 +1518,7 @@ class AdsPageLoadMetricsObserverResourceBrowserTest {heavy_ad_intervention::features::kHeavyAdIntervention, {}}, {heavy_ad_intervention::features::kHeavyAdPrivacyMitigations, {{"host-threshold", "3"}}}}, @@ -3598,8 +3597,8 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU "//chrome/common/pref_names.h", + "//components/adblock/core/common/adblock_prefs.cc", "//components/autofill/core/common/autofill_prefs.h", + "//components/bookmarks/common/bookmark_pref_names.h", "//components/commerce/core/pref_names.h", - "//components/dom_distiller/core/pref_names.h", diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc --- a/chrome/browser/prefs/chrome_pref_service_factory.cc +++ b/chrome/browser/prefs/chrome_pref_service_factory.cc @@ -3649,7 +3648,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" -@@ -230,6 +234,15 @@ +@@ -242,6 +246,15 @@ #include "chrome/browser/webid/federated_identity_permission_context_factory.h" #include "chrome/common/buildflags.h" #include "chrome/common/chrome_features.h" @@ -3665,7 +3664,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "components/autofill/content/browser/autofill_log_router_factory.h" #include "components/breadcrumbs/core/breadcrumbs_status.h" #include "components/captive_portal/core/buildflags.h" -@@ -874,6 +887,15 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -916,6 +929,15 @@ void ChromeBrowserMainExtraPartsProfiles:: // Makes manual testing possible. FakeSmartCardDeviceServiceFactory::GetInstance(); #endif @@ -3684,7 +3683,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc diff --git a/chrome/browser/profiles/profile_keyed_service_browsertest.cc b/chrome/browser/profiles/profile_keyed_service_browsertest.cc --- a/chrome/browser/profiles/profile_keyed_service_browsertest.cc +++ b/chrome/browser/profiles/profile_keyed_service_browsertest.cc -@@ -278,6 +278,17 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, +@@ -277,6 +277,17 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, "PermissionsUpdaterShutdownFactory", "PluginInfoHostImpl", "TurnSyncOnHelperShutdownNotifier", @@ -3702,7 +3701,7 @@ diff --git a/chrome/browser/profiles/profile_keyed_service_browsertest.cc b/chro }; // clang-format on -@@ -829,6 +840,13 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceGuestBrowserTest, +@@ -852,6 +863,13 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceGuestBrowserTest, "ZeroSuggestCacheServiceFactory", #endif // !BUILDFLAG(IS_CHROMEOS) @@ -3727,24 +3726,24 @@ diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD. +# This source code is a part of eyeo Chromium SDK. +# Use of this source code is governed by the GPLv3 that can be found in the components/adblock/LICENSE file. - import("//build/config/chromeos/ui_mode.gni") import("//chrome/browser/buildflags.gni") -@@ -270,6 +273,7 @@ group("dev_ui_resources") { + import("//chrome/common/features.gni") +@@ -291,6 +294,7 @@ group("dev_ui_resources") { "predictors:resources", "privacy_sandbox/internals:resources", "usb_internals:resources", + "//components/adblock/content/resources/adblock_internals:resources", "//components/commerce/core/internals/resources", + "//components/data_sharing/data_sharing_internals/resources", "//components/download/resources/download_internals:resources", - "//components/history_clusters/history_clusters_internals/resources", -@@ -335,6 +339,7 @@ repack("dev_ui_paks") { +@@ -358,6 +362,7 @@ repack("dev_ui_paks") { "$root_gen_dir/chrome/predictors_resources.pak", "$root_gen_dir/chrome/privacy_sandbox_internals_resources.pak", "$root_gen_dir/chrome/usb_internals_resources.pak", + "$root_gen_dir/components/adblock_internals_resources.pak", "$root_gen_dir/components/commerce_internals_resources.pak", + "$root_gen_dir/components/data_sharing_internals_resources.pak", "$root_gen_dir/components/dev_ui_components_resources.pak", - "$root_gen_dir/components/download_internals_resources.pak", diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc @@ -3759,7 +3758,7 @@ diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/ #include "components/safe_browsing/content/browser/safe_browsing_blocking_page.h" -@@ -70,6 +74,7 @@ +@@ -68,6 +72,7 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" @@ -3767,7 +3766,7 @@ diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/ #include "components/enterprise/connectors/core/common.h" #include "components/enterprise/connectors/core/connectors_prefs.h" #include "components/google/core/common/google_util.h" -@@ -682,7 +687,7 @@ class SafeBrowsingBlockingPageBrowserTest +@@ -358,7 +363,7 @@ class SafeBrowsingBlockingPageBrowserTest scoped_feature_list_.InitWithFeaturesAndParameters( {tag_and_attribute, add_warning_shown_timestamp_csbrrs, create_warning_shown_csbrrs, abusive_notification_revocation}, @@ -3776,32 +3775,6 @@ diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/ } SafeBrowsingBlockingPageBrowserTest( -diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc ---- a/chrome/browser/sessions/session_restore_browsertest.cc -+++ b/chrome/browser/sessions/session_restore_browsertest.cc -@@ -1,6 +1,10 @@ - // Copyright 2012 The Chromium Authors - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. -+// -+// This source code is a part of eyeo Chromium SDK. -+// Use of this source code is governed by the GPLv3 that can be found in the -+// components/adblock/LICENSE file. - - #ifdef UNSAFE_BUFFERS_BUILD - // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. -@@ -4445,8 +4449,10 @@ INSTANTIATE_TEST_SUITE_P( - SessionRestoreStaleSessionCookieDeletionTest, - testing::Bool()); - -+// Disabled as it's flaky, see: https://issues.chromium.org/issues/348923077 -+// See also: https://eyeo.atlassian.net/browse/DPD-2773 - IN_PROC_BROWSER_TEST_P(SessionRestoreStaleSessionCookieDeletionTest, -- CookieStorage) { -+ DISABLED_CookieStorage) { - GURL open_page = https_server()->GetURL("a.test", "/empty.html"); - GURL other_page = https_server()->GetURL("b.test", "/empty.html"); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), open_page)); diff --git a/chrome/browser/subresource_filter/subresource_filter_browser_test_harness.cc b/chrome/browser/subresource_filter/subresource_filter_browser_test_harness.cc --- a/chrome/browser/subresource_filter/subresource_filter_browser_test_harness.cc +++ b/chrome/browser/subresource_filter/subresource_filter_browser_test_harness.cc @@ -3847,7 +3820,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn import("//build/config/buildflags_paint_preview.gni") import("//build/config/compiler/compiler.gni") -@@ -432,6 +435,7 @@ static_library("ui") { +@@ -423,6 +426,7 @@ static_library("ui") { "//chrome/services/media_gallery_util/public/mojom", "//components/access_code_cast/common:metrics", "//components/account_id", @@ -3906,7 +3879,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "chrome/browser/ui/tab_helpers.h" -@@ -105,6 +109,8 @@ +@@ -102,6 +106,8 @@ #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_isolated_world_ids.h" #include "chrome/common/chrome_switches.h" @@ -3915,7 +3888,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "components/autofill/content/browser/content_autofill_client.h" #include "components/autofill/content/browser/content_autofill_driver_factory.h" #include "components/autofill/core/browser/foundations/browser_autofill_manager.h" -@@ -336,6 +342,12 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -343,6 +349,12 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { optimization_guide_decider); } } @@ -3928,7 +3901,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc autofill::AutofillClientProvider& autofill_client_provider = autofill::AutofillClientProviderFactory::GetForProfile(profile); autofill_client_provider.CreateClientForWebContents(web_contents); -@@ -366,6 +378,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -380,6 +392,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ip_protection::IpProtectionStatus::CreateForWebContents(web_contents); } #endif // BUILDFLAG(IS_ANDROID) @@ -3949,15 +3922,15 @@ diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni import("//ash/ambient/resources/resources.gni") import("//build/config/chrome_build.gni") -@@ -115,6 +118,7 @@ template("chrome_extra_paks") { - "$root_gen_dir/chrome/data_sharing_internals_resources.pak", +@@ -124,6 +127,7 @@ template("chrome_extra_paks") { + "$root_gen_dir/chrome/common_resources.pak", "$root_gen_dir/chrome/saved_tab_groups_unsupported_resources.pak", "$root_gen_dir/chrome/segmentation_internals_resources.pak", + "$root_gen_dir/components/adblock/core/resources/adblock_resources.pak", "$root_gen_dir/components/autofill/core/browser/geo/autofill_address_rewriter_resources.pak", "$root_gen_dir/components/autofill_and_password_manager_internals_resources.pak", "$root_gen_dir/components/chrome_urls_resources.pak", -@@ -150,6 +154,7 @@ template("chrome_extra_paks") { +@@ -159,6 +163,7 @@ template("chrome_extra_paks") { "//chrome/browser/resources:resources", "//chrome/browser/resources/saved_tab_groups_unsupported:resources", "//chrome/common:resources", @@ -3991,7 +3964,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn import("//build/cipd/cipd.gni") import("//build/config/buildflags_paint_preview.gni") -@@ -1641,6 +1644,7 @@ if (is_android) { +@@ -1766,6 +1769,7 @@ if (is_android) { "//chrome/test/data/webui:browser_tests", "//chrome/test/data/webui:interactive_ui_tests", "//chrome/test/data/webui:resources", @@ -3999,7 +3972,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/autofill/content/browser:test_support", "//components/autofill/content/renderer:test_support", "//components/autofill/core/common:common", -@@ -2231,6 +2235,7 @@ if (!is_android) { +@@ -2388,6 +2392,7 @@ if (!is_android) { "//chrome/test/media_router/access_code_cast:access_code_cast_integration_base", "//chrome/test/payments:test_support", "//chrome/test/supervised_user:test_support", @@ -4007,7 +3980,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/affiliations/core/browser:affiliation_proto", "//components/affiliations/core/browser:test_support", "//components/autofill/content/browser:autofill_shared_storage_proto", -@@ -2734,6 +2739,7 @@ if (!is_android) { +@@ -2891,6 +2896,7 @@ if (!is_android) { "//chrome/renderer/resources/extensions/", "//chrome/test/data/cart/", "//components/test/data/ad_tagging/", @@ -4015,8 +3988,8 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/test/data/ads_observer/", "//components/test/data/autofill/", "//components/test/data/custom_handlers", -@@ -2822,6 +2828,9 @@ if (!is_android) { - "../browser/accessibility/interstitial_accessibility_browsertest.cc", +@@ -2980,6 +2986,9 @@ if (!is_android) { + "../browser/accessibility/live_translate_controller_browsertest.cc", "../browser/accessibility/page_colors_browsertest.cc", "../browser/accessibility/phrase_segmentation/dependency_parser_model_loader_browsertest.cc", + "../browser/adblock/test/adblock_frame_hierarchy_builder_browsertest.cc", @@ -4025,7 +3998,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "../browser/ai/ai_data_keyed_service_browsertest.cc", "../browser/attribution_reporting/chrome_attribution_browsertest.cc", "../browser/autocomplete/autocomplete_browsertest.cc", -@@ -4374,6 +4383,7 @@ if (!is_android) { +@@ -4531,6 +4540,7 @@ if (!is_android) { ] } @@ -4033,7 +4006,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn if (is_chromeos) { deps += [ "//chromeos/ash/components/network/portal_detector:test_support" ] -@@ -5856,6 +5866,7 @@ test("unit_tests") { +@@ -6049,6 +6059,7 @@ test("unit_tests") { sources = [ # All unittests in browser, common, renderer and service. "../browser/about_flags_unittest.cc", @@ -4041,7 +4014,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "../browser/after_startup_task_utils_unittest.cc", "../browser/apps/icon_standardizer_unittest.cc", "../browser/apps/user_type_filter_unittest.cc", -@@ -6515,6 +6526,8 @@ test("unit_tests") { +@@ -6745,6 +6756,8 @@ test("unit_tests") { "//chrome/common/themes:unit_tests", "//chrome/services/file_util:unit_tests", "//components/account_id", @@ -4050,7 +4023,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/affiliations/core/browser:test_support", "//components/assist_ranker/proto", "//components/autofill/content/browser:test_support", -@@ -10319,6 +10332,7 @@ if (!is_android) { +@@ -10580,6 +10593,7 @@ if (!is_android) { "//chrome/browser:test_support_ui", "//chrome/browser/ui/exclusive_access", "//chrome/browser/ui/views/side_panel", @@ -4072,7 +4045,7 @@ diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_p #include "chrome/test/base/in_process_browser_test.h" #include -@@ -156,6 +160,10 @@ +@@ -155,6 +159,10 @@ #include "ui/views/widget/widget.h" #endif @@ -4083,7 +4056,7 @@ diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_p namespace { #if BUILDFLAG(IS_CHROMEOS) -@@ -615,8 +623,22 @@ void InProcessBrowserTest::CreatedBrowserMainParts( +@@ -595,8 +603,22 @@ void InProcessBrowserTest::CreatedBrowserMainParts( void InProcessBrowserTest::SelectFirstBrowser() { const BrowserList* browser_list = BrowserList::GetInstance(); diff --git a/build/cromite_patches/eyeo-133.0.6943.49-extension_api.patch b/build/cromite_patches/eyeo-133.0.6943.49-extension_api.patch index 86b3ae2e4dbf60b609dd21cf83f44ca7dd17ec94..2f579b5aee38aa776b72498e2ef2b5220845fc73 100644 --- a/build/cromite_patches/eyeo-133.0.6943.49-extension_api.patch +++ b/build/cromite_patches/eyeo-133.0.6943.49-extension_api.patch @@ -72,7 +72,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn -@@ -729,6 +729,17 @@ source_set("extensions") { +@@ -779,6 +779,17 @@ source_set("extensions") { ] } @@ -103,7 +103,7 @@ diff --git a/chrome/browser/extensions/api/BUILD.gn b/chrome/browser/extensions/ import("//chrome/common/extensions/api/api_sources.gni") import("//chrome/common/features.gni") -@@ -133,6 +136,7 @@ function_registration("api_registration") { +@@ -138,6 +141,7 @@ function_registration("api_registration") { # include generated headers from these targets. # TODO(brettw) this should be made unnecessary if possible. "//chrome/common/extensions/api", @@ -2136,38 +2136,39 @@ diff --git a/chrome/browser/extensions/api/api_browser_context_keyed_service_fac +// Use of this source code is governed by the GPLv3 that can be found in the +// components/adblock/LICENSE file. - #include "chrome/browser/extensions/api/cookies/cookies_api.h" - #include "chrome/browser/extensions/api/developer_private/developer_private_api.h" -@@ -15,11 +19,13 @@ + #include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h" + #include "chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.h" +@@ -19,12 +23,14 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h" +#include "chrome/browser/extensions/api/adblock_private/adblock_private_api.h" #include "chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h" #include "chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h" - #include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h" - #include "chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.h" // nogncheck #include "chrome/browser/extensions/api/braille_display_private/braille_display_private_api.h" -+#include "chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.h" + #include "chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_event_router.h" #include "chrome/browser/extensions/api/font_settings/font_settings_api.h" - #include "chrome/browser/extensions/api/history/history_api.h" #include "chrome/browser/extensions/api/identity/identity_api.h" -@@ -83,6 +89,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { ++#include "chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.h" + #include "chrome/browser/extensions/api/image_writer_private/operation_manager.h" + #include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h" + #include "chrome/browser/extensions/api/messaging/incognito_connectability.h" // nogncheck +@@ -88,6 +94,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { #if BUILDFLAG(ENABLE_EXTENSIONS) extensions::ActivityLogAPI::GetFactoryInstance(); + extensions::AdblockPrivateAPI::GetFactoryInstance(); extensions::AutofillPrivateEventRouterFactory::GetInstance(); extensions::BluetoothLowEnergyAPI::GetFactoryInstance(); - extensions::BookmarksAPI::GetFactoryInstance(); -@@ -93,6 +100,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { - #if BUILDFLAG(IS_CHROMEOS) + extensions::BookmarkManagerPrivateAPI::GetFactoryInstance(); +@@ -96,6 +103,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { extensions::DocumentScanAPIHandler::GetFactoryInstance(); #endif + extensions::EnterpriseReportingPrivateEventRouterFactory::GetInstance(); + extensions::EyeoFilteringPrivateAPI::GetFactoryInstance(); extensions::FontSettingsAPI::GetFactoryInstance(); - extensions::HistoryAPI::GetFactoryInstance(); extensions::IdentityAPI::GetFactoryInstance(); + extensions::IncognitoConnectability::EnsureFactoryBuilt(); diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc b/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc new file mode 100644 --- /dev/null @@ -3579,9 +3580,9 @@ diff --git a/chrome/browser/extensions/extension_function_registration_test.cc b +// Use of this source code is governed by the GPLv3 that can be found in the +// components/adblock/LICENSE file. + #include "base/containers/contains.h" #include "base/one_shot_event.h" - #include "chrome/browser/extensions/extension_browsertest.h" -@@ -57,6 +61,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionFunctionRegistrationTest, +@@ -58,6 +62,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionFunctionRegistrationTest, base::CompareCase::SENSITIVE)) { continue; } @@ -3608,9 +3609,9 @@ diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/ext // This features file defines extension APIs implemented under src/chrome. // See chrome/common/extensions/api/_features.md to understand this file, as -@@ -65,6 +69,16 @@ +@@ -70,6 +74,16 @@ "dependencies": ["permission:experimentalAiData"], - "channel": "dev" + "channel": "stable" }, + "adblockPrivate": [{ + "dependencies": ["permission:adblockPrivate"], @@ -3625,7 +3626,7 @@ diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/ext "app": { "blocklist": [ "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice -@@ -526,6 +540,14 @@ +@@ -534,6 +548,14 @@ "channel": "stable", "contexts": [] }, @@ -3654,8 +3655,8 @@ diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/com // This features file defines permissions for extension APIs implemented // under src/chrome. -@@ -62,6 +66,13 @@ - "extension" +@@ -56,6 +60,13 @@ + "5107DE9024C329EEA9C9A72D94C16723790C6422" // Apps Developer Tool Dev. ] }, + "adblockPrivate": { @@ -3668,8 +3669,8 @@ diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/com "autofillPrivate": { "channel": "trunk", "extension_types": ["extension", "platform_app"], -@@ -376,6 +387,13 @@ - "channel": "beta", +@@ -375,6 +386,13 @@ + "channel": "stable", "command_line_switch": "extension-ai-data-collection" }, + "eyeoFilteringPrivate": { @@ -3880,9 +3881,9 @@ diff --git a/chrome/common/extensions/api/api_sources.gni b/chrome/common/extens import("//build/config/features.gni") import("//chrome/common/features.gni") -@@ -90,6 +93,9 @@ if (enable_extensions) { +@@ -92,6 +95,9 @@ if (enable_extensions) { + "webrtc_logging_private.idl", - "webstore_private.json", "windows.json", + + "adblock_private.idl", @@ -4125,7 +4126,7 @@ diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/ch {APIPermissionID::kBackground, "background", APIPermissionInfo::kFlagDoesNotRequireManagedSessionFullLoginWarning}, {APIPermissionID::kDeclarativeContent, "declarativeContent"}, -@@ -87,6 +93,8 @@ constexpr APIPermissionInfo::InitInfo permissions_to_register[] = { +@@ -86,6 +92,8 @@ constexpr APIPermissionInfo::InitInfo permissions_to_register[] = { {APIPermissionID::kEnterpriseNetworkingAttributes, "enterprise.networkingAttributes", APIPermissionInfo::kFlagDoesNotRequireManagedSessionFullLoginWarning}, @@ -4148,7 +4149,7 @@ diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/c #include "extensions/common/permissions/permission_set.h" -@@ -874,6 +878,10 @@ TEST(PermissionsTest, PermissionMessages) { +@@ -875,6 +879,10 @@ TEST(PermissionsTest, PermissionMessages) { skip.insert(APIPermissionID::kSystemLog); skip.insert(APIPermissionID::kOdfsConfigPrivate); @@ -4162,7 +4163,7 @@ diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/c diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -3762,6 +3762,20 @@ if (!is_android) { +@@ -3928,6 +3928,20 @@ if (!is_android) { ] } @@ -5507,10 +5508,10 @@ diff --git a/extensions/common/mojom/api_permission_id.mojom b/extensions/common module extensions.mojom; -@@ -286,6 +290,8 @@ enum APIPermissionID { - kAILanguageModelOriginTrial = 259, +@@ -287,6 +291,8 @@ enum APIPermissionID { kExperimentalAiData = 260, kOmniboxDirectInput = 261, + kExperimentalActor = 262, + kAdblockPrivate = 999, + kEyeoFilteringPrivate = 1000, diff --git a/build/cromite_patches/kill-Auth.patch b/build/cromite_patches/kill-Auth.patch index 39d9ea1c78057a729bd92a82b01ff8f7bf45ef01..62f18a0a1a390b596c4e26ed4065b83a4c9d70f3 100644 --- a/build/cromite_patches/kill-Auth.patch +++ b/build/cromite_patches/kill-Auth.patch @@ -4,8 +4,8 @@ Subject: kill Auth License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../signin/SystemAccountManagerDelegate.java | 65 +------------------ - 1 file changed, 3 insertions(+), 62 deletions(-) + .../signin/SystemAccountManagerDelegate.java | 78 +------------------ + 1 file changed, 4 insertions(+), 74 deletions(-) diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java --- a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java @@ -20,7 +20,7 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.Callback; import org.chromium.base.ContextUtils; -@@ -92,18 +89,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { +@@ -94,18 +91,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { @Override public Account[] getAccountsSynchronous() throws AccountManagerDelegateException { @@ -39,10 +39,11 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s // Don't report any accounts if we don't have permission. // TODO(crbug.com/40942462): Throw an exception if permission was denied. return new Account[] {}; -@@ -115,31 +100,12 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { +@@ -116,43 +101,13 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { + public AccessTokenData getAccessToken(Account account, String authTokenScope) throws AuthException { ThreadUtils.assertOnBackgroundThread(); - assert AccountUtils.GOOGLE_ACCOUNT_TYPE.equals(account.type); +- assert AccountUtils.GOOGLE_ACCOUNT_TYPE.equals(account.type); - try { - return new AccessTokenData( - GoogleAuthUtil.getTokenWithNotification( @@ -51,14 +52,19 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s - // This case includes a UserRecoverableNotifiedException, but most clients will have - // their own retry mechanism anyway. - throw new AuthException( -- AuthException.NONTRANSIENT, - "Error while getting token for scope '" + authTokenScope + "'", -- ex); +- ex, +- new GoogleServiceAuthError( +- GoogleServiceAuthErrorState.INVALID_GAIA_CREDENTIALS)); - } catch (IOException ex) { -- throw new AuthException(AuthException.TRANSIENT, ex); +- throw new AuthException( +- "Error while getting token for scope '" + authTokenScope + "'", +- ex, +- new GoogleServiceAuthError(GoogleServiceAuthErrorState.CONNECTION_FAILED)); - } + throw new AuthException(AuthException.NONTRANSIENT, -+ "Error while getting token for scope '" + authTokenScope + "'"); ++ "Error while getting token for scope '" + authTokenScope + "'", ++ new IOException()); } @Override @@ -66,14 +72,21 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s - try { - GoogleAuthUtil.clearToken(ContextUtils.getApplicationContext(), authToken); - } catch (GoogleAuthException ex) { -- throw new AuthException(AuthException.NONTRANSIENT, ex); +- throw new AuthException( +- "Error while invalidating access token", +- ex, +- new GoogleServiceAuthError( +- GoogleServiceAuthErrorState.INVALID_GAIA_CREDENTIALS)); - } catch (IOException ex) { -- throw new AuthException(AuthException.TRANSIENT, ex); +- throw new AuthException( +- "Error while invalidating access token", +- ex, +- new GoogleServiceAuthError(GoogleServiceAuthErrorState.CONNECTION_FAILED)); - } } protected boolean hasFeatures(Account account, String[] features) { -@@ -171,24 +137,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { +@@ -184,24 +139,6 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { @SuppressLint("MissingPermission") @Override public void createAddAccountIntent(Callback<@Nullable Intent> callback) { @@ -98,7 +111,7 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s } // No permission is needed on 23+ and Chrome always has MANAGE_ACCOUNTS permission on lower APIs -@@ -222,14 +170,7 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { +@@ -235,14 +172,7 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { @Override public @Nullable GaiaId getAccountGaiaId(String accountEmail) { diff --git a/build/cromite_patches/kill-Location-fall-back-to-system.patch b/build/cromite_patches/kill-Location-fall-back-to-system.patch index 49994eb8204c956caf32fb651ff0429aadda9610..36b31f749999e85e2255c8f2361cc9ec13063f8b 100644 --- a/build/cromite_patches/kill-Location-fall-back-to-system.patch +++ b/build/cromite_patches/kill-Location-fall-back-to-system.patch @@ -48,21 +48,21 @@ diff --git a/services/device/geolocation/android/java/src/org/chromium/device/ge diff --git a/services/device/public/cpp/device_features.cc b/services/device/public/cpp/device_features.cc --- a/services/device/public/cpp/device_features.cc +++ b/services/device/public/cpp/device_features.cc -@@ -64,6 +64,7 @@ const base::FeatureParam kWinSystemLocationPermissionPollingParam{ - BASE_FEATURE(kLocationProviderManager, +@@ -76,6 +76,7 @@ BASE_FEATURE(kLocationProviderManager, "LocationProviderManager", base::FEATURE_DISABLED_BY_DEFAULT); + #endif // BUILDFLAG(IS_MAC) +SET_CROMITE_FEATURE_DISABLED(kLocationProviderManager); #if BUILDFLAG(IS_CHROMEOS) // Enables crash key logging for USB device open operations on ChromeOS. See -@@ -105,7 +106,7 @@ const base::FeatureParam::Option +@@ -124,7 +125,7 @@ const base::FeatureParam const base::FeatureParam kLocationProviderManagerParam{ &kLocationProviderManager, "LocationProviderManagerMode", - device::mojom::LocationProviderManagerMode::kNetworkOnly, + device::mojom::LocationProviderManagerMode::kPlatformOnly, &location_provider_manager_mode_options}; + #endif // BUILDFLAG(IS_MAC) - bool IsOsLevelGeolocationPermissionSupportEnabled() { -- diff --git a/build/cromite_patches/kill-Vision.patch b/build/cromite_patches/kill-Vision.patch index bd059133b2dc52b51d7f139b15a4bdd1d00c7015..de2be22b78d7300aafdb59af4b217f1b750b17bd 100644 --- a/build/cromite_patches/kill-Vision.patch +++ b/build/cromite_patches/kill-Vision.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -317,8 +317,6 @@ if (current_toolchain == default_toolchain) { +@@ -324,8 +324,6 @@ if (_is_default_toolchain) { "$google_play_services_package:google_play_services_gcm_java", "$google_play_services_package:google_play_services_iid_java", "$google_play_services_package:google_play_services_tasks_java", @@ -23,7 +23,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn - "$google_play_services_package:google_play_services_vision_java", "//base:content_uri_utils_java", "//base:service_loader_java", - "//base/version_info/android:version_constants_java", + "//base:task_executor_java", diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn --- a/services/shape_detection/BUILD.gn +++ b/services/shape_detection/BUILD.gn diff --git a/build/cromite_patches/sharing-hub-always-use-visible-URL.patch b/build/cromite_patches/sharing-hub-always-use-visible-URL.patch index 2912beb0a70338b18b5dc9070d244d4d3f4d0d69..83bfab37c5a1d6ed8f24f68a38920c98e9c1a0ab 100644 --- a/build/cromite_patches/sharing-hub-always-use-visible-URL.patch +++ b/build/cromite_patches/sharing-hub-always-use-visible-URL.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java -@@ -230,14 +230,8 @@ public class ShareDelegateImpl implements ShareDelegate { +@@ -289,14 +289,8 @@ public class ShareDelegateImpl implements ShareDelegate { @VisibleForTesting static boolean shouldFetchCanonicalUrl(final Tab currentTab) { diff --git a/build/cromite_patches/ungoogled-chromium-Disable-Network-Time-Tracker.patch b/build/cromite_patches/ungoogled-chromium-Disable-Network-Time-Tracker.patch index 4c362e594447a85ef147a12825e04c9f02bcc685..5da54455cb97ac94e8267ec12943ed30c835aa9a 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-Network-Time-Tracker.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-Network-Time-Tracker.patch @@ -23,7 +23,7 @@ diff --git a/components/network_time/network_time_tracker.cc b/components/networ namespace { -@@ -282,7 +283,7 @@ void NetworkTimeTracker::UpdateNetworkTime(base::Time network_time, +@@ -279,7 +280,7 @@ void NetworkTimeTracker::UpdateNetworkTime(base::Time network_time, } bool NetworkTimeTracker::AreTimeFetchesEnabled() const { diff --git a/build/cromite_patches/ungoogled-chromium-Disable-intranet-detector.patch b/build/cromite_patches/ungoogled-chromium-Disable-intranet-detector.patch index c9ffe0c84d32e6cafeb9730dff391f61a0606254..8aa3504cfec0e6cc8345ba46924f0b56afbcc35c 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-intranet-detector.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-intranet-detector.patch @@ -14,7 +14,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/intranet_redirect_detector.cc b/chrome/browser/intranet_redirect_detector.cc --- a/chrome/browser/intranet_redirect_detector.cc +++ b/chrome/browser/intranet_redirect_detector.cc -@@ -118,9 +118,7 @@ void IntranetRedirectDetector::FinishSleep() { +@@ -117,9 +117,7 @@ void IntranetRedirectDetector::FinishSleep() { simple_loaders_.clear(); resulting_origins_.clear(); diff --git a/build/cromite_patches/ungoogled-chromium-Disable-profile-avatar.patch b/build/cromite_patches/ungoogled-chromium-Disable-profile-avatar.patch index 82648b0ad6f29109c3d58d0d5ffb64887a5550a9..bd948cdd2b0f25c05cf3d3d6c1b3141faeaa1b6e 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-profile-avatar.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-profile-avatar.patch @@ -14,8 +14,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -1295,8 +1295,6 @@ static_library("browser") { - "profiles/keep_alive/scoped_profile_keep_alive.h", +@@ -1317,8 +1317,6 @@ static_library("browser") { + "profiles/incognito_mode_policy_handler.h", "profiles/off_the_record_profile_impl.cc", "profiles/off_the_record_profile_impl.h", - "profiles/profile_avatar_downloader.cc", @@ -26,7 +26,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc -@@ -374,12 +374,6 @@ gfx::Image ProfileAttributesEntry::GetAvatarIcon( +@@ -372,12 +372,6 @@ gfx::Image ProfileAttributesEntry::GetAvatarIcon( int size_for_placeholder_avatar, bool use_high_res_file, const PlaceholderAvatarIconParams& icon_params) const { diff --git a/build/cromite_patches/ungoogled-chromium-Disable-translate-integration.patch b/build/cromite_patches/ungoogled-chromium-Disable-translate-integration.patch index d1023b7ef3c441e31a2c07f5c797a4822634af17..c18467a9ba6332c9ddcbab2a6115bbe081a0c5c5 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-translate-integration.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-translate-integration.patch @@ -81,7 +81,7 @@ diff --git a/chrome/browser/language/android/java/res/xml/languages_preferences. diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java -@@ -49,12 +49,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -54,12 +54,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment static final String APP_LANGUAGE_PREFERENCE_KEY = "app_language_preference"; static final String PREFERRED_LANGUAGES_KEY = "preferred_languages"; static final String CONTENT_LANGUAGES_KEY = "content_languages_preference"; @@ -94,7 +94,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse private static final String TAG = "LanguageSettings"; -@@ -102,35 +96,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -107,35 +101,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment ContentLanguagesPreference mLanguageListPref = (ContentLanguagesPreference) findPreference(PREFERRED_LANGUAGES_KEY); mLanguageListPref.initialize(this, getProfile(), getPrefService()); @@ -130,7 +130,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse } /** -@@ -145,8 +110,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -150,8 +115,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment ContentLanguagesPreference mLanguageListPref = (ContentLanguagesPreference) findPreference(CONTENT_LANGUAGES_KEY); mLanguageListPref.initialize(this, getProfile(), getPrefService()); @@ -139,7 +139,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse } /** Setup the App Language section with a title and preference to choose the app language. */ -@@ -177,7 +140,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -182,7 +145,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment * @param contentLanguagesPreference ContentLanguagesPreference reference to update about state * changes. */ @@ -148,7 +148,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse // Setup expandable advanced settings section. PreferenceCategory translationAdvancedSection = (PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION); -@@ -255,7 +218,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -260,7 +223,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED); } }); @@ -157,7 +157,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse @Override public void onStart() { -@@ -294,12 +257,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment +@@ -300,12 +263,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment // Set the default target language to match the new app language. TranslateBridge.setDefaultTargetLanguage(getProfile(), code); } else if (requestCode == REQUEST_CODE_CHANGE_TARGET_LANGUAGE) { @@ -173,7 +173,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2096,9 +2096,6 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2115,9 +2115,6 @@ Your Google account may have other forms of browsing history like searches and a Let websites know the languages you speak. They’ll show content in those languages, when possible. @@ -186,7 +186,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc --- a/components/translate/core/browser/translate_manager.cc +++ b/components/translate/core/browser/translate_manager.cc -@@ -837,8 +837,9 @@ void TranslateManager::FilterIsTranslatePossible( +@@ -821,8 +821,9 @@ void TranslateManager::FilterIsTranslatePossible( TriggerDecision::kDisabledOffline); } diff --git a/build/cromite_patches/ungoogled-chromium-Disable-untraceable-URLs.patch b/build/cromite_patches/ungoogled-chromium-Disable-untraceable-URLs.patch index 46d8da58dc87cc9271f03ded31cb5a1cb9748560..2c9cdf5d778ff03bc4a3055cf80aa84f53d72a53 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-untraceable-URLs.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-untraceable-URLs.patch @@ -54,7 +54,7 @@ diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc diff --git a/rlz/lib/lib_values.cc b/rlz/lib/lib_values.cc --- a/rlz/lib/lib_values.cc +++ b/rlz/lib/lib_values.cc -@@ -40,7 +40,6 @@ const char kSetDccResponseVariable[] = "set_dcc"; +@@ -45,7 +45,6 @@ const char kSetDccResponseVariable[] = "set_dcc"; // const char kFinancialPingPath[] = "/tools/pso/ping"; diff --git a/build/cromite_patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch b/build/cromite_patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch index ce8ec8604f098aae3850cdecf940d223052f175f..b2714161089803a02e40c1f583e2cdc617841d68 100644 --- a/build/cromite_patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch +++ b/build/cromite_patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -113,7 +113,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -130,7 +130,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterStringPref(prefs::kWebRTCUDPPortRange, std::string()); registry->RegisterBooleanPref(prefs::kWebRtcEventLogCollectionAllowed, false); registry->RegisterListPref(prefs::kWebRtcLocalIpsAllowedUrls); diff --git a/build/cromite_patches/ungoogled-chromium-no-special-hosts-domains.patch b/build/cromite_patches/ungoogled-chromium-no-special-hosts-domains.patch index 288d2bc9310c4d1c81d3606c456bac20a583149e..641979da36a186febd6f7c2dae569236ba3c3346 100644 --- a/build/cromite_patches/ungoogled-chromium-no-special-hosts-domains.patch +++ b/build/cromite_patches/ungoogled-chromium-no-special-hosts-domains.patch @@ -12,7 +12,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/metrics/uma_session_stats.cc | 10 - chrome/browser/browser_process_impl.cc | 1 - chrome/browser/chrome_browser_main.cc | 10 - - .../browser/chrome_content_browser_client.cc | 32 +- + .../browser/chrome_content_browser_client.cc | 29 +- + ...ent_browser_client_navigation_throttles.cc | 2 - .../domain_reliability/service_factory.cc | 33 +- chrome/browser/extensions/BUILD.gn | 1 - chrome/browser/feedback/BUILD.gn | 1 - @@ -22,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../long_screenshots_tab_service.cc | 22 -- .../metrics/chrome_metrics_service_client.cc | 2 +- .../chrome_metrics_services_manager_client.cc | 5 +- - .../metrics/metrics_reporting_state.cc | 72 +--- + .../metrics/metrics_reporting_state.cc | 73 +--- .../net/system_network_context_manager.cc | 1 - .../one_google_bar_loader_impl.cc | 3 +- .../new_tab_page/promos/promo_service.cc | 6 +- @@ -37,7 +38,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/ui/BUILD.gn | 1 - chrome/browser/ui/android/omnibox/BUILD.gn | 2 - .../omnibox/LocationBarCoordinator.java | 2 - - .../browser/omnibox/LocationBarMediator.java | 25 -- + .../browser/omnibox/LocationBarMediator.java | 23 -- .../ui/webui/new_tab_page/new_tab_page_ui.cc | 6 - .../upgrade_detector/upgrade_detector_impl.cc | 6 - chrome/common/BUILD.gn | 2 - @@ -65,25 +66,25 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...gled-chromium-no-special-hosts-domains.inc | 1 + net/base/url_util.cc | 25 +- services/network/network_context.cc | 2 +- - 58 files changed, 52 insertions(+), 875 deletions(-) + 59 files changed, 52 insertions(+), 873 deletions(-) create mode 100644 cromite_flags/content/public/common/content_features_cc/ungoogled-chromium-no-special-hosts-domains.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -95,7 +95,6 @@ import org.chromium.chrome.browser.messages.MessageContainerObserver; - import org.chromium.chrome.browser.messages.MessagesResourceMapperInitializer; - import org.chromium.chrome.browser.metrics.UmaSessionStats; +@@ -99,7 +99,6 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; + import org.chromium.chrome.browser.multiwindow.MultiInstanceManager; + import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; -import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; import org.chromium.chrome.browser.omnibox.suggestions.action.OmniboxActionDelegateImpl; import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; -@@ -1154,10 +1153,8 @@ public class RootUiCoordinator - String url = - TemplateUrlServiceFactory.getForProfile(tab.getProfile()) - .getUrlForSearchQuery(query); -- String headers = GeolocationHeader.getGeoHeader(url, tab); +@@ -1168,10 +1167,8 @@ public class RootUiCoordinator + Profile profile = tab.getProfile(); + TemplateUrlService service = TemplateUrlServiceFactory.getForProfile(profile); + String url = service.getUrlForSearchQuery(query); +- String headers = GeolocationHeader.getGeoHeader(url, profile, service); LoadUrlParams loadUrlParams = new LoadUrlParams(url); - loadUrlParams.setVerbatimHeaders(headers); @@ -93,7 +94,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -896,10 +896,6 @@ static_library("browser") { +@@ -917,10 +917,6 @@ static_library("browser") { "page_info/privacy_policy_insights_service_factory.h", "page_load_metrics/observers/bookmark_bar_page_load_metrics_observer.cc", "page_load_metrics/observers/bookmark_bar_page_load_metrics_observer.h", @@ -104,7 +105,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "page_load_metrics/observers/core/amp_page_load_metrics_observer.cc", "page_load_metrics/observers/core/amp_page_load_metrics_observer.h", "page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc", -@@ -908,10 +904,6 @@ static_library("browser") { +@@ -929,10 +925,6 @@ static_library("browser") { "page_load_metrics/observers/document_write_page_load_metrics_observer.h", "page_load_metrics/observers/foreground_duration_ukm_observer.cc", "page_load_metrics/observers/foreground_duration_ukm_observer.h", @@ -115,7 +116,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "page_load_metrics/observers/histogram_suffixes.cc", "page_load_metrics/observers/histogram_suffixes.h", "page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.cc", -@@ -1563,8 +1555,6 @@ static_library("browser") { +@@ -1573,8 +1565,6 @@ static_library("browser") { "supervised_user/classify_url_navigation_throttle.h", "supervised_user/supervised_user_browser_utils.cc", "supervised_user/supervised_user_browser_utils.h", @@ -124,7 +125,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "supervised_user/supervised_user_interstitial_tab_closer.cc", "supervised_user/supervised_user_interstitial_tab_closer.h", "supervised_user/supervised_user_metrics_service_factory.cc", -@@ -1747,10 +1737,7 @@ static_library("browser") { +@@ -1766,10 +1756,7 @@ static_library("browser") { "//chrome/browser/content_settings:impl", "//chrome/browser/devtools", "//chrome/browser/favicon", @@ -135,14 +136,14 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "//chrome/browser/ip_protection", "//chrome/browser/media/webrtc", "//chrome/browser/navigation_predictor:impl", -@@ -1829,7 +1816,6 @@ static_library("browser") { +@@ -1866,7 +1853,6 @@ static_library("browser") { # New dependencies inside of //chrome/browser that generate header files # should be added to browser_generated_files. ":browser_public_dependencies", - "//chrome/browser/google", "//chrome/browser/headless", "//chrome/browser/profiles", - "//chrome/browser/resource_coordinator:tab_lifecycle_observer", + "//chrome/browser/ui/tabs:tab_enums", diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browser/android/metrics/uma_session_stats.cc --- a/chrome/browser/android/metrics/uma_session_stats.cc +++ b/chrome/browser/android/metrics/uma_session_stats.cc @@ -166,7 +167,7 @@ diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browse diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -1227,7 +1227,6 @@ BrowserProcessImpl::component_updater() { +@@ -1262,7 +1262,6 @@ BrowserProcessImpl::component_updater() { std::make_unique(); std::string brand; @@ -177,7 +178,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc -@@ -462,11 +462,6 @@ void ProcessSingletonNotificationCallbackImpl( +@@ -463,11 +463,6 @@ void ProcessSingletonNotificationCallbackImpl( StartupBrowserCreator::ProcessCommandLineAlreadyRunning( command_line, current_directory, startup_profile_path_info); @@ -189,7 +190,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows } #endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) -@@ -1717,11 +1712,6 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { +@@ -1707,11 +1702,6 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { upgrade_util::SaveLastModifiedTimeOfExe(); #endif @@ -204,7 +205,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -2979,7 +2979,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( +@@ -2912,7 +2912,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( switches::kForcePNaClSubzero, #endif switches::kForceUIDirection, @@ -212,17 +213,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch switches::kJavaScriptHarmony, switches::kEnableExperimentalWebAssemblyFeatures, embedder_support::kOriginTrialDisabledFeatures, -@@ -5358,9 +5357,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( - &throttles); - #endif - -- MaybeAddThrottle( -- SupervisedUserGoogleAuthNavigationThrottle::MaybeCreate(handle), -- &throttles); - - MaybeAddThrottle( - supervised_user::MaybeCreateClassifyUrlNavigationThrottleFor(handle), -@@ -5973,7 +5969,8 @@ GetClientDataHeader(content::FrameTreeNodeId frame_tree_node_id) { +@@ -5645,7 +5644,8 @@ GetClientDataHeader(content::FrameTreeNodeId frame_tree_node_id) { } #endif @@ -232,7 +223,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #if BUILDFLAG(IS_ANDROID) const std::string& client_data_header, #endif -@@ -6013,7 +6010,7 @@ std::unique_ptr CreateGoogleURLLoaderThrottle( +@@ -5685,7 +5685,7 @@ std::unique_ptr CreateGoogleURLLoaderThrottle( std::move(bound_session_request_throttled_handler), #endif std::move(dynamic_params)); @@ -241,7 +232,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch std::vector> ChromeContentBrowserClient::CreateURLLoaderThrottles( -@@ -6070,15 +6067,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles( +@@ -5742,15 +5742,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles( GetClientDataHeader(frame_tree_node_id); #endif @@ -257,9 +248,9 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch { auto* factory = ProtocolHandlerRegistryFactory::GetForBrowserContext(browser_context); -@@ -6133,20 +6121,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottlesForKeepAlive( - } - #endif +@@ -5795,20 +5786,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottlesForKeepAlive( + Profile* profile = Profile::FromBrowserContext(browser_context); + DCHECK(profile); -#if BUILDFLAG(IS_ANDROID) - auto [client_data_header, unused_is_custom_tab] = @@ -278,6 +269,18 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch return result; } +diff --git a/chrome/browser/chrome_content_browser_client_navigation_throttles.cc b/chrome/browser/chrome_content_browser_client_navigation_throttles.cc +--- a/chrome/browser/chrome_content_browser_client_navigation_throttles.cc ++++ b/chrome/browser/chrome_content_browser_client_navigation_throttles.cc +@@ -354,8 +354,6 @@ void CreateAndAddChromeThrottlesForNavigation( + extensions::WebViewGuest::MaybeCreateAndAddNavigationThrottle(registry); + #endif + +- SupervisedUserGoogleAuthNavigationThrottle::MaybeCreateAndAdd(registry); +- + supervised_user::MaybeCreateAndAddClassifyUrlNavigationThrottle(registry); + + if (auto* throttle_manager = diff --git a/chrome/browser/domain_reliability/service_factory.cc b/chrome/browser/domain_reliability/service_factory.cc --- a/chrome/browser/domain_reliability/service_factory.cc +++ b/chrome/browser/domain_reliability/service_factory.cc @@ -327,21 +330,21 @@ diff --git a/chrome/browser/domain_reliability/service_factory.cc b/chrome/brows diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn -@@ -284,7 +284,6 @@ source_set("extensions") { +@@ -447,7 +447,6 @@ source_set("extensions") { "//chrome/browser/extensions:cws_item_service_proto", "//chrome/browser/extensions/api:api_registration", "//chrome/browser/favicon", - "//chrome/browser/google", + "//chrome/browser/lifetime:termination_notification", "//chrome/browser/prefetch", "//chrome/browser/prefs", - "//chrome/browser/preloading:prefs", diff --git a/chrome/browser/feedback/BUILD.gn b/chrome/browser/feedback/BUILD.gn --- a/chrome/browser/feedback/BUILD.gn +++ b/chrome/browser/feedback/BUILD.gn -@@ -101,7 +101,6 @@ source_set("feedback_impl") { - "//chrome/browser/crash_upload_list", +@@ -102,7 +102,6 @@ source_set("feedback_impl") { "//chrome/browser/devtools", "//chrome/browser/extensions", + "//chrome/browser/first_party_sets", - "//chrome/browser/google", "//chrome/browser/profiles:profile", "//chrome/browser/sync", @@ -349,7 +352,7 @@ diff --git a/chrome/browser/feedback/BUILD.gn b/chrome/browser/feedback/BUILD.gn diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc --- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc -@@ -124,7 +124,6 @@ constexpr char kOsVersionTag[] = "OS VERSION"; +@@ -123,7 +123,6 @@ constexpr char kOsVersionTag[] = "OS VERSION"; #if BUILDFLAG(IS_WIN) constexpr char kUsbKeyboardDetected[] = "usb_keyboard_detected"; constexpr char kIsEnrolledToDomain[] = "enrolled_to_domain"; @@ -357,7 +360,7 @@ diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log #if BUILDFLAG(GOOGLE_CHROME_BRANDING) constexpr char kInstallResultCode[] = "install_result_code"; constexpr char kInstallLocation[] = "install_location"; -@@ -656,10 +655,6 @@ void ChromeInternalLogSource::PopulateEnrolledToDomain( +@@ -655,10 +654,6 @@ void ChromeInternalLogSource::PopulateEnrolledToDomain( void ChromeInternalLogSource::PopulateInstallerBrandCode( SystemLogsResponse* response) { @@ -371,7 +374,7 @@ diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log diff --git a/chrome/browser/first_run/first_run.cc b/chrome/browser/first_run/first_run.cc --- a/chrome/browser/first_run/first_run.cc +++ b/chrome/browser/first_run/first_run.cc -@@ -294,14 +294,6 @@ void SetupInitialPrefsFromInstallPrefs( +@@ -296,14 +296,6 @@ void SetupInitialPrefsFromInstallPrefs( // -- Platform-specific functions -- @@ -389,7 +392,7 @@ diff --git a/chrome/browser/first_run/first_run.cc b/chrome/browser/first_run/fi diff --git a/chrome/browser/google/BUILD.gn b/chrome/browser/google/BUILD.gn --- a/chrome/browser/google/BUILD.gn +++ b/chrome/browser/google/BUILD.gn -@@ -7,7 +7,7 @@ import("//build/config/chromeos/ui_mode.gni") +@@ -6,7 +6,7 @@ import("//build/config/chrome_build.gni") assert(!is_fuchsia, "Fuchsia shouldn't use anything in //chrome") @@ -398,7 +401,7 @@ diff --git a/chrome/browser/google/BUILD.gn b/chrome/browser/google/BUILD.gn sources = [ "google_brand.cc", "google_brand.h", -@@ -87,7 +87,7 @@ source_set("unit_tests") { +@@ -89,7 +89,7 @@ source_set("unit_tests") { sources = [ "google_update_settings_unittest.cc" ] deps = [ @@ -454,7 +457,7 @@ diff --git a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc b/c diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc -@@ -601,7 +601,7 @@ ChromeMetricsServiceClient::GetNetworkTimeTracker() { +@@ -606,7 +606,7 @@ ChromeMetricsServiceClient::GetNetworkTimeTracker() { } bool ChromeMetricsServiceClient::GetBrand(std::string* brand_code) { @@ -488,7 +491,7 @@ diff --git a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc b/ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/metrics/metrics_reporting_state.cc --- a/chrome/browser/metrics/metrics_reporting_state.cc +++ b/chrome/browser/metrics/metrics_reporting_state.cc -@@ -32,65 +32,6 @@ +@@ -32,66 +32,6 @@ #include "components/policy/core/common/features.h" #endif // BUILDFLAG(IS_ANDROID) @@ -537,7 +540,7 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ - UpdateMetricsPrefsOnPermissionChange(updated_pref, called_from); - - // Uses the current state of whether reporting is enabled to enable services. -- g_browser_process->GetMetricsServicesManager()->UpdateUploadPermissions(true); +- g_browser_process->GetMetricsServicesManager()->UpdateUploadPermissions(); - - if (to_update_pref == updated_pref) { - RecordMetricsReportingHistogramValue(updated_pref ? @@ -545,8 +548,9 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ - } else { - RecordMetricsReportingHistogramValue(METRICS_REPORTING_ERROR); - } -- if (!callback_fn.is_null()) +- if (!callback_fn.is_null()) { - std::move(callback_fn).Run(updated_pref); +- } -} - -} // namespace @@ -554,7 +558,7 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ void ChangeMetricsReportingState( bool enabled, ChangeMetricsReportingStateCalledFrom called_from) { -@@ -126,11 +67,6 @@ void ChangeMetricsReportingStateWithReply( +@@ -127,11 +67,6 @@ void ChangeMetricsReportingStateWithReply( return; } #endif @@ -566,7 +570,7 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ } void UpdateMetricsPrefsOnPermissionChange( -@@ -196,13 +132,7 @@ void UpdateMetricsPrefsOnPermissionChange( +@@ -197,13 +132,7 @@ void UpdateMetricsPrefsOnPermissionChange( crash_keys::ClearMetricsClientId(); } @@ -584,18 +588,18 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -848,7 +848,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( +@@ -863,7 +863,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( void SystemNetworkContextManager::ConfigureDefaultNetworkContextParams( network::mojom::NetworkContextParams* network_context_params) { variations::UpdateCorsExemptHeaderForVariations(network_context_params); - GoogleURLLoaderThrottle::UpdateCorsExemptHeader(network_context_params); - - network_context_params->enable_brotli = true; - + #if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) + request_header_integrity::RequestHeaderIntegrityURLLoaderThrottle:: + UpdateCorsExemptHeaders(network_context_params); diff --git a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc --- a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc +++ b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc -@@ -344,10 +344,11 @@ bool OneGoogleBarLoaderImpl::SetAdditionalQueryParams( +@@ -329,10 +329,11 @@ void OneGoogleBarLoaderImpl::SetAdditionalQueryParams( } GURL OneGoogleBarLoaderImpl::GetApiUrl() const { @@ -639,7 +643,7 @@ diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metri diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc -@@ -168,14 +168,9 @@ void PageLoadMetricsEmbedder::RegisterObservers( +@@ -169,14 +169,9 @@ void PageLoadMetricsEmbedder::RegisterObservers( tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); @@ -681,7 +685,7 @@ diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browse diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn --- a/chrome/browser/safe_browsing/BUILD.gn +++ b/chrome/browser/safe_browsing/BUILD.gn -@@ -25,7 +25,6 @@ static_library("safe_browsing") { +@@ -24,7 +24,6 @@ static_library("safe_browsing") { "//build:branding_buildflags", "//chrome/app:generated_resources", "//chrome/browser:browser_process", @@ -717,7 +721,7 @@ diff --git a/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/chro diff --git a/chrome/browser/signin/android/signin_manager_android.cc b/chrome/browser/signin/android/signin_manager_android.cc --- a/chrome/browser/signin/android/signin_manager_android.cc +++ b/chrome/browser/signin/android/signin_manager_android.cc -@@ -71,6 +71,7 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { +@@ -72,6 +72,7 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { remover_(profile->GetBrowsingDataRemover()) { remover_->AddObserver(this); @@ -725,7 +729,7 @@ diff --git a/chrome/browser/signin/android/signin_manager_android.cc b/chrome/br if (all_data) { chrome_browsing_data_remover::DataType removed_types = chrome_browsing_data_remover::ALL_DATA_TYPES; -@@ -94,10 +95,6 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { +@@ -100,10 +101,6 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { // TODO(msramek): BrowsingDataFilterBuilder was not designed for // large filters. Optimize it. @@ -739,7 +743,7 @@ diff --git a/chrome/browser/signin/android/signin_manager_android.cc b/chrome/br diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -354,7 +354,6 @@ static_library("ui") { +@@ -336,7 +336,6 @@ static_library("ui") { "//chrome/browser/feedback:feedback_impl", "//chrome/browser/file_system_access", "//chrome/browser/fingerprinting_protection", @@ -762,7 +766,7 @@ diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/andr diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -32,7 +32,6 @@ import org.chromium.chrome.browser.locale.LocaleManager; +@@ -37,7 +37,6 @@ import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.merchant_viewer.MerchantTrustSignalsCoordinator; import org.chromium.chrome.browser.omnibox.LocationBarMediator.OmniboxUma; import org.chromium.chrome.browser.omnibox.LocationBarMediator.SaveOfflineButtonState; @@ -770,7 +774,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.omnibox.status.StatusCoordinator; import org.chromium.chrome.browser.omnibox.status.StatusCoordinator.PageInfoAction; import org.chromium.chrome.browser.omnibox.status.StatusView; -@@ -380,7 +379,6 @@ public class LocationBarCoordinator +@@ -424,7 +423,6 @@ public class LocationBarCoordinator mLocationBarMediator.destroy(); mLocationBarMediator = null; @@ -781,7 +785,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -52,7 +52,6 @@ import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver; +@@ -56,7 +56,6 @@ import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver; import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.omnibox.UrlBar.UrlBarDelegate; import org.chromium.chrome.browser.omnibox.UrlBarCoordinator.SelectionState; @@ -789,7 +793,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.omnibox.status.StatusCoordinator; import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator; -@@ -312,24 +311,6 @@ class LocationBarMediator +@@ -328,20 +327,6 @@ class LocationBarMediator if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(hasFocus); @@ -797,41 +801,39 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow - && mLocationBarDataProvider.hasTab() - && !mLocationBarDataProvider.isIncognito()) { - if (mTemplateUrlServiceSupplier.hasValue()) { -- if (mTemplateUrlServiceSupplier.get().isDefaultSearchEngineGoogle()) { -- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( -- mProfileSupplier.get(), mTemplateUrlServiceSupplier.get()); -- } +- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( +- mProfileSupplier.get(), mTemplateUrlServiceSupplier.get()); - } else { - mTemplateUrlServiceSupplier.onAvailable( - (templateUrlService) -> { -- if (templateUrlService.isDefaultSearchEngineGoogle()) { -- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( -- mProfileSupplier.get(), templateUrlService); -- } +- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( +- mProfileSupplier.get(), templateUrlService); - }); - } - } // Focus change caused by a closed tab may result in there not being an active tab. if (!hasFocus && mLocationBarDataProvider.hasTab()) { setUrl( mLocationBarDataProvider.getCurrentGurl(), -@@ -345,8 +326,6 @@ class LocationBarMediator - templateUrlService.addObserver(this); - if (OmniboxFeatures.sUseFusedLocationProvider.isEnabled() - && templateUrlService.isDefaultSearchEngineGoogle()) { -- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( -- mProfileSupplier.get(), mTemplateUrlServiceSupplier.get()); - } - }); - -@@ -579,7 +558,6 @@ class LocationBarMediator +@@ -356,8 +341,6 @@ class LocationBarMediator + mCallbackController.makeCancelable( + (templateUrlService) -> { + templateUrlService.addObserver(this); +- GeolocationHeader.primeLocationForGeoHeaderIfEnabled( +- mProfileSupplier.get(), mTemplateUrlServiceSupplier.get()); + })); + + mLocationBarLayout.onFinishNativeInitialization(); +@@ -590,9 +573,6 @@ class LocationBarMediator LoadUrlParams loadUrlParams = new LoadUrlParams(url); try (TimingMetric record = TimingMetric.shortUptime("Android.Omnibox.SetGeolocationHeadersTime")) { -- loadUrlParams.setVerbatimHeaders(GeolocationHeader.getGeoHeader(url, currentTab)); +- loadUrlParams.setVerbatimHeaders( +- GeolocationHeader.getGeoHeader( +- url, mProfileSupplier.get(), mTemplateUrlServiceSupplier.get())); } loadUrlParams.setTransitionType( omniboxLoadUrlParams.transitionType | PageTransition.FROM_ADDRESS_BAR); -@@ -1576,8 +1554,6 @@ class LocationBarMediator +@@ -1610,8 +1590,6 @@ class LocationBarMediator if (OmniboxFeatures.sUseFusedLocationProvider.isEnabled() && mProfileSupplier.hasValue() && mTemplateUrlServiceSupplier.hasValue()) { @@ -840,7 +842,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow } } -@@ -1585,7 +1561,6 @@ class LocationBarMediator +@@ -1619,7 +1597,6 @@ class LocationBarMediator public void onPauseWithNative() { OmniboxFeatures.updateLastExitTimestamp(); if (OmniboxFeatures.sUseFusedLocationProvider.isEnabled()) { @@ -851,7 +853,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc -@@ -483,12 +483,6 @@ content::WebUIDataSource* CreateAndAddNewTabPageUiHtmlSource(Profile* profile) { +@@ -503,12 +503,6 @@ content::WebUIDataSource* CreateAndAddNewTabPageUiHtmlSource(Profile* profile) { // chrome-untrusted://new-tab-page for other external content and resources. // NOTE: Use caution when overriding content security policies as that cean // lead to subtle security bugs such as https://crbug.com/1251541. @@ -883,7 +885,7 @@ diff --git a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc b/chrome/b diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -140,8 +140,6 @@ static_library("common_lib") { +@@ -141,8 +141,6 @@ static_library("common_lib") { "content_restriction.h", "crash_keys.cc", "crash_keys.h", @@ -908,7 +910,7 @@ diff --git a/chrome/renderer/google_accounts_private_api_util.cc b/chrome/render diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/renderer/url_loader_throttle_provider_impl.cc --- a/chrome/renderer/url_loader_throttle_provider_impl.cc +++ b/chrome/renderer/url_loader_throttle_provider_impl.cc -@@ -257,17 +257,6 @@ URLLoaderThrottleProviderImpl::CreateThrottles( +@@ -274,17 +274,6 @@ URLLoaderThrottleProviderImpl::CreateThrottles( } #endif @@ -923,13 +925,13 @@ diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/rende - chrome_content_renderer_client_->GetChromeObserver() - ->GetDynamicParams())); - - #if BUILDFLAG(IS_CHROMEOS_ASH) + #if BUILDFLAG(IS_CHROMEOS) throttles.emplace_back(std::make_unique( chrome_content_renderer_client_->GetChromeObserver() diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -6431,7 +6431,6 @@ test("unit_tests") { +@@ -6640,7 +6640,6 @@ test("unit_tests") { "//chrome/browser/file_system_access:unit_tests", "//chrome/browser/fingerprinting_protection", "//chrome/browser/first_party_sets", @@ -1152,7 +1154,7 @@ diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliab diff --git a/components/domain_reliability/uploader.cc b/components/domain_reliability/uploader.cc --- a/components/domain_reliability/uploader.cc +++ b/components/domain_reliability/uploader.cc -@@ -81,7 +81,7 @@ class DomainReliabilityUploaderImpl : public DomainReliabilityUploader, +@@ -80,7 +80,7 @@ class DomainReliabilityUploaderImpl : public DomainReliabilityUploader, if (discard_uploads_) discarded_upload_count_++; @@ -1585,7 +1587,7 @@ diff --git a/components/google/core/common/google_util.h b/components/google/cor diff --git a/components/page_load_metrics/browser/page_load_metrics_util.cc b/components/page_load_metrics/browser/page_load_metrics_util.cc --- a/components/page_load_metrics/browser/page_load_metrics_util.cc +++ b/components/page_load_metrics/browser/page_load_metrics_util.cc -@@ -285,8 +285,7 @@ bool DidObserveLoadingBehaviorInAnyFrame( +@@ -303,8 +303,7 @@ bool DidObserveLoadingBehaviorInAnyFrame( } bool IsZstdUrl(const GURL& url) { @@ -1641,7 +1643,7 @@ diff --git a/components/search_engines/search_terms_data.cc b/components/search_ diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc -@@ -613,11 +613,7 @@ std::u16string TemplateURLRef::SearchTermToString16( +@@ -620,11 +620,7 @@ std::u16string TemplateURLRef::SearchTermToString16( bool TemplateURLRef::HasGoogleBaseURLs( const SearchTermsData& search_terms_data) const { @@ -1843,7 +1845,7 @@ new file mode 100644 diff --git a/net/base/url_util.cc b/net/base/url_util.cc --- a/net/base/url_util.cc +++ b/net/base/url_util.cc -@@ -519,34 +519,11 @@ bool HasGoogleHost(const GURL& url) { +@@ -537,34 +537,11 @@ bool HasGoogleHost(const GURL& url) { } bool IsGoogleHost(std::string_view host) { @@ -1882,7 +1884,7 @@ diff --git a/net/base/url_util.cc b/net/base/url_util.cc diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -3015,7 +3015,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( +@@ -3029,7 +3029,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( } #endif // BUILDFLAG(IS_CT_SUPPORTED) diff --git a/build/cromite_patches/webRTC-do-not-expose-local-IP-addresses.patch b/build/cromite_patches/webRTC-do-not-expose-local-IP-addresses.patch index ff2a7e28747259a314560b47d653e2cea6433dee..e10b36721c80f6992e9f0b1c117f89934bc3ae9c 100644 --- a/build/cromite_patches/webRTC-do-not-expose-local-IP-addresses.patch +++ b/build/cromite_patches/webRTC-do-not-expose-local-IP-addresses.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -108,7 +108,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -125,7 +125,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { false); #endif registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy, diff --git a/build/cromite_patches/webview-Hard-no-to-persistent-histograms.patch b/build/cromite_patches/webview-Hard-no-to-persistent-histograms.patch index 0d7ea00b31fd4e27adfeca7bb417f4aa89ee5218..114832522161499ed43bc6f27845341881a3c743 100644 --- a/build/cromite_patches/webview-Hard-no-to-persistent-histograms.patch +++ b/build/cromite_patches/webview-Hard-no-to-persistent-histograms.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/android_webview/browser/aw_field_trials.cc b/android_webview/browser/aw_field_trials.cc --- a/android_webview/browser/aw_field_trials.cc +++ b/android_webview/browser/aw_field_trials.cc -@@ -79,13 +79,6 @@ void AwFeatureOverrides::OverrideFeatureWithFieldTrial( +@@ -75,13 +75,6 @@ void AwFeatureOverrides::OverrideFeatureWithFieldTrial( } // namespace internal void AwFieldTrials::OnVariationsSetupComplete() { diff --git a/build/e_patches/Browser-Add-provider-to-share-default-search-engine.patch b/build/e_patches/Browser-Add-provider-to-share-default-search-engine.patch index f7c9d2a38cfb5f0336c43e13e65b82bdf7fb8c31..b3f36ac02dceae5af2daf6bdff582286af3843cf 100644 --- a/build/e_patches/Browser-Add-provider-to-share-default-search-engine.patch +++ b/build/e_patches/Browser-Add-provider-to-share-default-search-engine.patch @@ -1,4 +1,4 @@ -From c96b4063b13a9a1d38c0063a6250fea145d8db7b Mon Sep 17 00:00:00 2001 +From 62f42af4f28cead3d8e5bd75baa5bf5e138e40ce Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 08:03:13 +0000 Subject: Browser: Add provider to share default search engine @@ -12,10 +12,10 @@ Signed-off-by: Aayush Gupta create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/provider/SearchEngineProvider.java diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index 46ddd924dae7e..e9f1ce7e50ed9 100644 +index 6c9e92f1e8df9..d24ed2472d393 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -1326,6 +1326,12 @@ by a child template that "extends" this file. +@@ -1345,6 +1345,12 @@ by a child template that "extends" this file. tools:ignore="ExportedContentProvider"> @@ -123,5 +123,5 @@ index 9c175c0d24804..eccb0847f7cd6 100644 chrome_java_sources += userscripts_java_sources +chrome_java_sources += [ "java/src/org/chromium/chrome/browser/provider/SearchEngineProvider.java" ] -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Change-adblock-url-to-ours.patch b/build/e_patches/Browser-Change-adblock-url-to-ours.patch index 8bac3b770cd288edd67f546e94e03ff8604423bd..eb768299fcf357384e59b95e3c808b8d95c7c23c 100644 --- a/build/e_patches/Browser-Change-adblock-url-to-ours.patch +++ b/build/e_patches/Browser-Change-adblock-url-to-ours.patch @@ -1,4 +1,4 @@ -From af82ab8ef3220845d46d1f926ad6c7bea44156ef Mon Sep 17 00:00:00 2001 +From 333b1b16ad9cbe8a48d4cad5de0f9cb6327e9340 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 10 Sep 2024 12:17:23 +0530 Subject: Browser: Change adblock url to ours @@ -43,10 +43,10 @@ index ef6d1652c97f0..24cd56084827d 100644 mAdBlockFiltersUrlEdit.setText(AdBlockNativeGateway.getAdBlockFiltersURL()); mAdBlockFiltersUrlEdit.addTextChangedListener(this); diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc -index 49e287fc930ec..5f6707c2278b5 100644 +index 6a34a89f0f2a2..b0bb42b590a6f 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -1247,11 +1247,11 @@ BrowserProcessImpl::adblock_updater() { +@@ -1282,11 +1282,11 @@ BrowserProcessImpl::adblock_updater() { std::unique_ptr scheduler = std::make_unique(); @@ -63,7 +63,7 @@ index 49e287fc930ec..5f6707c2278b5 100644 } adblock_updater_ = std::make_unique( -@@ -1259,7 +1259,7 @@ BrowserProcessImpl::adblock_updater() { +@@ -1294,7 +1294,7 @@ BrowserProcessImpl::adblock_updater() { std::move(scheduler), g_browser_process->subresource_filter_ruleset_service(), local_state()->GetBoolean(prefs::kAdBlockEnabled), @@ -73,10 +73,10 @@ index 49e287fc930ec..5f6707c2278b5 100644 return adblock_updater_.get(); } diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc -index 32f549a54cd00..70057afef3ab3 100644 +index 48cfc3c14d972..f100d99a6b90d 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -644,7 +644,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -658,7 +658,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref(prefs::kAdBlockEnabled, false); registry->RegisterStringPref(prefs::kAdBlockFiltersURL, @@ -86,5 +86,5 @@ index 32f549a54cd00..70057afef3ab3 100644 // Static auth params registry->RegisterStringPref(prefs::kAuthSchemes, -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Change-info-bar-icon.patch b/build/e_patches/Browser-Change-info-bar-icon.patch index ce0f76d9e92e64472d7d8a3b4c9b3cd0d21ea060..b57f61a92d22de710df2149a0a603dfdd58a741e 100644 --- a/build/e_patches/Browser-Change-info-bar-icon.patch +++ b/build/e_patches/Browser-Change-info-bar-icon.patch @@ -1,4 +1,4 @@ -From 9f3e8573f386be8a33c772d172397e08de654486 Mon Sep 17 00:00:00 2001 +From cd984cb907e2a897c3d5351684f90bfee2ebd5ec Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 14 Dec 2022 16:17:58 +0530 Subject: Browser: Change info bar icon @@ -15,486 +15,508 @@ diff --git a/chrome/android/java/res/drawable-hdpi/infobar_chrome.png b/chrome/a index 59c091a465bf6f38228cf604add63317e5316347..da99d50e93bc0a28a678ba64320eb689a1ea3c83 100644 GIT binary patch delta 1433 -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 +zS^YjpwYDMaOn=)+%U7i*=-SrR6vjU_SPx={i +zwPyQDw?7#(W-Yj~`}x5&(hh4EelOoRJ#_kh%b&)|X0{3H+JCKrx6W)1@wSZbRhX{& +zhF^V4`Fp_y4N@}4kFPXLG|LM=d{ax6^|jDFU(ZWtf9?~E=ho)eIJv{M*Qoltlt_Sc +z(Wa}O^;cRK{;e{VKYK7exp?=DUN5V($HtNCuZX|@v#Pj1H1)pVvONDq`oT-@Y*}We +z8-<^&dd$Gv=}RrfRBGx7z>{${!= +zHmm1sxRd27f2Ymu3w~)wN(g@AJN@0P_OE>Z|EJI6Lj;Aq?|uIGnVo@wfx*+&&t;uc +GLK6TuIK7a4w;2ee@Y!umg_(&fxf> -z6y1eCC6ud;ntu{t3my@8V5_|sEt=-JX@V^C*klN_=LT8bfaQRD3juS$81$qRCxSXOzdi~Ekfmg!a40G}ncS|MX=@JvNfN_!X2;;b+rgysXBhFVMSAQ5h3C;O~b=yv!RbEaW&}X6C -z;SlwPH`PVi+I0n&l?7i)da?5M=vU%aI$gsd1Z#yaWjrz5IJ{09+z;sfjOu=WmT{gZ -zYm8PRW$%)(?~d`Or3UUCGK9pfaJmJw4*j76DG787CHE(fpAZ`#B2Wl7Ya`bUJ+xFu -z(G7Cx9DgzsQp3pdL{KRs^~=~BBOwgnls6U(v|52a-iDB1!19y*P#$z^Fy<0qA_U{$ -z^~j~k_nHk-5EAOz0IiA#5%K{8vFXLZ-@-JZX?^j<0fAB*LPA~Z#iRxUBOx|!6Q;M_ -zR;`2$**Sy+X_7Z~46dF&(?>`!@l|tA{5leu1b?_I158JJ29_$2jLAIcN%xI}m^5ew -zRp|QwCm9fIDKm$Zg+iL~{*aJL$xOxi(nv_y4)ws=I;93UWlX0OP2#Yq#)&%?vMTJg -z*E2$@2bB(A-#t@Yy;7mOn+}ZGc1Eo|^WX|8K+`bY>P$6jGiiTcDzpcZt_&lQD{=vZ -z1%HFGVTRmVoxV6jh++g!u7VjbJ!u(0{*A)ToMP#0#8Zpy|oBcY)aOJhHj -z`#5Y##^1vtkg(g?kCKJQ9RU*8EyI?j(LRW2UmT1|-QHi{!c<-4MbGlc5NzS-;}DCi -ziA*3NmsBbC4zs2K;V^M?8r`USL2xaD4|5u{NgyFYhn@yqF-Lb=stEEsIQ36Uip$*~ -z%Y-K6l0sLI7`i=;hM1Zy{(cFGxVjWgs_qQJ!XFz5<5riY@x#I^>Bvj8Vuh}c`{(5* -o68g>soZUIm{!_jXJma6hZ-0faSP%%}nE(I)07*qoM6N<$f?7q$S^xk5 +zcmZ3*-On*Wxt@Wuz$3Dlfk9vn2s5gkwK8E~U|=i`a(7}_cTVOd0|Ns~x}&cn1H;CC +z?mvmF3=GUmJY5_^Dj45JLU#55DeLs9tnpq|8$W$}5&kI5D)z7kQ +zclclY>v>gIKdo?{dUj8kQtJCj8{YSQT)vd;os3b-k+lW8Shw)~UC6A-S;DRQUA=$4 +zfV8|)0Ec**WP%8EP>rkIQIY>8^LyVo`$ +z;lQWKe*@%7vJIXIB`C2xe(?3g(v#n3@dgP9y}HG)wu@cx6C?A+mq!oYKV-5nv-aar +z#>OCNC#TrgN0+cMD=V7i2`}4zH*9SS?@h}Vmdr`!WjyQV*ASnHcNCAQs(n!C@!xg&|ie_fMg$nt$p +zUzso8`D??5pDz{Xu4E1nPwUS+b<9Y4;X+~WWcw+8217#KWV{an^LB{Ts5T1CiO diff --git a/chrome/android/java/res/drawable-mdpi/infobar_chrome.png b/chrome/android/java/res/drawable-mdpi/infobar_chrome.png index f70cba6dd5cb2c483c8843ed719f41726f6010b4..99278d9f40e0054be45bbd63803e0aff3b44206c 100644 GIT binary patch delta 713 -zcmV;)0yh2F1>gmcBYy&?Nklyi_tB)Dct?F>E$Mih-u7Smp&y -zCQMVjl-Gq0d8xpAB8ez8lsAe{%4EEhQ|g$y5QPYmR<2v@Nk@C -zhA#ZW$Di~6-tT$8_j#W8Jsmnc2@jq^3Ei_w=<>M0yP`iv;eSoMh1b#VQ9x@kAG`4l -zT5$;b@D;w!_l=3I{l7OJikaAilemb#a0Az~Zr}=j#vUwsDB93~8CZz-u>%K_=qyH~ -z3+m7-RcuN8^XT*-@TO3(51->R?8Q!O!v@U7wCFK8;JdIj@0r!Wd*cIK!Yy3J1)Rre -ze1er&p13X8kAI&MGYt#yI~v+cFbeDOUFi4`M{xq*qca9a+%HpED@Ih{Jd0kH;5~Dj -zBXP)-SaT)T;!_-s7GI#Q;`~^=hj|!}=g_e{U_Ac8wUqo4>M;NVF&tCNT@s-ON7!z0 -zUkRJ>2S%1BcqQeY!mnt?9L&mlZuo5w&*SL`JvIDKkAFUg(T3sW30}l(yo>Fr;#4#^ -z77bdX&!7r=>a+JlsH{=hd>E7@^%xn@tBQvD8+ULUueNK!dpIxP4b)U_^i_225-d~r -zz9o)niMWmJ0M;maV`6@H4`uVwvpldTRO{qW -z^BZpB&wo@g2_r(`fY`5d*_jfCD8|Q!in(+hliEvAixr`zEwnT%nr|Ie1!TFx^W$=^ -zF8jM;h83z!*W9o%j@qnfy8ZYzE@{JYyd3`b=0bZy>4d5jRV3+wF}Zz9fX{`3UlcYz -zqZlIx6oYO8N)H52f|`IYj-&n^$IXf!*{+zf%|iLUTJbM8>^^(`N1{@=UYfNgmi#D{ -vHN}!|qw7NhS4s8^UQ41TjC*9z$MxI=`9PlPniJXf00000NkvXXu0mjf^T%Ua +zcmcb?`hazUay`>>PZ!4!kIu7Ky*sX^O0X5A?+G!Iy&@PQWSC>-)YZ6bWyCX9Up1fL +zJyWi?@>Q-pP_5LdVKT+ME8tYho+-hvX6zDZ<(L$i0(W0y|;7i-~HxtT{CaAOy1G4zkvDr=DY`7b;sm%sx)q0XpoHP_`Z>u +zeew$(x5eDAE@+45c>ekP;)}wEWdR%b=RY=nbJQ>AFx#1-ERj7e55u3z_aOHfD3bqaPfp +z?H2ODraNxx1KZ-+%7rJUL=>xDdlW3wCl;`@8H%ce}rBc +zGB6v;1fPx-TFCBxBd;)?bM{Aew`uAXs!!(~TAy)D=FF+;ydSv&=O4f1ur>YT-(PRn +zezEQ0Q_i>}IeWU_u6z_?Vj;#GwfOu3uBum?zdNs36L_;mVv5RF3CRnqyV`z9mlsH{ +z--^{>{IQ_?A+1&mf@O4RdP~YIe+Tsi<@mW1jm%D>6z6p +zdiST_mW-a=zoyK6E&p%%5stqhub%{bmd<;0zCOf|Q`zZZ!;SUDH)jg9X&gJ=-nFwt +zcJeLnfNs%+OLe!HXwS-*4P#B&dFb=wqIG(|cPF)puJXNpXMraPyuVx9~{Kmk*z~JfX=d#Wzp$P!<$75Om delta 705 -zcmV;y0zUoV1=t0UBYyx1a7bBm000XU000XU0RWnu7ytkO0drDELIAGL9O(c600d`2 -zO+f$vv5yPs43L83QsPEc}!7(%4Jm7E~t1f-8C -ziZCJ+sV^-jfSjQ8tq)1+oFKUYzCjT`szmFZ%o-c;Ur6$ne1DQ*y|X*t?94Z7fY%Ou -z%viA~Ki-;E5pbV?3P51^yBwaoC!(J>^_~8U2o74a3JKZcC3$!p4nNH_B9Sy%`ZE1S -zf_^-~xq`t@uhf|}o9oBo=f*m -z*%oP|?t0XcWEG+*B0!D~jB;yod3BbxdF&NhMV_Lj{C~m*MIphK0vfBd;QL^_I)UFr -zq+v*Ii^!9~HWd_Ho#*U`$%qrIIV`oO)wQV+q+?^BtO(HS$N-Is^~c-H1x=NvDz^GR -z%8DWwk)!DQM)|xJ{rIA$DQ}T;$uZ1FU%}VI{F#_kw7ZV>Raf -z*b7v~jel7UQ4?IQ0{3BZN`$TtA)HrdOK3%ay-%rcm}fU!=c_pr +zu~EbR-mFl;g82`LEJ8CyW-S!-c;VH^ynA0U|9O`= +z2bQXFn*0rS@AA30F1=p1LUEdFnCsb{#nlOWrA76R)w&ewv~J6upE{R+?*3!;Mb&F& +zHLc=Sx?z>2zW+wrw&kqnKIfNhTqCX|7h8W%ZpFt{Y_n|Uz1TI~`BF)D{qDxkJO9+X +zv!n%-n9lS5?sroxbMd>XE0a=07ilUv^zro+WfxVJPTN}fMl{NG-lAoH>JPEGDjuB1 +zB(-|WgWm~ztQzmTEJ^gp>pn60pqZ#h%-rX1I!<;7ud&qGy8PljpDDxbXS} +zLvPpDs +z-oU)3QY%q)W6bxajH$_{&;H%u4ms9aAITdi9J7w;dt#AS%Q}9=IpOKv8LmsqJq|in +z-|7~ysQLKzm|sG1^GCy36aU^}eivYA`A6!s@f2%eV<}tZC(329)1xN8SJ=SzGQ#b| +z_ICw8djrm?l&(Ktys+Cy?XvV%hc;_tO(*|T(sR^>bUYdSlrDw7Sk2$9rE~jFo66K% +z{#KsnY?E#<=m#C?uj!RuccE`ek(c=8V86$9*88V^e!DOCA;&!(IfjZlK@JAy=^Ggs +P7#KWV{an^LB{Ts5F~vJu diff --git a/chrome/android/java/res/drawable-xhdpi/infobar_chrome.png b/chrome/android/java/res/drawable-xhdpi/infobar_chrome.png index 9958f23029e0cdb94664f1c884395e32aa8e09d6..9abad3e527fdd7fe298b6206a35244d44f230478 100644 GIT binary patch delta 2058 -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 +z)$=$<`mzZKf7f +z3h_UCVxCxLRm!NAlCs*%C}3*jigUkR{+Q(E9!bkNn)gS#-u3u3t9VteJlkgp7Hp5F +z_!J&*an1c#Cb;gP_(l(r7e;Fi?UlUy^oO5bNxh(0*P;3IxNS`rUX2rQnSbV&K#Bbn +z))K$xb{(&cq*ogU=~q6sXt1r&d$`3>x#!J)bT&@qBx*)yR7G1+&ej-X|tx +zS}a|9PQKkVb4{Gd3fqb}gJVX4?29j2&tEUbdRx=}dWwKm+A%-TyF2{%6(^;wZ+^r2 +z@=NE7IrFva3#!lk_P>-{|oXOZVeCA6i2*UzajNlP)i#_?vI@RpsPFXn9al8KnZ +z_vX~^Z#;*>a!&f(z1(9zb&)xbYpS={h4_G{IyJVz|Fb;1;=R@7&a3;NZ*pgM<*T<36uIpYGmY<@aL*Qo +z_*3VdXV2WO^gh=0Z>Y>Gre&%n_u3Mh`o%fKBi$Bg~*K08^ +z{j=XY&}fawr0-{1yv!ZfwpvLlc2$Vn>;BBb8{hEHS9e*;J3Gmzd0l&-&N=hVi*afC +z$8z3-!3l+hes(O(mtX8=Vbv40`M>3Yx^)Xr-BO*TrOEbUTM`(BS^ktQne2c1P~GhJx&prMxp=B3p9@btX3p)n!^dH#d$2yQ(4pQ7 +zkED$c)q8(TJ@{K$q~C+>(Of5GUm;iPWk)mfKihx&(bpy;EIrFg@$hx7zb0!mlSP|y +zvy7GBwjPpEl)963(C=*TGuQCKb1#3M`|P`Sxyx3w)HQ1@K1V7(dA&_&d7S9%k4*CM +zQ_sguyC^^R=8Kz`c%Ib6w)jZA3;60k^Wx7%3vD!{E_+<8=iJSGPrlci<=pz<9GCAL +zYySB?DBEmNx?|(SN-GYt-Og_|+AEjb_{~x}Uo9c(@-5bo&NL$-^NzgT!5c20cJiCv +zy+hpPaJ7bUN%w-s{aG#BS#89-F894vHRFFKv%cf<1lb>!c^NO6Zgm}+*!SN<r{rc}IO)$wZ5}^X3`Mo;Y!?j>m(b67AWW7gTCpdMB`O=ejcvI!ESQ +zOIxUBZ0O+8@%dwB;iqpQ%#kaO*Bg23r-qevKhm+Cd#`n6>Std8-{Scb^uKqfnYnsQ +zwTp_Dmpu90sCVhhTBkQx(m40#gXH!-o_j{2O1Fr52Zp)kh!mbmGwy +z^xbN={^Z&syWVYQzr^aLd?|c+M)FZZcALf?tBvmae7|(dbFu#3aNu2);?#V-&9UwI +zYBsMfeeCaiXRpN^(CD|eY+uTvtb<D%dSVXoCIy8fEc2b2o8 +z1XbiuSLoWCSwH{A+|uk*$ET$vPPkEj-%qS5J11@7`V|wUT-TaJY`AW*aJrtzl9 +za(u0I`ljnHGMjs2_PP67uaajRGrOg`{cg0tp{q{oD;E(%Ph97)Z6^=8S9;g5|P}Sg{7kR{L^1twXr`= +o%}>cqCbz!7H(B|3J)?I7Ba_q77h4z@7#KWV{an^DJ0&y$0K`o4=>Px# delta 1344 -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 -z%k*ynUj%!FCLon{O@5# -zJ#Zd`Tx0;oeP84%M}^^vGv7NDf%s(LY{ZQ#fSZ7+z`fxKk6;)+g)-x|%B*-8t}LE0 -zFczQ%Vq+~1GzKNBf!U%9g5^~aD*s8Eo|j`fe+N_iT9gf+0-uEkZUwdjJ4i8UEl{_> -zvD84F_AV)n_yf|1gf`3pegyn2@HL>*{xZz*C>$S*0epa3Y6Hgp)|hC%wgq?_co9kC -z0|??b16L!sUxYy4tI&`@jn@^!e0@33PB__Tu{eJK#_wz6^hU9m@8NG_h)f2)jU1;D -zc}f&9p<+^8X&m1@6tSm1X2((t<>d1wNE=!p2Wo?1-5e;%^PFPf2%tZT+bO^kv9Q}P -zv2@&5#;J#C`#IoWf#JXr@mWpeJXs)3glL;E*6F19GYM1hqlh=ph2dX9X1s!3S@u$3 -zG4S8Ov%s(8y4jeWeiHY*9QY3KHyHK_k*pnyQj}SsBE+V>&up0$uM;cV95cwVG5Iqv -zwx?mrUyA&sytWfDXEUkGuLC|p>{)}MoAfo&*T#3&p>+8phV>To;(Tox0(N4YLx2-V -z6H9ya(yC>+FitZ}&*vik{0s@%x}3pmM+|rmSAH?_lV^ZmkxG!c$bqIKaNdL%G#*p( -zC=7}3A|_poGGz>U$<@e>rXYs>6tm#G%rkz4m^2^goS9F%F!YWv@~fCJ+f~&-b%6_j -z{~^sVpT*z51^xrU_Gd^MuSE$_hThc%aibApNh`#SFUMdTp=T!PxDEpD0N_ka+h+n_ -z!O$6qm~sMQVwdoOmZX`r2*au=hJ208eCi?joQa}(A%^%_RHdYg;dEWB#J#a<*B}8q -z9?4y4OuTap{EYZ~JbK)<;U%{tem#KLF(W2lEAzY-;SEb;bzehVdKp>x?@7IKK7#Hn -z;9r1KD>1JcVZgrvz7dO3`7p!UPT%l`gu(VhcKmmUJNIDPpM#}J;{O|W -zHl^1Mqt|6$ZyRAKZ9>$42r*?aDL{4wjtK)ai-8m&7?&YtJ&zcYQ~+NO?^}tIU={E_ -zX*yq<>1*P%UsT3B5DzEB^Cx50OA<#%#LT(~;0X~euK3QoKd4SjzA3WU78r76$a`iW -zd0UIX**&gnjO1-Ah1YvFp^kbTvF3NE>EaAI6riYa+2a4YhcZz7g-La?t(S{B`>u8$SO -zelhMlkaxXR;9`xVB9V+?(g8grY1@&xt|N8--{6kLxwt*kD2&_gH{?E6s;J&KX>QY>7SzI+(QZdu3!yP@7n+D2rz^U!Ul -zVF7(YO#TGqH*Jypbw&n0h;)l*3~(jJ{x#9BLv3^m0{X4-`l3P&lo@x;czzjbx!moa -z8W>;keu{WC8}-s+ -zQg{D^T|Kb8wjFq(3I?i&6@Vp(o6p9AK8&Y2QSZei~_Mq8GY*Hha{^^t(@X -z9b(+|NQ-&BQM;9e;VwXd-K`))RPdmVCC3{tU5Pyba -zioJ!j)bS){oFzH^hrpqGYp6ZUsZK0PvWH)_MIj|q6T^$Tg-0ERVAlxKe;+K+PsHL= -zac0_bLdBH>lniHK+DqCFtoLldy|6V% -z5*J~X7>5+TJ9=0H(qk))NVjngLjjyff{KY*#pBI}PzmK=Onheyvizl_8<`toZkLc} -z3n|}?io-ywNm=l7;Q{Ai*fqwIK{HJI-AOgpnHYX!k?TxFAfJs&{T0+ezefPwE0D&l -zdlAx&i-Dsnaa~`mJxvV{Dh$BG3%-Ryuxb3=iL~xK470*iER!z6w4P6QZAUCx7oPVn -z@}rkf?C!0BjzkIbF(#Lhg-(=Adau+t!i$axPq-4<^K7iyWaBv5LRpCfEqlCWCUT#9 -zQ2Aejp*R8sXD^_B744FYvk2u%8FH&JNGJC1!E=n)5$w7NxSsSdz;u)wlkmV)va8uU -z2G|OVY;7=GbVvF>05izB$eD)6wcn1{=TqPg1!)3Fj`VdRJ<_*-Pr`=l^+o1;b9m8r -zk>4CkT4_vV$Jq#S*N3;=i?}ljcUvyiZC?p3?saP0Gm6I -ztucUk@!jh%n+!q8F$giDKZ1N842fe&PnfmAuxw7@HRyWCZD!)hIi9-l;1dvJufuxLGstt+Vj=2dQu*;IsRY@G0(dhLwXK=HCHm&*o1(7( -zy5$*XgIKgxh+`{BH!!E+!H08Vv5I3}wZn*e59SESe~sjCCWcy7TDA{aMJlW;R}x0(%x+qf`hMQs}z`Z6l9DOr($j>j5wa-1zIIX=J@n~$mg -zd$`lul{kMBy_j^>l5%TuiZwY|)&RpId0m%01deoTs&?GBIGJqRy8~j;NaSG2o`14Q -z`82VYx33ITgv@y!;=_4}KlMnD)Rkh^Ym2eoGYmTbb=t5n-Z)IZHzCg4iKUbWu;4Wd -z&jQTAux*=XEd4PNj6@tc2kSq{5#yu;)0*@sOmW75RmYtQ3{^88+A{`uI^xe2G1-TZ -z@4Uh8*)F$zj(D>P)A6T>Q|r(>KSnt+Bxek@uq3>tocnG?PPHf&bUO00VVEo`7NmP& -zpc3Q`OW3{iu{|cYG6uH*_op5vJ!qBf)A5v8a>D+Gn8-DVKUbr7G|Cx65wh?*a_%=1 -zL3wUG`$fc>RblM)m?8JPIk=Yws)cSm3yWO$q329S0(m(~hEtHWw#C$2f_T#ixy}(7 -z0v#~3bdCG=M2*%v)05NrUE{kQ;=aw1O4KJ!?G2D_bi(}u**<_p>-+eq5=>G7+ -zyW;-0BCcJIT1&uNL+kItkgw5A$=GnVY-cf;^XPL?I@vg_XdfoR*Y5PxQM+n}I^06sK~bsAO^k0R%w6ubTyx44|1{7^Ta -z`FSNK3H8QNmn+<=*p=r4PlF-4Dwu4gc(ok*|d(^h8xY -z8*%AfloX(^W*_XQeW4p>wjSXnKg6`0Pl`-LX>%NZY5$?g!FI46 -dYzJEb?N2f*4zL9 +zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4J{5)M8Ln`LHol`wy>ebR? +z#s>~4C>WdwWpPz$xbq}xZC3)jvRm(r2@Z>tj%YLmtTB~ZZKf6FqI2*{bmvM&U)8uI +zR!1M{PBjy)4h5~O72;Y=TwYJ~{(L%~U;EdNFMWpb;Z&bfb@TofJe%{m_Wr%>^v~y;( +zRWsQ$&g=RY@yAy32m1q|2d^C@3v4blo0LQ;ZIh8|(_?&fWPhn(@vGy{mr6`)KmJm1tYs=-p^|@p#fUY4)Ce +zJH31RP1Z@X@-Vj@v1MmcXZ$O0xQ~l@TFC5$0y@?$?sFLD$P53heo*z`_<{3{>W%l^ +zX6#{I!)Ug#JYtLR;d0XtY;BL~Sp8V481EXsv0BK!jro?6n5okqOO?y7 +zCqD8oUc%~rY-_AxjlZM5+^o-k-Y2@*7Ra^4q%a(-jenx$-ukf1_`bDB#-MchqKLj|?|d(N6S +zJ=v!OEi +zYAw(ES=>zDXi?8_?0xp*FK!!WynmRV+~LEvuUBTdV5OIc;liY#m`s`bwjvvs+oc^3 +z;(7Yyvzmu=lmdHJbK+eYjgz0}Bt76*VBd9H^MLTi4Yv(8mfQ(Hwz56*x8;NQ#)k(4 +zKSugKv58dhZONEzaP8%iAI6-)9~O6*pKpB_@07NuDK_$3P=euy`v*23SpRs}%^7p+ +zgud^Q`N8+WT;dzJ>e0_k7Mw(e=XGw`Gh^Y&867Y_M&4;;HzqKTGy( +z6E;jYUU_;wvz^nM$mWH!znEUUeysf3!jhlLZC}N{JgUi+WGYLV1W8csk!J +zsm1mfrSepryn3Q{nL^uNk_2YVY=GO9ehmh7#{fe+)ihT +zKX^g1V@45EQquGfP1Bal+{$rym1bK_@0prcia+OcE~-*&`wKalGrsz_HN9& +zuE1z5cQQ89XHPNDpPnBzHdS}FK2+VVTxZ*G!%$f*Ui{j>qHB{5uqxVTR +zpU#aA;Me8R-^pEh?t5ToztU8O^yD3?5AHJr*XU1CRbOmn&uRGKNX2^*o`(ku`xicB +z&0S@4Q%h=vZrj1zZ}b@KofP)is{JeVdAj^4%dZ9Jvf5*om@d1kELdNqJa10#J&Puh +z3GS1Hj^(!;%nG%6^k2H%Z0U90#n)5g^Q99ta-FW!a~P%?XgZX!_HiLel5%gX$eHQm0>9&hMB6{X+^muE0 +zY>oIapHs(rxeWu7A6TTUXm4eoax^QxNA&{xVTRS8eSQ?D+{xbP_gSs!tI`q%ZV$s} +zno9)R!w)&!oxp1^`8}ecVu!`N&tgfps>+@x-!@3J>0~Kpy4K;>WqDmMg<UMp8)6y&6$)UfFc**uUShEEGJF8(?*HvLE{q<5(Q2GCs +zSlbPIw#im3DD_^xWR>MO^; +z?Dj8{O}g{dqq}l%;O?od5A_@x@2*vF4*9U4PlJ8Zgd2^&evzMq!+5y +zp|t|_ZOL7GTen>KsFF5E)$(uqfrZuCD{RlK^waU$)E>XpRZ%rq_;B~GR(IL9gzFra +z>*aMW_#b%`T(m_sTI_Da!|jqQ|C=pg_!;q5*x_<*&g?rorzVsp$-Fwn*Rp4UR=ez@ +zMQSGm*Ks&c*}gR>u3DZucK?wn)y_Nx7Motadr|qjHrry}LppU+R#J& +z+xvsXJ=X=_?Bd)p?~B2Kk}1-YKO6|zwECts+YPSnoLqzG68B&B48|vRo|xHoeCz$b +z>(7H9@UdnxdG>uNRkFRbz25&&+v~5c&#H?nE|yQcFXJ7R>63E&CP&fr_U(7OcNlY* +z$2?bFTqhX$&P&I4&-}~R8MwJ+9=D!YIq$I4&m5KQ#)q@>4^Minp>v!^C6uH3ec}wk +zs5bR2-B))p?DQ{Mmu`3Le^JV9=@b3V)}G~Y@#?(CEhEbJ*{hlIO2j_+an5PkewL$O +z*~*?qSQ{{fDPD~2nc99li7}r?dHdQ`ja>#N?|78=G%?J!p0L)iq4MM1*9NnB98Vf@ +z7%sAJs*&gEO!oAjvGw4F9KVOAFRD&FnXHw%N!5hI_@ze3oAQ>xxC1Vmm_1)Fe^I+U +z>GRJOx7Quvdh%q(k-HCF +z%abLOxH37Pu&sH|qsG7Cc+#|lSL<2@0^3WzKl%{S;kVJ^??kDZ_O2`kQHd39KD%<$ +z9-XwDx9j5rVS$wOhpR3cpD4bTr1&a1=;uexl`Jr +zGQBxsOK3;3wx_wl@`nf8i<35XCC6<&+)>T{jN?Ro?~{DBwy4mkZ9JOMZNIe86{UI6=fH7nOa6(V>ql-89UvErLQD=RoR{G7Bh41>}F27=4?SVQRXxm-M<#&Wle +z*($9bofkE{**@X@o`dgh>TR#>tJutW`Q!4A;MW(d?cFSmRML62Zcy2?bk6TQSHG{yv+^V{{vtkA?aUuP(O-($IBI@_w&JR9!rnC}ap`?xVx +zT6(nwPuRNc=#}WEipv~3&k0H}$r@}f>HYo9rT3ck<;j&*q&wGJ)Jx!tK*;q7lzq+C_ +zO<8-N+|OeMI(@viob?ZP9avde70G&?Pwno`869(8ajr4hvP`Ppc-ot%<%d6b`At)O +zxm7XAzwp^_)g{a0`unnXEinI<6wdSNG +zuWFsN74C+M*YwS^4g99~uBFCh)~({-?lb=>?v}HN?-gxo?Z^(FXes@-HTy)3`=;0T +z{xxRY-Y8I?R(gBEf;I*_lb%wkFyVfs=LK1M;^(Rf +z^B1#J@*6)6Ucv02CjVx6?Lz6aZE_D)?T>7k<4nfS -zZ{ELo24KR32@@tv7*_;bGYf5OoYl^n0_1%J;RB+N0vdqe!~a(n3WO67B1Ba0g}@_E -zct?Ld{W*kd{#Knp%1fxfAU%FcBNt5g9!cyUGo5$kz{qC*G> -zNV7Wco=yi)5`U!#sBFP}4{Mc>xKf6o3Kh`MzVx<9I1BItpquG>veGGX>lG%T*2eh) -zO0`W>HsHq+(!b8$YP|~uP>6u$w|Xzh3q64wgcR`V-Lv`%`wd630NY* -zfiv%Xe~g5~_-CHC4-Qxhhz;@>Y^y8qnjf$;vBYYNHQWC-q~{&ee{;L?IAs7l5DJ5+ -z>K(!7pH70du-*b?V{L=xf9pM=Z&^Qy5xP?0n|EvFr3XdgWTac0y+hk=#(7gDD$Bt& -zXXAOPf`0?FEmly9>_!h^Wp}my3dRuUIB0(B{4LdT(sHg)0Xzy;>qjuAIJtR73CUr+ -z$*6{k0<>`!4wI@uT)NPe5#~3~+BC)b)e$^VvO1e)Z<>GfW@IED#)UMBRldbmcp`*2 -zLd1ibtaj6);N~XH18@kIuwC4JR-ZFoV;baiqJOWVV+z&pCM_~{`!(-sL`^nl@44RQ -z#Aymf+gWqCEM*K=?@AH&9aDsD++uxX3p|ZN-3plQjY?Ijwn1rg5WysA#?zFOY8L!NyrL>6+cO+dHERBfHbl%{Twz -zoPVl}QP;6%#D)ErJcsTA5n%@`A?4SAtC -zSPPSeIQX>HB7XP_bg#N`t$-?(O7pvq{Gm}!UKlO>HAl!v<7{&fssy67=3Wx&1gfEH5I%%uuOIw#dP=DQMz2H)8LuVH+)?k&>sfw@{5UJ|DgpV7& -znwMw;0*xn#wTFx>6bx^TUnoq_jJ^RIP~6iENyC@?q>mNVo^=L03G!G=P!iEV7s;bl -za4G;DwwTbDG_WGHp5)4p3vnMxLN~XPUH}%Lp?qV|AbrJ<)w{KEn(6F|t}U&&hJU&> -ze*R=zSMqfO&bb&$`O@SbM=0~0%uo6-aHu`&a262ZpL*3Bbrx0zc?1OP_I2^dw@c!a -z&az00>cjB&s)O?d*MP$bb?d7kHk9ieU@rv?oZNt4^>k_D86Zf>QN -z4;BbRV5tujEn*3i+gBiVpd_f~)PGGJkn$neARGilF7zMB2)q6H&E8Vd7*`Zs$`BdQ -zCdL%QHNghN_qrj&7PE^+39Z}b(+sf8kIZnzGP$h66;SI_Um*kCkXAsp(J0Z-x&4bL -zox2s~D=0cz?NMS8EQy5FDuc1)N)^0g%cpTd<=I(XX>@*r$|W*;nv#gZ&VSz8bUSJ2 -zvP2AagnO&?yShQM7eo9L?9i4WnE1vJ(oREki{bAq>x9Fkg&Z0J)1Xm6Qh~JxiVb#3 -z?U?MxETYO>l3*jxrzEDfy4Kd|f=gLNdGOjao_g%l+Uo5)bdVXh+9gfe5|YXxoRw2d -zGxN2m#!cj;`WWFsMT(ujGk=_|IhX^+xV@Ovqi1?5yv>?mM}us^KG_6gXV-X+p+w^O1-RIrFiR(Fs(|9s0j5h@gCCz~X@bZihz)Z| -z+QVdSUU0NUqd!!5leeQ=kDIr4SL?G`uFagRMwl9i -z%6hF;`%3}cWureF=V%D(Kvrcq^t`b7E-9o)?@pHxPJte^ReA=>7sS2DDsmnSxDM!-NCI7JKe7HRfJ38Q~{%+yY98& -zzpY!3w-swnj?f}kO*+=3{=h2nOhYK84JY{J8OS;httlEz%>_B*u3Q>4N+Go#?oL~+ -zFDK5Q*{xGqgbHdluG~cKQ;kcwPQz}Q)fyZzb*E*?x4xD|o_`nDlU +zcmZoy+{!;ext@Wuz$3DlfkDv%gc)6@8743=FfbMexjQkeJ16s!fq{V~-O<;Pfnj4m +z_n$;o1_pL7PZ!6K3dXl{^8Idmh#a`@^Qa`eMQd+kb<-hEDUa}5`AgLq{4RXjxU|DX +zr(|pVt$7V!SW@?|-NJf?bAkGS>Lyo#U+OELzpduma`REWWc4vK)u6hdrCN`Dj-AiH +zx4)7t;ZO^wu$qrVI7^H%cW%y{tLJ7hJ*j1R$h@eZNvh$&;s4=cTrI)^N-iPqTMsDv +zSGd>P{^ya@lw)-Wqisc@8G(6j0rGJv!wo$r8Jl}+``TXe$$y56|)C#IHf{l|4o;JHOc-RnQPSBowc +ztqWkZ;R<{0Zm`T^XQdnG$;3S;SG098Z7CGvo4m>~X4i$Og3rv)-!eJ+>#Cql;3lit +zY5BA2zoez8$Q^4n=?dL~!-=^=gTzt*a-|xKl>_{e;+wI8W9XhEz;qSc!zsUx-fV_ +z6&d>^^e5y!J9sS8_~op-TW?!0=2qT)`Qlmg|BvR>uj&cBzA^1c>)+`%?eCZb6WMhX +z-_~SEUFYi9em-N(;w3lQzOmM#DKyZ!ir4ZM{LEhD%mw^{tya#gAB2Y1Q(U4?5K +zw5ED}-rfIaVW3}}gzg_x_Yt9QldU<8n262IvulBa|OYfaEJ%gF4SG{9vdykF? +zPkwK_hR=nbeT>opcP{gK9-jVZNx$gTd8KUDoS!1R1B5O*h@V^>TA;-syKTmW=_VVL +zw#<8Ss-L@1-pk2+`=mGqu>}ijk}oLK9-VM?_twH$FW+>p(_Ooxt$vqj-M^IR@K2@8 +z=XOeX{k-%<&Ryg4oHPEv3<_4*zAg|GcsRf6s&uJX7+WO^%bRbdA5U!eel+>qCXXvq +z(#+1DYl(BXnYYHUr|^J*Zza>B0F{f;mGhoA%P!1QSkA^P>^b@N^GU2zTJrLiPT?2h +za86jsFQS{oIr(u-N8qH_o-UpI_$LaHjuE!BL}~YYvG9ybg|6WWGBg%wgL_jf)p{ +z{_R$uyIb_BwuV*I+rT72oz9jkTFo1uc!};wKE1rq>FLeL*vyi;=2NOh)w3pb96DEj +z?^cO*=8H`(JY_A_tH18v<+xeg`H%3M3)2*5{5U3X$+Os;$8{E+ikXz4e15sgvTeJrU3=N&9qC&6;g-p~syCN!y?Se1GC^|t +zEmhxJLX%D@&Y2qQWBhsRietV{mi&@<=;+!tcfWD{oVAuSn2+t)JLAgY^eU}AXJ;k2 +zH|HF*yUCKAe!X>JuCw1Gfx~O#HMiQ#mhxQvZ^7#s{y)W?J}q>4^pkbRjd=#%>N%?# +z9$jKw<{i~6KR-RQ>4Z`TZ?WgC!zp=j1zTJf+lN$4-o7}xfA;pW@YkCo*PWfS#%+fF +zh20jiwt2bVwsqIvDyt3g>y4SX#^zMj+R)$LjCWHP+si!9;CST_mTK`eQR~jmjDwH$ +zZcUD!FBSUZ(Q9e-N4dLsw=Ma?tFq>DUr()LtHZ}jv9VqcA6;XW&3m`bH#*dD?Q6$X +z_v7_;dR26qMfab7p4;jyCGGmvEFwu);aiqh$TKgopcSXDCI4>SQO`2%^TxY{FBg@r +z()cu4H`3!)&fSA+`K|A+`yATh{V0TS@uJ=Dwm#gyHoAYiXtrP91*LFbt7}XC9nkvd +zQ3Tcvw`%Zqs|@~jNodTF-gw!OT+tG~_jRaNVEejE7u$)tPT9<6~UvUe1Z +mgfCO`nPHH4sAcxadg-*@A7T5ek1#MWFnGH9xvX diff --git a/chrome/android/java/res/drawable-xxxhdpi/infobar_chrome.png b/chrome/android/java/res/drawable-xxxhdpi/infobar_chrome.png index 636f83bc999b01e25c5140b9b3ad33cb010845c6..243e91dc98e0ee4c5c8b67f015db916341dacb1c 100644 GIT binary patch literal 7066 -zcmV;L8)f8)P) -zd3e>;(Z`h~5cU9ueGN;aD5NM*K%k0%EFx&#&>|o$xMAgW0T(E^pi*D05l~UoSD}I% -zSS%H(3RZBbg@Rk4;s&C~VxepTpZ@Wk>G|E8h1^SG@HOXo&O^w(`Q3Bo%*^*YbLO0T -z)KR6aw3W8fR@zEiX)A5<4LI6+BCkbXFaA;fKW;!dpdyfJ|5gGj166@)Ky~X?fhzV| -zC3}BmpaM{)r04O2Z9oH{CvX+;5bzT44`7}3e_HqduLhO?j{)O=(}9L1J&zwmGi`4O -zoCQn-W&tk(%YhGoFM)pn-;saY59|QG0&;*if%(96;6|ViP_v}xdc-xL3{V3&4j2H8 -z1g-^cw#7J{J|4IdxBxf_s9MtVJ>nWr7Dxjc1L@|+%i6+}15zSbP}%&w<3JP(s@wk^ -z6C4jJ*fYxUV+LjuXo?A@nhE_Fpbk*qTu>9BIgkPT1UMdO4|D>$0zD8e^fn*g*Lpwu -z_jG%$C(s?}40Hf~3Y-A6vgfDsV*_XtcpDSaaB~m$AkcgPcmr4qd<*Qf{_i~cu0r;_ -z{&pv@6?hP+T+%Wr_GUuw13Y5_UWq_;9q<_f*Ui9o6V6`XAjR7b0`q|Ml9o@gHlQ5> -z(j|z&902wJTTJ*L0Ph0JfIpc~9!0F>9^fwER^YdY#as(q4U7S<04@ba1EV5+wDn7Y -z%j|tu0b}j&#{<^`X8@H-T1Lgz5NMtZOaP`u`aLGpaVE%L0YiX+z^OnN8QV34_r8-V{sKs+CK1>wY}1h-X` -z?VvsPGhh|)Dk1>0ff>NnaFZdI8rUbgxwfv*e{Wvy$^x!auk`a13tFN -zZv?&uz5%wGPP#SGJ$_#6WUE~W^(}1!q0*CZGx`=3xGMm!$3ChJ75Yh83FP22#Bw+&m0Mi -zK(uy*^^x}4753ii5focoO(MVlvSb!ObR^%Yb3P`N(hg27Zo$u8zn@w?py6PY@_KMc7dbVTnh-Q2< -zdPJg50ua|SK{iDZ>hUOI?QDzC8-eUVl%zYy7U}}vJo{Zw8$-fTE!s0EXN%O_dSm;4 -z8p1DUM@MGRhUMMu=c5r&RUxDqq8gZC{W!!#&P9BEoGsi#z+AJOrNG<38kBP0fZ_)a -z*7hSmzQz`-d=g_XXG$;>S>y!Ze~=3sgedWGHs?Wi# -ze7svw(D)p1FS7FU5uHsbTB#m-;I$ARzYGE792D&?M_`tNXylg&y#7tWjAlP#A)f>9 -zp*;S}!1D-0W+LF6ih{TaD54!}i(Q}OTu^yLi~kQXw4DWv@qjJLHei#@F9-M=QnXgZ -zA?v&bUDsCrFTmdst=vZJM#)YS<|=#NAAtLTNyx-6C!`EU1HVQLA3a2;Y#_ahdx2r;%CL|6AB -zT73bj!;5!7k5V4k_z{La#I^2GDk-cY#{Y|u=kFaMjVnCek(sA^*@Zwu7e-qRH^ -zwc&`~PC~KHG*g)3jS*~M=h*^0hJfpA)5vNFge%z3=?JtkP>7#}a{8T3<9eEKhuLH% -zqU75Q4iwORh?vJx`;2Fibv%kTRHh-{oNfJnl**oN -zug^k$dmgf=m(iZYyC&Gr5J@O#Y&-3F(KsdzWpY2TIj=^RH5=_eH!VuRmqA)S#3sA| -zF`l=Pxqo3oj;~fYh{F0D;IAeGPj+30K<;8fKs6}R&md$kd!lW~u88uTh}^>Q$S=1+ -z!Cpt?;yR%$X9xS;&k&}ZY|lBxx@TJZ60)fN`DY;v8I4?IM`G!AC1m02ZLa%~l5MuR -zUR{(6kb)xBXA$tarW`=p^8wPVCy_PWg8caeLRRq?Ht7?Qi*m55jTnjJMN2|7+yP-n -z9aDgEgdBYe0`wmC?2A$G0$8 -zfwm}!oQSCSEM%oikR?{6C|nWpZ>OL{+1sc%>N%v*(@;L=9Mh7f$VJsK!8Nf7W+CuB -z6;aHyO*p?apBeNW9|F$3iPIVL)G&61eDKhzfrj^&C?Bg614}63I -zuEMt6C@Y#8H>MiMC2l1|syhnk9(jAJdoQu+?w5dWhbgDxsYONRSQ(j=Q_Q9)IQkXR -z*!hU|?aXJg`yvxgWW#+q(xwV=WAYTjttg$m0J+F#fTs~n{)7GdjJ^J61m^D`xA{3C -z^*jamNs$ZhaGMD|0|hUWP0%Zlse6*_OB4z3&PRxQ5hGfSeB?}&cpHy==!GaKIvqv5 -zog=*++8V52LQf+k!D=G+=G%y^Q83jCVTt!v_F5)#6DQbn+asLmj4&zn&=UEcn+^CD -zgzWj{O8$lD;!B7g-etnQijZ;`hH#<}VkB86kPL(q4NZibijXDsqKb&^gO?)|ehZy|T*7GK0 -z)#oCM?uIP2qb<;}CL5>DWk}WrWJVUC3F62O -z%JI4P`22fbY-SU($ahgh`wFs#`3QucLcm-hnMvC?vyg>vxA8fF*iUW(u@41b@7N+` -zBa1!@#WM{MW>q-!r^gPYjA=tEVmy72_CA3)_a}t1!f%ik?jklCz7J>{nOHLfxYH0r -zxf{8is}N-!ge<5N^8dd7>p+@e&uD^NjN?Xq6qMB?6kQ#T|F1#_vL+)M{GthYg9+W+ -zL0gzTrZn4aK{g^~{1{R3rpXMV6VmRNkXe6-a9|I)+g6kddLHc--H0O2^vHtNK)~A- -z1yLsw3Zhz>a9yzV37OPP6G%J6e3AlKLZ;R$_np1|eE^JYf&DnfoBpQGRGV+9#Nb0?^wLfET{94q3o(0}T#EBc}|!!QI?SED_HyAflWhd}Ke6cukG)}#;B-UIq3Dtwz$stI*9c?X2P<@hzC -z-0z}P#saiunT=f17((naz=YcYDMmA7T~&~^o@B4LCN7^;n89Y+gBzjMu8MqaCJJJ@ -z+5kq|DnE(X(mxTv=G6|Ez;_`~-Hw>cX0#YyiS{XBlO=ixZzj+_$puI;VLXQ-;g1OE -z^Usif{}Kg_Uahyo#+qNcdMDZ>dJ*NWZnVYef)ul{^~7q42$@IE|7W4x%bm#AZ6tSP -z!#=`BM}F;JCdg%kWZq;{@;4MMXgB2Zn;~44)5tf9qNR>I(2m@6pl6~3t%9i3qX-99p_3~cO^ERv{vZP4w~-}G -zL8dwc#RR9Ie0(QDK0ms#-V9ksU^vI*KZ -z@6SX*rvq>cQ;zb;5^Ezj(+;_|Gi^>+A~3&~U_oO^5Cf{(L*78){lkcn+=gm_1|WcO -z>evctc28u+mmmPX0i_r2Fin|-T+bqV_8R1p+_DNf103HDB9mVSbSZ)bXowilQtOKl -zUOWjrfEe0MCg9O1MbVhJNY@sq7K(^ZLzvK+1X)n33G;k=P#W@=bxqhE?e#N|@AfLV -zxhQo}P?6I?newp3O)p -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 -Ef;HhZi~s-t +zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^T26FprVLn`LHom*LP_3Fjr +zQ&k1NF|^h4dN0;kq7mS*psPVgDdX-1B?a9biBC%z#Wi*;2#Q}T7!Y_Rd|{JxgpTM+ +zuCRiYtxeGj9Db6@_vJG=FcchU#b=auK2Pwf49xA@taGvBR?pUtVh +z61a5jmZ{q=h28Rs&eYER$ZK({T4}v&y#BwyfA)C}mJ5_7Wc?3g(qay6%yKAw9one% +zElRbzK6L?8z_KOJKQ`w&FfULq5d9$VLFfa2!rZU*QQ!ZsXPd^*&-l3Ea$}pSZNI#W +zac(}x99AEeG)8@<(~bNM`i=FB_b1lh=6}PmkEy7^yz%FOk_T=J_yaaCd0utIbOBEQ +zvjv|7Ll4V3*1T;;E#}zC?GW0*V8OW}>e6T1M^XV|9?VkAFP|Mhee2K^<{+hrfSZ5z +zK6Vh{UUmDwtgsBf)(zuRACuYAgfqH0m(Ak*E3tqt;C@Vi@B+&TjDJ`xG|@{$;=tT71F|&3X1u^D_p2ytYD7d +zuHk;O<==aoU+bK{?fF-xzCpA?U`5O&Bh7DVPVbp*l9}Q<9ZF?CNHSeNd!S7CT-*bN +zqqq5(J~w=sG|hjb*#cRnOR60QWf;COMEm@ZXL!$ay1{;CfSl`^r*aSU9)vyE-f=XB +zJBGK1aUFvms~huTrP?iDy&F%zsSRgLe*6A7^L6HQhN)grZbz>PWX$97VOZw+%U115 +zq1uUfM(2jc11lZGpM3UbFlwCUVBErA+7NYO)hfXz{r8oP#k>pD0;C`M##XzfvYdJ< +z_+a|h`N13wvD4(WGHxGv&Ajz-UA$Oh0WV9-SHTZfFSapTG2P8^tWrGl;a$UR{ulYR +z4Z05;9-Q&8KOFZuz5e#;c{h1~NHV3zzj@q{oXew|bMSJmqBcXSx7W1RJeFG#_t<3p +zWmhkF@y#V+!p<(~hX1Y(Hu4p$505No*&aIO?E>5H#tEVyw3HY&H%cCOd%*O7>Vbrm +zqccww1z7~?9%{KOk$FRZ;{3h*jqi&@X0Btl+jcUaWgpu<#%(hL%9OrsVt3u+s#}xK +z{^n=(o6lvpp69#sWEyuZGiRF5Jf9(-aX(|9W@hB`EQes0hI+Ha^+t{LiNd#h^U{hL +zE*?7H_&v92Jp*@x<$=QvW*@8*xC|s2KYr!tSij-C3}=tSma>+w6TjUO{dVuQpxE8C +z^QYO;Zax1aSiu{4SA82t<<_+agdHAFnpW=Pyuh5P;x5atR?ZUE4IC9hKWvkXE{YsH +zt2X0wL*jv-C-T3u)%7*4>pS7T-TC8Te*q11*BgP{iJk8I0~!3B4@8S+v^1^1_HB+% +zby>N~M0RFz#pxBiJ1!l9qr@OnS +zU1)oH_wDn=f&rn5OC%Rb%}D%fam3}EYfbGO-8;?)Vm8lNdf@f}sVPPG8XmFpU;CzP +zzwemX>KdVB{d6w_k;o@359%jyOSfozEHr!e%&fo4Y`w|m9bHpY4BYMSm@Mnfe6_XX +z^Lb;(Jja!fGP)AYnGV^iU8z;O^4{mbZ^1Ab2Z=|vxA+viz0(+j&OW+!lh5k2 +z|Bw#a5_VMa^&Ym^>tX-&58M}Ad&ljK+ets+XIjQ)$V<(@YR^PG(wZAVdPVVozJb~$|3d6UP+a@SKI#y~~Ae-d> +zU0G}khv7CEm+UBr^-3$jqV&T+g5rwyWc#rOSxffy3@xA +z`?)?X@AaK=TygpZ*2e7mC*6x5ShMU9*f?$Bfuk&3R(I;kC+*RA^xpD8ZsNvR!9ryg4Hl8yHp7E$xFel;pO(vVRhSxclPh@elXx}*h +zl4FZeK*#*nqF-};A6LyPXup}Fw&=-io+p>Y7`g@b)=Ed-wx7`bi(_Zc*N)xm-KXt1 +z7x!D>=hvwxT=%rzdHh=AQ*6(o`#YCelq=7w*~)qSW@vayA@7Dg0ZXc{#2-ruZd57I +zxX9{ZxVGc|%A#U_=a{|xm;OZumK7Ts-Ha7kXL&(c{1?9;{n~V3?}BfP +zN+M5{iZq(1tg#E)vf{P(LJPAhr9A +z!Fn|o|FYP2hj&R%4yGEH&MTzoS1-yvv99CO+>SekKAzCu?szcH{mCP%g*xf%zwe$G +zST-l;yyekd=~2IhHm&&gGhLBKvNtBhJ?UkcYRbdcx$AyUoRqt5XI$(Q?g>pwSJMSQ +z>{=${aO*SUr8VjkP46`Q`N`rG_EFsIrSQb=q7AEiB|0CwdOMliVN7(F4Q?oEk*Vck +z`Xcx3O?TjjCzT5qsvY?J=Idsk1AiMX3uwMb;l3%g^Zbgo-IuPq>20Hv}Z|~FOxcHeA*tr{9uvaWmQD({uOCAB8O$zNIJV3yMNXSX}n1{z%DO6>d|_AN@SNLc+w@onWf +zFMA9$zg`gfId3-a53!avKc9O2Ykl#^yF>0?>Y=?|6N)6-3KsDvsYI$x;As)&4cu_~ +zLd(TdELTs8Efw$TvQ>S1SMrL(lW%@o)2BZ-xWl-y;Z1AG(c>SvB~CE7C_CP6uQzu* +z@4UiZ`0ew!_CtTgLe>UJ?TZoRVU`krsaJY6>H9UbbFyWH|Or~7R`Kcn}~sm~f! +zwSqe*AH5duq^hfb|vF?S9YSPQkrFvYGdds-7 +zWs5U!bw&2?3!f+KuH?CR&|mq`EUpwcu?3uuPVk-jxbypuKh<$LX~LUMln1)}=GxTu +zlcQz6(}5VpnVz>THcx2H-~Q3E@rHjM(?)*Q`1d!IQkA>yxQ`n13Z#Wvd|7^+Z%I$4 +zvsRK#?SyZ3jTYb4TQ(iapCI;5$xLb=e}?qT2xFEVmj#@6O7EPzS|C-nMQ4TZr~mu@ +zzjm0Fcs`>krsuI+t;m$C$|A9{egD@xacojkmin`Zv$C1iJ0B+nw@OYf#nh^+4@NZ{XjJ8TMfmE2pgyB$jBzMN>f=5XM)C~Kg)5Z9upnFX;M +zzH-jI;v?)~eWYd*Q-ss9YuZot>{=()m{#ps<0|dUcIgS9^0KvW{G~YP&UP=a+^f{tuz1b@8WOZJ+CjY`NQ8lWTTL*0v|+&SQJp9CR-`0t@156&Ky{mVRK7;MiMcE-tufLa@NnH-0Bx +zrU;m6|5{{n*nlM@e6elwZo%YP?GA5cMMU$Jt}WredXM>+npVy1;8mQZrj_h1`=0(V +zU3BODqL5=uTT*BC#$1wcdSi5;S35@ +z)2{TepX24{^Aqa-3$gabt=)e3*sSZeY-6>g+zKD5k(~2vLIoQJ% +zPS%$8?f5A3Pl4&t_KB)Kj?1iAjo&wCPZaLp`c=-2l$HY5rS&eK84TZ06aAlVHryQHEz_5>TsrWks-q99Hp-*)A1)x{Ic5lpXS>SZg>9o!KC`X +z!IScQHJN!c8ky!V4`h(Izn=M)=+7nG>eCndT4pCz?~C}gXobCoXzNw(i__xGxUS~A +zDU@vE+$qYm-c7^kT}#GugClR%m9%$>8_sbLJXU14@KvrVSJyRRuM6c9>uol2NJK0V +z_KUG|pWRyGAng{pEXA}lCCT$z)?3B5zTUqTjK2i;N`8y-ck(p|#&J}l{cIKAa>eU6W(T&U-9 +z(@fu)@v240@5|gj|Erzonscpc$?MFAKcu|%k7yl!_(n%GZ(m$NwMTv4`_~Oc3EsXB +z=B?^jrv7bFgPHQogG-d{<>HS&*51Q#aqC45u0NKCTKza0ZZFVTkiW-VRmR_nbK@H0 +zoQduW=PvQoVE?SJscYxA&l?VLsLf0(&h6b6&#qh+-0ytBTg1|Q)6a^h<@GLJYQmQ+ +zoIRf<%+Gw}z;fiK#wyw7JBN2_EWL28<@FTZ$rHZIcS@WVIWj}eeckI!r@7~}HRL`R +zP2c+DUgqrqucHYS~a*J-u<~SO82r>7Wt(8r<^(MOh +zZ0=G2&8-r>tCpxM+5fZnRIe?t`)5~EFwgG^Q*+%m9;*_0vc@T4pTyJZu0QwKn7+^N +z`lex~^yz~}d-Li39{o*gKk +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 +z-7|Gh@J)7s74@~0drDELIAGL9O(c600d`2 -zO+f$vv5yP=PgxHe%ioCxAHt -z?8`%rTvpKeq!Ncjz(O0Kwmt!Zrf50dbZ7Z}pF@ -zaR5pU=!GKsY=EdgQ2WzRg{S}h=C2XVDRZTOZVy+_!;3CJ<1T>ielFzPMD(J4Qr`Es -z;^m{Go*KZMFn<>cxc~B^gQ&I0uEj$-4sB-d|$!ZjL9~yhKYuW5c%+yei;NEc|P{E5Vxr -z7C`vdcvXTI1uT&8ukogY06Y-u&tfV>ZmGhflV>XrAp<6t -zy!7!gpt_>~*ATG%DanHa1u7zY79p({C`{1L8YXa@!+wWN>hZJIhPb`7;n>r8bt{h7 -zkAHf9OYP;fIzCHrOCw|Rg`Uo*l9g=2$(mL)i^`?&y$^Rf(75s4)=FR07Nj)PBl@#_ -z9yYCJBS`S;S)XYNVo8M0J)XlHTB}?=lR^cLFLiQupROT^+4QMXr9F2RbPzm}wiS(l -zame9^@vj3K1-EUZVCs-2yMMB^(gOvir@TUZD3s| -z6r5KODWPwAEgpa)7(iFjPNV=-pW9$;*aL7JCxTILifrW_Z1YP<>KG;1=7fpo&VLPp -zdLU_MRehV4%`2B63S@ZYQPp3dkp6*+ -zKi4tJw0IlrqSXw-hco(za?|<^74kg1T)HZri>2Ja5ChCr@iC_}8)^x7MsI6}4 -zEND{fKt-G{g^$xdSDgNIfVWiH+SpAH*e6DczjSRjbr$rHB5$D(EIm{uIs%u=3!Do3 -z2tZlFUE-Eb|DtL`MQ~6r?enA=7M`P!tOH~UV7K(eFtaBk8DT|Xz4x!bxPPvQ+qMQ? -z^8xfm+c}DrvbOh0>b?7dSdJ@x6+kZ}aZ77H;adT~$(W38X_XZaRo>emQ9$O0nr={wtp(Xp@+6d33|)*FXKa~2uhFk(>|wl!d-B=KH`tIHi8l0 -zQYNUL*xXWf^|+D%%EwytOEG=75ddHv-GWINT};HPq=r6kRhmFI=M;hC-K+7}*cQbn6jrjdJ}Fh@8k>-7$bBcci7 -za0!ApMI4rQ@5Ol+(Zlfykj?G9Np1x&o4b_p3RD?pBQmF-EBFv7JiUTubn}IIoe(yX -zRsE}OA8*+Y<@V-w3irLu!bt&)ul=a2j0;`kyG6<7sgCSG^b6G`_w+wf8uXQGz~eDpw-m1fo? -zyQj?{^1OloZ>5QR+>EA$GE}34NU{jJbl6BTaUXBOXS~*i{;q`b&C!lcD5H1}rlv(L -zco#n7y?;2@D52arArc)i?=bOleNPd>X9}o}o=ht$AF0e#l-AaX*CoxUC>fN*%Y_Kv -zTptRi;KiEN56^%60S*Aw&dI-9{zC9mC}ado!mC7Hsuy9BBol8Qx6_h_TJ*h+SLW(W>bX+D -zO+Z*7&Bk!eoH~L?=|dPuV(*)KA768Q5Fa%#552smrlzK*rlzK*rlw|+-vB>p(BZ;* -R_znO7002ovPDHLkV1oYj%jf_A +zcmbPbenEJGay5jgR3=A9l +zx&I`xGB9wadb&7>K4rfPlV1&Ni~yI1du?)lYikPz}} +z{+U&4)|^?xv|=S3M4E`4F`PTyemk>l`3u9_3^22UCJUFJd?>M|Nm)!e}~u0Q#oqc +z1pmI7W0NoI|qqwPR0Al}a9P +zH?$NWO3%dRefiAr*L>l@V06td_MZ2UUcT{6AF0@DMfxph5 +z>^<5CXETX8{J35b+9b}ZGvUMfkIPyZYy@6EdCSB(Kl8J7d9}U8?rZ0`62d1h>dD@a +z@WGmY`k~x{BPUr(SFqQ!Bv!cn*D0I0G$XL(hwk2QE88B3G#y)Df86k&j>UP#+128< +zyLyWKf5>=k$gsF@_SwVvt~V}cG$~u{yTw24kh|RThK{zf&IdkPqOqsK@q5{M +z&3nRoSi?=;y;!n!KS$I4W4Emy-0Oa5-G0G&38UP%`P=;x4}N&mW~6mc_C$SS(1q(C +zKmAhTn*UL%>&BhEHOpHwjF!7JiKwavQ)e8dVhUYz4zOvTdeH73%!+-Kex_1w|vsnoI@vP +zg_(4pTKZuxf4S9#9Ut#r^NPPBw#4L$@~_Rca%OAOls!JYj+~##mE_rS-ge$$nW)t< +zwv(M$`}IqU%I2?A?7aD9W$;qla_`@d+y?dR}<8B*KgW- +ziJ6<#r9S-V#nWs0j_|k`CAla!wA`Qjqx7p1PyEe&lUE!&dru@(rDmD$;)k;Fx33vY +zRyLe{HF2>fS3sAD!{I0Ip1il&^ZtEY$)$b9UHAVa<|f3di_8fZ&|H{br7PETJoC?5u8#GOOrp2t?&kbnQ)C_d +zI_sF1UT)yBmvLsoQW*v7=1e=o9LAck;F6wFk#}yM`qJ-QC)AfD8!t?@zju=7Wm{1= +z!`e6RBBE?2R)}wY@V@@j5yE8hoA**DBj}BT +z>m2>o{>ygZbN-byY!A74>xQqu4RyD!{Uy0(rD9(uDCI8{(6J3swPKonntKk{Zw`mZ +zL$Qyh`Tbv%qH&&RSLbc?H)!m9ymFpCoglVs6gnw+X{gW&)T2- +zO}Mme@!Ypp6Lyy$PpmaQ=4=s_8qVNW6XW?Q$^;4SNA`VW4=lYvW +zY9o7ujvTsQ^K!YxfoG56l!F-TcgTkaPTObVwWH^Htxx?Kn}@TaLK;7u-JJQRQCUa( +z-j~Q?P04rzusJa$V-`bZKcl;JPV>Nne-cTd0hJseR85t6R^f +zg{+IQtGjn9gu~kE(4{hI +z4$J;BibUN=H)gWqs1JGnWcJfb;t88KOu3T&@Pmr;^HWp!FE|#<*Envw=2KDJz`y;o +z)NQWcYBRrgb`rUY@sDYmKciHWR!U;FkPENm_d7)s!^Lmfg7|X=q +zeX&Qfrao`o`*7ykSGUCFvV&Y_`!AbVJ>S6HLi6=kzAoiOoR11Po6KEhrj@@xS}A_< +z@JFr*XW#De%wsi}y?e?>t`NyIWuxWuwSNd`*z9deEBV}7Iak1JQt02+dGh%;`JaA! +zR>t*x@7Y71j6LiBZk79aYnya>&Z8q!>!meQzE$NtiV>d@bBy1+>v8nM$qf&qLizkd>3goV{ae@a>FmWmUya2T{L7ZP>Q;!` +zJ>FYyab08K9ZN+aS;O}RAB$@J1rMcjt>~NQqpc;s@=VB-Yu7rjtDaq^X0Z*o|7zYa=lw@ +z-%jx<9g@5??*cp(8{T9dE2{dd(%RqPc_w4QPDTGof9u%<=j&%>r|^l2A6))LNnWga +zx6ec4rF{*aK9l~wdZpRh!EWi+vb^H_kBTQ;{M~DP7$-|4YKFDk^-rJv;YVfm-Kw)w +zGM29_^!nmBY0a0_c1z3kL<)S{KW*-1dnzeX!Yq1cW|_`Dm2Y`>&Ykp`Zdn`qRWs_# +z-oEf>uY6wZ3_9TJ5TSVXSi#vjR!tr+oh3Yy-p{Ul0 -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Disable-Android-native-autofill-by-default.patch b/build/e_patches/Browser-Disable-Android-native-autofill-by-default.patch index af13f9d29e57f897548c250955877172422aa10e..7dc2b70a0855b8181c7bec91207b246846144312 100644 --- a/build/e_patches/Browser-Disable-Android-native-autofill-by-default.patch +++ b/build/e_patches/Browser-Disable-Android-native-autofill-by-default.patch @@ -1,4 +1,4 @@ -From 4da6a7e9ff30dcbf84e691fc3d28373749019115 Mon Sep 17 00:00:00 2001 +From 2f35d3687aa0816443245d40dbde27247e442518 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 22 Aug 2023 06:16:40 +0000 Subject: Browser: Disable Android native autofill by default @@ -8,18 +8,18 @@ Subject: Browser: Disable Android native autofill by default 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc -index f4e7b5879b254..171c4c98c7754 100644 +index 4bbc491571c5a..9df1a4bfc7ab6 100644 --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -46,7 +46,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterBooleanPref( - prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true); +@@ -54,7 +54,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref(kAutofillCreditCardFidoAuthOfferCheckboxState, + true); #endif - registry->RegisterBooleanPref(prefs::kAutofillAndroidEnabled, true); + registry->RegisterBooleanPref(prefs::kAutofillAndroidEnabled, false); registry->RegisterBooleanPref(prefs::kAutofillAndroidIncognitoEnabled, false); - registry->RegisterIntegerPref(prefs::kAutocompleteLastVersionRetentionPolicy, - 0); + registry->RegisterIntegerPref(kAutocompleteLastVersionRetentionPolicy, 0); + registry->RegisterStringPref(kAutofillUploadEncodingSeed, ""); -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-custom-tabs-by-default.patch b/build/e_patches/Browser-Enable-custom-tabs-by-default.patch index c579c829f42c8c369058d34cd357f27b392e00be..dded9ad75e6c92e0127e93ec04f859d0a262bebc 100644 --- a/build/e_patches/Browser-Enable-custom-tabs-by-default.patch +++ b/build/e_patches/Browser-Enable-custom-tabs-by-default.patch @@ -1,4 +1,4 @@ -From 15df80328edbd3593e59b077753585f377dfd48a Mon Sep 17 00:00:00 2001 +From 14bac8a877cbadf679d8c31a3339e2d86bc7f328 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 29 Nov 2021 03:37:37 +0000 Subject: Browser: Enable custom tabs by default @@ -11,10 +11,10 @@ Signed-off-by: althafvly 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml -index acf2f399ef151..32672a37830e3 100644 +index 0ef3eb91f9952..74db5db1df62c 100644 --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -61,7 +61,7 @@ found in the LICENSE file. +@@ -57,7 +57,7 @@ found in the LICENSE file. android:key="allow_custom_tab_intents" android:title="@string/allow_custom_tab_intents_title" android:summary="@string/allow_custom_tab_intents_summary" @@ -24,10 +24,10 @@ index acf2f399ef151..32672a37830e3 100644 android:title="@string/uses_separate_storagepartition_for_cct_title" android:summary="@string/uses_separate_storagepartition_for_cct_summary" diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -index 44fee10397c67..48bb063ba1643 100644 +index e160f892e60e2..1abbc3eaa3f69 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -283,7 +283,7 @@ public class LaunchIntentDispatcher { +@@ -279,7 +279,7 @@ public class LaunchIntentDispatcher { public static boolean isCustomTabIntent(Intent intent) { if (intent == null) return false; if (!ContextUtils.getAppSharedPreferences() @@ -37,5 +37,5 @@ index 44fee10397c67..48bb063ba1643 100644 Log.w( TAG, -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-do-not-track-by-default.patch b/build/e_patches/Browser-Enable-do-not-track-by-default.patch index e89a05a89d0ac364ba5d86014910d0436d2caefa..f5eed60897bde559399e9881abf7b8132d76569b 100644 --- a/build/e_patches/Browser-Enable-do-not-track-by-default.patch +++ b/build/e_patches/Browser-Enable-do-not-track-by-default.patch @@ -1,4 +1,4 @@ -From 19930949182e01abe3775bc3535581589e755f47 Mon Sep 17 00:00:00 2001 +From e359dac22e0e225288642b7ab27ad0276732dab5 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 26 Nov 2021 07:34:57 +0000 Subject: Browser: Enable do not track by default @@ -8,18 +8,18 @@ Subject: Browser: Enable do not track by default 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc -index fd95362628114..b6e6e86e0fa22 100644 +index 29fbbc50eb7a1..bb2e2498256af 100644 --- a/components/privacy_sandbox/tracking_protection_prefs.cc +++ b/components/privacy_sandbox/tracking_protection_prefs.cc -@@ -47,7 +47,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { - base::Time()); +@@ -12,7 +12,7 @@ namespace privacy_sandbox::tracking_protection { + void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( - prefs::kEnableDoNotTrack, false, + prefs::kEnableDoNotTrack, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - registry->RegisterBooleanPref(prefs::kUserBypass3pcExceptionsMigrated, false); - + registry->RegisterBooleanPref( + prefs::kFingerprintingProtectionEnabled, true, -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-external-intent-requests.patch b/build/e_patches/Browser-Enable-external-intent-requests.patch index c78cf8d1d8248665d0209b3d06741e9a902e53ef..bad8b78a8e402574a315f9e4869737f33a67b000 100644 --- a/build/e_patches/Browser-Enable-external-intent-requests.patch +++ b/build/e_patches/Browser-Enable-external-intent-requests.patch @@ -1,4 +1,4 @@ -From c5a5c1d50d7efd4e0d5f4f66995a4484190d7721 Mon Sep 17 00:00:00 2001 +From e5c8c04f3527eda0301064ad9b793381efb2132e Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 5 Nov 2024 10:08:21 +0530 Subject: Browser: Enable external intent requests @@ -17,10 +17,10 @@ Subject: Browser: Enable external intent requests delete mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Add-flag-to-disable-external-intent-requests.inc diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml -index 32672a37830e3..b2329f2646d16 100644 +index 74db5db1df62c..29305109fac32 100644 --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -86,8 +86,7 @@ found in the LICENSE file. +@@ -82,8 +82,7 @@ found in the LICENSE file. android:key="allow_external_intent_requests" android:title="@string/allow_external_intent_requests_title" android:summary="@string/allow_external_intent_requests_summary" @@ -29,20 +29,20 @@ index 32672a37830e3..b2329f2646d16 100644 + android:defaultValue="true" /> + android:title="@string/security_section_title" /> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java -index 7401741d913cd..a446ef7720250 100644 +index eee8dd86d836c..4c2f2979a5060 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java -@@ -17,6 +17,7 @@ import androidx.annotation.VisibleForTesting; - import androidx.browser.trusted.TrustedWebActivityDisplayMode.ImmersiveMode; +@@ -16,6 +16,7 @@ import androidx.annotation.Nullable; + import androidx.annotation.VisibleForTesting; import org.chromium.base.CallbackUtils; +import org.chromium.base.ContextUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.supplier.Supplier; import org.chromium.blink.mojom.DisplayMode; -@@ -36,7 +37,6 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; +@@ -35,7 +36,6 @@ import org.chromium.chrome.browser.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -50,7 +50,7 @@ index 7401741d913cd..a446ef7720250 100644 import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate; -@@ -128,7 +128,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { +@@ -127,7 +127,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { @Override public boolean shouldDisableAllExternalIntents() { @@ -91,10 +91,10 @@ index f293f54b31b00..a6b3082e44cfe 100644 @Override diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -index 6f878c3199cd0..8a2e2793018d3 100644 +index 5219c08073b4f..2f63860e76c17 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -124,6 +124,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -166,6 +166,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private ChromeSwitchPreference allowCustomTabIntentsPref; private ChromeSwitchPreference openExternalLinksPref; @@ -102,7 +102,7 @@ index 6f878c3199cd0..8a2e2793018d3 100644 private static final String PREF_HISTORY_EXPIRE_DAYS_THRESHOLD = "history_expire_days_threshold"; -@@ -396,6 +397,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -436,6 +437,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; public static final String PREF_OPEN_EXTERNAL_LINKS_INCOGNITO = "open_external_links_incognito"; @@ -110,7 +110,7 @@ index 6f878c3199cd0..8a2e2793018d3 100644 @Override public boolean onPreferenceChange(Preference preference, Object newValue) { -@@ -442,6 +444,10 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -482,6 +484,10 @@ public class PrivacySettings extends ChromeBaseSettingsFragment SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit(); sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue); sharedPreferencesEditor.apply(); @@ -121,7 +121,7 @@ index 6f878c3199cd0..8a2e2793018d3 100644 } return true; } -@@ -484,6 +490,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -524,6 +530,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment openExternalLinksPref.setOnPreferenceChangeListener(this); openExternalLinksPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); @@ -201,5 +201,5 @@ index c4015ad7de119..0000000000000 - "AllowExternalIntentRequests", - base::FEATURE_DISABLED_BY_DEFAULT); -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-search-suggestion-by-default.patch b/build/e_patches/Browser-Enable-search-suggestion-by-default.patch index f6ee3273229e080b6b4e0e85086c361261067f33..04927ce56b5b8f6b72b5841f9fe3e7f18e58d21c 100644 --- a/build/e_patches/Browser-Enable-search-suggestion-by-default.patch +++ b/build/e_patches/Browser-Enable-search-suggestion-by-default.patch @@ -1,4 +1,4 @@ -From c5214af9a0c0f2d72c55389020b2d703fbe63b93 Mon Sep 17 00:00:00 2001 +From 89a86e5d433632a64da7db1bcb65b0aada874621 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 29 Nov 2021 03:39:21 +0000 Subject: Browser: Enable search suggestion by default @@ -9,7 +9,7 @@ Signed-off-by: Aayush Gupta 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc -index 96a97ed251741..a490fefce8c79 100644 +index d327a26d80eb9..363a7c4ac583f 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc @@ -318,7 +318,7 @@ const char Profile::kProfileKey[] = "__PROFILE__"; @@ -22,5 +22,5 @@ index 96a97ed251741..a490fefce8c79 100644 #if BUILDFLAG(IS_ANDROID) registry->RegisterStringPref( -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-unified-autoplay-by-default.patch b/build/e_patches/Browser-Enable-unified-autoplay-by-default.patch index a4388563a03751b0e44aede8eeafd0984f1c5108..2e0194882432e1e44d48f4b4d18301df92342b22 100644 --- a/build/e_patches/Browser-Enable-unified-autoplay-by-default.patch +++ b/build/e_patches/Browser-Enable-unified-autoplay-by-default.patch @@ -1,4 +1,4 @@ -From 38ee2061d5b911a0c939dfcc52d0f44c9effade3 Mon Sep 17 00:00:00 2001 +From ba6adcee9ce48feb648d5260eae8e92bbaf5dd2a Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 29 Sep 2023 16:30:17 +0530 Subject: Browser: Enable unified autoplay by default @@ -9,7 +9,7 @@ Subject: Browser: Enable unified autoplay by default 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index 0f865d060a067..b738b065892f3 100644 +index 5fb6ae6e01299..e0f2063719ba1 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc @@ -248,7 +248,7 @@ void ContentSettingsRegistry::Init() { @@ -22,10 +22,10 @@ index 0f865d060a067..b738b065892f3 100644 /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK}, WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/third_party/blink/renderer/core/html/media/autoplay_policy.cc -index 2be0fa8d55043..235fb5eb1ef52 100644 +index 7ec87e7331cca..6cf31134a2160 100644 --- a/third_party/blink/renderer/core/html/media/autoplay_policy.cc +++ b/third_party/blink/renderer/core/html/media/autoplay_policy.cc -@@ -458,7 +458,7 @@ bool AutoplayPolicy::IsAutoplayAllowedPerSettings() const { +@@ -467,7 +467,7 @@ bool AutoplayPolicy::IsAutoplayAllowedPerSettings() const { return false; if (auto* settings_client = frame->GetContentSettingsClient()) { return settings_client->AllowContentSetting( @@ -35,5 +35,5 @@ index 2be0fa8d55043..235fb5eb1ef52 100644 return true; } -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-webRTC-by-default.patch b/build/e_patches/Browser-Enable-webRTC-by-default.patch index c057ae065ba783a3016d78f4acc52c33a8eea4d1..3a178e81b3f432d11a26ea460d93cf7ae09b968d 100644 --- a/build/e_patches/Browser-Enable-webRTC-by-default.patch +++ b/build/e_patches/Browser-Enable-webRTC-by-default.patch @@ -1,4 +1,4 @@ -From af79ad0d42ce9797860e1aa432e58487496d1a7b Mon Sep 17 00:00:00 2001 +From 3f3b8db4033d183b6c8ceaaf53675b6f6129c9b8 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 20 Oct 2023 18:49:36 +0530 Subject: Browser: Enable webRTC by default @@ -21,7 +21,7 @@ index 69b2de0ff52fa..c4ce181e6c88c 100644 /*allowlisted_schemes=*/{}, /*valid_settings=*/{CONTENT_SETTING_ALLOW, diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc -index 2115efdf09b96..b195bea754ba6 100644 +index 82e546862ca34..41d80a57a65de 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc @@ -938,7 +938,7 @@ PeerConnectionDependencyFactory::CreatePortAllocator( @@ -34,10 +34,10 @@ index 2115efdf09b96..b195bea754ba6 100644 } diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc -index 2c7e095d217bb..c2c0157f0f217 100644 +index a790ec15b5a39..3cd384ad1ef44 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc -@@ -292,7 +292,7 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, +@@ -294,7 +294,7 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, auto* web_frame = static_cast(WebFrame::FromCoreFrame(window->GetFrame())); blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient(); @@ -47,10 +47,10 @@ index 2c7e095d217bb..c2c0157f0f217 100644 } diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc -index d6984a258d198..667ed5551a7f6 100644 +index 9255e9753d1cb..757f3150ecc23 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc -@@ -1039,7 +1039,7 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, +@@ -1041,7 +1041,7 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, auto* web_frame = static_cast(WebFrame::FromCoreFrame(window->GetFrame())); blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient(); @@ -60,5 +60,5 @@ index d6984a258d198..667ed5551a7f6 100644 } -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Enable-webgl-by-default.patch b/build/e_patches/Browser-Enable-webgl-by-default.patch index 5c8fee1e54cb43b1a226772f8ff610dc80394b89..3da4d4f5345b7e7c76a703c74feee8a997417d2f 100644 --- a/build/e_patches/Browser-Enable-webgl-by-default.patch +++ b/build/e_patches/Browser-Enable-webgl-by-default.patch @@ -1,4 +1,4 @@ -From 3c400ea77a22abd4f0a6dcf3317b8faed15570b3 Mon Sep 17 00:00:00 2001 +From 3468072420f2d0d19557c3075f3198855aee7f72 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 24 Oct 2023 14:39:06 +0530 Subject: Browser: Enable webgl by default @@ -19,10 +19,10 @@ index 3ff01832baef4..dd88ffeab7bbb 100644 /*allowlisted_schemes=*/{}, /*valid_settings=*/{CONTENT_SETTING_ALLOW, diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc -index 5c1af10f6b940..6e0105c8a36fd 100644 +index 96b41aa57813c..e943308552e6b 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -88,8 +88,8 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor( +@@ -89,8 +89,8 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor( bool AllowWebgl(ExecutionContext* context) { blink::WebContentSettingsClient* settings = GetContentSettingsClientFor(context); if (settings) @@ -34,5 +34,5 @@ index 5c1af10f6b940..6e0105c8a36fd 100644 ExecutionContext::ExecutionContext(v8::Isolate* isolate, -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Fix-open-in-browser-text.patch b/build/e_patches/Browser-Fix-open-in-browser-text.patch index 1cf90cd1ccb65babc79a8f4ab827932307401803..560aefd7620ba5e5c04c9e8cccb6670532bfde86 100644 --- a/build/e_patches/Browser-Fix-open-in-browser-text.patch +++ b/build/e_patches/Browser-Fix-open-in-browser-text.patch @@ -1,4 +1,4 @@ -From 266d55fb7a8d08219229a6f827a63acab27979e2 Mon Sep 17 00:00:00 2001 +From 848c682eeef78d196a634bffff9b67495712ef62 Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 2 Oct 2024 11:41:48 +0530 Subject: Browser: Fix open in browser text @@ -8,13 +8,13 @@ Subject: Browser: Fix open in browser text 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/DefaultBrowserInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/DefaultBrowserInfo.java -index cbdc4d9de49ae..0f19c9e7e9885 100644 +index ce181350f680f..d2953b762781d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/DefaultBrowserInfo.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/DefaultBrowserInfo.java -@@ -130,9 +130,13 @@ public final class DefaultBrowserInfo { +@@ -90,9 +90,13 @@ public final class DefaultBrowserInfo { } - private static String getTitleFromPackageLabel(Context context, String packageLabel) { + private static String getTitleFromPackageLabel(Context context, @Nullable String packageLabel) { - return packageLabel == null - ? context.getString(R.string.menu_open_in_product_default) - : context.getString(R.string.menu_open_in_product, packageLabel); @@ -29,5 +29,5 @@ index cbdc4d9de49ae..0f19c9e7e9885 100644 /** -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Hide-settings-when-parental-control-is-active.patch b/build/e_patches/Browser-Hide-settings-when-parental-control-is-active.patch index 12ca4bc357f561ce12c4768084acc830f0d1cf78..6b0e2a6e026c8366276f6d5134eb34e2dbaf23fc 100644 --- a/build/e_patches/Browser-Hide-settings-when-parental-control-is-active.patch +++ b/build/e_patches/Browser-Hide-settings-when-parental-control-is-active.patch @@ -1,4 +1,4 @@ -From db8cd5e2d8fccd7b1cb6c407ccdbd229d6438cb7 Mon Sep 17 00:00:00 2001 +From ae536d662a9384b8866127dc6e2d31982a78728a Mon Sep 17 00:00:00 2001 From: althafvly Date: Thu, 11 Jul 2024 11:11:15 +0530 Subject: Browser: Hide settings when parental control is active @@ -11,10 +11,10 @@ Subject: Browser: Hide settings when parental control is active 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -index 7287d541b043f..1f785c9eb267a 100644 +index 99378d7f5b830..7c4ba4977f412 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -71,6 +71,7 @@ import org.chromium.chrome.browser.WarmupManager; +@@ -72,6 +72,7 @@ import org.chromium.chrome.browser.WarmupManager; import org.chromium.chrome.browser.ai.AiAssistantService; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.app.download.DownloadMessageUiDelegate; @@ -22,7 +22,7 @@ index 7287d541b043f..1f785c9eb267a 100644 import org.chromium.chrome.browser.app.metrics.LaunchCauseMetrics; import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory; import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController; -@@ -2373,7 +2374,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity +@@ -2417,7 +2418,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity @BrowserProfileType int type = Profile.getBrowserProfileTypeFromProfile(getCurrentTabModel().getProfile()); @@ -32,7 +32,7 @@ index 7287d541b043f..1f785c9eb267a 100644 SettingsNavigationFactory.createSettingsNavigation(); settingsNavigation.startSettings(this); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -index ec19a7db64a51..59b8b9fc57e7f 100644 +index 0706ef94e4d7c..f4f977c8397fa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java @@ -37,6 +37,7 @@ import org.chromium.base.supplier.OneshotSupplier; @@ -41,32 +41,32 @@ index ec19a7db64a51..59b8b9fc57e7f 100644 import org.chromium.chrome.R; +import org.chromium.chrome.browser.app.flags.ChromeCachedFlags; import org.chromium.chrome.browser.ActivityTabProvider; - import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; - import org.chromium.chrome.browser.profiles.ProfileManager; -@@ -674,6 +675,10 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate - item.setEnabled(isIncognitoEnabled() && !isIncognitoReauthShowing); - } - + import org.chromium.chrome.browser.bookmarks.BookmarkModel; + import org.chromium.chrome.browser.bookmarks.PowerBookmarkUtils; +@@ -670,6 +671,10 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties + /** Return whether the given {@link MenuItem} is managed by policy. */ + protected boolean isMenuItemManaged(MenuItem item) { + if (item.getItemId() == R.id.new_incognito_tab_menu_id) { + if (item.getItemId() == R.id.preferences_id && item.isVisible()) { + item.setEnabled(!ChromeCachedFlags.isAdminActive()); + } + - if (item.getItemId() == R.id.divider_line_id) { - item.setEnabled(false); - } + return IncognitoUtils.isIncognitoModeManaged( + mTabModelSelector.getCurrentModel().getProfile()); + } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java -index 6040e96c47e0d..23a9a0d8dfdf4 100644 +index eede1c3436602..8e12c0c141d49 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java -@@ -26,6 +26,7 @@ import org.chromium.components.cached_flags.CachedFlagUtils; - import org.chromium.components.cached_flags.CachedFlagsSafeMode; +@@ -27,6 +27,7 @@ import org.chromium.components.cached_flags.CachedFlagsSafeMode; import org.chromium.components.omnibox.OmniboxFeatures; + import org.chromium.ui.base.UiAndroidFeatureList; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -@@ -177,4 +178,32 @@ public class ChromeCachedFlags { +@@ -180,4 +181,32 @@ public class ChromeCachedFlags { return cachedFlag.isEnabled(); } @@ -100,18 +100,18 @@ index 6040e96c47e0d..23a9a0d8dfdf4 100644 + } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -index 3fe67443571f8..5e83dbc4b856e 100644 +index b8afd85d390cc..b448838375c98 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -30,6 +30,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; - import org.chromium.base.task.PostTask; - import org.chromium.base.task.TaskTraits; - import org.chromium.chrome.R; +@@ -23,6 +23,7 @@ import androidx.lifecycle.Lifecycle; + import androidx.preference.Preference; + + import org.chromium.base.BuildInfo; +import org.chromium.chrome.browser.app.flags.ChromeCachedFlags; - import org.chromium.chrome.browser.autofill.options.AutofillOptionsFragment; - import org.chromium.chrome.browser.autofill.options.AutofillOptionsFragment.AutofillOptionsReferrer; - import org.chromium.chrome.browser.autofill.settings.SettingsNavigationHelper; -@@ -182,6 +183,9 @@ public class MainSettings extends ChromeBaseSettingsFragment + import org.chromium.base.ContextUtils; + import org.chromium.base.DeviceInfo; + import org.chromium.base.shared_preferences.SharedPreferencesManager; +@@ -188,6 +189,9 @@ public class MainSettings extends ChromeBaseSettingsFragment @Override public void onStart() { @@ -122,5 +122,5 @@ index 3fe67443571f8..5e83dbc4b856e 100644 SyncService syncService = SyncServiceFactory.getForProfile(getProfile()); if (syncService != null) { -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Modify-default-search-engines.patch b/build/e_patches/Browser-Modify-default-search-engines.patch index efba82fcefadf28ef6c56912fb58114c9bae1e9e..b0f0bed0228cc1b145228cf7b24ccc7dff0368bd 100644 --- a/build/e_patches/Browser-Modify-default-search-engines.patch +++ b/build/e_patches/Browser-Modify-default-search-engines.patch @@ -1,4 +1,4 @@ -From d91e41ab5facc78ed043dc31025dcef5537ebdbc Mon Sep 17 00:00:00 2001 +From 10154e3be6dfe6deebc0ff18859507adc98b42a0 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 18 Mar 2021 13:42:44 +0100 Subject: Browser: Modify default search engines @@ -6,17 +6,18 @@ Subject: Browser: Modify default search engines Signed-off-by: althafvly Co-authored-by: althafvly +Co-authored-by: Nishith Khanna --- .../locale/locale_template_url_loader.cc | 42 ++----------------- .../locale/locale_template_url_loader.h | 1 - .../browser/locale/LocaleManagerDelegate.java | 1 - .../locale/LocaleTemplateUrlLoader.java | 8 ---- + .../regional_capabilities_service.cc | 4 ++ .../cromite/cromite_prepopulated_engines.json | 32 ++++++++++++++ - .../search_engine_countries-inc.cc | 8 ++-- .../search_engines/search_engine_type.h | 4 +- .../search_engines/search_engine_utils.cc | 12 +----- - .../template_url_prepopulate_data.cc | 7 +++- - 9 files changed, 50 insertions(+), 65 deletions(-) + .../template_url_prepopulate_data.cc | 8 ++-- + 9 files changed, 48 insertions(+), 64 deletions(-) diff --git a/chrome/browser/android/locale/locale_template_url_loader.cc b/chrome/browser/android/locale/locale_template_url_loader.cc index 1cb4b8bd94469..d65f18f980387 100644 @@ -112,10 +113,10 @@ index c63dc8bd3eab2..b9c9db2d6d08d 100644 LocaleTemplateUrlLoader(const LocaleTemplateUrlLoader&) = delete; LocaleTemplateUrlLoader& operator=(const LocaleTemplateUrlLoader&) = delete; diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -index 22f8ec082c49a..5d44feaf4a8f9 100644 +index 7f2244850c635..36d77300bfaa5 100644 --- a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java +++ b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -@@ -153,7 +153,6 @@ public class LocaleManagerDelegate { +@@ -165,7 +165,6 @@ public class LocaleManagerDelegate { */ private void revertDefaultSearchEngineOverride() { if (!isSearchEngineAutoSwitchEnabled() || isSpecialLocaleEnabled()) return; @@ -124,10 +125,10 @@ index 22f8ec082c49a..5d44feaf4a8f9 100644 ContextUtils.getApplicationContext().getString(R.string.using_google)); } diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleTemplateUrlLoader.java b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleTemplateUrlLoader.java -index a5ba6b961e6b0..52295c0b59e19 100644 +index 26c187bbcff33..60a32065acd26 100644 --- a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleTemplateUrlLoader.java +++ b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleTemplateUrlLoader.java -@@ -70,12 +70,6 @@ public class LocaleTemplateUrlLoader { +@@ -72,12 +72,6 @@ public class LocaleTemplateUrlLoader { .overrideDefaultSearchProvider(mNativeLocaleTemplateUrlLoader); } @@ -140,7 +141,7 @@ index a5ba6b961e6b0..52295c0b59e19 100644 @NativeMethods interface Natives { long init(@JniType("std::string") String localeId, @JniType("Profile*") Profile profile); -@@ -87,7 +81,5 @@ public class LocaleTemplateUrlLoader { +@@ -89,7 +83,5 @@ public class LocaleTemplateUrlLoader { void removeTemplateUrls(long nativeLocaleTemplateUrlLoader); void overrideDefaultSearchProvider(long nativeLocaleTemplateUrlLoader); @@ -148,6 +149,21 @@ index a5ba6b961e6b0..52295c0b59e19 100644 - void setGoogleAsDefaultSearch(long nativeLocaleTemplateUrlLoader); } } +diff --git a/components/regional_capabilities/regional_capabilities_service.cc b/components/regional_capabilities/regional_capabilities_service.cc +index a2e55a3def654..04466a2901dc4 100644 +--- a/components/regional_capabilities/regional_capabilities_service.cc ++++ b/components/regional_capabilities/regional_capabilities_service.cc +@@ -159,6 +159,10 @@ CountryIdHolder RegionalCapabilitiesService::GetCountryId() { + + std::vector + RegionalCapabilitiesService::GetRegionalPrepopulatedEngines() { ++ bool use_default = true; ++ if (use_default) { ++ return GetDefaultPrepopulatedEngines(); ++ } + if (HasSearchEngineCountryListOverride()) { + auto country_override = std::get( + GetSearchEngineCountryOverride().value()); diff --git a/components/search_engines/cromite/cromite_prepopulated_engines.json b/components/search_engines/cromite/cromite_prepopulated_engines.json index 0d2ebbf08bfc7..9a7616e880b02 100644 --- a/components/search_engines/cromite/cromite_prepopulated_engines.json @@ -191,38 +207,20 @@ index 0d2ebbf08bfc7..9a7616e880b02 100644 "googleen": { "name": "Google in English", "keyword": "googleen", -diff --git a/components/search_engines/search_engine_countries-inc.cc b/components/search_engines/search_engine_countries-inc.cc -index 18fee305eb091..d24cf8e7f4478 100644 ---- a/components/search_engines/search_engine_countries-inc.cc -+++ b/components/search_engines/search_engine_countries-inc.cc -@@ -38,9 +38,11 @@ struct EngineAndTier { - - // Default (for countries with no better engine set) - constexpr EngineAndTier engines_default[] = { -- {SearchEngineTier::kTopEngines, &google}, -- {SearchEngineTier::kTopEngines, &bing}, -- {SearchEngineTier::kTopEngines, &yahoo}, -+ {SearchEngineTier::kTopEngines, &murenasearch}, -+ {SearchEngineTier::kTopEngines, &spot}, -+ {SearchEngineTier::kTopEngines, &qwant}, -+ {SearchEngineTier::kTopEngines, &duckduckgo}, -+ {SearchEngineTier::kTopEngines, &duckduckgo_light}, - }; - - // Note, the below entries are sorted by country code, not the name in comment. diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h -index 205baa60bf23a..5b6b03f2aee08 100644 +index 91b236acd990d..f17a33f9e183d 100644 --- a/components/search_engines/search_engine_type.h +++ b/components/search_engines/search_engine_type.h -@@ -96,11 +96,13 @@ enum SearchEngineType { - SEARCH_ENGINE_MCAFEE = 77, - SEARCH_ENGINE_GOOGLE_EN = 78, - SEARCH_ENGINE_DUCKDUCKGOLIGHT = 79, -+ SEARCH_ENGINE_MURENASEARCH = 80, -+ SEARCH_ENGINE_SPOT = 81, +@@ -99,12 +99,14 @@ enum SearchEngineType { + SEARCH_ENGINE_KAGI = 79, + SEARCH_ENGINE_GOOGLE_EN = 80, + SEARCH_ENGINE_DUCKDUCKGOLIGHT = 81, ++ SEARCH_ENGINE_MURENASEARCH = 82, ++ SEARCH_ENGINE_SPOT = 83, SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; + // LINT.ThenChange(//tools/metrics/histograms/enums.xml:OmniboxSearchEngineType) -static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT == (SEARCH_ENGINE_MAX - 1), +static_assert(SEARCH_ENGINE_SPOT == (SEARCH_ENGINE_MAX - 1), @@ -253,30 +251,38 @@ index 4b32c2424922b..9808a5e92ff3a 100644 if (SameDomain(url, GURL(engine->search_url))) { return engine->type; diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc -index 3883a557fa6a0..fc5db64634650 100644 +index fdb5ed979e02b..c45ee177a3eaf 100644 --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc -@@ -75,6 +75,11 @@ GetPrepopulatedEnginesForEeaRegionCountries(CountryID country_id, - std::vector> GetPrepopulatedTemplateURLData( - CountryID country_id, - PrefService& prefs) { -+ bool use_default = true; -+ if (use_default) { -+ return GetDefaultPrepopulatedEngines(); -+ } -+ - if (regional_capabilities::HasSearchEngineCountryListOverride()) { - auto country_override = - std::get( -@@ -284,7 +289,7 @@ void ClearPrepopulatedEnginesInPrefs(PrefService* prefs) { - std::unique_ptr GetPrepopulatedFallbackSearch( - PrefService& prefs, - CountryID country_id) { -- return FindPrepopulatedEngineInternal(prefs, country_id, google.id, -+ return FindPrepopulatedEngineInternal(prefs, country_id, murenasearch.id, +@@ -147,7 +147,8 @@ std::vector> GetPrepopulatedEngines( + regional_prepopulated_engines) { + std::vector> t_urls = + GetPrepopulatedEnginesChromium(prefs, regional_prepopulated_engines); +- t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(googleen)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(murenasearch)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(spot)); + t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(duckduckgo_light)); + return t_urls; + } +@@ -177,7 +178,8 @@ std::vector> GetLocalPrepopulatedEngines( + base::ToVector( + regional_capabilities::GetPrepopulatedEngines(country_id, prefs), + &PrepopulatedEngineToTemplateURLData); +- t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(googleen)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(murenasearch)); ++ t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(spot)); + t_urls.push_back(TemplateURLDataFromPrepopulatedEngine(duckduckgo_light)); + return t_urls; + } +@@ -239,7 +241,7 @@ std::unique_ptr GetPrepopulatedFallbackSearch( + std::vector + regional_prepopulated_engines) { + return FindPrepopulatedEngineInternal(prefs, regional_prepopulated_engines, +- google.id, ++ murenasearch.id, /*use_first_as_fallback=*/true); } -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Move-to-Murena-Qwant-from-QwanteSpot.patch b/build/e_patches/Browser-Move-to-Murena-Qwant-from-QwanteSpot.patch index e79c845a74cd93de3c9053beb664033fc9184e17..be142470907aa6a11a2cfb6e3cc4a5ddb6f77109 100644 --- a/build/e_patches/Browser-Move-to-Murena-Qwant-from-QwanteSpot.patch +++ b/build/e_patches/Browser-Move-to-Murena-Qwant-from-QwanteSpot.patch @@ -1,4 +1,4 @@ -From 16b7b86ca978c318005903fc1282c1037bf95c11 Mon Sep 17 00:00:00 2001 +From 716d0a69e192ddf9917063f55d882108fb8856e9 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 25 Apr 2025 11:15:25 +0530 Subject: Browser: Move to Murena Qwant from Qwant/eSpot @@ -8,10 +8,10 @@ Subject: Browser: Move to Murena Qwant from Qwant/eSpot 1 file changed, 31 insertions(+) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -index 5e83dbc4b856e..66bb90afd486f 100644 +index b448838375c98..ebc5eb3dad83a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -74,6 +74,7 @@ import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate; +@@ -78,6 +78,7 @@ import org.chromium.components.browser_ui.settings.SettingsCustomTabLauncher; import org.chromium.components.browser_ui.settings.SettingsNavigation; import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.styles.SemanticColorUtils; @@ -19,7 +19,7 @@ index 5e83dbc4b856e..66bb90afd486f 100644 import org.chromium.components.search_engines.TemplateUrl; import org.chromium.components.search_engines.TemplateUrlService; import org.chromium.components.signin.AccountManagerFacade; -@@ -250,6 +251,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -256,6 +257,7 @@ public class MainSettings extends ChromeBaseSettingsFragment cachePreferences(); updateAutofillPreferences(); updatePlusAddressesPreference(); @@ -27,7 +27,7 @@ index 5e83dbc4b856e..66bb90afd486f 100644 // TODO(crbug.com/40242060): Remove the passwords managed subtitle for local and UPM // unenrolled users who can see it directly in the context of the setting. -@@ -440,6 +442,35 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -438,6 +440,35 @@ public class MainSettings extends ChromeBaseSettingsFragment }); } @@ -64,5 +64,5 @@ index 5e83dbc4b856e..66bb90afd486f 100644 TemplateUrlService templateUrlService = TemplateUrlServiceFactory.getForProfile(getProfile()); -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Remove-logo-from-chromeversion.patch b/build/e_patches/Browser-Remove-logo-from-chromeversion.patch index d6e5529b419cf090ab0fc45eedab3f4755823a1c..23d240e358ecf7485d10ad3375eb1a44877b67fd 100644 --- a/build/e_patches/Browser-Remove-logo-from-chromeversion.patch +++ b/build/e_patches/Browser-Remove-logo-from-chromeversion.patch @@ -1,4 +1,4 @@ -From 5d4ebb0bbc6bd4a585757ed2d744c900fafe7506 Mon Sep 17 00:00:00 2001 +From 0d82639ae8fbebac97cdf1c0052bfc1d084ef1c6 Mon Sep 17 00:00:00 2001 From: A Mak Date: Sat, 25 Jul 2020 17:56:47 -0700 Subject: Browser: Remove logo from chrome://version @@ -8,10 +8,10 @@ Subject: Browser: Remove logo from chrome://version 1 file changed, 7 deletions(-) diff --git a/components/webui/version/resources/about_version.html b/components/webui/version/resources/about_version.html -index 1243b0cb31f59..197ffeb47b626 100644 +index e4ad426e42bca..9036415084b05 100644 --- a/components/webui/version/resources/about_version.html +++ b/components/webui/version/resources/about_version.html -@@ -39,13 +39,6 @@ about:version template page +@@ -40,13 +40,6 @@ about:version template page media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"> $i18n{logo_alt_text} @@ -26,5 +26,5 @@ index 1243b0cb31f59..197ffeb47b626 100644
$i18n{company}
-- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-Remove-send-to-devices-option.patch b/build/e_patches/Browser-Remove-send-to-devices-option.patch index f54caa4365323b1c0ac4413f7210aec59e60c6e8..3a1ff8995a9c09eaa6365430dee29dd124dd1000 100644 --- a/build/e_patches/Browser-Remove-send-to-devices-option.patch +++ b/build/e_patches/Browser-Remove-send-to-devices-option.patch @@ -1,4 +1,4 @@ -From 0a0069d5d4f81b36d5b3fbe62c5bd0aa68040a52 Mon Sep 17 00:00:00 2001 +From e99b815a5ff31da3207ef210a6235fd92f49af9d Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 20 Oct 2023 18:23:09 +0530 Subject: Browser: Remove send to devices option @@ -8,7 +8,7 @@ Subject: Browser: Remove send to devices option 1 file changed, 34 deletions(-) diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java -index 9a03bf9c79ad0..1c5b2f27a8e89 100644 +index 4f3776549d5b7..a900b9c6a026e 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java @@ -276,7 +276,6 @@ public abstract class ChromeProvidedSharingOptionsProviderBase { @@ -67,5 +67,5 @@ index 9a03bf9c79ad0..1c5b2f27a8e89 100644 return new FirstPartyOptionBuilder(ContentType.LINK_PAGE_VISIBLE) .setIcon(R.drawable.sharing_print, R.string.print_share_activity_title) -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Rename-strings-to-browser.patch b/build/e_patches/Browser-Rename-strings-to-browser.patch index ec7d17da2280a15e8c929c855c85e3cabd234629..57cc5a070ac0e4ac4b78f0ae03f5d482f56282ea 100644 --- a/build/e_patches/Browser-Rename-strings-to-browser.patch +++ b/build/e_patches/Browser-Rename-strings-to-browser.patch @@ -1,4 +1,4 @@ -From 671e4a51c8c183773c0bd777859c49709d6b739c Mon Sep 17 00:00:00 2001 +From 95741379f2ba1c10324e7e42a641c50af3fbbef1 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 07:12:30 +0000 Subject: Browser: Rename strings to browser @@ -6,10 +6,10 @@ Subject: Browser: Rename strings to browser Signed-off-by: Aayush Gupta --- .../android/java/res/xml/about_chrome_preferences.xml | 3 +++ - .../browser/about_settings/AboutChromeSettings.java | 8 ++++---- + .../browser/about_settings/AboutChromeSettings.java | 7 +++---- .../ui/android/strings/android_chrome_strings.grd | 2 ++ chrome/browser/ui/android/strings/foundation_e.grdp | 10 ++++++++++ - 4 files changed, 19 insertions(+), 4 deletions(-) + 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 chrome/browser/ui/android/strings/foundation_e.grdp diff --git a/chrome/android/java/res/xml/about_chrome_preferences.xml b/chrome/android/java/res/xml/about_chrome_preferences.xml @@ -27,10 +27,10 @@ index fb1dfed23052b..d5092508ce452 100644 android:key="application_version" android:title="@string/application_version_title" /> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java -index 45645bf509f4d..c42374eac7404 100644 +index 599df250a62b6..c8878ba918a68 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java -@@ -31,7 +31,7 @@ public class AboutChromeSettings extends PreferenceFragmentCompat +@@ -37,7 +37,7 @@ public class AboutChromeSettings extends PreferenceFragmentCompat private static final String PREF_APPLICATION_VERSION = "application_version"; private static final String PREF_OS_VERSION = "os_version"; @@ -39,21 +39,21 @@ index 45645bf509f4d..c42374eac7404 100644 // Non-translated strings: @SuppressWarnings("InlineFormatString") -@@ -60,9 +60,9 @@ public class AboutChromeSettings extends PreferenceFragmentCompat - p.setOnPreferenceClickListener(this); +@@ -68,10 +68,9 @@ public class AboutChromeSettings extends PreferenceFragmentCompat p = findPreference(PREF_OS_VERSION); + assumeNonNull(p); p.setSummary(AboutSettingsBridge.getOSVersion()); - p = findPreference(PREF_LEGAL_INFORMATION); ++ p = findPreference(PREF_E_BROWSER_INFORMATION); + assumeNonNull(p); - int currentYear = Calendar.getInstance().get(Calendar.YEAR); - p.setSummary(getString(R.string.legal_information_summary, currentYear)); -+ -+ p = findPreference(PREF_E_BROWSER_INFORMATION); + p.setSummary(getString(R.string.e_browser_information)); } @Override diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 50e71ac6b7926..b88199f8c4cb0 100644 +index 23ca8eed0bfc2..5ba4cc31d97fa 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd @@ -202,6 +202,8 @@ CHAR_LIMIT guidelines: @@ -82,5 +82,5 @@ index 0000000000000..49da40abd38e7 + + -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Replace-default-tab-favicon.patch b/build/e_patches/Browser-Replace-default-tab-favicon.patch index 0c246d2f417e87d98b2a12cba5af5a28c3716000..1b17133de13c505b31e3f6d63f2a358e498cbe05 100644 --- a/build/e_patches/Browser-Replace-default-tab-favicon.patch +++ b/build/e_patches/Browser-Replace-default-tab-favicon.patch @@ -1,4 +1,4 @@ -From 1b4e49799d9175c9996e5da887700813701b5274 Mon Sep 17 00:00:00 2001 +From ea4736776358b51736b7ebe26142a369a6765ac8 Mon Sep 17 00:00:00 2001 From: althafvly Date: Mon, 2 Jan 2023 15:12:41 +0530 Subject: Browser: Replace default tab favicon @@ -15,264 +15,272 @@ diff --git a/chrome/browser/ui/android/favicon/java/res/drawable-hdpi/chromelogo index 94e727a0f2434845bc5f9a535a4e3e264247d18e..6d51b2259c96cf9f177416dad2ffba68345e66fc 100644 GIT binary patch delta 1005 -zcmV<$nR -zAb*fFVCcY905p&s{&FC}N(C_$M6SSc1=xQHpxxZN51qAH(zoa*i#ysHsl#%_xllk0O -z0CJAdhw!QZrv(mDM!@JUD49jHeTLzVjbI;NO3J<l`3+7%v(T4QouSmzd)? -z7coeX28=(z_%-NYg4+nWeGC4M()4Qy&q)tBnQK<0%g4MKRaKC8LL49L?xxBy!jdYW -zJCX?d5`T-6Q1c;C1d1xhDggLXY!teEIJSc`lKXIUu8f(mny}ph&{Q7o?G0(f);nq( -z8@4N1ZfK$wl}$v?lMtgide+hTWuV11<9qf>qtyDE3tCDhu!{uuurVoJ^%O2BQHWQh -z>58GdhN$W6UzhYN8~9b! -z2@Y97&+JBHrYt{7py$z;Y?X01nLaw|?7nZ(6twL$VDt*cPrc_S024@X&XLUI8`og3 -zig$v~%!6e95t1PxoSrY&EtacQi0H9Bf+BFQ=KOn>jVkX^B!Y8`mE@?*r5iWX8=y%a -z;(vv4$;_D#M7<%>-GbT{RsR~*y>9L<>95IGKp_+bR(>5!R&d?;ku-%n@;9;4! -z)`U61@7VSSMhT*wJv;qboDxW}BdW3>88*j;K;A}h -zYJ^5R!TNFOsIlHlr*j&>7cLy$zeMy6mS#vd@Dg^lSRv9iC+RF`9JJ+eBfhwk=@scP -zt}m)PVHH5>&xYKP_XP*)lzi*=5lL_P%6t()=o78avYLMwQoJFdGda{mC`UIb8R30g -bvUTzg*KP{!m_W?@00000NkvXXu0mjf#Ov0u +zcmZ3<{DXahWIY=L1H*%I+aC-J44efXk;M!Q+`=Ht$S`Y;1Oo#DV{wqX6T`Z5GA|hz +z7+BIBeH|GXHuiJ>Nn~YUVD9yFaSW+o>p9y$Sr8 +zw}PEYK5F#_%`OXky;J0o`L*}^QzJjl+P5b9&x~bngF58Q%*A=GcU}wM9yx9Otvnt5 +zB?fsdHx9m*QAl2Ax>YXp8$(y^PBoW<`N~TL|4Sdd_^k8|GX2yP}Fy!{lhAT<*a;tTfgt>jNhaF;oN}}F*=+Xa}IKReY^hb>>y4h%WlRh +zgI#NbMDJ{ktlx2>4U02Bq@1aUU8!Fo&-~<$TD|0pST&K8 +zOPdHh}Q%*$9LHr3bV{A7W}R#n$7{!CqP)bw%nH?PH4 +ze$C>J@>1K-&GLPNp=Rt?5j~B-j_@TfyB6+lTk-Nu{PZu{(mxVs@y!UR%6WaaF_&?T +zs8#(HLzT0OuT__J#`Li@tjyoB=b*uX+l8Ebk&frzxFs*svG-c={Njw9sf89Z?W|tC +z*_VGwWXoHVgfCpj{P#XrXAt%%I5+Xk6Y1*->$}RE&Yx*c`6oC@QE|>Z{p-5ZR)==H +z*l63NRIvWppXzD7TJHl@nu@!pK3Q>QskHfJ=>?whkLp_sPo9~{|1?uEK%(lKu(4Xe +zv6Wm=dM`K5Pn9ujb67a5F5$A7_Jng6RQ7MUJGJgX;>_*WS}YH~zwwRTjdRglTkF4( +zbA)eO=Sh_~6d(F{@awBX51Dpfta@~6t*`Q`O$w4`$J-q4xfNu!xLF_kRrqqn#(Un& +zi=_^T>&e{P@A8FrTAGLX2cfd95sH^g)nDpl$ZUC9sJw5-o^4c6(evQ89rczM3< +z&V=u*?60QOy#6leng8=tjiBQT;kD;C&8n9O+M~G8*z$^thP%0@*#Fb=wb^*4qyak+dI41 -zI(q=cZNRcX(#{De;_B$(VdLNe)M)4EYUAkU;N<4u=H?j?02Be5047~sTtE!P6Dtn_ -ztx+fm@(ZqKF#E%C@_WJUlIUP-%@_9;&1&!yzJA5iNL!MpE%T7G96Q^O#X!YZJzX3_ -zDsHt-aAj&S;Bl>IEiXUu*Wc3j<&M3+F(2n|`S#c9DEF!NCocWu;^)!5o56l(g{rMW -zwndA(f5jnIrP<-{c<0Sr&}qb|F>iNRn_SO4mP*c+X+hleU&jV?>F6JRYyA20!)vxb -zcr72a-Qm}{lhb_aZS$!mnMZc!tc#n!Bft9*gCq{I)D+F +zZSU-2>+E6U=wbtwwQ+Q|b8@kDc6IdduyJs)ad5VCbhUAGb8vEVaC7qv2(WQ*wsi!F +z+d8_sxPTanCsrP0U|>)v3GxfBXE6K2aq@e??ULwVYt0w;7R_q#6TW`M(@0yAr!Di4 +zvm86ykHriO3|Bo}978H@wN7wlYBAt(t!FJSKk?V!()Z<#y}mIY=WqG;*Xk(usrM%? +z{p8~3(Y>3&erJWMtwOd%i@SftAy%c?;qQ3o&0NrF#HcZEcUYTT&peh&&X#FG-1T3| +z7$w}a0z?EZnTcpb_Aw+W8FJPAAW26`SQbSwm*0+AGF=!*SV9^eCloUsU?|5cIK>$o4+H$`nOe*_{nE8vXk$4 +zFeQbhrc8LiC@K}sKEEm8VXL9kh2=j^vn~_%lqod(pmU6Yfq}u()z4*}Q$iB}m;;&? diff --git a/chrome/browser/ui/android/favicon/java/res/drawable-mdpi/chromelogo16.png b/chrome/browser/ui/android/favicon/java/res/drawable-mdpi/chromelogo16.png index da305f9d84ed11721b97ba81f5197d16fb1d25e5..a9338ad70ee4ef93562e41b96fde96bec99ded8a 100644 GIT binary patch delta 633 -zcmV-<0*3v*0*3{V8Gi-<001BJ|6u?C010qNS#tmY3ljhU3ljkVnw%H_0004VQb$4n -zuFf3k00004XF*Lt006O%3;baP0006UNkl#Y%Xq4G=hMH}uOHJr -z%NSEWBs%iUBMxDMCl`p;pRHZp_3d>pv%|w@Aq0aX2c`P#y#zD9ks>Ow|CfN=B;w(WLPpuZzJ*{GKr}(pX>PR7Ghcz-GV4HsxT6bM6A(1b6C;s1s?TqwEIsZY -z94v9%MaCf<<0OKN3~k}7vQqnhh?XdL-jd67X9-!*LzM+1GjEkBDr^wwy8eFw+d%nG -T`bxR-00000NkvXXu0mjffH4+V +zcmdnT)Xq9VvYw5BfkFQB|3n4`2F?PH$YKTtZeb8+WSBKaf`Ng7u{g-xiDBJ2nU@R< +z3@qu6zK#qG8~eHcB(gFvFv)njIEGX(<_1|82|EhBohN#%ZwpuF7Ooz5kmD5q+T +zY3=&#@I8jhl$ORFs{ioWY|aa*cxCGxeF3A^+LnC(fZ9#p?gp>z|F(7Co5}*Wd*(Z3 +z&*fg=UC`|DeD8g>m3|?d?E5dzRPkIh?IHg|lZKBa?kj~oIfS%X&a<8r&ldkMJ4J5U +zlv`7sqK|48ch-Jp;M9m@o6+#vuzmKKJ%=Q1Y}~yMi>Zdiw@%UBc7Urs+#zr07e$_1 +zpO1HUn|fGr-&_CmU-yf>TNF9WB!w)v<|G~~T%_84^}_zpq#AjZiuM;NX=iRTJr=ko +z|Mb9W4tqr{#>x*7+2Pl}mWDllbFyL&_oMont!4k#uA8oteB^MU%LEpcM-O|P+-@G& +z*P0;aVB&ZwGjFS)%Bwq3?Cq{S?M3f)AJkoFWT*0ewM*IL=+aB`P8r8H-Zgsd(6nPQ +zccid@$ys6LiI%I*=P%WHjq|5!XypjJ*!8cT@wUTH|6g7^KQS;cFnGH9xvXi4;u$(TSpgLM^_NT$<@Zu1#a@k*nR5hTFsU3t=6;Ea=sJ&#&{tA -zfmcWW`}NE(+&Wax*eqpj-RYN*G5La;?Uv<_Ze2d9z>Ql!99?a}y6l`>Y(dD?!NbF$p~1$%nW4CT2Ll6x +zbV-n3FoVeXW%f^kKHRNoaFF2pTz{k~Cc^9cnwHcA1(wM|6K66oFw}XvIEGZj<(_fp +zJ7U0dG~ndMm`kTi?){&aeAqFp(pvDxr0C=_!(BF~G+nfkEb{f%rg-c=^>nS~%J)|5 +z*=jl8iGE`|kpIA|qyPPS<`-@qs%LDLvbOH@OURgfLCto{@<+EWpHyJI`jXkqvoJt? +trj$%jr+LEZ8Pg}P%e$Bwy7M!;*Fw(!{j-A<7#J8BJYD@<);T3K0RS->Z(0BV diff --git a/chrome/browser/ui/android/favicon/java/res/drawable-xhdpi/chromelogo16.png b/chrome/browser/ui/android/favicon/java/res/drawable-xhdpi/chromelogo16.png index ae0ea90ccd6e078b39b0c4cc23449757b7568251..0dc195c54a9439de639dd22a8abb443ace6a77b2 100644 GIT binary patch delta 1550 -zcmV+p2J!i)1e6Sr8Gi-<0047(dh`GQ010qNS#tmY3ljhU3ljkVnw%H_0004VQb$4n -zuFf3k00004XF*Lt006O%3;baP000H4Nklt^m0La#Fr-@ocvKgP_$9z$nRRt}{xvBq-^f#Pu}R#HV`gP7i3CX>&8U*djays -z-i}xrfUUU@17utvduF~v1lAk^T}`GNV@X!lvWJ1c#D4@*ToCz(;joZW -zW_MbD4JxSuz{byphm^_`k@NE7fl~1U5VZg>Ggq<+H5WA4&vQeJ6raGT7{VG}j$IXNHElY40vY7Wsn8^TSnJW5LOLw4S)Iq5=$33;8{MGwdOY4E1ZwlNfNC$ -zwUiqOXa`x2>HOpF?g%C6mtOnjg4*NUT)6J{Y^_lxu=jB|v|JF5lv8EQHA*pQqurh$ -zfI&%^g8~px&^EpwGIKU0LxQ2wAZ!=xzFMSzAler!rKq@YiZe%{9~g(?CeR*mUmMYX -z1%C>Mh_oLRfavxS@i%Pf`QBd`vfpQqGeu`fE2abRVvC=Vl;ww4Lyx7R(r635#)_(g -zqigJ82h6Y`gMq1TC;-nm)LcH+-uPcv=V_WP3dVECmd|%W+Yg8Um4Jjc+wA)-=Wu|? -z`mBEo3J7GQ{>lDI_sCwbE3UAB(kE~xL4OINcR+wLy+d#LwanhEV@ -zHw80FdjnSbcl9rrF_D2G`&}$pb&Yedh2t%t5ZN1&L8CPI{>S;n#WD9(1AhsjY@wc| -z8>emGW-uV7WxpL#-Dn=E`q1I}dx6ZiSqeKNNO@9gTscr+8L!BLTXbAemQOhlmM7#7 -zfAQq?`jbf39>4qSkqx#1Cwvd=rj0i571*exiziCR+cpC92X$FK8_UD}?R$7^nGOhz -zBc`pr@SnwkW$F^;0OK0i9Dl)#n-kKL5`;+;|Eoy*V`mP@Ij0AO@hvsnc&wPW@ll~hSVYlH`8rpY +z8m3D!GsPQB{@Z#c?W=cQ7Wi85pR4xs_4^Cm_Lw&8eOPc=!q~*?>x5bz*)tRW8mc{? +zm-g&@&!aiN6&`CTB%j;2{AFPA`^iEAWft3KE?y>VVYR#brpRl%$6D3NZ_EVr{KZqe +zqF*0#`BBaI>Dax#2&sm(I|Z0iVic;=_Bpd$lVOVWT_&CE8Fp<`d*l8i^-PaLdM1AI +zpHr_NBk;5R;f4u8Y2{J%yjm-n4jen*);{Hw$dfM&mK*<-&%5cOkixIzc1*d+;eNfx +zq`wKvze?~V{(rjMTK-_*8ROjKD%t5F-&7bZtevL?uPpV~zM5~zVrIkCnwO^kbn}{< +z@?I?AwdzelMmOHnnA}q9^j=!_K)Igj(X<<84SVn26<+(5;jGHx;$y#pFE8!>DD)>HTWD?ILa%RTMS%R@2oyUGiX)}{1H +ziLH3ZnEfMq63>#L`LjGGSi8LV^XZero=qyR*%#mUFt}3BQ;~Kobpq?(Xt(Qu0%5#` +zy!F4BguKNqA4J+s-}=n#w)UL<>z+bu&9_dG=Ez`=?0fm=@w;~%sxPO<{eIeX>+zkK +z9q+#9tPND%@V(GtON>C@l;G4ere21bi|@`;XmIqL(aa@_l5Ej?T^$h$Q8s(U#w@X=W6fRA}`YL;+x<{^PCqy@5M`O +zx}V-}?3(VWy^Q%oQuq9cQ=YbmJNGYLbSZ;--?6S$&5N_&B(k5`pxE5FGEalyyv3Cm +zyKDD;#D_o6oTbZktoZn}^W{#r`8yb-&kg +z4chBAG+a_IP;;#3TvYDRV6@jc|L1l!|89m&uMV9&vVncanUxJT2KUqNF4gJHUaQbF +z>At>x{}E|1!OT?)dpovSuRHi9aJTP6s|Vs`4sXB2ABfD$cbINlpTfDR%Un;b<@ba3 +z?S`zER^IWRB<%d-BJ&?vgVopNx4xPjk+Sb>+)BMU{(941*y)sczNx>TxvEu*(`y4q +z!ePbEr0RxnhJPn+UtnmgTwx#eMdp3pfqOB!JELZw7FxS8t3~$n^eu;%O;J8z*ZMF! +z#lE)S>-O^fA7-_EmTRiazr7{CrhQYv1&h_z8@DTS@-i7`q}T-WecNNHdXjY0_eN1$ +zvOTNp{oTKet)?AY>9Eqn{##SRgdkysu&00IHhqhf`?!f|J=+G$#BiR!47c9j|6RFY +z7U$bEb5>)oYUZ$CZQ!>c%tMBe|@VJt~8;V=My_B-fv4jxLD_ +zoaS#SFirglfBnZNUw=*ZxF)y%_nV2l+Zfer_}?t+HG405W5tqgb*~e*&6vKhmqyx2 +zpFaHeZFNP?Og@fYDfN}mQ-;S#DHZLnU=yEiU$!XrYtk3m})l-#Z +V>f9R{7#J8l*j+i=Bprd`&bH33_U`TwL7+;Ipp&bulbf@VBAne(&d`!53Bp7tEl;^y{2Un$edJ -zZ)1(GUOaK2tw=@u(e@3MA!b7CFYeuLsn3z;**V#EQJ9Z}zw&7Y21a#H7srr_xV4wA -z_O&_)uw0O0E8qWaQ_%na^|R$p2t>%euY4EcEhWEnm9L!Z&t*XolSQ_4v3Td6pSka7 -zk9e`-Hv>nhPxB30zgiR?T{%;#;KJRj!mG_xR_42}*}eFpN_m6ukGcm8^Ol`R)L0uZ -zG1_6L%1f;We$I|Dk&h~0$!PdGYg4~owEUR!#dGfP^nJJ1<#Fb6( -zA`ip-Y5nT1EP|7GZo3|ARBG8V;feV(-JmXR7tf9H(wka#1d4n%)fX}6n7qv*=ZknxWj4R5fFU@ZAT#g7yiOv#wR&QTt+W -zaQfK}{=>gr;%8)f@x6M;c$&@IGwqqpDaX$&*_T$mFZ=O!wXNMteyPpww$Iz;W&=Z- -N!PC{xWt~$(69A3s)P(>5 +delta 537 +zcmbQjvz%puWIZzj1B1(wu44=g3@rgZA+8Jz40bNAF)=Z=4$ig?F1AjtHjXZ~PVTl2 +z&NdD%Ahx56owKWrgR_kzSb?Lnt)mNw?d)pr?hax&xY#(jfCQafZJpel-Q9gdLqY06 +z;vmJgjv&1b&K~Z5e)S-Aj?VVZ?zWCDc8)GK&dxRt&d-+bzsSJApj{H=7tEl;^y{2U +zn$edJZ)1(GUOaK2tw=@u(e@3MA!b7CFYeuLsn3z;**V#EQJ9Z}zw&7Y21a#H7srr_ +zxV4wA_O&_)uw0O0E8qWaQ_%na^|R$p2t>%euY4EcEhWEnm9Ly@{m*4V5tBu>bg_8n +zo}anzXpeZY;x_|FsZa9_TEAKp9$h(8s^G%itHP_zR95D@ui3r$qDpy#@Q=C&4D*(q +zNYq#xFfrO;r^-vM2Y$|uF_DidU&(0rI%`{49uPFx^YwYXkXhp*`94Cbp~1%7T13}zh0W5+?7-{V}|hE2fl*#36-<1 +zRo_wjVsLQ!*$)20zg^;IWP0(vddPU1&D%5WnawH3&n(%OR=qF#@piSX-AjI{%|hl-L -zG@X09tE6^oMjAh;bL7#CW_qftZ{2#dt+@v2_xtU29Bh_t;xsqTb#ZLVN2PH1SZhb7 -zEJyzt^La2B6y}Oz%@qWS=WE7v`N2S6OJh#-H!55A9DZwO{8;yq4?twTeld8Z*L5Ow1*vb&;DNZEwH8q3fK>ZBR7l^-_Mf;kz?)!#F$t -zX?9;M>&_kG&^MQqMiZcgr`8@==Q>dS1Xv$I%ZV*ZTJ9u<%QEPsLMUN{M&=6A2tssH -z9;=pG;bZ2j(RKnO4DMXbJ7PFt5)+(H-d)0}mrj7nmBB$frL`Nz+FN88!UvyQQ0}%l -z4;dA`b`DN8->bwk7T#BU`1tYZlKbi*M7)>I?daRU8ed&mo;VEZ0u^#KCiv}`_mqSb -zKK%Zz0gPIab6fdNLm94MmbJ~?&z4H16-bZZ_2(wwb94s9syI7_PYN9?=UBPX{=vba -zSs^;sMPX!D3`oUjl?_;>BUa&c4N@^ws>gF~@Yi5)-z<@b{eBk#?n`uOB4jYZ^$Avc -z%ySrWm>P27g%9uF|AdQ-q_<3rS?7+)JO&JuvX359=v*YyKESeP!M8f}EifG!uMOtQ -z;S0G5gfRYaaB!z~0t-y06RnF_=5is -zHsUIgM9yHySf4r{Xx|Kq^)T?QGRr*kBsosXBr%MtSg1;Bf5#6)So}W+Zq~-5o$$BPWf3AUZ6D(&D1+YS`=MywsI}-*n!QmUF27Pf{WhBj!xQh53 -z>3wI+x2)YYfgJ3ke*Y!>YDcXV_}9qo14T~mStt%-**wMYLz=mh -z9%0${OoIt=^{b#;B`w0I<=l_oqP+aE6e_^i7U0u8E6bNU5uE>xRl1{2uIaOANj#sJ -zIlgBiv0~)}Ze-aTJim2=&U)X+zgb>{)hBU`VkYuFK(EJxTL@x3D`|l!V+k4f!CNCi -zsw~UjvtaQn!>3BH`oCh#y_N(t!!k7lw7yR!#aNge{r07m$lLQJAt5B}V=5R(p<^QU -z(ZJ -zMb0Qd# -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 delta 733 -zcmeAadc`_HvYwfNfg#}z=T;!q8{iY-3Z(5^+`R(=Lb9`6+}v#)Tx=X%Y#rTf9Gq<( -zU2K7*gENQ?7I*ORv3GX&@b(6ZIJkR&q#VJ@99?XHid|fxTn86NS9d!nH;^DuBaj3t -zZ~~g_TyF=`1LT8s0!?uNi2|*(aRyoAJw0I~&_#MBL4Lsun(WMCw?7!aF8KZJ;H5_b -z`aI9%ug$93)~-CkbDE6J+H>8BnXAGVH55N~Sbx-Kk2t#p0|VndPZ!6Kinyy+ZcbWd -zAkzBKo+XgYbOh*#DPoeyH}YEIDr(S6jt!n6vQ8>IBuf43jlHcnT(M|19ij<#baz -zVt>_o;YMD`isLuEPw~tNcUUz`!wp3HmO{F$JC);K%~lGVXOmq&LS``werTPA$nzNPD4F>CjS_H*ge+>hN)d~r%W -zZQm2g%>~8tV-wuERoCCRd;H7u}(e|cUuP+8wVF#M>iV> +zXIn=XTL))b2WJo)EbidrWAE(l;q7hX;OyY;0g`eAD|2+QadfeDakYVP9b6n;-R+#* +zK!OfnDMuF@Cl?zB=XyH_XOO6)Gf1g}vx5sr)W*TZ#u;Rd_w67&DwL_iJ7ay7c~?=c36MZXOB3$1p@=) +zJx>?MkczmgS8h&PWgyb}(4Hlb&2`T6ja!dzzW4v5-_-h*OIqCazI!ipW47!jruxRe +zv)-yNwvqS!wpstQcG|7WbMIaG&@=P(^q-F>y_m7mwX7$@)b2&&;Td9w=gGa|jsDgD +zVikP$T%IXBwxeSvv +zJa`HwZT~FnY2|cNI%0p-df`T1$%^AQy-)GX33pgEOXS9hi*nDWby-F*e+j+Jeoax{ +zA}=(XA<6Vef>TCeQFtEXuB;bMs_vC*9bPVO+7x-=qOXv>gr>>M2O^2;^|!@qIR%eb +zPM*wr+y1qe-3*J(7aF(qu0C|_ypzcu?`V^A`yX3z@aITBT)p>`aK3VWTz~mroxBe| +zYWZ2x>??SL)7l=aTF|jF^5kxz4QE7ZmW95an{#q*>pPX>U(Hq>du{wdH~*k*^o#A> +zZ=Q%wn^m!78IwgzN`B@GHC@ZSEzfs{nIy8U+UfK}pO;5>8~fdp$6F?R-M*#kUNLL; +zhxT*n)7+2UPkeDoJ#F6;$;}1D^J5d-x>eWTxO@D|^W%pe&3dO(f1ti>(uS3fChW>! +QU|?YIboFyt=akR{04AV9kpKVy diff --git a/chrome/browser/ui/android/favicon/java/res/drawable-xxxhdpi/chromelogo16.png b/chrome/browser/ui/android/favicon/java/res/drawable-xxxhdpi/chromelogo16.png index cd256449b757ee6671c796a21f2d45c81ff16bba..373dd7bcfcaf559778f8574bf0468ab473251949 100644 GIT binary patch literal 3077 -zcmV+g4EpnlP)}f(a)e*$beYfaD)T -zz&&quSIOmeOO}#&GSu@VmSm|_)m9^(Ay3(?_ZGO1{V%A -zc)5znxbz9&75^L$Prz_5VXuN#q5(`i5&Q}DAFM@{=i{>L^I*(lNtc?c(CU_;n8DCp1qk&p3x=JI-P@pV{`5W -zINJ^DM2lP#ubSFEJ2t)t_U~miI}@B{edydFT{897fV-p7Xx+I-)99^Fp`IV7M5hp} -z`ieikXVsqjGHF#&pp?V#X>GrVCNePZUsUzkb?0SLnbzbOF%0%Ui|zV1Cxkqn3QFesGCrD~RpL-txfo)rFVpGsu3Fg12izNvf5V%1py~t5 -z0i0f7-lYtBe=J;wxS!g-n@*3-FuBQ!qp&kAifb}3PxL_ETgHK0DbMjjljyjK$$0 -z2CbF}$ISc<3~20E+b?FJG1@guN1rL+*ADS_n)HIwfFLwMnKL9fe5Sl^M=a^GuCn;+Jyz+SX_OvK= -zU{}H6;qoG{I77ax+?qsc{2I0Jx~1rK8K!d -z0NilTt#qt~31Fb(qo6Mfq@@t<_*;jxl$ntDUrr-59vIsvYxhjnt7l2jV|^MmsMa3M -z5f~GQf8zVArr`kFce1ac4y4X)8sq;E8gd;BUK8_B`){-TWpSL6dz<`66KD#@(AdYX -zCzCmc8d7si60{}@qZc$FEnu*a6j#;D8)Mw}eojD~e8P&JhN1?C$;9^gd$oHx_c%YM -z{0xL}rsoDdy70-^K(Ii-1kUkyd{1e|c`zC=WZz>(;W&BRL(~^u+DUR&aJBt;UgSPF -zH@5#EAcXSbb+0P^ccGy6&iyEUfEO~D(C^;=L-}>)=7)|Qg$PP9j4+~FiUBP4*VymG -zECeoBZ+`vtS^AuStX+FeG-vKzX*9t?efVX6{~h(D2jlVfSMRSwqbfBCI{`aQf(Gq? -z{j>V9Y4}*?+R4=RM1}=_z@h7(sU4bluFqMXOlG~{3l4!DZqOyr+`x*k@aApB07VQb -zY4%nNCUnXnlJkCDEv!^nNmeC2_AFg%moVSRBj0|^gKeE}BZ{V$hP9SRfh -z;O^Z=!1f$lOY>drVS@u>CSe-ii~V<{5Cx3zA=zO;83VwckG{6RNK4iaC=TEgL6Ka| -z8HCW8BlYOW3*ajrQx8(DJ#UR5OaMa39;;O@R`Lr3L<9_g^7Ky@6y3jbXCDHLrn5&h -zMP59gAxHc5O|Vxd -z2O3bW#ccA_1-OWVvrx>Pw+~a`*k$23G&;cmG|T@*#-*fYR3V06r;fxtY&yqyA*Y>o -z+>}D3VzU&JJn{wrEij&902j5Qq;@*d_)k(MXZu!r7f0kZ&NH3Ie6$#&kwtR_ty4hb -z20`242Vl-azqm0oH%Xim$R_N>!HY9i9#P`#>SN6Tqy`A!QUOk~XFYfPHzAWguK-8b -z34^L{C$)i)6OhQcj*D7chy_oggDyD$3jup7)&7HxI=98KUUPk8`ypG?mrf0u+>CbJ -z*(5As@t%0zj$zeX&IjmG4_Lt -zYW@kU`MwJVuq86Je@xOq(&UojwcJ)&AeqTSmDQ}s94in4lrK>C@BhW -zF@GqLB}Sj7&GmM$*jz)U{2H;cM6S -zw^d+?dW9Jf84PgHmIE03Z)=mWl!nB*EXMfb_5S|fX$h&Xq7;pq>{C-;t{Z4xu*~OV -z&DMs+BnK!nLNy84sZ9JZD* -zHW^zYmlu|DnA<^0HS!~Bknb*vA50l6K>qCJs4~xmgeJSu{r_*V*l6Rw+W#;a*Y`Ni -zrqB#lUT5|J#V2q&%%)KJ*-kSfyiX*haEea0q6TtJf-WnMx01$wZE`Tp4!UJV?e&8C -zc4)v}6Cm4+6EL**n=$M$|2yKmC*4xZG9gvio77SwZ)lUf@-{hbj{%RRAXBYtWQ(!c -z9-%ew{{!^*W1lT@WkyToEp2ink!69npo-0kXE{{Lh))|V)@GY5+9t>6RU2PT-z`^X -zGl*@IlM;F8%HTG6ns1ZIjlHaN=H<(AYV&YndkCSAsGTaULWBNq{XiSgYV8z-DXzXHo3n_o2;df8(>cW0&lS&0B_gXq%fgR+n(!W -z0zCLKaFcG2<1?;SLz|raAw-t3#Rlt27;b8lJJ;m*@&TJ18l_Fn@eWM>CvcXU{6QNn -z3$;1etrYwKwBUKJBPB`I*f84zFzsUtU#xAS@QXpZF -zGRn2d*_iJ$Xzi=Hwvl9xhRKpYi}~Lqdg)fVa?|^+=~8?^j<_E0V*5?$=EG!K&0(6$ -z0BL3>tU=u1Ji*DkSKq^rr&D4RIg9)8vyF-POAnhnIIT2s2-PI)EY>C~S|R-bl}ocl -T-DFzi00000NkvXXu0mjfvJ~V@ +zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE{SaD!Xr4J(KGfi}i(_cy60STb%9pHaXxqy7MoaB&l-y24HF1#=pn$U7gf%`Xi< +z`LxV?+N27jE1y-SrK}9S8Y`b4I$d_{jDMz5Q}1__#Rld)-ty(%^uCM($Df(??@#_? +zU3f0kWUkz!KQFj1K1?xMnbG0DLl3rhwtoHBvVL>JlRKXCH*&q#wkhv9 +zS+TS0F9J<9D~k?I9xOH*H*Td#@~7{3|v*w|jUo*=ye3nLhI_s$R01 +z+uW2~{EpS)Ht%bf?ik_qvu@d0o9$!&_CD3rT6j)c?Tb5#u|{97HSAt|G2`w|_scKV +z`Y)U(zuaZHz?xrO_WRPW&iieY85+1?%Ha>0x%)fRj11n#hkU(R`aCsg=CvmhkLN!4 +z@#LziPsw`D2{X=}d2iA8($$dXn|=4&U*_s9HuJc=p8Ybin>8==Q9$HQiKNx~mtTHf +z7j@$#`yJ{2`opu!7rbIV%{V76;oef7s(PK6_8s$Y?VIh_f7W2<$*#p4jCH%RjST$1 +zINXaq))=FC{-e{BSN&!Ti#~juWOd;ZXGOvDbKHA=EHfx?dd#(A-6sL1h%9$V$m%9>Q~L`SDHOXA1bn~oyK|m%pYE!j5p!8_0tv_-ZJ%ZpRf7gX8iuz +z-*c)a>`7;DzxtfpuPR;sfd1VMrnfAOT}}PE+vH~%&c0%`^uyoTfB(kqd-1R0&qO8t +zvOkvg49467vmCEHpAnp*u9?lW=TpUxZ(B6V62cEYeE7+eid;gt(mOgvd-Y472;bqukuqdjFQRmzB8}E?FQKF~PuwgnEIbXLzW9rY+}&TC +zF3;4nY_q$GYn;t|#nUx?4{WW^#R)Ua_|4+?aboiS4nd1Mfp?MXxLQ|bX +zctPPtPUeU<^W;DEQJ;AxC+N$+s*C#V%(8IFtmOV!mwd~$uX4Qve#u_fQn@l!rEljs +z?m5z@Yi%NBI3@aJHf}3?c*O9F?jxQ}8%hr)&kWj}aGZ_zMNIBat)$+s8!Lp>o0PAY +zL~)5FbY<@Re*XIPu1EKmY^+dw;W%B!!8;`{tcT;q{$qc$Zkt`PEN8Kn50-CCa_v%f +zbeX!@WAW7GUawo%JoDWUuFftMuf#UoAhq=0 +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 Date: Thu, 19 Jan 2023 05:41:58 +0000 Subject: Browser: Spoof as Pixel 4a by default @@ -9,17 +9,17 @@ Subject: Browser: Spoof as Pixel 4a by default 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/base/system/sys_info_android.cc b/base/system/sys_info_android.cc -index e3ead5db46ca0..02de4db4d752c 100644 +index 3e7af369f8c09..6cfcc7b2645af 100644 --- a/base/system/sys_info_android.cc +++ b/base/system/sys_info_android.cc @@ -22,7 +22,7 @@ namespace { - // cannot be acquired. Use the latest Android release with a higher bug fix - // version to avoid unnecessarily comparison errors with the latest release. - // This should be manually kept up to date on each Android release. --const int kDefaultAndroidMajorVersion = 12; + // Default version of Android to fall back to when actual version numbers + // cannot be acquired. Use a super high number in this case, as we assume + // it's due to being a pre-release version. +-const int kDefaultAndroidMajorVersion = 9999; +const int kDefaultAndroidMajorVersion = 10; const int kDefaultAndroidMinorVersion = 0; - const int kDefaultAndroidBugfixVersion = 99; + const int kDefaultAndroidBugfixVersion = 0; @@ -49,7 +49,7 @@ void GetOsVersionStringAndNumbers(std::string* version_string, if (num_read < 3) { @@ -71,5 +71,5 @@ index e3ead5db46ca0..02de4db4d752c 100644 std::string SysInfo::GetAndroidHardware() { -- -2.48.1 +2.34.1 diff --git a/build/e_patches/Browser-Use-adaptive-icon-for-recents-UI.patch b/build/e_patches/Browser-Use-adaptive-icon-for-recents-UI.patch index ee6b422c0a789875502be1e7891cb84ea1cbd25c..bc35b4d57338d0c05a2cfe328cc2587e22e33576 100644 --- a/build/e_patches/Browser-Use-adaptive-icon-for-recents-UI.patch +++ b/build/e_patches/Browser-Use-adaptive-icon-for-recents-UI.patch @@ -1,4 +1,4 @@ -From 856d574a4fffcd1f00247dd202962918137d1bfb Mon Sep 17 00:00:00 2001 +From 1af90df3783aa64d044b3698e85e9e3ed4ca4437 Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 14 Dec 2022 12:18:50 +0530 Subject: Browser: Use adaptive icon for recents UI @@ -8,7 +8,7 @@ Subject: Browser: Use adaptive icon for recents UI 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java -index a2c5828940f53..53c225b0a4d5c 100644 +index 76d451f05d3a3..1888d3acf201b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java @@ -14,6 +14,8 @@ import android.app.ActivityManager.TaskDescription; @@ -20,7 +20,7 @@ index a2c5828940f53..53c225b0a4d5c 100644 import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; -@@ -501,11 +503,15 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity +@@ -513,11 +515,15 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity /** Sets the default task description that will appear in the recents UI. */ protected void setDefaultTaskDescription() { @@ -38,5 +38,5 @@ index a2c5828940f53..53c225b0a4d5c 100644 @Override public void onNightModeStateChanged() { -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Use-correct-switch-scale.patch b/build/e_patches/Browser-Use-correct-switch-scale.patch index ba995c7a9ed2a67d946b5ac3b88b4c1bcc5c382e..9e6d153a6222e19fd19c64022c320b81349a31e8 100644 --- a/build/e_patches/Browser-Use-correct-switch-scale.patch +++ b/build/e_patches/Browser-Use-correct-switch-scale.patch @@ -1,4 +1,4 @@ -From 413c299ec99c3920682f18905610518716eedcee Mon Sep 17 00:00:00 2001 +From b3b67e2e8c5d4698f39522936866862ed194d344 Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 7 Aug 2024 14:05:16 +0530 Subject: Browser: Use correct switch scale @@ -8,10 +8,10 @@ Subject: Browser: Use correct switch scale 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/browser_ui/widget/android/java/res/values/dimens.xml b/components/browser_ui/widget/android/java/res/values/dimens.xml -index f2311c163e3fe..44e4009d5b366 100644 +index f93a1321b9a7c..2d6248fc66b03 100644 --- a/components/browser_ui/widget/android/java/res/values/dimens.xml +++ b/components/browser_ui/widget/android/java/res/values/dimens.xml -@@ -218,7 +218,7 @@ found in the LICENSE file. +@@ -219,7 +219,7 @@ found in the LICENSE file. @@ -21,5 +21,5 @@ index f2311c163e3fe..44e4009d5b366 100644 60dp @dimen/min_touch_target_size -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-Use-our-custom-icon-for-browser.patch b/build/e_patches/Browser-Use-our-custom-icon-for-browser.patch index 851504f5b843f59f7a570d6e985b9ab53d33bdab..47dbec5df5d5d722bf3cab289d48e966a0443389 100644 --- a/build/e_patches/Browser-Use-our-custom-icon-for-browser.patch +++ b/build/e_patches/Browser-Use-our-custom-icon-for-browser.patch @@ -1,4 +1,4 @@ -From 2e43c3258f56cb84a9f86667091338f2b3566890 Mon Sep 17 00:00:00 2001 +From 8fe671e3c2be656a454b89fef6ec5f97cebde2fe Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 18 Nov 2022 10:07:39 +0000 Subject: Browser: Use our custom icon for browser @@ -60,10 +60,10 @@ Subject: Browser: Use our custom icon for browser delete mode 100644 chrome/android/java/res_chromium_base/mipmap-xxxhdpi/layered_app_icon_background.png diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index 6966676e1fc4e..59fa0e9f1099a 100644 +index 2cd9fd0451d93..3511504b1b683 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -171,22 +171,24 @@ if (current_toolchain == default_toolchain) { +@@ -178,22 +178,24 @@ if (_is_default_toolchain) { "java/res_base/values/ic_launcher_round_alias.xml", "java/res_base/values/values.xml", "java/res_base/xml/network_security_config.xml", @@ -98,7 +98,7 @@ index 6966676e1fc4e..59fa0e9f1099a 100644 "java/res_chromium_base/values/channel_constants.xml", ] } -@@ -1597,22 +1599,24 @@ if (current_toolchain == default_toolchain) { +@@ -1626,22 +1628,24 @@ if (_is_default_toolchain) { android_resources("chrome_public_apk_base_module_resources") { resource_overlay = true sources = [ @@ -232,280 +232,294 @@ diff --git a/chrome/android/java/res_chromium_base/mipmap-hdpi/app_icon.png b/ch index 29078f04171497c630e17e1a075e2eed46ddad1a..af4938b1c4a00e370b65336e1402244daf1e46e9 100644 GIT binary patch literal 6688 -zcmV+*8sFuKP)4-NlZgG!c*zT1cb!-aFC+0TBf0 -zARr}yl-J)&c{%^@+&h!Zo0){Du(m@8L>%Vix%HvEEcAi=M-7!RxhX%x*Am3U -zi-bU`iIkv-_hcz}vqYRHs6O*%n-CPS?jVli9JdBfHb4rJG|cUd7jd|kK6nlPaT#TN -zatZ!O5VHxdMpAS_m3kYg6W -zulU>>5V5}gwrl;j4E=`DR7NCtS4(2}>BYD+EdksLC{jq0Va7C9rg|^WStFuT%Y>}? -zmJj_#vF@fI=DdLzHdJdczZE$oFl>m(A3+0A=RwllA#1;7LpQ!@p7tOoa8t78_Ysjl -zbdqA+0Ws-XhmaU<`q0^rad%Ua;sA{XSwI*F>9)leg1_(ZQ(7QPzM79&f-eYS7_Kb& -zI?Y8Q>T-{eSZ>JgWH1TNu=nj&4Zu93s -zf*CFooEk|E5@XJH3W@1=4?QJgQ`vI@d6H8Asg#+S_c2DP8E&dQ-(x|^>85jUNQfOY -zlBT8w#IT?43yJMF550$&O{L*C=S8fS7nqeF2}V?&Wp9unhk8v4btuGNy1 -zoXU_t!XTwrw)<(@q3Rqr6^XM6-VQn;c8CT^Q&LELb^Ko; -zu@-pfo4qM%wc#&5EpXmETF5Y?`aBOcT;!n#mU-#%wLW?Y#`^x=0F62npt+~hX)z>r -z;94dfNy&szSAfl0B17V}FF{f9I#3TYc1cp?sJcoOvNA -zA5zp+pZH|&ogpz7Xy_-$I2YubJtnj44Kns4_@5DsD?N*X!C(#onL!!kkI9*|=0XN7 -z|2c!^fUr@A12po`4e)~klROI*Z~3_lT75o4&c&qpGjs2ga3WwP!yZ!|nIalh?d!8k -z1xu~K1nKEEHSN!`5!ClLHiQ@}NT>B)X}$?3(rM6sKQhNh?bdp!5uRv?gwXVlfJ`dR -zc2kwvN;Zv=arZA(XtLNt5wSM1xItEw!aeR>fJ!+%?{h4OL2Q$*k@)<(_93z7J9N{U -z=G-V^WVKMvZ`Qa8HRrjh-U1KR!t0%QZL!=#T{rotKPuSg2Lcoeb6tt2z6<8OCoz)_ -zN~molWca8|54>M;u>EMcXQEL{B;OsD-$2fRRW#cwH9L}NzF#FLk@FpNn54=>olPb@2Qk7Xw -z`QA!Q4tVEJV(i5f@nTH%5H3Q7&fLVrJ~De`DKwE{GE9ErFC&Gy!Yn|!-IJI>S3Fsi -znPp7%Ae}>ou@ttz#JLKwkuzzZL7F;P3NLN7V&EQM$a#z?NHYPxv+P{D%;4`5mCT;n -z;K>O*8rj2LI3JsY^KFPxmOgcv=5{UXJ$ -zwgUY0IWxE~8TP%OUfw-xKbhYXS%37P!qDM4tX@flWxc+ieuph11$!*G+W}P -z7N};q;GY$m1C1BpdZ6YUmX?!BCphW$=}ySYNf8DqwO;O~p$Ghu#O>JDys*Wq$gl;= -z46h@Ot_24+U;68RO*43XIV|+5MnceRj5>;AVQ+whS7E5_)_BmIpg -z+2Eyr;GCf#jC&K7*k)wVHZ1ngbydOEqN>#bVY+!X$90@-T+Mj@WtJO%b|O_>yXxn3 -zDiLRrjwNt~+d*PkmRTq%Mg&zgJDViB4yzKvi5xm(W6nIPWlFZ06eGf7oKz3l(Q%!J -z`tJ0}lxKh8ObV%9*n@G?cpypn#UjXX*2w^kJ?y73hy3*NRxgz__(RcH2X)4r9guy! -zaqLYHY{sB{K6!1wom`!)WaNzyLac~J%oDDX7_hpta%mf -za=B}vD+Da1(mHvTU_((H#1>qN0s4 -zDd?3xK_J|#=y(xiKM8s1=nR=vMAq4nVkIabtJ%S88FU_!_GRSC+>JdUw*@n>#&>sl -zsTLlfl^l(rDGu(3_JE5bxxDCRR6DX57(6XWnCeibWi&tyZC1KzAD;Tp&P-X-FKZIx -zeq=mKci){}x_2=fuR5PA4a=+^vaAkXYinpQ&qYlZC^Uu?3-i~ZHUt<^Wu^n?J0V>s -z=1{0O!$CC>bRE3EbFPyb&2v(7+`rQrH}%I_Cj98f14@_X&g<>6&TS+m7n4(h@~FWaDl6oX}6z_zKMf26Jo}qGXc%~d5%npJ(zPR=3ath@wnF*+>@pG -zB#3B+EHB4v0|BMu(x}A}G>4`eqAc<_Fo^cAjPy#L|K#c9nx!kM)XjT)yv2RH9jK>8P>?+!0y<&lU)Rz^&-5|RV$ -zi8ls`eE#3J;l6l4L(nwNK~-D`|Jejz+l@kT1TDZNccy#*Or$fQ*0KCtfIiyerFwG| -zVKxX#iH$k$5JX#*_6rxB4ILX5#6pFy|E660QlH;757WJj?nT#Bsv@}Q6U -zpgcd0ENijEMNJnvss3Cgg*&D@r~*(KlBf>fU_7$iMQvAUfT=#V%1!NYZ3(VO7LTwZ -zd}=D)k&uQgNuwGtoZefNc}GG2GfyZ3 -z^)o<_qD_@vDE -z9xO2?>>M7%0^HArgglVK2+D^r=B!&h_2FH)1nE_*>qk}4C?#n`1kJ?gXtTm4%W1Mt -z`3=jAH-ub9Iry%SAP38pgtMzEN_BBa<~E=d8oJVPAQ+j}0>>FoAmcdgA6Vq1LN+AW -z!V;iDIT&#*NbP<|y9S6hAJ>S;3yPqxPG1v|&()Tkgp~R6B -zOQ1JKqqz?H%NiFwu+Tx368JLDyh{<0s=h>$ -zWQBsWfF;%jyXAhUMAOjt?Y*i9xPr=c)x%wICY?^plj^&%gB;i&dZ7|M -z10oqMmpZA*e9km>SMuv&_Wkcog#CFRlDqx5~cr%_Y9MpWa4e#z8;4%qgo$h3Tr& -z=$XL1NJBhXCggFL=#y(*bT1k|Yru90B_MoC3e}yRMrGry#~8I{rqMI&T-1MuhbA8O -zp;t<$6xc$y^)4H7G=e53llW-+V#!6wR~~9(Rz!Sp;1lWOwglw{`Vumr$3{2Ro-NOX -zzobzE1Re>0>aod919yArYg7}?9Ijsc1Tzd@q8YIl{#A;lWg)~qa2+pib<68HTbnOp -zzcB~=D=|4GON_^E{_Q2hB^NfE)d!+p!gd%d*av?77O(c=b<%Q!cQ -zT++E|TaW589~EUJ`jJn0BMEYQZT3(*T;CG?3TKo#_kA~FAN8!{BIN51rL{28s%tGVDd~zvM9@r(1SaBA%ukR1GVmn2)Wsm_ -zOAzoX%6>=m8TX-z@Ht`H`HTu^=D3Uf6G(Xi@_J&Gliv8o6M}blc_it#vurGZDU^vx -zrFJVY$4aLpxISc7DL$|BZOE`g)b*hBpJ7K6MWc2NBo`rHnDJ1Il@X&)tx{wlzrTGGlMx>b3&M -zxq1vjX1ulCL(gt-$*0c?ZvpSn!R5HYoHVL43&x(0pOl=ILT#2gRXNLF*yyq$Mh9XYdx=D!m=7ceuN|=YK}m0e3imvG<0YKi7leI= -z>k5J{Yn&7@IaC@EQ<6b$8r?ZN6`qtz;aYYS!RNJRq*BYp4tf#9yt&P7LyCr6c_oV` -zk^GBQg{|_^NB4zA@Mk$ODi=L=-O*dM%9JUS&LIL;)VpXa{f=3kn~q}?dzi%$D#%t0@` -zj!O49)^t0|%S?;}WHkx$nvh81omGou?23athN@;IM33Qrk$+F5GA7%uis;~{%Ra*a -zv#&55{EJcuYMb0ZqCwp6rGLVJdq7@Y(VMhg&Y9#uwmGQjyfnHSxM#iz_>7M=nX6Df -z)*2-HN;k|m5OWXR=cO6&y{#A3&Yiz{;k9hJ7@!JqeC>4`T+5bme07FI$A5N{vD^BO -zadhm*|3<5_82;lHMFMx2R$_GY#y)Bi^#3+8=V>gqF@h<^@|vXNRS{WMZ&oTj1Szm@ -zaHIA-(*Eu3ZW^%DBQX>NMxmJt!6BbKuQ1C>Bcv*1)Q_)2^Vbu{n4Aun^H0d$Mvz&h -zcr=jw#XEw(Ejk&*r-JBID=}=y64#VDzqffOVy>daeuJSHEG4>q)m^3@>vK|yVmc47 -zsd5%P1=IZSTMtb=;=}GbATx_4bRMaH)x%p6Rk40?sn1v*yz@SS^UUCDM}F^BWb2Yz -z>Yy`e>N=i-=i)gNJ^b4tO0HbV*5lseAj!HjQw(I7f$W)x<0DU#==5GM8S`t=Hs)+M -zB3~|sKdXvCdsfKBMI~n{GLrKIXM)}xbJ;zN09T@u<~DyYO75%hgJ+RFozVY0248q! -zfkT3�F~tGOxr`%_lSznR1<)&P~O2Y1D4H19Lf$MNazL78iZE+d~tOb<4SXPfVw` -zP~EJg7%<^_rWlU|=)aQxHnpl2a{)*9h3rM8M6>R##prV`jhvvFln{W(%1H5Y218`u -z;A(Qe49F?T;i}RH6^tb|@_;u7qhYG^Px@tmMl3kxm&ZmP@Z^B2QXi1QGV2VI9s^nT -z!?$YBK;ekx2Wmq|2szh+GJA#`c8MnKAC<924!(i+m`CJbX0)>S$DF}p{1rB6wVAsC -z?m{`A0#D*5@erE6V=1bV>5^cnagV}3^L9iBpJ$dCgC)b#F`lbr#XXLilXvWV5B_Gc -z!wQF$5Q%FF6OuR^v&5)#Bzi@SkTJG=r?@%%f{a3<;lupbA9cmYJ2uFPS!y<wtLHk45hq-- -zs!c?BG?z}BGFlQQ`yl*hA54>F!22a`6j>f}*Y8r&FoLTT%k#J_hj;m?56WUtnzorF8+jPfWwn#q -zqB&$~)SHkWP^r6K!uoOsy!W2^b;dasw%*G<^@;+%pZ~Pjwexl)?g#cUZsP(UOjVuc5o-2d+c93 -z-SjdfWeq+bu;;L>baI~h^~-FrxQHC(Xmwq!(Vz$1K6;3nnI!->bEKe!vyhp+9F%T~WOye<5%4JBT-Dgo#G& -z_IWg`ElN1!(Tik#U2}>|H16-X97@rsv1EyRE|8^x%zs*3Rwi%QD225_@rCc=!wY%xx&R3otg?YC^R -zC|>$OxmLC2TTYHX3W>Up@xLan1~d(OVcanB#UY25O;{+W_U|F;MnsrlAcnJM@b`|e -z=f-@AwedgZt){K@rhCqfMj=tPSqV|T7XQ*?gNR0tv=?tJT@3^01uLR>w>&r6caNJ_Z)tL#G4D(L^N#8|A4oFTpO?P4I5u$89`WYlC1E|IM)9>ghfvwVbJmpiP#ezw3S!J7Ow_MmR5qAOe*C+C -z^?*h|)53)d-w(9lpd;!(^h9`rhdVO(J%5H{&G{TYSG$Ir!~H)loqpvOhX7mv0000l4)_y1p={QIY8&&;jfXL-N;TrEq>4`ud1#m<8wY21H* +z{GWaBpx%-K7J0>ZZmXW_f6fao+ob5U?^Z8oNQlesQ{5HuyoR;`{!RBkr`MdxyOVM5 +zf7e3$(#JC%?s7i!!Cq_G?|Z_R|890^sy8nX^I+4AoA|(cdcgb1Ta$NR-MO#vQ`Ee} +z7InF1{~k7r=S*?zSuVu%N17?7GhwoTjb=r?>Xz46WVBsmo;}(5b>SYJFO7fPd8Zog +z)U-c*UFgV>?iPntol_Qcd{5D=*z7V#eTCiUwAlh88{aAPJ(k(d=5OY}HOb`6+g|a) +z9nfnlrq&d3{__yn%(>nzsKjXo$Lu#BRy7niofmiP)oE+g(Z6qesm!{ +z{WJer8QgGPc*G;fLfR)KqUqn-6W2~$s+$(M)#FHl?z69dZ@Zg_o~xWM@Pa?-kCfrf +zNi!_gJMwK8*eG;!LbBL_^*`=N3vAr?Z(H`??L2?mE{3?NRD^pc{djqFhp{f>9WIR^ +zk4cHgOv0B{>7S2OUKD(~WzElN{D0jxzFVg7Y)_+vSxC0Qeo;#mgPe{N@{Y`b&mAw_ +zRm|R>>TJF*bKW-v^@89{&%O&zv@e;IbcfOKWmNkFiM(GIZuS?J2Tyv$(90I-Ai?o+ +z+fnhR{qH{nM=5yko7ErLq|cEgu}xwE^d9J${LyZuf-*I=oHRs>kKErqEL-XgZ +zYo?3Om@3cd7BcVgLOnp!I%&$BQxohDDJ%`&_B-?TQ=d<1 +zEGMVRsj%-+y*l4j{qm-a{2;ZrJ7#$r`!9W-@M>epuaf!(yL;)bS1#W9{HSkv@X^S; +z*$?s=z9}3FNnchY`~9?)%d&mlzkHqj_h&r6y}wPyt@Wl{Rk?q|zg;)o>*L-o{l&c} +zB&}^)DO;vUcX_aBO61p_@0b?8k}((U+{}58&q}eZgUvHI$fKt8PrTwrv5FV7_iAQt +zeW-7zTX4@N>V(1KUpD-vF;5nkPo^N +zI{!z?`?-pS;u$a0k6Va8nQg1K`31EbCvGBWoXvU@+&Vn1wHtlc>n{vqZT}*?QrS1D-oesyG$?GQm__O<) +z;>PFJC6{MCyQ7hmvNhmb{g`J3IQt#j +zyQnAA-pfb6Txho1>EQg&A7yk(f_Y=&GpBW*I$IF8808BtBkVBfzKQ?7yCKxwgWOl-`yFGewkl$X7Di72g-) +zzv_NGn$zC+l|!1$9qs!+UO0zLFI-{d9Z+~p`Ec3e&SJG%e&ck@mk+wi0<*<>AG|S` +zcif`FH}$cZjm)`4tOma?8hlVw@aNwXvS+f^`I4Zik$yk#dHL{FJois}b5!JGlFwHG +zJ*T#Fca9vfGpbI}G?|!W=P0X${58ew+Ju~mtgOi*#Qa2CBTFB3C +z`JCGkID^ZF(Nj3_+WflP<}KY57H$dm@bQh+Tjtrc=}e1+ZNp!sqwBXZ{rO^PyhC5| +z+ur$c_a83)mTkFuN08#z^j#}#0)#iM;;S?{G&%2tT37NzHfCM6ohH$bmWi!M+xcL= +z=q%=5@ds54p2v~_~idsvZFRR>~F68uBbtNa}H?)K&u6TQ`;=-JTG3V3z3%%lZ@H>{> +ze6Y0s!JLH(J=Ma~ZltALFw^;Vp)~a1wMDD0G9~V+G&^28CpYG7#sAc4()DFZp|QJP +zJulG`OrO-JTF`piF)4Cdq=u#&OQ@;!Y?WPntA!4A%2*{QpR-w&>a}gAi1MMNIU)Qv +zFBZ;i|Ml+6$tmge4}G{+#@%Qxyj-E+`SYmKiGph<8G3EsEH`Zb^W{^R{#276&KD!t +zOOMTwolv{C@QtrP&anlxc9psN=f=!klk%ijz-di~+Zo|?lO#6m+WaKxgIV*LlC!

$?^xMROfsPdM$dR=uG)Zo|Qa{_b?0X +zU=CWr@mQz*`m4>w2a9%QFVtqyS$fH;a$16Opv)1mgH-9G0029GZ7Thg~bf9kz+U{&LvmF|Cw-kq#?y6NAgFn-r{E%(nB +z1t=N|_Gp%QoE4fJ?8#%d!J%m4W9OawlZ5ot;_pjdN_^J1N#TJU%e~aS?f2ZLKI}SV +zRKz-E%Z>b!rd|1;PQ2PGbwuazbHfw+G+#`$b5yvq`bC9cialrL%NIN|LtU=joS3Al +zp|JYq!EDJAxk=wrpPahWYpb}O)p*0P^76`+VsZzt`D^lDyYQ}V}`Soc*|E~o$ +z_I*0p8;`j9id(Jx7o*y0z07(AQ-I{86@2#-Y&P9-%?;0NSZTNIl<(WZT+VeKV*MMG +zYO=KMPMpxD)e-kU-3J3@v@ZXu?BXza?-^@ApqNi56 +zJN`HJ*I<5{RVrrv%jJi|w1weD%}>kpPwkn>(|Td~y_$`}zUgeW{X4fGN>6(j_c*}N +z{>I_#$Cg`)O@&@H9{9F8HZ5rl%hw-|;Mjc9{Rik~2T#bPUzr$jBXGx^up*#b&}Gj#KRh&(=iSe0>R9M9$)#R!1AxE2bWZCS!=exf4@zR9` +z?=$8cXRBindZ2&ihRNAUmo`eM#o4&syUpdjz}#)|PQG8KrNnJFTyUH!^uw52ap8<9 +zG9r@;|35r_uJh8;)2%{FJa+l|?AYTiIC0fJmq{tDO`983ud(fZTDQXG@`WF7_pajD +z(R8Zx>fzV|wYh$$r@TD3`_Iz!pRYOXd7EW!$X6{CvSn71)SYg%@?_09lajq=jbc34 +z8utG?s9wG0bl%o!vEi38ANAYq;#SjBGgM4dNnYK!lkNR~zL+UyAC$hVbt^P{^+x6_ +z&*n2nUQ~#DdZ@qlPt^8P`#zsl-M4f8J-6gzj`n-bXs-5beYxt=iB>O9@^t^1b*GPB5W +z*1y_#(wDis`ek;A@Hv@vaer8hdEysIZWR9)+O;%Q@rYf4tbTs!>DQLgv-Okq8?yh= +zHnddr?m3?K@2%=#RdKV~S2-@`d!`#pmT5F;9j-lnyn64J2V0aH_g{R>)_dB*yffy~ +z&dlikS4Q%psVcuF`d2D*7FFkd3$Tv4FZ7oyeTwCenuV+(tbfmQS9qLfOid16%lN!A +zMO!UN{5=1Y*W4=eT5swY_sz>Ulof +z`}tw0A={xF*-izv+$s|*>QB2B1elpre_3b}?zCt7&s@(VDqmR5p1erNEV#DD=6HOm +z#{7q^#qmdslJg(D+QxKzXBCfA+Mca6Wg@aFb9Gqja%9#7uy#D!9 +z=1g7Up~t9?>TO?h3o#JsE>Oqd2>$1gj$}Czwu&|q8odXY;~v0 +z{2BZz?CWJW{Cui4HK_F{^LZ07VWIVzE;lAjnZ&Htc3OS<2gmz`Kg)u(m)NpLmaMW; +z=UKtC|G@)!N6-9buJ1NAk5%W~7H_F-d(G9Pmpw7#sAf=Bl3Je%v>)fQ8!+O0P6Pj_hR+E16i +z72XvLZ^P$LRIBc0pU9d!QFM;#;t7#=UVRQ1)RDbc_2TAH|Ea%)r%k=5zwzL6?vw*J +zvS#0LSmb!; +z{nGkF4b={Du@`4=i9I*-iNiL_6)*Rg?2_J*zK`=qPrvER)d6fzR$oe~SU3Txh$O2?d@R#;Qo=5oBgZ1Tq2zxoSH-W>n$wtADq +zzsF*(Oyx7el1jcDv&$0t^54wpd8W=b!zRsRpJpw25-J!OmLH~N%c8j%zxp%;B5y+5f~nw+WF;D@-Q* +zIcnXsU)M_V$nvHaA=-vHCxos~vE0ACQax$iqN8=q3ng?^chz2vT_*RsIH)Vhihsk( +zA~74*%YQyZ^ZVL9I{eN`!MIzsL~dpM)x*((p&RQ8SDufM+wGPQf+3t1kLsMQ) +zih8xcIP;a&yyoYREQM|V+*b5j7jyF3<9m-4PVO=e=1G~+_-1CuV`cxzFTTX-OMcG2 +zX!b0}Tq$0!&3<*4V|CbxqpqsyT1JyTv!plOlP$h!+rtpPX!0|&dIPU_t3NcSPqdwT +z;lB-Ad__W|bJNlzY}t%P>yLz-RW}itSu}UnIp3qDnOE|5G8bD;aP|9jTTHxm$8Bff +z38klZR{Q%b-yU#x%@PTNhgHiY`dMD=pY-2s>ngEgM)&WnZ(NtUY<{=)=!;^#-Z=|q +zP7!E0amwRk5u0<${Rde^`*}`io_x6K61!-Rs@bOobN0oFt3LbxN^Nk{v3NTDxSQOE +zCk?BEjWK`WIQ`V{WR(|S6H@BsRo2b2DYnq_RAxtsBwljVFS|3_*c1!nC_)?78|<)nm_h5d)@KbN_%&rhEw +z*{pi_lHt77DMxMlW=$@CQ^Wr+ZR26C_NfA$*<8YtETlIdSy8M~<=Q*Ja9hpt9hQHZ +zdYl$LJpAXneCg5S)@COS2yuj?zCkW;~!S*=N6r;{u1&2jOw8t&I3PGRM!@U +zM@B^pMBC~fv-veons;j1_U=tr--*V{*lBZi?3%~#d0mxj;Up2~15YQsi*b!=oNzo` +zV}C_n^W=NCTi<<;-fnVfrp8&;qa`_t`&^Db&bGhtcGYhO@1->U-&tAm{Fv=3b|*xH^B&)9b!| +zEAejI7hz?;RaytCp0P$SospmTp-(-q_F97S>A0oMyW?z&>&gn$=T*Onx4!$uNF|lm +zPJYAl4Qon@=KXpi+vj-a?#%ylkNGOQ%O@^M%bvF*uVQ)Q`mTlUbF>~jVVZE{_}Uk2 +z{|y#>cT+!m_}UWjxU^I(&_g0 +zN4?z&;d^_k#SJswTN=LOnk*u6C;Co<0H?QsIdjZh9*Ox9B9AxD+c@2G&;G|TKbZY( +z4`*MyR(JZuMR$o=+I3u8T{^|~nrZjIy&+$Z+`QgU;LTmKgEeBD@H=I5;1 +ziz>F;*mXWlcRuu9(dDp(N2j)kurc3vnYyMUv$?OknB<)O->|(gMtc26eud)}N-kU3 +zBX65Fsy)oTU*XCVv0Jvgl|4i9sGMl4!wqS*2buq)l!^|_JoInUi6tz>Mrk)bE|Azz +zRbBDqb^T-06I)l9{yp{g>RM^7*;>~g{_kC?SKwc<`kw7k`)9f$^WXZ5#3$ZA{MMFT +zrSZ%o_4AEI2a?ybJzXvMD}55rIiY=SyXQTZ`fA+iZ)pBb@ZKu%`q+c}HwA^SduXqa +z{YmQKqJPdyO>Y_o`YNq5tuc9Xb7Hg0{;ASO7Sv8ZGJUy6&prpE-4@zK9;cZfuU}d0 +z9?bMcYr?r9y3v%h!rf1e{XUw%)Mo1QC=?XxKlzW=$YZedn%S?=SrN2-aoi`_nM +zwP_Eyd8qi>lNkl)Xt+#(io{3cJRNjb>`WCFcS -zKuldd&(%|U-|&!o-(Dg2xqVRX6B()SiF~H;jbh3RKf~{c4u8nKZ>~^yTpQ~;?OeUz -zfB&5Y_vS$PuhKod9|>}$281Nx8s0Z|xOiUeJAV9l)7K9cYZ=AlJ&p?R>whVIqB4Yn -zr3LGC$}E}Fl#}%_X#`NI^18XxmE1PNFvbZrGM8oPt47ra1@gdI?~S?dXjtISZPOUp&_!#>7ekr{oLr`u)i75k(tI0g)g~pWTwmX6CL#i2`TD0et$!Q!=V5P -zcQo~yqXZno+lq?as*eq7L=%#U^N5WuZv-4xWDgkSGJkr9Gp+7sCilF$8W(<(gqW~T -zltc!bLFXBld~v}yQ7*I2O_E|YnSyxLsI5hzXgdvAE!Wj*W-Y#q-L3CQcKGowMCZsNWnmvQ?rhB}n7 -ziyt!^&VQsZs?=iURU@xZ%{)&jV~$4_Ga=XXqdzyCZCX*QnR%>B-Q%-4pXoO{foisd -z-p^%p9r^;b_fpm##4Nh45C86LQ^3)v;TQKM!-0ipjl1z>)FF9&yTVoM?%!OKJsOQ& -znx-ol0yjo5Yr-BCF~9E5X8JEqWt3kfafF|JzJE9C#ouTf2^nhU&`o-PcAQO~FD8pj -zh-|$!=BUa8f|`B(P$xLiarq2?9FH#4KoO;mf2T11S6{wPW*$9A!B>ki9UUF*Ue(b| -zC;oMN7#|KaZB15%3-+;FS)72f3e=4ImJ9@~laNty>7|@&rev$BWznj@=wYw2nT5yN -zlz+Y2071R}{6{pLMTe3(fv8Ae9sW+y2@F4*_>dx1bZXMhvnlKA)vIUmZ}zhD+K?3| -z1W07tN4KI6hX*MuU(K~Gh3*!3r9cG+LN+rU@UdS@fDo3rw(lR7&Y3){fxu|WeQSnZ -ztoGxw11+@L46DhBvm<8+fZ-QxvDt&-ihqFgA{6`bqAHZGddtSN-p}7(h_#?;mRgq)IK~taA{E9);WB -zY)hoCsxyy)1-}mA8+)$}88M;&3ABCKOW(DJCoD9%#X3rw&HO`iVyjiFX3qyCBY&zY -z+`+`P{aI_CaV9HbF-YBJ;SZ$&3XI5)t3n2t@Bvj91%}u5>wI#z+ZPKKPIr-$~wJ|%J -z2B6P(7Lc~j2E;pMtVlMY6QbDj2d=&OJRLZ!y=oAFf#5)DIZm7txds8!f^_Ryso(>L -z$S9!)4zbV_df@P0Vi{^3f}>=we}aYW#j{zR4kOwjIGQ?09^j)j{C^{gUtDw3xgu(S -zCV%ipPuPpU{t@bCis?(9?xzh2_ju@o5}m>g+xUSK9NIO~`jg~&!k5 -zzQ6V2Kbk6Putep9zc}!jF#%e6f?D=q-}MuT(YaTzUOGM7)x^cc1&)dkCX9GRgr6(8&4%#|3I3uTjHjq7-H>2`W1UzSkbTwtiakD3RZ^+K6Y&ainrIS5@ -z;d$A^CVx7_#>PgD;~m6C^QD*Ys$1tVv#01E68*LgIMY9#J;l<}(v8GnMGFpp0ck^2 -zvq^975gu#P5`SNp!t8fBI{|Pocf=r2cc?;gYu4|Bp{Pm5-qv?tNWVXH(g#DWtgLFV -zF3|t04%ybIR5tD1b;9i1{`!LRy`QAQtX>ry>({FDfG*e-xVpMpiP=iftVtH=Zsz9Z -zjfZ`G^iNpMSlT-3&G!p~z9DmLOyq;oTyof!V7*i -z*<_FP5>mTqAK&3q7d<$vi}jWqD-;C}BpZaj~ -z(WjSI21Wb-vhv8^gU9-eBG+k6Y}ANt+fM8;sd71m_HD5GWLhq(s4W=AUmqbV|x2u1fjqG~L73&UH9ex1@}mL-l-SZGxNjw~6RG(u+JXYB9n -r*uS-4&!|k_w)ZuY@nmXDZ}j$mxJwUb<_4i^00000NkvXXu0mjf`>m>A +zcmZ2r(kwhdxt`O@)5S5Q;?~Eduv_yr{eN;ez9!Hqfc!6xZc06*Q{M+ +z)Y7z+^>yhfotc-XO#W(^$r7;g)2^MDr`|C;Y;cUz)6VXI=eycuRkdu7hv!xr8gJ3t +zbTWf$eNEVn3a+q4S++~-ubcXxIlG`hWHP_irSno%ldA7UWV&Z9RNQp($=*(PsRg{3 +z`FrZjEJKTOC!JhA=jDPAJOAE!@o>YT7}?|OCN9fYt5{5&d5o`Be`kKmveRFLWxuj< +zYQD0lt9NcbypVyj+~n)5#Vj(1Z+CUwUDeN<zxm*w8x +zmL_^`-bDL3d5`ufPA~jz&}KDdW4FAq^tt*a2CJ?lJquM{A8^*jUo*MSUCdbV`j^G_ +z=5unR0$0zhT;qNB@n*~UFU_qRv$nO|JD*x2`-^Go_n>QXM|5_r<^TUKC-}g{6%WO~ +zs~&D_&FJ0zG4+aKW$o@mp>N*ZkC|*M)f+o&nYILzxtl@uAvsaQ{qN4F{nGbKof5BF +z*fPI%U%mP3qxUnUIVH26UGS}HD4XLuPhYLurz2;t*|Qa=n44zR{tZyKxLEj;r(ULC +z?}~%q(!ToT2LHn2_xYvC*?Jrd?>3T^m3_EhZyTc{=QM2M +zy3+G|8V}3b$rAz#UoM@Ky)0$*%G8Ui4!lTQziDRc@mo{s_ugV~-23m3yU85a_DPnF +zD?Acp|M^|yN!F!vn>Am*zPdX7WB#{IpKnbNRcG-?x$VAv5q~?orgr?< +zt-7u6#446Lu(COs8Owgy81LO6Fm1=S_wv)u&9qt5cp&3cZFXDSns1LcG3#!*#k2Zk +z=Vs+}j)sTgIU8>_KkBM)_@X58`_tn`dxcImT$8W*wDE%4wW4RMTD~eVEPUI2R&Ld` +zOWQ;=?B&!v*SlJuU%rN&JGUX{PWa#VJ0u(eUcZ;mW?kZ?`)EzEK!;rG?FTvDOV+P4 +z?r&t>&-YNedOfeC;UWgkEwwki?{95a*D=|7)XHnt*+0(3NvlIwr=4e4QLbO5b?4xb +zt$!o4=M}1HCmDL&O?$|{l##3FME`0hwizE7L&aI!u77)7Q?&g~o%THA$lAk+N27(O +zdTo=8$Y6dF5$JHC!&URCSi2`1dx`oyE(Ld`V6BE5+x{ZL5%cdgb|5P74w-{ygjm~O=V2D|&SPu`yF +z$^1loRxP{htlExQx1Xi2^RQT|t>AmR-}r^o#ECiUW78-5TUuCz{C&Iqeu}=X$a3Av +zU9MaT8PAvYcx{#}`})T?du4-}e0VM^cdm8S?2Ywtf1|V(xVm%wT;BeRsioH-wA!)Q +zJih*uqRyJFa??uZnXK;)ak%ie#pv9TLX(B$l$X)<`XD7Yk(ka{1EV;JI_= +z(n(KW($QE-T2JDZtqVUS&KD$vjiF& +zA2?)L`ppsE$;No8spNI!$_LEtCo~qa^KHB!QuW|NT#{s#Y}4YD_4Q4yZ;x({oXe+t +zOVMJMm51De#ioDimAm3&iZAa}%4$%n|KRR_qkI29!B=TrFTLlzTh7b*z2Zf)(Alear&&B%6d<3KJlP4^DGK) +z9$xQiv18rEDi7-@+1_b(wo3wgqfX15Ax@FoY +z!W0+#{eJlN?sXM=1Cs@J7k*iDwSM9MjxrS&_PY;0tVzqxetoCtLOQeU^`+_(9DKK| +zOf8g`*PBhSongNCQxJhZ$O>XrE?&aKR`kk4H@*|zav<;}xt^;SoY9dqk@ +zEPKT5^U~=bRz*KI+`RmSywKlmd={7O=h+^;bm>y>kwjN+zIw(?=a9{w`R@hgvM&qO +z$4@`>rrgq+vB04Gh(bX53a6s%Yww#EuJAl|?^=1h$A0^gOYF{T*R09fpm*W_YQCG- +zR)mz&YNBr)_97&$b0teS#Nu7 +z?HB)ua}l?!UY-5U-Mmk+ILGHni(2x8aJ$X9o47RVYqlot)Z~6AZX?zp`M +z>SuV1OXQyn^Q!R!p|^TGbGn8 +z7M6TnZmq-`$Xsu1yt(Y|GX4JCe~}W-%}@FnGH9 +KxvXx)x|sJ -z;P>zTU$uf|tG?oGb0FNib-FIWIzltX8g1SaW6bSz3HDvMILWfszgDoMFp94$?b5~E -zY8Mb|wKxCzjJM?rFmaN*&K1kD)Q$9BnPtTR)Y9TTh){-8BTr%z<4tdVtrCuMRl}jM -zXNI2`K&31iLQKm_NjLrIsDPNOwaIUe(8ZL_3LBuhf^km}K_s%uNV*v(7l>GE0VonF -zxJ(3B6F_wZf>j$3!Ng@2YeEJcix;uh0#HNU!W+wj0;(4fEREnoQLIP8j{s=ekpvNI -ztpF{$5hGx5Ix2$*m;69Pt(JsTLDg1X7?m>nB+MEmHtleth_zOL=3mo`Ai@F2FDqIl -zOVlIXO0!NnDeaPr5-vC??!1%s-F6G{Yp?!R;GoW_5;afab2T8`3q&w^0Zl!WBx0>M -zK=&w*76`Qa8i_`1vC+$$Z1fT|DA!8;vaK`_KL;z+AN!wMYo(5{QA#IE-L&(ji?XjcDGA+b<_QP=5Bz7`9y`5{ -zlKIVME6iF$8w2&*JS&acZ4>%?ft}`_a!}e2PTG9UMXC7Neq{~dcmXZ13qbd1sjqLf -z2@S}W=y7zbp6L?x&6KE5hD3vMB>EQ)7y#bgX%mn>gr*{32FH2@$0MpJk9Nss0F&s2 -zbrStL+d};^u_!3P2Sf&Gfbanc)belunhQV-fgN92>k73_wxA_T^akMk^{`zS?3SNg -zq8!ebyG1s!IsasaEEQrOm)dD$*uf%Kr9MQtMDQbkGC+@pBjc{(8rRJ7^)4CZYwW-6 -zqFiL@wJw0-6=wPaZj!rIZAjs+Y8oeJ -zN0T@swMjHl=T#@V>Ws -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 +zf8YKqtKYrh8 +zvj^Yb|BK(+l)8G~qugSJJG)DF=^eCkGCn4idrvs|%-a&qZ?QWpPHwukKWxJigRb@3 +zZ!aCalO-;Yz195xub%BsxeW>@?LH@ZdefEOFL5(dk1}4l^vJd&pe%b>eUP&uK%N~@V;`X2|EwbNQc9IuAONlZ2Rt#U?6)$DD-qK>U$ +z4bS2)cPkuXJfW{0rRse}`L5SyKP%0*le&fUEHvNknf&c;8TZHR_5Z>iEI7AP$khK) +zv8loxZWn_}Mqk@0DoJb29lmSyi*aoEE!F9kv+?5T**RZ?Of;^0{oSFsa6+|5+i)ta(( +z$Arx%JtMfw9N(qwNemilF%35^tYUOtsh26FYx#P~?(+9x +zr$P&-*O`P~a7|`?yYK0;x8^ZUJj!CKORu!8{`4{TdaOy>bYIz=&?JFbO_s-JFq~j; +zV0U6Ua{=%kh%XdC=UdBSU8}cs$Cs#PQytJ8>w$MGexuf6l +zZCI3s6Q_f>mV}&wS1bF4t5J+uy_2fy=1#qLCv9>6w_BOV3fm3t+>wthS#iQQ{q&uX +zq}2yXAb7?M8`6bRL!Eoc0mCeA2cAaR_{i5>Tm7~zQ1$-8_TbOg4Y3k$rp=F8By(>1ZdbF7 +zmj6@QbVQTnr{Bselk#%A +zy6lzIsgb-cCth4GQf8Ri&OG7A1}#R{V>4f7|2UJovMEpDM=?j8_JbD}7wxx5T5fnk +zOmCw2##etgS3Fg%%GugFFCuxN+>e`PCw=%AyX;!R@+$m!(;OB%CAxf``fe_-J0&7kjQ1b)d=P*C_;Fm}w45V5U(T5R=-fh;{@XA2 +z&JD|wQcriEY@xi>(kQg=Xu|n +z;ijgS5%cwA4Vf?LJLJsU7a!I8m0-R{N5Esjv{r6`<^*SMqv!(74-64K(vR0f#Jmt- +z?00x((;D<((uaN9E1NoZEt~c7rO!?qw#7cPI<8Ltn*HW^&xK3-^CuVdwX&tnWM=*z +z{5wUs_t@`!EGMRL^JN`>FeQPBVJhQ=eF2P}{1f*}T?m+8a?^d*x(Utwar%iCTe>D) +zTFhgnxcHnxwbw+~Nw4*8#uSBFDww^xm%W2iLNiD|{lLYfw?)at&xx|<4>8B6NvlmGA3$i~De_eOvF_S_qYee#ALyNqL +z86J9PD!0zGTIX`w&nS?&F5wHyZHavsnGPB^Z1a>;J@qK(MF&r2f32XD!>X2rORd;j +zCRH%aJiK~tZ|65}2Z^0mwTzUwW?m6pdOfFg&n1}$t7q?c?D6HJoVKqM=Q+#F<03lV +z{Ga3a{a1<{*th%eD#1PeHD?PO?5b9~tk2nS!B}JO@gUzTO8?|0Osm`?(lCwb!t{kq +zN%aq^LeGk*U9_EdronS@^xv}0E|Vwvb{bsRyFF%$^yT99ra2$nq!=xZUu=!I(^>ZD +zp|S8Ysrq}0M&B$3I_v5F^ +zd-gTr#b-@~RR5%(aVSiG>iUcE!=#M~b_P%FbamMmTqofAP4|LBzjd(FvR;ae{gxkg)k!{B!i(mEGgl>KrxBW!jQ7wn)yhzu~lB1=SNqU=4 +zMjqlmblG_O=UjVB&A;sIXPr;_-O65SZWjGQ)8X}mlqK^r)jHna=l7{)dc`BL|M04_ +zhYlP|wo4Z{ZzHz+56ijF7s6O36vWBBvOALVN$<3Dmz^5C+QOFvwy +z;{MB?Hf7^(m04Yv<`kY$J2SKSv)1QH&G*<3c$|}2n*L+ziRO)LQkxGutOJRwKe +zwy7w);dmQ|O!oAI1&%Y-3jfr9wCujfB6rM=@o0P^^AQIVhEj*qwW6zU*0cs5cpy|Q +zzszE9!|i>}OYGAp|KHyE$9np8yZ+AS3x5A(PD-v7ohiETsbt+N{>M*G-g)&Y_I_{c +zt@6_=*#vzavWDo@n=TO8e$&=GRbbNO`5W#Yk_nG5>Dcs}L)BD9;HFD7;}d6wn=+5C +z-+iDR8@On1`0NXde3PCk|9BY4+z~WKbB?R-W1cI97ah(kCA&R)xHG>wl6O&1YGYIo +zn?t!1Yl)|R0t@38(@m)-C9VGo)?JVnxFIp$!IJlw&nF|VSGN6u`i`?U2R^@FkknDa +zy?zJhtIW4tux5Z^D`JsbvCqGb3S?lTD-eoz%ExvX*DA!o&MZnlF0&kj2uJJi1D +z`m9#}FRnkoxXpgcTKKwFZuRNhA8T{PW_5J_>UIwMxJz;RG_8tU0sf=YlJ8ACyYu2F +z2M67PoPb>uh9D0XE2X5|3Wj)YhHk7=BHTJ$%xW~bGM>Qy1v9tAOI +zak48E3V$kBm->~`uj2K3*HPVnZB6?_pYToVT4%z%+T1Q)DAG7*?o77S6Ovbzk9y3V +z#B-&})pBd^_m#CwXTncgTNwPw5exR?fB0kZNw!xk#d!~Gmud2MBqTX>zhau8^w-{X +zrH|{%-g`+488udK`!H!4hf3DciHjck+w}W1zCUB%+4!#7IyF9NebFUGhrJ5RvgTLp +z`15PUR3%fUd_IGd9}MmC+1t+h^ayQiEt}O^nWbd&)_2O)1tkvs+KbgR_O|`$U(D3V +zk`-vdaF$7d?cmo{pI9S(86NZAxf5@&vFMtNUQuV}HS75wvcIj6y*~Gl@E4A(SBXE) +zJ8J(GTxONFd(Fhkv@W-uc9V{%u4TJY5IOV5ob`O3Oi3{ddy5heRU7ISpZrwrdhdM7 +zza;j3)?JXwa6>Rfp~Lt@$J6WoT?`zznu#+Hhsb# +zs4DU)zT9Qh<)rrI$Um>OMi&-aToY5h#3s3jXPcqX3jTZFKSe3;ZJl<0 +zzU}*#&?$H7e%!v#pgC!IO1*-e!6q@L3x^6Ak{IUnN$q>EUhjm$w+V4OKH6z?s$b?Y +zVbHD2Sl4;)P*>fi+fMfv{Hd6F`GKqTLr?bn(^i}d(!H5Qx%)GZ74tO|aGpJ|^UuAr +z_Es9a52nxAbn!mFw@KafnfDypcuyK#xSW~6=Q*SO%e^RNwIGZ>)O1yarv4b&rh6H`}l8$vDuvb +z<+%nAo0KHg(slXQM6a`2A$mCQ(1oD83|uV>m%h`O?s;O`f0tMM&fj>BrJRmD+ICBD +zv!D1BzWwdrU7t(5TpAOpd~Nm%=7x`)%7@B~_inoOeO~&7WAfg5i}OxQ^81*2h4JZ4 +z*`>Gix6WZZyv6$1=e=160yv-T*}&4!#h_sy;*jL}WIfxIpqUH&_cuR3W0@xUbV~bF +z+o&fZGfQN(&&IEqX&b+)vh=u?^t$~O^Z(oTKiuE*B%k+(Y5LinM&i$u)X%!5nZ~VZ +zdBC`EY3l_hhA0MydQNc#UXD;rF74Ax54hQivsqQHZ@t$hzIW$I7ySeJ6)TeWznB%_ +z*6-jenDFG0gK68vvcBo}55Jlnu6q^Z-8#w5TV +zlk8Bgbv36_bMK7Y1%Vtdk|ka}XII(ysH%c<_S>=w&(bXqyPW47p2b)E@3S5E)@$0E +zTsRkMUFBDh=a_1fDaW|AQ+FxriAA3^I-Os*RK9SzIb&kj!o|8)nY^%R97}o|xsd(%M1wQ#kX%C97(;N`yo=WC;dqooe$f)i64peL(-IRK^c0 +z<-L24s+iQs$~PCKl=kT_RnxGXrgbB0^^N7MNAvFfxxJ8S*MjMc6%3gyam7?=kZHoON{(g3-Lg4lzL0S9W^tl~4_=Mf5ZQ->)1&ogt>`-0B +zw6@P{%Tg|nFzE`f)iVs5IhJi;_;tK>#w$jxi_^3g1c)&4=!P=gnyZntR#f5J0tN@w +zTS2VCU0uved31D|EYIr~y?%C=%e492+3Ad;r{j57G;xL=Z46=+TGdrEYyAZqhFR5< +zOa4z?F23;^*M%v*$u0_uRK>DcB4R)8tOKc9#jtQ`<@TpSvuj&R-XE_~Nst=7Tay8G)o%ZhX8=kw%cg}1)6}TttU)}oeDL=o} +zKDyYl=D_t+_p?9E>)i3Y(=u|`$4pHnu_G!;uRqmnKCmEro9hcJ-WmpbYlnX4+J)-% +z&mKuwO#8O$+h4gWg*}S-%4-NlZgG!c*zT1cb!-aFC+0TBf0 -zARr}yl-J)&c{%^@+&h!Zo0){Du(m@8L>%Vix%HvEEcAi=M-7!RxhX%x*Am3U -zi-bU`iIkv-_hcz}vqYRHs6O*%n-CPS?jVli9JdBfHb4rJG|cUd7jd|kK6nlPaT#TN -zatZ!O5VHxdMpAS_m3kYg6W -zulU>>5V5}gwrl;j4E=`DR7NCtS4(2}>BYD+EdksLC{jq0Va7C9rg|^WStFuT%Y>}? -zmJj_#vF@fI=DdLzHdJdczZE$oFl>m(A3+0A=RwllA#1;7LpQ!@p7tOoa8t78_Ysjl -zbdqA+0Ws-XhmaU<`q0^rad%Ua;sA{XSwI*F>9)leg1_(ZQ(7QPzM79&f-eYS7_Kb& -zI?Y8Q>T-{eSZ>JgWH1TNu=nj&4Zu93s -zf*CFooEk|E5@XJH3W@1=4?QJgQ`vI@d6H8Asg#+S_c2DP8E&dQ-(x|^>85jUNQfOY -zlBT8w#IT?43yJMF550$&O{L*C=S8fS7nqeF2}V?&Wp9unhk8v4btuGNy1 -zoXU_t!XTwrw)<(@q3Rqr6^XM6-VQn;c8CT^Q&LELb^Ko; -zu@-pfo4qM%wc#&5EpXmETF5Y?`aBOcT;!n#mU-#%wLW?Y#`^x=0F62npt+~hX)z>r -z;94dfNy&szSAfl0B17V}FF{f9I#3TYc1cp?sJcoOvNA -zA5zp+pZH|&ogpz7Xy_-$I2YubJtnj44Kns4_@5DsD?N*X!C(#onL!!kkI9*|=0XN7 -z|2c!^fUr@A12po`4e)~klROI*Z~3_lT75o4&c&qpGjs2ga3WwP!yZ!|nIalh?d!8k -z1xu~K1nKEEHSN!`5!ClLHiQ@}NT>B)X}$?3(rM6sKQhNh?bdp!5uRv?gwXVlfJ`dR -zc2kwvN;Zv=arZA(XtLNt5wSM1xItEw!aeR>fJ!+%?{h4OL2Q$*k@)<(_93z7J9N{U -z=G-V^WVKMvZ`Qa8HRrjh-U1KR!t0%QZL!=#T{rotKPuSg2Lcoeb6tt2z6<8OCoz)_ -zN~molWca8|54>M;u>EMcXQEL{B;OsD-$2fRRW#cwH9L}NzF#FLk@FpNn54=>olPb@2Qk7Xw -z`QA!Q4tVEJV(i5f@nTH%5H3Q7&fLVrJ~De`DKwE{GE9ErFC&Gy!Yn|!-IJI>S3Fsi -znPp7%Ae}>ou@ttz#JLKwkuzzZL7F;P3NLN7V&EQM$a#z?NHYPxv+P{D%;4`5mCT;n -z;K>O*8rj2LI3JsY^KFPxmOgcv=5{UXJ$ -zwgUY0IWxE~8TP%OUfw-xKbhYXS%37P!qDM4tX@flWxc+ieuph11$!*G+W}P -z7N};q;GY$m1C1BpdZ6YUmX?!BCphW$=}ySYNf8DqwO;O~p$Ghu#O>JDys*Wq$gl;= -z46h@Ot_24+U;68RO*43XIV|+5MnceRj5>;AVQ+whS7E5_)_BmIpg -z+2Eyr;GCf#jC&K7*k)wVHZ1ngbydOEqN>#bVY+!X$90@-T+Mj@WtJO%b|O_>yXxn3 -zDiLRrjwNt~+d*PkmRTq%Mg&zgJDViB4yzKvi5xm(W6nIPWlFZ06eGf7oKz3l(Q%!J -z`tJ0}lxKh8ObV%9*n@G?cpypn#UjXX*2w^kJ?y73hy3*NRxgz__(RcH2X)4r9guy! -zaqLYHY{sB{K6!1wom`!)WaNzyLac~J%oDDX7_hpta%mf -za=B}vD+Da1(mHvTU_((H#1>qN0s4 -zDd?3xK_J|#=y(xiKM8s1=nR=vMAq4nVkIabtJ%S88FU_!_GRSC+>JdUw*@n>#&>sl -zsTLlfl^l(rDGu(3_JE5bxxDCRR6DX57(6XWnCeibWi&tyZC1KzAD;Tp&P-X-FKZIx -zeq=mKci){}x_2=fuR5PA4a=+^vaAkXYinpQ&qYlZC^Uu?3-i~ZHUt<^Wu^n?J0V>s -z=1{0O!$CC>bRE3EbFPyb&2v(7+`rQrH}%I_Cj98f14@_X&g<>6&TS+m7n4(h@~FWaDl6oX}6z_zKMf26Jo}qGXc%~d5%npJ(zPR=3ath@wnF*+>@pG -zB#3B+EHB4v0|BMu(x}A}G>4`eqAc<_Fo^cAjPy#L|K#c9nx!kM)XjT)yv2RH9jK>8P>?+!0y<&lU)Rz^&-5|RV$ -zi8ls`eE#3J;l6l4L(nwNK~-D`|Jejz+l@kT1TDZNccy#*Or$fQ*0KCtfIiyerFwG| -zVKxX#iH$k$5JX#*_6rxB4ILX5#6pFy|E660QlH;757WJj?nT#Bsv@}Q6U -zpgcd0ENijEMNJnvss3Cgg*&D@r~*(KlBf>fU_7$iMQvAUfT=#V%1!NYZ3(VO7LTwZ -zd}=D)k&uQgNuwGtoZefNc}GG2GfyZ3 -z^)o<_qD_@vDE -z9xO2?>>M7%0^HArgglVK2+D^r=B!&h_2FH)1nE_*>qk}4C?#n`1kJ?gXtTm4%W1Mt -z`3=jAH-ub9Iry%SAP38pgtMzEN_BBa<~E=d8oJVPAQ+j}0>>FoAmcdgA6Vq1LN+AW -z!V;iDIT&#*NbP<|y9S6hAJ>S;3yPqxPG1v|&()Tkgp~R6B -zOQ1JKqqz?H%NiFwu+Tx368JLDyh{<0s=h>$ -zWQBsWfF;%jyXAhUMAOjt?Y*i9xPr=c)x%wICY?^plj^&%gB;i&dZ7|M -z10oqMmpZA*e9km>SMuv&_Wkcog#CFRlDqx5~cr%_Y9MpWa4e#z8;4%qgo$h3Tr& -z=$XL1NJBhXCggFL=#y(*bT1k|Yru90B_MoC3e}yRMrGry#~8I{rqMI&T-1MuhbA8O -zp;t<$6xc$y^)4H7G=e53llW-+V#!6wR~~9(Rz!Sp;1lWOwglw{`Vumr$3{2Ro-NOX -zzobzE1Re>0>aod919yArYg7}?9Ijsc1Tzd@q8YIl{#A;lWg)~qa2+pib<68HTbnOp -zzcB~=D=|4GON_^E{_Q2hB^NfE)d!+p!gd%d*av?77O(c=b<%Q!cQ -zT++E|TaW589~EUJ`jJn0BMEYQZT3(*T;CG?3TKo#_kA~FAN8!{BIN51rL{28s%tGVDd~zvM9@r(1SaBA%ukR1GVmn2)Wsm_ -zOAzoX%6>=m8TX-z@Ht`H`HTu^=D3Uf6G(Xi@_J&Gliv8o6M}blc_it#vurGZDU^vx -zrFJVY$4aLpxISc7DL$|BZOE`g)b*hBpJ7K6MWc2NBo`rHnDJ1Il@X&)tx{wlzrTGGlMx>b3&M -zxq1vjX1ulCL(gt-$*0c?ZvpSn!R5HYoHVL43&x(0pOl=ILT#2gRXNLF*yyq$Mh9XYdx=D!m=7ceuN|=YK}m0e3imvG<0YKi7leI= -z>k5J{Yn&7@IaC@EQ<6b$8r?ZN6`qtz;aYYS!RNJRq*BYp4tf#9yt&P7LyCr6c_oV` -zk^GBQg{|_^NB4zA@Mk$ODi=L=-O*dM%9JUS&LIL;)VpXa{f=3kn~q}?dzi%$D#%t0@` -zj!O49)^t0|%S?;}WHkx$nvh81omGou?23athN@;IM33Qrk$+F5GA7%uis;~{%Ra*a -zv#&55{EJcuYMb0ZqCwp6rGLVJdq7@Y(VMhg&Y9#uwmGQjyfnHSxM#iz_>7M=nX6Df -z)*2-HN;k|m5OWXR=cO6&y{#A3&Yiz{;k9hJ7@!JqeC>4`T+5bme07FI$A5N{vD^BO -zadhm*|3<5_82;lHMFMx2R$_GY#y)Bi^#3+8=V>gqF@h<^@|vXNRS{WMZ&oTj1Szm@ -zaHIA-(*Eu3ZW^%DBQX>NMxmJt!6BbKuQ1C>Bcv*1)Q_)2^Vbu{n4Aun^H0d$Mvz&h -zcr=jw#XEw(Ejk&*r-JBID=}=y64#VDzqffOVy>daeuJSHEG4>q)m^3@>vK|yVmc47 -zsd5%P1=IZSTMtb=;=}GbATx_4bRMaH)x%p6Rk40?sn1v*yz@SS^UUCDM}F^BWb2Yz -z>Yy`e>N=i-=i)gNJ^b4tO0HbV*5lseAj!HjQw(I7f$W)x<0DU#==5GM8S`t=Hs)+M -zB3~|sKdXvCdsfKBMI~n{GLrKIXM)}xbJ;zN09T@u<~DyYO75%hgJ+RFozVY0248q! -zfkT3�F~tGOxr`%_lSznR1<)&P~O2Y1D4H19Lf$MNazL78iZE+d~tOb<4SXPfVw` -zP~EJg7%<^_rWlU|=)aQxHnpl2a{)*9h3rM8M6>R##prV`jhvvFln{W(%1H5Y218`u -z;A(Qe49F?T;i}RH6^tb|@_;u7qhYG^Px@tmMl3kxm&ZmP@Z^B2QXi1QGV2VI9s^nT -z!?$YBK;ekx2Wmq|2szh+GJA#`c8MnKAC<924!(i+m`CJbX0)>S$DF}p{1rB6wVAsC -z?m{`A0#D*5@erE6V=1bV>5^cnagV}3^L9iBpJ$dCgC)b#F`lbr#XXLilXvWV5B_Gc -z!wQF$5Q%FF6OuR^v&5)#Bzi@SkTJG=r?@%%f{a3<;lupbA9cmYJ2uFPS!y<wtLHk45hq-- -zs!c?BG?z}BGFlQQ`yl*hA54>F!22a`6j>f}*Y8r&FoLTT%k#J_hj;m?56WUtnzorF8+jPfWwn#q -zqB&$~)SHkWP^r6K!uoOsy!W2^b;dasw%*G<^@;+%pZ~Pjwexl)?g#cUZsP(UOjVuc5o-2d+c93 -z-SjdfWeq+bu;;L>baI~h^~-FrxQHC(Xmwq!(Vz$1K6;3nnI!->bEKe!vyhp+9F%T~WOye<5%4JBT-Dgo#G& -z_IWg`ElN1!(Tik#U2}>|H16-X97@rsv1EyRE|8^x%zs*3Rwi%QD225_@rCc=!wY%xx&R3otg?YC^R -zC|>$OxmLC2TTYHX3W>Up@xLan1~d(OVcanB#UY25O;{+W_U|F;MnsrlAcnJM@b`|e -z=f-@AwedgZt){K@rhCqfMj=tPSqV|T7XQ*?gNR0tv=?tJT@3^01uLR>w>&r6caNJ_Z)tL#G4D(L^N#8|A4oFTpO?P4I5u$89`WYlC1E|IM)9>ghfvwVbJmpiP#ezw3S!J7Ow_MmR5qAOe*C+C -z^?*h|)53)d-w(9lpd;!(^h9`rhdVO(J%5H{&G{TYSG$Ir!~H)loqpvOhX7mv0000l4)_y1p={QIY8&&;jfXL-N;TrEq>4`ud1#m<8wY21H* +z{GWaBpx%-K7J0>ZZmXW_f6fao+ob5U?^Z8oNQlesQ{5HuyoR;`{!RBkr`MdxyOVM5 +zf7e3$(#JC%?s7i!!Cq_G?|Z_R|890^sy8nX^I+4AoA|(cdcgb1Ta$NR-MO#vQ`Ee} +z7InF1{~k7r=S*?zSuVu%N17?7GhwoTjb=r?>Xz46WVBsmo;}(5b>SYJFO7fPd8Zog +z)U-c*UFgV>?iPntol_Qcd{5D=*z7V#eTCiUwAlh88{aAPJ(k(d=5OY}HOb`6+g|a) +z9nfnlrq&d3{__yn%(>nzsKjXo$Lu#BRy7niofmiP)oE+g(Z6qesm!{ +z{WJer8QgGPc*G;fLfR)KqUqn-6W2~$s+$(M)#FHl?z69dZ@Zg_o~xWM@Pa?-kCfrf +zNi!_gJMwK8*eG;!LbBL_^*`=N3vAr?Z(H`??L2?mE{3?NRD^pc{djqFhp{f>9WIR^ +zk4cHgOv0B{>7S2OUKD(~WzElN{D0jxzFVg7Y)_+vSxC0Qeo;#mgPe{N@{Y`b&mAw_ +zRm|R>>TJF*bKW-v^@89{&%O&zv@e;IbcfOKWmNkFiM(GIZuS?J2Tyv$(90I-Ai?o+ +z+fnhR{qH{nM=5yko7ErLq|cEgu}xwE^d9J${LyZuf-*I=oHRs>kKErqEL-XgZ +zYo?3Om@3cd7BcVgLOnp!I%&$BQxohDDJ%`&_B-?TQ=d<1 +zEGMVRsj%-+y*l4j{qm-a{2;ZrJ7#$r`!9W-@M>epuaf!(yL;)bS1#W9{HSkv@X^S; +z*$?s=z9}3FNnchY`~9?)%d&mlzkHqj_h&r6y}wPyt@Wl{Rk?q|zg;)o>*L-o{l&c} +zB&}^)DO;vUcX_aBO61p_@0b?8k}((U+{}58&q}eZgUvHI$fKt8PrTwrv5FV7_iAQt +zeW-7zTX4@N>V(1KUpD-vF;5nkPo^N +zI{!z?`?-pS;u$a0k6Va8nQg1K`31EbCvGBWoXvU@+&Vn1wHtlc>n{vqZT}*?QrS1D-oesyG$?GQm__O<) +z;>PFJC6{MCyQ7hmvNhmb{g`J3IQt#j +zyQnAA-pfb6Txho1>EQg&A7yk(f_Y=&GpBW*I$IF8808BtBkVBfzKQ?7yCKxwgWOl-`yFGewkl$X7Di72g-) +zzv_NGn$zC+l|!1$9qs!+UO0zLFI-{d9Z+~p`Ec3e&SJG%e&ck@mk+wi0<*<>AG|S` +zcif`FH}$cZjm)`4tOma?8hlVw@aNwXvS+f^`I4Zik$yk#dHL{FJois}b5!JGlFwHG +zJ*T#Fca9vfGpbI}G?|!W=P0X${58ew+Ju~mtgOi*#Qa2CBTFB3C +z`JCGkID^ZF(Nj3_+WflP<}KY57H$dm@bQh+Tjtrc=}e1+ZNp!sqwBXZ{rO^PyhC5| +z+ur$c_a83)mTkFuN08#z^j#}#0)#iM;;S?{G&%2tT37NzHfCM6ohH$bmWi!M+xcL= +z=q%=5@ds54p2v~_~idsvZFRR>~F68uBbtNa}H?)K&u6TQ`;=-JTG3V3z3%%lZ@H>{> +ze6Y0s!JLH(J=Ma~ZltALFw^;Vp)~a1wMDD0G9~V+G&^28CpYG7#sAc4()DFZp|QJP +zJulG`OrO-JTF`piF)4Cdq=u#&OQ@;!Y?WPntA!4A%2*{QpR-w&>a}gAi1MMNIU)Qv +zFBZ;i|Ml+6$tmge4}G{+#@%Qxyj-E+`SYmKiGph<8G3EsEH`Zb^W{^R{#276&KD!t +zOOMTwolv{C@QtrP&anlxc9psN=f=!klk%ijz-di~+Zo|?lO#6m+WaKxgIV*LlC!

$?^xMROfsPdM$dR=uG)Zo|Qa{_b?0X +zU=CWr@mQz*`m4>w2a9%QFVtqyS$fH;a$16Opv)1mgH-9G0029GZ7Thg~bf9kz+U{&LvmF|Cw-kq#?y6NAgFn-r{E%(nB +z1t=N|_Gp%QoE4fJ?8#%d!J%m4W9OawlZ5ot;_pjdN_^J1N#TJU%e~aS?f2ZLKI}SV +zRKz-E%Z>b!rd|1;PQ2PGbwuazbHfw+G+#`$b5yvq`bC9cialrL%NIN|LtU=joS3Al +zp|JYq!EDJAxk=wrpPahWYpb}O)p*0P^76`+VsZzt`D^lDyYQ}V}`Soc*|E~o$ +z_I*0p8;`j9id(Jx7o*y0z07(AQ-I{86@2#-Y&P9-%?;0NSZTNIl<(WZT+VeKV*MMG +zYO=KMPMpxD)e-kU-3J3@v@ZXu?BXza?-^@ApqNi56 +zJN`HJ*I<5{RVrrv%jJi|w1weD%}>kpPwkn>(|Td~y_$`}zUgeW{X4fGN>6(j_c*}N +z{>I_#$Cg`)O@&@H9{9F8HZ5rl%hw-|;Mjc9{Rik~2T#bPUzr$jBXGx^up*#b&}Gj#KRh&(=iSe0>R9M9$)#R!1AxE2bWZCS!=exf4@zR9` +z?=$8cXRBindZ2&ihRNAUmo`eM#o4&syUpdjz}#)|PQG8KrNnJFTyUH!^uw52ap8<9 +zG9r@;|35r_uJh8;)2%{FJa+l|?AYTiIC0fJmq{tDO`983ud(fZTDQXG@`WF7_pajD +z(R8Zx>fzV|wYh$$r@TD3`_Iz!pRYOXd7EW!$X6{CvSn71)SYg%@?_09lajq=jbc34 +z8utG?s9wG0bl%o!vEi38ANAYq;#SjBGgM4dNnYK!lkNR~zL+UyAC$hVbt^P{^+x6_ +z&*n2nUQ~#DdZ@qlPt^8P`#zsl-M4f8J-6gzj`n-bXs-5beYxt=iB>O9@^t^1b*GPB5W +z*1y_#(wDis`ek;A@Hv@vaer8hdEysIZWR9)+O;%Q@rYf4tbTs!>DQLgv-Okq8?yh= +zHnddr?m3?K@2%=#RdKV~S2-@`d!`#pmT5F;9j-lnyn64J2V0aH_g{R>)_dB*yffy~ +z&dlikS4Q%psVcuF`d2D*7FFkd3$Tv4FZ7oyeTwCenuV+(tbfmQS9qLfOid16%lN!A +zMO!UN{5=1Y*W4=eT5swY_sz>Ulof +z`}tw0A={xF*-izv+$s|*>QB2B1elpre_3b}?zCt7&s@(VDqmR5p1erNEV#DD=6HOm +z#{7q^#qmdslJg(D+QxKzXBCfA+Mca6Wg@aFb9Gqja%9#7uy#D!9 +z=1g7Up~t9?>TO?h3o#JsE>Oqd2>$1gj$}Czwu&|q8odXY;~v0 +z{2BZz?CWJW{Cui4HK_F{^LZ07VWIVzE;lAjnZ&Htc3OS<2gmz`Kg)u(m)NpLmaMW; +z=UKtC|G@)!N6-9buJ1NAk5%W~7H_F-d(G9Pmpw7#sAf=Bl3Je%v>)fQ8!+O0P6Pj_hR+E16i +z72XvLZ^P$LRIBc0pU9d!QFM;#;t7#=UVRQ1)RDbc_2TAH|Ea%)r%k=5zwzL6?vw*J +zvS#0LSmb!; +z{nGkF4b={Du@`4=i9I*-iNiL_6)*Rg?2_J*zK`=qPrvER)d6fzR$oe~SU3Txh$O2?d@R#;Qo=5oBgZ1Tq2zxoSH-W>n$wtADq +zzsF*(Oyx7el1jcDv&$0t^54wpd8W=b!zRsRpJpw25-J!OmLH~N%c8j%zxp%;B5y+5f~nw+WF;D@-Q* +zIcnXsU)M_V$nvHaA=-vHCxos~vE0ACQax$iqN8=q3ng?^chz2vT_*RsIH)Vhihsk( +zA~74*%YQyZ^ZVL9I{eN`!MIzsL~dpM)x*((p&RQ8SDufM+wGPQf+3t1kLsMQ) +zih8xcIP;a&yyoYREQM|V+*b5j7jyF3<9m-4PVO=e=1G~+_-1CuV`cxzFTTX-OMcG2 +zX!b0}Tq$0!&3<*4V|CbxqpqsyT1JyTv!plOlP$h!+rtpPX!0|&dIPU_t3NcSPqdwT +z;lB-Ad__W|bJNlzY}t%P>yLz-RW}itSu}UnIp3qDnOE|5G8bD;aP|9jTTHxm$8Bff +z38klZR{Q%b-yU#x%@PTNhgHiY`dMD=pY-2s>ngEgM)&WnZ(NtUY<{=)=!;^#-Z=|q +zP7!E0amwRk5u0<${Rde^`*}`io_x6K61!-Rs@bOobN0oFt3LbxN^Nk{v3NTDxSQOE +zCk?BEjWK`WIQ`V{WR(|S6H@BsRo2b2DYnq_RAxtsBwljVFS|3_*c1!nC_)?78|<)nm_h5d)@KbN_%&rhEw +z*{pi_lHt77DMxMlW=$@CQ^Wr+ZR26C_NfA$*<8YtETlIdSy8M~<=Q*Ja9hpt9hQHZ +zdYl$LJpAXneCg5S)@COS2yuj?zCkW;~!S*=N6r;{u1&2jOw8t&I3PGRM!@U +zM@B^pMBC~fv-veons;j1_U=tr--*V{*lBZi?3%~#d0mxj;Up2~15YQsi*b!=oNzo` +zV}C_n^W=NCTi<<;-fnVfrp8&;qa`_t`&^Db&bGhtcGYhO@1->U-&tAm{Fv=3b|*xH^B&)9b!| +zEAejI7hz?;RaytCp0P$SospmTp-(-q_F97S>A0oMyW?z&>&gn$=T*Onx4!$uNF|lm +zPJYAl4Qon@=KXpi+vj-a?#%ylkNGOQ%O@^M%bvF*uVQ)Q`mTlUbF>~jVVZE{_}Uk2 +z{|y#>cT+!m_}UWjxU^I(&_g0 +zN4?z&;d^_k#SJswTN=LOnk*u6C;Co<0H?QsIdjZh9*Ox9B9AxD+c@2G&;G|TKbZY( +z4`*MyR(JZuMR$o=+I3u8T{^|~nrZjIy&+$Z+`QgU;LTmKgEeBD@H=I5;1 +ziz>F;*mXWlcRuu9(dDp(N2j)kurc3vnYyMUv$?OknB<)O->|(gMtc26eud)}N-kU3 +zBX65Fsy)oTU*XCVv0Jvgl|4i9sGMl4!wqS*2buq)l!^|_JoInUi6tz>Mrk)bE|Azz +zRbBDqb^T-06I)l9{yp{g>RM^7*;>~g{_kC?SKwc<`kw7k`)9f$^WXZ5#3$ZA{MMFT +zrSZ%o_4AEI2a?ybJzXvMD}55rIiY=SyXQTZ`fA+iZ)pBb@ZKu%`q+c}HwA^SduXqa +z{YmQKqJPdyO>Y_o`YNq5tuc9Xb7Hg0{;ASO7Sv8ZGJUy6&prpE-4@zK9;cZfuU}d0 +z9?bMcYr?r9y3v%h!rf1e{XUw%)Mo1QC=?XxKlzW=$YZedn%S?=SrN2-aoi`_nM +zwP_Eyd8qi>lU>o_o$a=jI0ZU)XJA -zY6Jp-cKdiE0)e}9Ywz3!oHD!F!ypj&+W@~{Pk`2N)iFgI=x1^$W}u3zKvAVojKCz8 -zSHo4A#BKr9GifzPjV_h}%4)94G*)1W9xz1jvz8*CN|We{ -zAmR$4Za$$@o=Tr3G)W&cZ8&8ut;uz)Vb$lk%{Tq(HHEISTV;E9ad};bEmM?tsSd^u -z!ZW6WC@X}f4VhABdG*uNcA0JR0-Y#3{GpJ3uiyhY_7?)!r9I2*UG6C?di11hmFb<`W&Hd0ZAFpVa!wBsqWP%obG%= -zWQuIA3DsKt#Pa6L9+f{~Nid@!HHzt6#pJT;XPP{+aJ6?-`+}wJ9@5|{6*85M&Js_G -zwKvMLwehcL%RiM()<1j~ykfh8~`OkQ7Y -zgk*$~P(s5-^uu68NCG24sCqdM0vS5{AkGHkM9YGc`@jZY8ovMg($KhQ;>u(oU(mNn -z1b;22xQ%M}BG6g7JzxFbLQP(|wQ%aQuc|5j7zclN?R_^i%|uvuJo_kheYic{Wq6uV -zzvCvhpv-03H7Cap%+HUTij3n!l(>w&J-m}aIN!449+b}FK1`#*)CtPkqc_6il3N7- -z%GIUqqcF1h&OqFGE0W~K>OPM$bA*gzh#R^Oy^DP`oihn4Mor|@T^(wWa3llnVM7fm -z4OfR)=80^n-JR2HS$N3kXhpO3`-86TZyBT_dDU>WFM-HRTIp~hKR{HaO+8(Yl8otD)(J0U&$t^Ml3qVpf+-46DK>0nIj>0|e; -z1yiU2$K4mpr!6plyZVj6UfXMjlF>6&8+;h8k>%PGzZ@O5EsP3_L5AMcg1iLzL&eitdbO -zH6a(8a4&I%L6yN!50;l8&YB--CJh*K?+GTc>K(=;Uox(IPt-`_eFMyoZqA?e-xp16PXw`JtvZRi05aD~c& -z!>Ip4kafG{{_fjzGM;hPVHTuDHoVq!w-GiDwiep5Jqa@X*?V`nN5!Wsrr^Vuo%@}rUh3{j -z{ZGfJ_=rcV(I%%_JN#-}BmWhJG6`+9%Fe%R6mX72jvT*NY8M}159hE9UVWKq2xAu^ -z_np!<1K7yWaXb5BAuQ9#%)cL52>Ct)eisV|MqN6rM@L^-GuWDX0HbcJ%1=zWV$2EM -OqCTGfh?;ZAjQ;`*F9RR| +zcmeAS@N?(olHy`uVBq!ia0y~yU|0mg9Lx+13}1DgX)-V{`3LxfxH2#>tULWHW%lQ^ +zx!)wyFRecPJ$23($@I$-8RyrX{wa|GVx-Rfvi8)kw0U3Go&L4<^iQdb%Tj5Vq|z=6 +z6r4|;`&BaiQo{WAYft~mnEyR}&Nr#_OY6`4N}KaFZT8pnIp5Zu{*^lG%lh-*r7|u_ +zre0ou{=a1UCF#tIYft}@Our0fDc +zzO6m|BW2E)HK%^2&HlFj)US1?f2}|DMLPBT+Ec#@=KoKf^KJd9pCGHjzLqL}@&Et- +zb*Fz_dHQ?hsc*s4-kG<&PMr0na^?5n{D;f6-~X*R{!^p+)tgWM3KoA~di1AU))j}QC&AO+_U!!p^~XP@-0QOrebuOW +zx$^Y4`3HZ#{`4<@!Q&kle?5Np=i;Nkvk!jNDY^aV?VpQ}{ycpBw`)U|5qOWRk!l#-mAYipZj&@-tWmff9$yUTfOj#dcoDBw|={{KAW@u=h{<0!Y9AK +z^5l2&%xBl0{{8s%&&_9lTQ~lA{PvG^{iD9^KWbM#@7eq^VcLWC^)IIF{@J+hyIIwB +zm*!jQg*Siw`Ty|E-&H4m`t`iN{Pg#P?eA8e{{HCA&+Pf%5@&umbMMcxW515y{#~)+ +z``4fURvvrz=-r><#m~>&|8wo>pI4v${rdgStor`S6ThbH`svbgOQYu1kqVa-1_p-E +zk|4iehJOzC?>kI5uW;YNAz{M#^Y!)b>jmEL7uct;fByUh4HMoOD9q0ncptyNzu%ys +zz(HXD{d@iA<0iZ>I3K^jAbC6=7cZav+s`EWZko-#Kf*3)E&uohkwEIBsM41f +zH@trC%+fv8q51K`amjj#n=|!WwdZ`gbEv`c&Xe_9*h>ngFSdMQ)!y#Iba7(lVyU>@CRtrD=}G$|hIy$E+c)Rl-uC{~`%AVlx3|@9%e{R}zU<@|ohs{- +zU*kgW-CMrrPnevQ?XL9`W`A3KXRTLH|NhFihb^b}x~#5$yyRn_>b4kzL;FJZ*`#=# +zRkw0I818xCwM{(#QQxb}jwr2d=MXp{uIjUe>6Y`gZ^sSwSQ?np4_NEAsa}4ZddY~_ +zd+8H}bfH`|Mq!OYm727tt3O{fn7{p))rqV($uZ0^a|{yGg3R6?oWJDMkNL+EIai9S +zd|7fK?vLrGp4%O26B8_xyCq&7UVih+N}DVFE2j3fZqT+(x12Je=uyws8B_nsA7c9X +z&1nDfq*S?YXMZnJwQI;QWZE_7P1lce2|+7b?5Ea#-=n#~AzQoX`ytN$&r|2REbUs8 +zd?f4G&V-jcD^^v^3|$1YdRm6ehXxk +zU%%z$7T5O<#n%@9V&|UVHML?Xf70EuHpcX58}l3g{TF-n-|Uw;*2OWW_M=R|cBOE= +znc_ViHA#=|y8gKmFZlT1zm5$|n=iaupY-kMVe{?nT1z*|SN0m~HFX3$D0`W3SGmj~ +zzj4z2b?=-`zM8l4KVwGa5&4FtAqP*_Jutr2TBv7X`*7+%&!vB+-{h}x+3n`ibeTKu +zrIOavGyCrLl}k!9GA;jUcxwF?w#zN$OI80j2fvHnSDv!;S!$kr*Y_lcB*z7Z6ZUjn +zU+s40`f3k>of@ZS$a?)?`2M&fQ9CeKSJG!>H)wwh1>+u3Xr1 +z-*@6hm+2k>sW~6S%4~yQRX9vDn33LfM)8);l$1Rg5kZ&t^t3;Je5rZ5&%}u?^F1cK +zIAJK$wcoMngMjk1mwy!^l`4{)*EdM+WN`PHc+_RN$AnXBJ@nt5nm+F+lT%Y?ea9Z@ +z(5U>>)RdIaElp3SXl|PM!j$vQZe6=0CtWs26!_X`Gk4}G|6`v%%Xi{im;Hf<4@_-o +zUv}WgNtT2AAGB3Gba|tqacsAh%OAHluTMPb6kc@mt2?)PlKDhu`{U0mn_9d(Wa{kA +zxL5b&oZqnT?5QJrS?;b_VW%^vqxMy8N8B6pb7phgejQ)&KUQ~6NBpD@$r2U^4*P64 +zkZ6*WDiLu&xpiVVSAf%msfiC77wKdL=sBD^#<+&3nZ@Ab>;y53KYP~jG;^^Sv7Ypv +zY0%6i<99A$ra)MzLv?`zGXq0|!HIt>-+p8S)p`sJ4Re@RPb{mA;yx9@z`(%Z>FVdQ +I&MBb@01Ph!AOHXW diff --git a/chrome/android/java/res_chromium_base/mipmap-hdpi/layered_app_icon_background.png b/chrome/android/java/res_chromium_base/mipmap-hdpi/layered_app_icon_background.png deleted file mode 100644 @@ -701,209 +724,219 @@ literal 0 HcmV?d00001 literal 1487 -zcmXw(cTm%39L7V103Ik2Y6O`%wn#uKSfR`yLmLt3p_Uqm3_&eKv4ZR&2Ex#@sE7<1 -zLhuAJv@C%Z2}6bi5C}scVG|$;+4<#{hT8t|zVCC-^SS4b@AvM_@k0fPET%DpgY!TVahce&P3+l;Dx(tzcoZ72$dJ$(Li#pff*Wt9 -zh?_=O#6D4M4WG^cNyDNIHb@-cFYkb;jOlJF&_of3Jzp7K1ZZ1eT0MVd2c#?lMIHR; -z8rI~pgt{V;P0ufXOE+>n_&LWSX2v;fDewskadR@@@eb<#if#P7eKO4pzixt~YK4!Y -zb2c@@M+402jb&@t7vqce13|FhaFzuGBCqI$a`BIy9voJLxms<!1gv`=eBzg-7FF -z2VtDI>ZzTc0zzZw5fJgTv)LCD0+78EAN67?C1fT%A{i$nnc&J#vWyj}sFXk)t4u4R4X`^|Rnq -z5W5G)3J9|xwyL8~knI%4i0r><3jK?DzoIeI%Er=W=tMzbVWIyDZ@sN|B18SP;f_>( -zUi)FNlf+#7@|MXv#q*YJw#gd26Luwzgb1kx6gH1bxNbA@q%dDujXDq;nw_BY5hsU; -zVumPBDVjOQXgUyztn_btW#V@V&mMWR-l~iCcuDO`Q)!Sc6h^W+aD#O3R~+NrD)|Pf -zlZfOz1U>3#o}^jxUI{j@s&R(Cw2?bVP{SOYUbZ)=2={7lnEa;uigb-6ucVduGqhSk -z8OvX|RN1C&2i2&KZ#Q&i=sK8ac4gw+Ql?JE4yVq&Tl7_9^eEs3q)Eg^=JnO$HyuXK -z-FN2*r;2bUd6&vgBU}>Z+VL@J-}h2}*Z=cC$qN!5dMrGn*ARa^eN`nMcGPaATpl*x -zv_m4Rk49+23~Zt2^Kiv&mRy`N_A2uQ^r!5z7U>&l@(tFpb*bhbjPfYK8U~{a)XIv! -zA;+8tp?D7Qjxx`CH_PPO32(IsW{UaX;n74Gf+mJucxud6{M2DW+jP>`eQZRtZ?!z> -zXnj2Pm$g+kP^wZqa|;D{N5R|zgAe)N4aI*Ki%zc{Gay2%A9|{ucP$+ZMmf~&?W`uBsv8E^Kg3p3 -zU&Tz%toiy>AT32$4mrJjYK@TIevw12{@;*k3LLo?lCRw0ko9<23fuz|$RV#0WV!-* -zV9zM+XkH^w;0M2k@Aou3zJUTyo+7wov=ea@cm*D{bz##&zG< +zo&L4-=+FQE|K~6IHhJfd#&zFUp86(L{Nn46e;>d7>)P_8Zo?;y>Q_51|JZcy*T?Vw +z4&C@&u>9lETffa)UMJ3ff9%drvzFI&E1w1T-hKG`Z}HOaecOM0{rRt8#fJrlepash +ze&y-!g5@7HYF^Dh`19AF|Bv7P(WrTO=H8#4tv}v;`q#7h<<}qoKYso5=-rd3`S{%*^};JVF8I&$;R_KUyM +zW<5Li@Xw>S|C-i+fA;?0#fN`p@B3b`;^XzFe{Vkfn>P1baQ|DmtSgDLzUY+Pc4&GM +zGwq{N?)C7=?_FA-nN{Dnu7Bj&@lw6;rd0YRzn<5U>6gMa*Q+rwFff+{`33*`_iw6L +zrw#)H3%jR_V@SoVGw0X^oeV`79RJ+QKAF!mBfX$-bwa$u+x0j1d;I9$vR~q#()9g1 +zg5p#D9QCT5cszc|-=iPIGwTa~cK7U$SgBw1t2?LO@Q>@Qc$+`2dG#B?3UB>VlCPim +zP5f~DlTYH|uOKQvK}~zBzwU~-BuM3xFXENIyC3Rb`uFIQ_|Cr|^FNB;{Fek$Sn;F# +z&cCFk`%e7mvQK-Hbuw3j?ZAiD#ar48jP;Dq8cm%!b7si1Z!dQrzt$qWTIKzJmisaj +z67BzL{a#q4zKPvmZ?{>!$TuVNd3N2I|8>{|?-$l&8()|g^Wu1 +zA5u7PuxmP$NZNGIHc%+`Z0mSG(_3Qg%UyDQ?h9|8XyV!U|G~_xPhZ3po4uBOQTx1< +zW#fPQUz;7yvPs)%)k&_{!y$N|SH$h{lUKcGx&`9-Z#}hET%7K?cjI-YBXR#O)MJ?E7mn? +z9ainTm?)xn>A}quFEz__DH;^PAV_PW22UFM-St4O(Z!F4YPuJ^IZSI9=@% +z`}uw9k6zm=$W2y#WW7tz)Xq@1BKF1ePk-j~%)MRY^2aM*&^abiD5N~K!=%EmdDR)! +zWi0XySDshzFOM&&N)%CfbX@Yc0pH(qfpf08bgn;t!QF1P)n79~)kn?&vX2DaGv}vv +z%KJ5~Iv0N=(|1OP;DdR`mTc}=ex!4^>bu*0e%%^=N1i8af2c2y>1-sUJ3a{i~{Nj_JpuywEU-QXD%dy4z>%7@HjloI_ +zDxFo5*$HFoB3KM=y%&gCvi}<$O6R|1IgFxO;rem!mJb<-a8@*5?BW%-^@;MfXK< +zeh}L|eh-K(UcK?6c>RrT*La!Q!i(aI_3LhQ_wKU*3Do?0v`F7A-Uh^$sr|S}|5*5+ +ienC+K!wV7&3}>>^e%5N4Z((3yVDNPHb6Mw<&;$Ubd@uL_ diff --git a/chrome/android/java/res_chromium_base/mipmap-mdpi/app_icon.png b/chrome/android/java/res_chromium_base/mipmap-mdpi/app_icon.png index 22dbe10b62c2973af8e124357b45e7026660f07d..b3f3d70ad36a9bb0693976778a22acc7ee00d892 100644 GIT binary patch literal 3813 -zcmVkd*{N -z2wQ*QT@YmET*O++164dIqs3*eLfa!@EW|Ep;vK_9f+I@A+jojMTZu@pm15r{!TWrS&&g|WEzdEIKO_(?y=QPn6C6W8E?Xqp -zHIO3_Zwrn%JqTf?zP3ih=;MQO_(j7wG1j&OC00aK#{DG_3_nRYDC)#g -ztIPX$v^gp$munivZV<1paFh4wH-KcLc%AM_(W!feoz|SLrnv8`DCT%@bXaGj+mm$) -zi8GLoF<_|`(vlz%Rha??$_v*VgwZ@PTBIZ|%PRx$%Ua`jjc!WRB%zM!HtM;>PA_HI -z>G2IV>bKQSgL55z7`V+&PiNTV`9>T7lMIepvDBi1h$xK~o*=Ht*q$CAtB-R_z|%ea -z$TtJ&)u*cI+j18bn`@}3%td=HxoGRTYFc&Dh^hcgDs<8f@d2dkgH4V=%p}6jf8@vQ -zs>9QRV=bMfnPhpb0puGZd+i~G-pKaznaDaa|02*g+fKc*Z1hTwo!;N&pwYYi@pi7A -zdTh4IDs)NL>5(-$J+xYYjJjWHDUf81rgCfa -zWspofQAHciRMYN@E;@_~oUy119IJHEu8Y-_e�tkK~-Kmh%crUG$^1h7MkF(cD8$ -z+|Lq-D6>m$!!H(snc^7qiR~#*wE2CnbYjpMyauyUn^cV!eCwo10|l18t>m@~e1((>Xe%KWif>YcIULN(=GP}>xoTYJif$JTKG -z0i@`eO}d=B-Mt1^B@1iLKkTGt%UC`Z157n?8+N`}j9q@SA7}R;Dx!$eA?|Fe4&X-P -zI4dnY;-r+4D*6He4Bu&&nSKH~?u6`j+o034&~?vD9YNZlcl%G`jcvGgvrb(x@3FNy -zbw&j`q7pA}(P_jE8-mlQ0h>442y~?-s -z(1Q+1nB_68$U#HUP5Ncq=tX4wX-I*!JP?^5fFS#!G9f${C2yCe(P;Q(^e&qphUVJn -zS!B8SG7H_kToDgJ#+$}ls5jP}un%1<&&CEeqE1=qtXaEE6mQI(Y@^ye7$o`WX -zG)P02@=pfQj-NvA8z1*eU1oI@^HU -z^Hs76@y8rAxc~uXYl^rB-T;0q6~iK1`vRD}rwuNsbhoQoqlvaa8pkSJXp>cv*oYlE -zy@)Jz0+BB3tkf0Rdp<*>zQ`n({gXWk(~ImB^PQ7AudOEoLq?k?n(6sXR_cazI<2wL -zW57!pRvNNhqcBt;@wkI!=V`vqW<2J4Q}4&JWQ -zS6|yHwZut>uT;}1bf3fMLc1?2gL7|Z!qG<^^a*sWV54?0r&j{?&?nPM8JN2h)%>Qc -znhpYOQ_TLP0|LNy!8wx{8KGLK9OKejiN$55vdrvsL&;ZxFv}$k+b@vS5$H;NGBv5y -zp2$4!4@Q?6nhTR7^PhqAv_d;{tW$#^q?HsD`25YWCTgBwqQ54asohF5wMaBk(-;#q -zSW>}~@yFtF6~O!-%ETM9+xP-tLquFI@djWh^<$_2cY}99aNai#NiKx{bgyfUCqN9R&S0G?2YId<0u3o1`z;PcyO3kZl@g-G>MSuo!b@mz)w^ -z2Q>EuAVd=}|7^Y_?P*nRyWjqXY2d#Yn0krmW-g^Bt>T2o-+IS1`Q0>F00w*}yQqoS@}iW-U8 -z#R)#AS9;6cAHu)_3UV5e4TD8W}nQJ#3RaG#&UN@c9t9gIV{?rvxTfaj-K6f -zlZ6ImS!pOdFujnwkBy>^u+bHkfA65A<32=UjeC9m67J7oE2ndRKo#SWQ$&$=@q!$$n^!h|Kt -z@D>U_3onv*Z#m0{f5|qy3wb`z+I0Ghm~*DsZJZio*_*{x(g0-t<;{vzFJ%7}WNOq7 -z4VBTPB<6f=lbK(GXU0lwTn+X> -z*df+GzSz(fM{HN%Z1+Zxj2@8O%}Y7+SLk+BVCXh0jRNTzg*weg<<^uqDDS+gz@w>^ -z2I3NRA_6=XaQ2g@N{#^^^*nqLwG>|+E0UyHcg9YD47P}e2~$nfeXW`LBWuG!cETQ= -zW})m6hwYROLmF`iuLrqj{g0)eRI-~@gs-oBjfNwj0h=xLi7SMcxljQTpYJ~iZg)$D -zgVL_@Goy;EiFhrvznFKv3XyZxYW&RP4uZQ!#%ZUN3`=M7K3!H|G$h56cxj`VdINo- -zeFpFMgi)C+U&G)zp$BxDi}~$WdNN;Tz-1+!nWw5mze$56xA%&!^23&As32|?qgQ_^ -zd+uULiCdW0P(E}{Gl7Vb0-HDvL9IeSj5KLXC*@zLl3$|+o#NB%6)Ffkofnm4nmoVWmQkF^@;paT*hm{WtUuc?pYFJ)^q0XlN{s|_ty+Hk%MR*@*Z?J -z=af^Cg*L-VT_U`+E|AF2q11;k28b^N@$f6WCJbBb3>gtKo9`*_{j14)2FvN;hZ_sl -z;S1y66qENAiTUS2fGgk*gf$ypW(cM}$pA3vS|4%DVYB`_zeqeccCfq`-}4vC=4wM4 -zJB@?jUjiONhNg@E94wYMWx^g0a3Eol*iV3iWgp1vm0YGCEDjmIbOzRLC-1@cx@N=v -zlA(GqOR9yq@s3AB-U^>6KHHfmzA84$U>06-XPB$tCg~+xrq1y-^H9N=C(L5P&b*Mf -z=1=6c`b04Ll@nY1vWS_r%kp -zeXpJpywAt@oVtduXLn`8qMsb#igo^!T +zVG%#ptIYh$K%=YcF(W%8YoVhnqhr8@#T`0)Tzot`WF^HC9h9wASSC%F%HqTk-5@ZD +zq0ym1K&eT=ip +z!T4u6+K*%pyEZ9%9l2fJWf9%!v0-Y`eU*d1YkJO~%r4M9Z`fzABA~Z7y}(Ua#@RtH +zTIH7M1ZBZ|?mi1!jvT28y4O7x&2GB)xLjIpZuK|eIg4GI>JIgn%vtMqBx~#S7K^>- +z^k+o8WqH>Bsj6x9$K5{;#F +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 +z+}yNPc%F#&` +znTuyuG1o4vWqbdsr><1s +zdAgVH{_^_vIm_N(&y10a(_HZTprwJi(LHWS{x-&$X_aRm0h;h9B**ve{)7GHx +zk1qwQia#sywSV_1pzcA?U1hu5`vSM=PrJP6(kzDFUkiO^P4<=K5&o7@l3gNjsIK62 +z+Cf$!`TTPX?bWK&SHJp~%VsX35q$EeJFK$O!>P= +zq2z1D&)!d#c_RG%I*;kZ<_y_SawQhervy)IH9PDTtF&i}-h>n97hY*MVC&Fl`S?M5 +zj~Y+(8y-nPu-~U~GvYPGm%ZKgK+}9p*KfW(A`MYT6&*zQ}+7I|zOr_(}IF{L+ +zWH5LcC0}?Zaq~ax{T?>vWgGU0-~TLr`dOBRnH96| +zF#M6Ma44zR>VLwzds#=}?4YAZ_Od4ZS|}t~^+)JS4Bw)sN?&fMR`#5KIBUZ8LfvNx +zdjB^a$iAa+eU6##3Hz8o>)YP{_bD*=Guu`;lh;NiFY{*Lo$p63FREQXPiW8i<3Hx? +zYFq!*^3`gs2S?xZ%ftx26S=%E`SM18o2w81|No$FUNOJF&^}*h|B{Mx?-zXj&$M;+ +XQ=3EUcB(QkFfe$!`njxgN@xNA7IINF delta 1700 -zcmV;V23z^%9kUIPBYy^ZNklYB;L{?gn;z>1p4z}OZ$*(7Ir}!EbV-I;(xxRA%ASFY&HCDD=O|f6U$4O -zg&C~%+069r-CNm=3b%3y34(}{AR=Zy!gnOrE=?n4Ob1-}$I?FVI-fue+6CRP8Fck; -z)Jus9$H`dOKA4DH<`czF3kO;+BOgpEsc2vU6-!&+MOgfE5_@8AMGdH0j=Z-73w{xf -zU?${?gvu8c&wprpe{r*B&A20>j6D3(;u$SQ+?xzdV#O;N_dHaNuV72Ru#LO#D?e}E -zJlWle5Q1D&x3mkqiGTd6Xy<uUPLdG6S2^Tda27e@D<9pDJ?$VXmEcU%&MW0@&wsVC+`?C#j3kMvIYbN|f6SH3 -zz=1odw`^=|G@(`Mh|qu4v;OuzX#{LI_nj#5b!I%Kr=3X{64NDQ|ARC#=U5UMzBQio -zbd4kU`dnxRVPH{_CmODYLpw^1!ry=YtvKw);-t$H(DK|5USWS$O -z%DRi9$$zTzDGHfD6sTN{V(HV&c7qKQ&)96i2bl(#c$_*;8Y0CIf18*l$un^>K)iuN -z_cIa)k6HF>(T=3tf7!!95M7jij(#jvJaV3)ka!Lg439W#V$E*fu0_WTwV|6nc}O!L -zt)P)Q3`hwGl7~n+AS;J(MPcWaXb-g1f(Ep0J%8eEL$EX!ZL4Fqy(bKH7DdZ#pxms; -zyi^K)mm}K1-Wv&Lp_z3fe9*V`j1T)S1A|->3mLfmG=%`@ED)jy_xq+1;A6Z*w1I>7 -z(%wTeyKle;V|(wEL}}uswbl1R@uEE{XaH-lV&*Djs@brh0TUVGi?&r6#mi4zD;RhR -z8GoAD^*~8SN5_;2mBm(zKNT{7%@sA!(=}Eu15~qFo&jB5T@zccq$DvW%8q~fwWJUX -zsN@+K>5=e3i~+ROvq6ajz{sGefpekh1c*u!Z(!f;q({h_ya-Sl4c++ZA_R)zy0dWv -zKnpB4D@tzh7%dq5Uh}lkxO>nH?Rjl<;D6eeTg4i1-kL&EGbIG@x}GYxfz{`e3B$SI -zY|#dM&b`~3*G2(LOG~W|6Hl;7R1{AHWGOgG#L7KNEb+eXU}|cr1MLhNe>Lb^$<8Y| -zNvwf!JJU%_l7yuaOmK@9SmWLm|!CY+9OUH*9v@%j>S%$ -ziC=Iu1ERRN(Bra`p`jtm|3W}WejVW!{e+3*tqCzezsKJq1$W=(OP&39Qa);EX#6H< -zEe2(@rdCcnhci*~L}TmqO!6c=mw!YjO9%tL4tSeG_T9~daQrQqecp_|Az2l@-Y_up1t~kY)`-kqO -zC-oRUtrfHh8f8L_(yG_I`^!s1{Ma37+^Mr_m+uN_s!*YVn%GC`+LV9vUVr58QPKuB -zp65IL^#_7HpoLP4=YT4 -zus}&gf~RoT?Dg|jQ&TG^+gSYPf(3YpY|g(tL$p1@{kndU{5foe&Z0vQ3+}c7NGDweOOU{X^Hk -z52RD=bJPoKn-IJ2R${o%nb$Wr9tu6+G{e=UQmtmq@V}UC=q;@=#$#NhKI>ZzgrQ1b -zTU#6B?QiHr;B4q#jUqd%q1#krD~;b`_(1q-rn}sBKx-4<2AXr@AYmpOO6g+ +z|IRY@;h*ANX_LO%K0mf{*LJ%v*KI%VfApi%h-vDQ4QIkNZ&aO7P5wNQKPu`5YtDuZ +z{C0Vn@_&w7D!JzC%`;!#-HpE4!?nGLgR`k)l7dp2-Jx=oYkI!QsXpv6KaO9r`(QQSf$tXU +z-3^i@U-PeccXAy+8F9mIMn}vu;iLZC>{0s4@;+KCGZGj@y`%5DM*Jxjs!qyxkBuho!z0lu*c@lrALywZg*z$_$D3Imi%rL(ziar +zd;f;s-S4&S^Y7W*yxS?z6cfCC3-_MR`ai2Op4W5VS`e6ak3a7JwT+jSJTJ-(Dyxy0 +zx%t1arSuGsdq-0Q+ph3%cKS^c*dK2BB&I;j@{zXu-G1A*3ffa2_*_1x{WSM{{nm|l +z4u#L{QR!T1>B1vde`f0G1C7=zx98;Km@Eu^)p4Qz>gIpn>@rz$EWXdx_*j}|vuycX +zPYI#Rsww}QO^lvL2ubcUo%f}rSNX@Um<+bWgusdFQtR5Ct-X2=-LL<@*6xt*Hy&ey +zJI1YlUdbF&z4zHoOVixAE5f&D!l_-|i%!Te!)6o{Qt-&dy-YEv|C +z;e-l4VV-`A?4+}K_t&`|=h?b&wq2!%vBKH~6RmhWI5{S@dsr%Hw->l3KA)PwzvW63 +z+m>A0`bT-r8%)GJ_ +ztP=rnpFF2+>A9w{(E75c +z&!m>6LOunZ=jESqSQh9{KJBo%uUY%=zu)g$)q+Ac|NL-PkiTM)L2doKdQJvS#o{do +zR=jQf>CW)4{JiYG!m8s-Kb*e6b=LL$u`f}(-^lVLcFjmoX1k^ACv}~xrnm2?-`vjl +z0u$y%J9b=nylL{ng^H*DJ2`mN$vzbO+tT@XEvKQw{^R$RSj+D}^Pc;+JjgC9Bjb-+ +zhAvy`mStgn*6qfDpInk(fA#sKVl%zoMctc&c^_ZJZ0B!x&$bl&(VbbZGWYkF@OL|m +zWs7I8k*?JY +zN2mX8f45ZqtAyQJ(Jh=(sZPC@R$bro`?R<7pBu87cUErBn*N?EV^zSyrdc=KU)`Eg +z|0S;e$@{=dY-aPGTmSva-ej|&HK_Y}D}U-1tTm4SuN~732YCIY*rvERQUs=3$ZFF%Zf-8eW&6P7 +z@YSV3Ytznt*gqrph3;CzW63c~>|RInwk-6DkB*jp{5JnZgp*Xr@-?oJ(V?MR&Hlzr +zt~+*KYoW!;3<>kY|D7uCMf2_xn9?$BbzWZHI^8chF2_YgT4r$wUS59XnC#-3g$|;A +cQ~xu6jepzJF{?;`fq{X+)78&qol`;+09y`40ssI2 diff --git a/chrome/android/java/res_chromium_base/mipmap-mdpi/ic_launcher.png b/chrome/android/java/res_chromium_base/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9854af6de3777c91a1646b84451bff4976d13a GIT binary patch literal 2782 -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 +z-FUES!R`np?HwnWPOm$?4 +zcsM!fDLhnbn)8rLVflpOv|lsk&0MnVUhTg1=|-20In$V;KOA2FYUTUa@7C|0|Gako +z_qUB4ht5BCl$*V>cf*uh_reYM82guAnf2IFlJVomdoxr@MJMIjwp4sw`J3rm-m!&- +zdA)q!*_i)2d4wo`oWP}cF6wu^yH4{Zi$`ljcgUTztSrtc*`a^z^hE`Kr#)ZqDfKyK +zN-AmhBwSmS$@nhG@Jt*)E_yduvByOTI{Lp?P3x!jq(@%Mz!|squGN>iXmPvpTDFyB^y8ym&4>Q89Qi +zQ%$@ahecqUo5wv)pN7DTEPJNkh(8``zK8XQ67!#>Mw^@MXId+0crHA6Q!61?#Idt? +z!WF?X=Su?0M%IoFt*$dfe^<+f-@U*&VV3#<^+n7^CX=|m-hMfjC%t#?aW~^VAHq6& +ze=Un%dED)2_X_cw#|r#e?kIkpJ2_=m`3<+#{+1^St~q9k%WnBNsX55-dHnjti=^eA +z#IAmPU0r0=KbP4}j7&)%)|EDL7<8rS&Rx^+$8+~Zt_sWerTqN2UdVU+xWP2l?a3j# +z$gsY^9cEhd&q}rBZdYRFD)pZDQZYhP!*NmHN1?5~sT04ot~i)b_~~)!_V)`JmV8;i +z;nb_iQAf(}uUWo%S(Q~>tpC$#RlnA4iW9Gl-|$*}!*`#x+sdzU?rz_p|E`lket((6 +zm1!~?FF%>9#oIbTQHHD6ZOZa@VK2`nO%B-a?-@9QIcPm+&b1JvdMjE>5cu2-=98?Jih9c=D#`3R>wE5*qzwOuzB)& +zX5oa)AculJ(Yo+TML&%#mr7iI-~SyNRdwYU>yi287p9%&)B3luPx*IO^QMNo>yp{r +zZdF|KJH3DV#iW#%*H0>y`U}218Z)zMsi#z-`8zL$_YCvClt=3qp5OfLkjKu&|4s@@ +zpS`vEk_pG`U8lVcC-(lEo!U1sqW{*y3oT6A2hv)PJ<&Fin-Q`kz@u}j)zPRIFGD&f +zox7cRo1gDhqv@K(id;;K6cuEc?q#lHU}iB9nV|mleCmmgeN*GuPtM$MK*=RPcIMom +zQ(HCCnOX*blER|0!5(!*ZIoH*=V)q&4-$qJ*gVs46-jpiEvC(-` +z%B+YL1)Cgq{7?L`+q;R)&5UE>`@N2f-o19MGCAn<*0ON3Tpr`XMy`Z?k7XUSR~(XqjLWpYWY}!yuWNO32syyyljhHudDMhK|91K6KB2_c*7lkA*NU7`+UvUL +zVkOsEjcu2d1Y-M=`W#}{*yJtF^Zd8u`18{umABmH*R_XLpXhqNKsbnj3{B5&*VI$WJX2y$ojB6UU +zaD4L-&AjYtE$cpoPswY|Q{CnTGc%f#C;WQ2;qrxCq2mS})q;{Q=B6#&rf^jGWpkLr +z_Z05Gma$6;chvvVn|aH1b4T@JF{Z3JHG99g6|+8Za#(xwGNTD&|3Ytr^+xm0F=bBU +zRa^1IoqcN9m5b}7`R=KiPrDs>!i>u`#687RPx_BZ)jIRwBbw5$IC_=h7qutvWpPQ^ +zt0urGC;;;Lmhbm9f*5Od$xV#!^!v#7##oTml5f#6v6CV}YcA~nrtyVS=j+Er?Z1hW +zU$}2lTyNfzdktk$)Sr1uom2~C +zX1waRFRs{DfYG#yaovlvS_jP^Fj$@Sn;EBlBwX_Dv%h<}Tp~54)*5nNyV;eLW_IeI +zqw@>SskdBScAm9g@S(QNNV-Kix&6XUE>)>LN1bXfpSfbU>X@q>M|(r*j{H&urfZH2 +z%4e+`+z+genXAkm|9Fn}kB4pFzFVHy-@e7aeZ@+FuThOIkIOy2c+G1Qj8yu1KjGnv +z$y`Mjw_Z^`>EdjpW0Kh3u}}Z<2^5uOSrH7a(migb4q`q +z!tp0vCYtj_7x@%_)BK|N=Bqqg$J?oE1nZ?f@9wbb{+DsbI%{`pTmI!uhHE+g-!s^8 +zqJ6gj8{z +zu%wG;_h&6PDG|9Adg-)j4pY#%l~Wj3Z_LR#dS=mmhb@|0Vi@|ng59s_ACjXCMpF|u$%r1QA1@l#Fn5>D|9T_2g*AEA-;=)<3NdNTsoDF0Tkd(C&vAlT$2H+A)*I_T|sT{_vU4k``Z}{>p!eWkyp* +z@CUIE(-Ir{R_E>bpCK^mQY^>n6%SjSSIgdUTO(|s&&KjCNnE0{p)h)P`Pp1{@ePai +zgw5EpLj3uTEjt7mb294pz0}aL+$71baIZd+apO+UA2&MR@=L6HW3cGnk7=olpJ&Zh +zIdglb=pCz_7G{Q9x^r9Z+ue_!5j{nD-uqyxH&{yS^4bqkP|I +R1qKEN22WQ%mvv4FO#s-iE$aXP literal 0 HcmV?d00001 @@ -913,80 +946,84 @@ new file mode 100644 index 0000000000000000000000000000000000000000..b3f3d70ad36a9bb0693976778a22acc7ee00d892 GIT binary patch literal 3813 -zcmVkd*{N -z2wQ*QT@YmET*O++164dIqs3*eLfa!@EW|Ep;vK_9f+I@A+jojMTZu@pm15r{!TWrS&&g|WEzdEIKO_(?y=QPn6C6W8E?Xqp -zHIO3_Zwrn%JqTf?zP3ih=;MQO_(j7wG1j&OC00aK#{DG_3_nRYDC)#g -ztIPX$v^gp$munivZV<1paFh4wH-KcLc%AM_(W!feoz|SLrnv8`DCT%@bXaGj+mm$) -zi8GLoF<_|`(vlz%Rha??$_v*VgwZ@PTBIZ|%PRx$%Ua`jjc!WRB%zM!HtM;>PA_HI -z>G2IV>bKQSgL55z7`V+&PiNTV`9>T7lMIepvDBi1h$xK~o*=Ht*q$CAtB-R_z|%ea -z$TtJ&)u*cI+j18bn`@}3%td=HxoGRTYFc&Dh^hcgDs<8f@d2dkgH4V=%p}6jf8@vQ -zs>9QRV=bMfnPhpb0puGZd+i~G-pKaznaDaa|02*g+fKc*Z1hTwo!;N&pwYYi@pi7A -zdTh4IDs)NL>5(-$J+xYYjJjWHDUf81rgCfa -zWspofQAHciRMYN@E;@_~oUy119IJHEu8Y-_e�tkK~-Kmh%crUG$^1h7MkF(cD8$ -z+|Lq-D6>m$!!H(snc^7qiR~#*wE2CnbYjpMyauyUn^cV!eCwo10|l18t>m@~e1((>Xe%KWif>YcIULN(=GP}>xoTYJif$JTKG -z0i@`eO}d=B-Mt1^B@1iLKkTGt%UC`Z157n?8+N`}j9q@SA7}R;Dx!$eA?|Fe4&X-P -zI4dnY;-r+4D*6He4Bu&&nSKH~?u6`j+o034&~?vD9YNZlcl%G`jcvGgvrb(x@3FNy -zbw&j`q7pA}(P_jE8-mlQ0h>442y~?-s -z(1Q+1nB_68$U#HUP5Ncq=tX4wX-I*!JP?^5fFS#!G9f${C2yCe(P;Q(^e&qphUVJn -zS!B8SG7H_kToDgJ#+$}ls5jP}un%1<&&CEeqE1=qtXaEE6mQI(Y@^ye7$o`WX -zG)P02@=pfQj-NvA8z1*eU1oI@^HU -z^Hs76@y8rAxc~uXYl^rB-T;0q6~iK1`vRD}rwuNsbhoQoqlvaa8pkSJXp>cv*oYlE -zy@)Jz0+BB3tkf0Rdp<*>zQ`n({gXWk(~ImB^PQ7AudOEoLq?k?n(6sXR_cazI<2wL -zW57!pRvNNhqcBt;@wkI!=V`vqW<2J4Q}4&JWQ -zS6|yHwZut>uT;}1bf3fMLc1?2gL7|Z!qG<^^a*sWV54?0r&j{?&?nPM8JN2h)%>Qc -znhpYOQ_TLP0|LNy!8wx{8KGLK9OKejiN$55vdrvsL&;ZxFv}$k+b@vS5$H;NGBv5y -zp2$4!4@Q?6nhTR7^PhqAv_d;{tW$#^q?HsD`25YWCTgBwqQ54asohF5wMaBk(-;#q -zSW>}~@yFtF6~O!-%ETM9+xP-tLquFI@djWh^<$_2cY}99aNai#NiKx{bgyfUCqN9R&S0G?2YId<0u3o1`z;PcyO3kZl@g-G>MSuo!b@mz)w^ -z2Q>EuAVd=}|7^Y_?P*nRyWjqXY2d#Yn0krmW-g^Bt>T2o-+IS1`Q0>F00w*}yQqoS@}iW-U8 -z#R)#AS9;6cAHu)_3UV5e4TD8W}nQJ#3RaG#&UN@c9t9gIV{?rvxTfaj-K6f -zlZ6ImS!pOdFujnwkBy>^u+bHkfA65A<32=UjeC9m67J7oE2ndRKo#SWQ$&$=@q!$$n^!h|Kt -z@D>U_3onv*Z#m0{f5|qy3wb`z+I0Ghm~*DsZJZio*_*{x(g0-t<;{vzFJ%7}WNOq7 -z4VBTPB<6f=lbK(GXU0lwTn+X> -z*df+GzSz(fM{HN%Z1+Zxj2@8O%}Y7+SLk+BVCXh0jRNTzg*weg<<^uqDDS+gz@w>^ -z2I3NRA_6=XaQ2g@N{#^^^*nqLwG>|+E0UyHcg9YD47P}e2~$nfeXW`LBWuG!cETQ= -zW})m6hwYROLmF`iuLrqj{g0)eRI-~@gs-oBjfNwj0h=xLi7SMcxljQTpYJ~iZg)$D -zgVL_@Goy;EiFhrvznFKv3XyZxYW&RP4uZQ!#%ZUN3`=M7K3!H|G$h56cxj`VdINo- -zeFpFMgi)C+U&G)zp$BxDi}~$WdNN;Tz-1+!nWw5mze$56xA%&!^23&As32|?qgQ_^ -zd+uULiCdW0P(E}{Gl7Vb0-HDvL9IeSj5KLXC*@zLl3$|+o#NB%6)Ffkofnm4nmoVWmQkF^@;paT*hm{WtUuc?pYFJ)^q0XlN{s|_ty+Hk%MR*@*Z?J -z=af^Cg*L-VT_U`+E|AF2q11;k28b^N@$f6WCJbBb3>gtKo9`*_{j14)2FvN;hZ_sl -z;S1y66qENAiTUS2fGgk*gf$ypW(cM}$pA3vS|4%DVYB`_zeqeccCfq`-}4vC=4wM4 -zJB@?jUjiONhNg@E94wYMWx^g0a3Eol*iV3iWgp1vm0YGCEDjmIbOzRLC-1@cx@N=v -zlA(GqOR9yq@s3AB-U^>6KHHfmzA84$U>06-XPB$tCg~+xrq1y-^H9N=C(L5P&b*Mf -z=1=6c`b04Ll@nY1vWS_r%kp -zeXpJpywAt@oVtduXLn`8qMsb#igo^!T +zVG%#ptIYh$K%=YcF(W%8YoVhnqhr8@#T`0)Tzot`WF^HC9h9wASSC%F%HqTk-5@ZD +zq0ym1K&eT=ip +z!T4u6+K*%pyEZ9%9l2fJWf9%!v0-Y`eU*d1YkJO~%r4M9Z`fzABA~Z7y}(Ua#@RtH +zTIH7M1ZBZ|?mi1!jvT28y4O7x&2GB)xLjIpZuK|eIg4GI>JIgn%vtMqBx~#S7K^>- +z^k+o8WqH>Bsj6x9$K5{;#F +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 +z+}yNPc%F#&` +znTuyuG1o4vWqbdsr><1s +zdAgVH{_^_vIm_N(&y10a(_HZTprwJi(LHWS{x-&$X_aRm0h;h9B**ve{)7GHx +zk1qwQia#sywSV_1pzcA?U1hu5`vSM=PrJP6(kzDFUkiO^P4<=K5&o7@l3gNjsIK62 +z+Cf$!`TTPX?bWK&SHJp~%VsX35q$EeJFK$O!>P= +zq2z1D&)!d#c_RG%I*;kZ<_y_SawQhervy)IH9PDTtF&i}-h>n97hY*MVC&Fl`S?M5 +zj~Y+(8y-nPu-~U~GvYPGm%ZKgK+}9p*KfW(A`MYT6&*zQ}+7I|zOr_(}IF{L+ +zWH5LcC0}?Zaq~ax{T?>vWgGU0-~TLr`dOBRnH96| +zF#M6Ma44zR>VLwzds#=}?4YAZ_Od4ZS|}t~^+)JS4Bw)sN?&fMR`#5KIBUZ8LfvNx +zdjB^a$iAa+eU6##3Hz8o>)YP{_bD*=Guu`;lh;NiFY{*Lo$p63FREQXPiW8i<3Hx? +zYFq!*^3`gs2S?xZ%ftx26S=%E`SM18o2w81|No$FUNOJF&^}*h|B{Mx?-zXj&$M;+ +XQ=3EUcB(QkFfe$!`njxgN@xNA7IINF literal 0 HcmV?d00001 @@ -999,30 +1036,31 @@ literal 0 HcmV?d00001 literal 1210 -zcmV;r1V#IaP)=Wt{X7aL*cM(q*0XWSjG?%KB%V -z_84f-ug~|Z%lEI$`Wa=@8E4TMXVYMx@2}7QugdfpXVR_A`evK-ugdynob|5D`Wa`^ -z8D`QOWzVk6{IARRXP)*NXwp!Q>lkL#8fVh4&;J-`)2+z(W}fvMY0(&I(Po_Vugdyo -zoc6BE`LD|Q|Ns9PXVPY!_O8qN8guBz-1&^P_*0hd*ysIWn)Gm|@VwOfD0}ME<@?;| -z{gb))Z=&|~`2IkG+=5F=>1%l@nN6u -zrN#Mhqxa+P{L|z1B5l`GkL`@J>H7QreXH^}gzG4L=}wI6@%8*fgxXV$-Ph&)HiYYe -zuJ_~Z{IARU)8+e-w(2%}->S&@n!M}Q<^3pp>g)6Vvd;Q8de@!6`Qq*T;_m$8?D_iq -z|7)N2xY7FX_5O;q_~PvP>hk`0sQ1+4`+~3c9%|Glan!TU`i{5w!r1$iqya?$00202 -zQchC<-{0RbzaZ~0zhEGc5by6mkiS46K%Z}r&kztW?~rgXpwEwwFke8wpWk1fAV6@> -zUtgeLkl%0kUfK%)00NdtL_t(|+U?eZlk7kc$MNjhw)Je!%SHBR%2<9~ZB~?}$~wpd#SUjhmCBbP>JLSn -z!eTkZsp3w#iLPSGR!&T65g)e)?IN^BHk1=`8%`44CAXtFE8_QsYdHiv++GXB>^Ipd -zx2?qkZV}5+ -z;HF$N39WmHfa_2jK(SoArwB&Zwz1JdHN27|yNLv17ZA6{%IT -z65NJuBvK@e(`qb+zp8tA{?CM1OlbPF=fPNq%|2F*tUkp=svE|0%-nTMZGidT68(t~ -zkHj#|9CZvff?gSVY4IR}m>P{dR;ptQ@_o9;_<<&tp|n{T$cxZ{e4`o2aiw)X7Q#!7 -z^$0Of^WAS(0oT&~Q;*SniCb0BkC4-P&{G6^tvE5uv#L;S$}5VtuLa|FG*rdxO8 -zB>MnGD0Y4tYCXC&1Fh+Yagy&aC{xHd)I_qUF9G^yk^)+9;xtcDfA{rmz4!-D@Ay-~ -z-*Rvo=K5lT@2bH#(H8Y-$j@GXScsSYD_5zZxH%8n(~u<`t8y$Asr2sSR*Pe+Aw#9} -z5g(S>=vXT(RcU;|tty8=o(gBIqsbvrpu*tU=bmk +zcmeAS@N?(olHy`uVBq!ia0y~yV8{Vs4rT@hh8;VW|7T!eoE_j3;>y6lAenwCZSJ>q +zr+bb}4o4*Ob|x*Pi;7KIfZ6 +z#`*Qra97u08WBZT6S-r+%f)`MU1(FUj;v +zl4+NuQ_rtE^Jo3(@9FctNo8CL=zA@Zc10@v()#oNB{D9rJ@F%L-dE|&ixQa^)8>Hm +zrqB7d?)1;~r+)qa{~zv7sp1#M?)>c8`XhMSyBp8{CeHd&u>8ZGE59|WUtM|n`_7BM +zlXw2eU-a$kkADtLPjpId@4foFa^?4F!{EeCR +zF>(I;rAL1jEdKuZ-Ji>kzbWNj5AJ{4v-#z(-~Vb?e==`*tx@yRujlp0uYX)xZUy(= +zz5evCSAPq{j>h`uggz=Pu%v(tor_{6F+C|d428aUyYhquRs6Wbncf~)%Cdt +zem;8p=h3@AkKg?K_2+-~{BJuh{`&CsU)Po&kKX)x_32;5itkq*|883UT`ud2df}DL +z=YI8V|8eNX?St`0ESp4fkKr+iPIAjq#)3$$A +zb>+YFEfGE$zqUL-7}0*#F06Nr-BFiS(#ML=+$r_RZTNX#=x?V${}F?;GNn9bO>vS{ +znI9FJW=Qqggsn>E{#3i`_>V@lX$!YRN}TAv&{(rr@2xh5XYj{|G*GzonARnetlkJ`uym=;46EZj70-v&e+}#EY7PG1E;GV +c!*B8@dOiw8yFKb)U|?YIboFyt=akR{0J9&Tg8%>k diff --git a/chrome/android/java/res_chromium_base/mipmap-mdpi/layered_app_icon_background.png b/chrome/android/java/res_chromium_base/mipmap-mdpi/layered_app_icon_background.png deleted file mode 100644 @@ -1032,433 +1070,454 @@ literal 0 HcmV?d00001 literal 1111 -zcmV-d1gQIoP)Px!Z=&|4#rekE`F^nSMUCwB`2Lf*`0Vojfv)%Q_WtAU{M6<9;_UffGr4`uzXv^8Ury^w{V9n!@$t?EWWl)O@S=@%R3kyzH~i`qSn6jJflS -zwfN!e{rda<{>t3;-TnND17QumhG6m`GT+beyQbHlIPRo_PEje&f)yx?f&cY{>9t;sK@!{@BW*?^>d~7 -zD17Ov$oaU^`(~Z?9%|H6kL@gU+hLmYK!W5VZPz=0;z@|2hZHhbTw -z#_oQp=1z?3;_UhvXVNiv-2vT&k^lez0d!JMQ~ny`2Ymnl0=P*;K~#8NywbM;12GhU -z(A$$ABwcX!{-sB72MfH04f12P0n5ZXM2ul#Jw=S&O>6XR=QM~E21#5zQb)5Itf -zOB16^>@YEwiFJq=r-?C5EKQ6uvCG6*Ce|Th3=``qV!TX@GO;uWoM6O@9w?#-gK&!(wp}CUp7LjPGT@obdKKV -z5()hT`h#E;&UfFoC*+i+u>AQqRxq*Lw!-q~e`kok%57^b`?qFenF#@1GVT+}o?1LeInKAE3bCJ<3u+;oF5^HVIJKi`zcgG4#&wm@B -z=%p$GEZJb``8SM}rCqbZQh)VBz_^#$8c?>!%={a`jF;Vq2xwblX8tR{oHw8`VA&Qk -z^FJ^bmenrs$r3a3Znonfc#^nwL`z%9faU`;S6B4~yWe -zC1&Oi6!NeF-~@}mt6=8iXB3)w*slF;H1of5@<6(du=wlMlc#^d753!`us0Yh0+X(= -z_$hF6Fg6W5cZPkt42%u3=7CG%42y37%?CLbHt7(HE5N&KYZkaJF0p-p;Vf$yVA3fT -zPZ=$3-4?f4ZyjK^k6OG3P`U3Ii#rv7=KN9X;dEj>5~rBaXcqr}e$UncSbrS2$Ku`; -zN!03vLR2G(sa_}!G1EwezAF2%FOD(8tzu$z5ks +z|NlRK(YK{Xe;&K@vu?vD*WNc@fBc)g^T(S{{~FhQ|M>0S<9C0qJpKLX&CmJ`pYj(x +ze)RTF*Onh=?)|A;`F;MupC7;e37+<@XXlq47k_>D`mbQ|_cQnZ?78y$@!LO--u>y_ +z`MF^E$AaY_=IsBeQT^)9i@(4A{D1xF-_e_2Zan`x>(JN7Z~mzlUa49A{p0t4v-Z5% +zeD2rfr@wo4e(u@&(J1+h{_wdi7 +zxBp&${&)2DpB2Y{K70Rf_Q9{kOTTN>yj*qS=Z;Ii)8>AY%eoTW|5m5ucH*or4oy## +za<5z0Kl1E&88hvpOY5`n$?wgouA5cgUvcbR-O6WvJ+B|V`6Zct$*|%sspu +ztXz5$lWbjk?jF$)_7;Aeo#fsjaTp|e87#2a=Z%5kw9e8FiRGP!zB;}=MjKBbiBP+y +zn8YLeS~F>nPmj??6T^3Kfj4a5>i^&V{PEw{xcI%fPKh$det&9U-&Xi&YHE6a+WU8V +zzuzlaHTBZ$Z@=TsoL2cI83dN}-Fq&?`IqHabArgZ^84G=pG;Z0;m=R=FoTVEwjKKP +zygt2S->KYeo!{Hjl4q-ITjaEGpR16!^|y$sf9&TOR`gHbvn0rnX@N~*_tN=qniU&n +z8ou`^o_JAb!<9egLfN?&t?yYllpp8vK3^}r;KfocCY_rJFMpc%OkEng`Cw4}SLXve +zrr(qb*mnHPAL#=<)9YDfTer?>V#*H +z(?w=g-dOiH*W~m5qE8OH`ZoM{eRcBk`h%k1o^oz5m(XUKyl%q}&4OYBGhUnWw%Xl1 +zJ-nNqHF`hd>CR_3%Wf%d_EMl*`@rs;Y_T1BdK+sS9_nOEBwW%I^Ow}ky(_joB40LP +zTYuCZ_JE!5CAzIe8=n0MeEqN_$yR9jjEfm!|Lg0{Ut^4@m)UXr(LE8*E3aCeLX +zh(3AIjR9W_;*r#NgSi2Mw?#l|RxN7(*{CGeCHG9;{_~f=%%Rt<(xP5Q2r)1)FnGH9 +KxvXf|{(UjKOU@p7K@b#h1yMvrJ>#8H+G47wsYuK_ -zTO{Ro6q5^L6u8az_!;*J)y&uUV}^*b2(^+iS5_BO3p$Hr|6O8I-hV`L-eh2y*r~LH0X=dVQpCgKfgv6Fsk2`>*Pf~AVr -zM;|Bo2B|(f-OCx@7%{YZMoaeJ57G~qh&Oax->{vO-v)^oganm4u&w%b0R8PZ+YFFI?`(B1Y}zfIp#_~e -zX(i|1g6KJ>B3|D#r@5Vs(}9W!cSeGzNN@8zzM~@9cZ=h_o)OKgkx9ORns_BIrbPEE -zqbej<4CDyThQN8_bKk@rY8g6X@`BM3Mn#f$YAN}QAS+2Hi>gNR$s*oeHXA19P7|@K -z^*#UQgJ2|E7Bfk{WdX^d&Yv2sFNg5EzVOS(zRXkLwvDt?j}inGfPTd1EEoUX(jbU~ -z)835HPtI-#@;4~*wboZ&avX@Rk?fT*^Lz^NKNQGyzZ3<*TTmiPN;J4_{hY@b$Ja=< -zkr^5Z<-vVI%?57AXKoZ9?rt2!#c6BC1qY|sgPmNj$PY(y9Ef&8pS5}N;Wc^k^P`1w -z-ho0nW>-Ne-uX6PzOX(oEWEZcUmbJlBA@IqmyRZEqRYp`Ts;Wm(l>|~7BmdvLDKJv=zKl90(m-^+? -z>+%%(ew`;r?##Dg>fQo1OAIVIQYa^UUr@Hs4vk^o<;xep$&=^I_S%W8I!>s-i_euJ -z?)Y?3=8k^FI>8v>c+Y=Sah2$0(L$?cBeo)t__wy?%N558<&W7#GR0RcivybeYhm2( -zd@G433l2hwn3yfa@B^_y9G&uJWc$S2n*$XhiR1v-$gK$dq0K*eiWMoDc_s3=w^;7Y -zE|%LfisXjWBDv~#k&5WWhYDrf&H_0qfS1?j%V#hnDuaH=1;a55Mqx%=IR6yQfcPMk -zARw6!q>fME}*% -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 -zp@0G4O#NW@5%HHkZ4}o*dB7NeKC|1S(Re -z8&ylx7>HHSUOJeG$OWu^nG~P-iVI+HL`yvKT0~_hL}UlZLOWSMjK-8F+G7CDpJPWW%rcjS@X8@eMoh?( -zbrPum*|PbRY}po8wDas7NRnGc{-7;>x!^#)niX8`;4=>Wpr%;fg+M7KdRzz?12AM? -zj<|2g#fodk0eF61SCH&hL@WOqOt=+vDMn<_H7rF0F^V7NbY0|Dq}5E&q*@U@EeAQk -ztsThReTmM4?UJ-pU63&S9|B9somK99I>@a2kY#{qa^W()|-whw?k -zf(_7Rw1KN(75Nl&b>i+kWzXn}C_{!U5iE2#ed)EiAV!NySMt&R0wig_d=-V-!>hC- -zxe|lh6X)zU*DYg^1Bgy2g4#@@ER~^NVt9mGQ5{M2FP~^PGjtnj7t{jG0Xs4ZRgfH0 -z&Z|iNW0}WJXobiO#@LJ!6&OSI=7`(gx+L@f{AxCe;<>qMpsf3ZBsvs~0r=pDH1YR-7ls~yUVWp**tA2MToexugj+$KW~8$iqh)*f -zYrp*aXC9Rt>78ppjv^sX)yC7l%EXYHZc~2fx9K9xvxfeh -zlEs8>Jf~%?K=8Q%CE-wR5oVK5`S4$x=I4dHdkB+6=KG7U?J*@QAby3-M0*YgEScO!0PZ;MEz^fa7Hn6 -zfcg71R?xj{PuGPG*MC0T?w4<2kRD&{RSt^Ud<|Sw_m6UwB_x_-KwYOfvU|+SQAMD& -z|D5q(9WRh?ZS?7Vt%O^_0T`1Z#ecqD1CChQCoiM7H`q!o93?pD_!2B7|^X_gWzffh8KlqD~il_PJ) -zEUllAW&7NYj1yuUc;xedzH|A7-P+C%Wb~Ug#Veop4h#UHv$u(GD@ZK$-uxb;n^Ai= -zEZmFhSnm7fqJssnozAPKPB4~#k3jSJw2iBgZCD^xfp9DOqUbW#ff&(^62l>~vdAz{ -zqWU@fkQD!ndqQ!1?_7rm^ZF@Gb#d@;aqiYrnb@;rH3u@o -zhKZcI2%652w4SJXJI=r?wR~PVloIWXG3j~$-rJciZg~37ietwapf!mfG!Y|@Z?4P$ -z3v4a6tVZjRD~68|%IUx2+V%K?&I0dd1bie;bMSc1={W6KVi# -z#APX>hhZQdg0FAS=c<G?KcVv|u!WcAL-3*~n|Lep!TTkK5sw?``(UC*j2IUg}1$)38PXjzhG*pYg-G;>AS|BXJnyov@Pagxc``)j@J2xERU?WrR^b -zaDz`JSl%e5hZ018&lwUtWAtyfNDO`dVeH3mRItk4mBC{*HiK{`YXdK@^U7MBO%9}+ -z(Etf^9R`@^CQ;zdI}3BYQ8mE30l-0 -zr~#Hj|C4s-sl4&RS}$gfN8Sl{a`l2-*%J<_{j_WujY6n-a#j^(!wemvlpscQhv`}J -za(MhJA!)qk11sF}xvxAj76ixd^2;TM@|6o?L1^tiaSx8MlkEV?4+r4wEyqRI>$wbF -zD`5A_X&riT7BofDn5D=alUZaXy9}A7h{Vk?0jq~CZauXZqXrm(B8xuyT1@Ho(_ups -zI9uSJCTcy72*)40g>3QF+M}q#{Ja8=WV8B$?F#6$UZptDBR1y^j!t0Fa^okt@}jvpNVM6d -zB$IGjy=I8!a}e1#U@#tCspV<(cYY-$D=>4uLE%PC-;<@Khc=YDP00%NgsMDHTJB%& -z4kkW85Q$IP?S~sHkjoC|%LVAeNZ939AZhk5;E0*M1<6NGe|s< -zc0%ztc&`-qeejIpv|Rl+nwFv3qCxBSV%UM*n%oTiR6h)m@blnYZdu}%eG&O1wrPUt -zh)AfFBqvap4??R6>h`K*8cdeSDE7id{7%2@gud8G%8;!gMI3DFwauV~X0F(X+5FMI -zJo&dJxwi8JlWxM;^kVh;`r19BZVUccuXe@qW3=vl_|=J~V!+A|RMgN7In4r_)@I6T -z!1gpcH+ -zjR_gf81D=_SsIiZ&Vp{Uv*llL?MIM<`XLu_7R=k1FV~=tTe)x;_ -z7tSWZ*@{RGEcKr=rUs@r^|%gDFJ6<~4%5HKN7)LuAo3nWqBP?TXz@Epnr8gp8jn1S -znr|VyF3$UBB-|czvlY(9AlHxA8efOk1~^#Me=RfVI3@%3HdA(;l_jrVm?LjqoMR`N -zI`4$IGBE7 -ziuf)wv!tsc!h^}jD}r^{5hKn{wu`r!>QrVf((TSL=%ag -z`a>QZQGr@Pt!YCORt{`xmw`5I;&XF$tj -z)z2VwM?v)oj^}wcgKVCkGn6@o*QCVoL63EC*w^R2^vG&flFNe;{cmnc7cqakPH}kc -zBjtGi(5;&2cqRX7_h`}Y)8VKKOtV0fToEpqm91{jxG7pxM)@+X0U<%gZt%*-q5pTm -zV&1eEIRNhI;yF38MKaw-rmRW-Zy~dMq*n+^ON(UG0|2AD2L^}oayw-1v6XK5E~IQM -z26ZWB|7_$sf)O7;T&iAldvCWCx4rq2 -z;;cij`ijGoY>}dVG#{h27yVbx7o$+wjSW0vs{}es%Tfu?N{SUEp80}H0Zh)soV|H+ -z3}nHKw>NrKvUI|m7~Ij@gZH1im)~&CS49`?C9lD?AnW!2yV>U;J0_x?Fe;V%6|2Pi -z)T~bwSDLdheSi6_n&^HjJ#2H)I;Mws_q&6-QyE28k}Cpj=HrO2nXsor;WnNJS^rp? -zE3cZLje;o)o*y#>8eL}smjcSXeD!hZN+Qfq&cqgx8rASw#F*gys{=K-%mCCHudh)T -zsE_NN3(I>M?CB+Q0*=Q@uoEaX1j!$jR-|70uR1JRb?T|Oin+E5&L?zpi8fd9e`wG~ -z+%fPGF?e5*%JjxscZEo|fh5%g5iD*RC$K2WfP=}D(E!P~enGapX;F@R5(D-$5;gJu -zCKgJ*O5uaeUS&g#bNmhZ&vRc2vZIr6%}H=<{PBd9U^B_(VHBiiH108WYmxYC-zODE -znk&<{9!^b*63x0c#cKywpJ_wHFjRSlH4TGsD;Sj>5P9=a;`6I2tddW*2B<8U3tqx3 -ztUKNm^;Uw*gF*iLKSujWkjnos$at_`n#p6@vD^AFb{weAylOAhxiN+n6+4*R#i+E+( -za^;N1X7D#qdJr5)t_alYi(m;mPS29fk}~C4kfg}Kxv0t9R!}+~KB|vR!*OLW$cw0K -zq}xF9k#xD%^UR!8;G(PIL~|43apS3L5u!~Ooe!d-x`|g-ej`4_AdJBvj80?6Yy?*Y -z90WQVYWV2wK7|BW#3ctA#o=MWe$F1B();#PG98Gl3IgO0J1j-t1slOZcg2O~m0o%LyI`WqBF;j{xT5-)tRLUoMp -zi0dKjw2jqW>2^s^rCp;y|#1q@A-78VUhot*{bU -zWu%-?azo;gW@TLZ3Du{;=-X>+Q(O&fFhOyWqMCZ3Z>0Nwu*F|lgkJ1 -zeGi#gb67kvbpfx9KJb_8jQEbKZ|tMi`qNt3o{mQSdC-xG=JL`|Dh{ -zyxh;Qb)(s1zfP2ckMKQ=GuhNHq5yj$?T2dq0$jft%8J -zPM(|B;I(*7UR(8nebG8k;@QXFjn-GC83R#U`RT^3qT#KLS#bf00eVDqy5?3!sOy0d -z!^IQR=7_!vSBsaIZxgSt+b{mJ{u9T+YAM6^SuFU_luWTY!iJKug0vJ?Rsd` -zaMz9fp5wWA&H(BB*Gf97Yx3IK({l;=f1Y@2GjfFfO#(HSNsr%2<%12buWPcpg1Bx# -zcgjU%!`4?vw(IuSh)!4C8qwvZ+ZC|Q_aYm${xkOp?91f>YC6xsb9GSX<~6jw^N}I1 -z{kzxrlWn|tMjkbngwzoY8Z=TrXr}k3Jm?w1fuUq^rjSsAUwSpbzxf&WX|Imqu{;OQ -z#dB(j;Wcku|6bI}2?`V5 +zcxkCYxZ4!&WP7>K?yHk7tGH=RxU$O3R^gY8&2xEOm*g#z)^r-JiaDfy>Q>UKkkOG#Kd +zW6pMA3$;m~H-FeJ{(=1g@1F9Iw})#hd#uEsKiFB}SA2O>S&{LZ^4oLrY))Pe^7(Y1 +z{gGP3nOucS&AFZ5eLjRTEqh$C&huxqp@Q%g(+b^UW2T4o`y@LrWq59yH{;EIX_m7r +zH#HBoOrI3VBQo>A{!St8F2|gW9!Kmt<9b!}?|nXH^ut8$XK=$zCC=+<@=jmh*Ds6A +z&k6cxsbDR3eV#c2PQW;M!JU3rzt$zE5 +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 +z%)1B1e18`#i@4Y7ps89F!y&6UWA +zRL7OYuuJ|~N$iubC0BheEQu1d)n&IluvTfV;Qw1y^JUoo`rnwVZ*O_zX&2MiC0&A< +z9@qTkti=)vX8VQx)n)&-Vo8t9@2TOjldI0XjkYg7{qD2H3Y+nd+cLt(EmVg +zrt`n1TGShWS>6Goq*I1>y^-bc}UYK~;EzCe^ga76yIhBlTe;)1JnYCce +z?-ms+ksih$586#Wey2gzL +zUe3*S=u=Ykzk2NQzNZ?sZ;g)Y{_o*<{)?Nv_2@Z+9TQisXt6(*bK?W|{2R91?B8dCXUD=%v6|Zo9xv2B~<-`50dBJrrw!c(5v$^fx +zoJmJp@@$r;u66jZlTr0yK%QXQWdENZ;%7ezD{wLXzM$^sMAq5OCrspS4kc)pC%GY(PhBqeUdw;E|)<7M?HC}zKo4;&X$-wMjW$jXFaEDj^knt%?0dD?hrx!;5U6rx0Hrsrz;FPsmUTOhe +zoV6C7PqPm%$*Bz6^zG5xh2Ni_ed6Q9bWHo}O~1Gu8p_v9?Sjp`9&O!pW!uyW=0IVi +z&?EovPme3*mw$gg{L_i324-RY^mOIhTtfDIF~^pAeLU55^TCdJk8XV{h_hE&p?mM< +zuVr!#Z-g0dcwE1*q||NGBPW^eDNEjeeiEE*axpeQW#fiI-wQ{sbzHwUdx +zzvP|n-=d#SZZ`XEc=q$tnmZ4~-GBPFGVSEGZ0LJZ9dY#W48t|dR)<+{c5Xf7w?wqO +z=3UrzMYaY1R%A{S(ry$pnL9;Qf5ueh{9`(6=TAueeW$NSI7z1B$>)ZB#Xno`-a5yh +z@@2N^QSJHP`FI!>ZrY`}5bGVc=o=c#Y$msMzY# +z1(_4X#H{x|R9NSp^p-1gQSz#XFV-99zA$Khy8l?}=i)0xjgoWI3&UpgZ4?Y?n|0xf +zN7lZ>=}!+g-Y9VRE8olb;I;JYeazd}iX3<3ym6=M=+y)D(w*PSd_y(~XEEd)N!47` +zo~R(#v_Aj*^HtOSE}Fm|<#TSLcoM^oxecz(!+Q}?DGOg1%ZE>O#6)?fem +zRMZ?_z9q9SGH@2lvdwt@WM?JsHKjdjzmwKIiJZUWcZqyOZj|3Oru@TY_x?q$%b7Ig +zrNb8COa2`jU)-L+9Axw1;pVQ}?vt{kGWD}}S*%di+x@*paC%Y5#M7-R?1$DSygcXe +ztcr_UEo+}?6lc^G*%ge_oc>QPd%kkd$3s#2X?^bZILnK^HpSc&=3Du9OO9l((~8QX +zFwxY*JhBU?D7clhzl{7;RPje!F>}u|X6-wlcCNQE5@R|3{?lpI_D@r}lN~eO+86To +zZJhj;;S@jngSWcJU9Z31$rG!c@cneAY*nF{iR+~qOHas7j!aSA%`OqZ)N7P(cSvE(qfi*f@)Ra5Vbe0<5{u5P4ff;x!9FYGryGA +zsj6xl6z_9<=;nKW^3tX4W>a?gp5*%4vdShP>RtRhJ~cZBflmKhZ`-A{C!FScewy{g +zVUHV6!xb|B$F+L>Nfv1e78E!k+bd*rwZWz3N~N)f&BQXNkLDHYMZVX5=y|jy=CApz +zX$x;Ha(w+Q=|8=`0)8bOkU)pX|;ksmA7R!z3lK6kYR*^R +zRwYaMOgpLZ?U3sqzx{7o_TBJ2HDRryt4z-8t!Edsrmeftar4i`eKtS0tM1(PnPqa` +zp&MV4zW(}k%XU#7_rHksWk)|HZ+Tby<7(%!qywk;L#|xlwLHr-`&!zmtOMUnVhd(2 +zo)&n9*3eDpt6|`FH;}t?vfB=N{T$c-H=) +zZN*dZb7}`~c6spWe4TH+jBT0u*ByKT`f-!*@?GA4-2Eokc7;!JE{jYa^JaXs_L!CS +z=e|_GP4}#P#oc=6ey6M4kt^OTdhVFQ_5SNp@$J{yEF!Md>l(kbP-FgP7F;%Ws_Odq +z8Or%_bCT6(S-o%BVNy~5MY+s-){COkSG!Kf)gGQOf77!4$|^42h6!I;Y7d^-zrc*x6Q(4Q^Tg-+RZ07 +zXTjo4SvCh%{{1qK`ze(so9=Kr-)&kq?gjr3E*x +zKi~J|L{`|O)6If^^YgsK4eNLN6;`}eep>PW!rECcDpdbxe$Tl0{_?{W+&-HfCdUZs +z&6v72@4^nvs1UcGM(Y?A9gpRGICXsC|MG)L_qIq_GQ4~F$kK9?tI=KeWotbD=PPcm +zSrX3S<=vffg_&XTZg#fzPes-#?>0`&`>D4iM~AIcGwo@X%0KS3l$)M>tjfRI<)%D( +z*izVKeKt{b@%;?L??&P#V!cuE4Z9w=yS{nxMM?XjB4bd-Lyx@Z7kZ}G{G!-|%sm?K +zW;Z{n7Ub9|a&pG;FHK9IKCodsoz?I&^@G@a&Of&$^Apl0gfM@v>nm=`S!DfWgY=ib +zIWKA^yS%WkKboYvWs?N+^TUo6rC;qXKFAS^>plGW-$LoMgSj#X!yX;Hc)mmM_!6xH +zJC0;2?ou+?InQ3$l3|zE{Ie=noKrt6zi@ATqN%3kZe#ALEQQxn*y_@1zFBXjmv7V)GU?AdN! +z6}qY9&}@l27jHLzpTB$h{epAhuHtW1*B{)f@cQfj-8Y{rSgS3XYoImtx9I94zpt$E +z7YU!W*`T)m=h|5>>a=ZhiZ5C%Yp?jeyLnfzq-)qDZKm93k2}`Q+_2pFq1in4$o~2{?B|Y@*cF50OV^Jovks*>uMlhAUF* +z*9VHP=zl$z`*gMBo0qD^Ont|_HVA8&vYeEk8nz_v_j)UxsM1#}cXaLC#&u4;q`1>8 +z{9}E_1-Cnf9|R36;wPT^axAL6)nj|3%2gIYojfV^4H~B!nomx-$Z&E;o#VDWnSp&Z +zLd@SxgiJsFQxo&r=k>7pY+R~yZ}A`AU+0VCxi&4HTzJ;AAm`7=mZ=HGC!Z#YEJ-(c +zXIPd!@kjQ3by4?O+LyP>`T2GWo!w=2G@Ctqex~yggOJKLQ{LtRZHcL}0+pWwAAMe} +zwPuq4HntTyGq~dp>8!E7C-OC{>2$N>zu)#A*PR!;O`6T%&gZ|!Z(peJ#fw{A=34!U +z^H%@(=g`fhAA--Cg<`92d-63khY0wbI=%38`;YTeQ;Q7yx{Lm-viKs;`74=6;A_nl +zGv0M>cAIY{H{KS^U-$iiM7-uRL;eSI_T1ZjLQ&V?bdm63J;%~MmpC*>j{EHUt>I@I7Q?@&z&~s3s$1nMK4of(z42zXi){hr&?OItPj;OLr9(|a2utcgnX0;}%03(qY0>CZPu +zct^S3^*LpqdY7>;tYr6dJlCSPuD(xJ?cUFI0ikDNq$SVZobXFp_^rc+nJMZTk0ifl +z9?hzLFwH6aed3l`u~+uKs{ZGD(tOsm#Z_z137JY42qY=xRXr@cSbx^>snCnbyJ}D~rmZkU#f8&~coBm9A-IgAaa&$%YlfD1kHVLnK>6me4MPtT|ZMxg6-M861 +z*ZO#+r#0z<-pYNF0@KgU45-OsKjiZ1q(GipT?p5&j>yw*%lA!wbbqqA`?ieZ%cJIA +z-D{e2;(zK%N!NWBZz$f{V6~|5_q7UJ@fWXt{cfmR^k3Y5)sv$gj~q5MEt$JnP>PE& +zY3&A~h}0!>0*ag;-E@DpvCjMZj;g(%jNUum?cTTCsnwP!Z +zSX&qJ_t^B^a&qQwdp7F1)_V7tTUs&KS@jw>F&E9^^f%44NlT6S#d&r4!56o)vx8&! +zkMt(bzgb?&zeoJu68hSs4V+IdI;?bi!`zalbvoBTn&6|Dw!PW}jxahBqwHK}YAKg5D +zzxP`BQc32(=$|i-tzGnRZEs{DV<%&kOUbThVQwp4Hwqp;Dt!4_$3E`x?&;I>h1ajY +zt^aTHza16X!K*5M-{xV>`@EMi`+N8F@EqY<@%6{n%z9guai!pT@85ZkcUGKZc=_kL +zm({B5Pq%JeF6R7MKd&O&xTxiyFO%tX&;I+KPn&tytrW7ul5YQA~WqM%$Ps#6@>-!#Vv|&Ggv^cBt +zp=pI~+~@znvT^j!nAojN<{}JFnS^%uZ)daed;ILSJ(E&v2a}D5LWBrIDzis7rfyf -zogr-m2izhCPYK&LGvJv&+EDm%!g-O^+}Tbs-P!+%nSKZ@41`Sp#G0lJ&&be)CWXN( -zZomC@=Njb^m`!rv#m{#0y~02EUm}cih2775x)@i)U*W(DAcE%!dyMgpxCq^A8}EgB -z5dfC>Jn_`xwoqgCB|$BBkd%x?#8uvHTH0!pI`NeE}|d$q=ZPo{l6{AtUUEj924TOxsLdJWta -zCtIVo+gqxy=wPM60VrBPWZeI_=@Hiyy*>2g6duXsfD;=lv+gadg5cGbt}D`gq$*0 -z6ggHEe7@TCcxlw3x5K9tNU&~S9I+ViyRr%;wMKqXnUsF?AB&SPd)>Jo%}U6;vBJ#P -z5TBdL33xdwTe{_~-NJzH{nftm882!eM6JlMtQRm0>s8eYz|;-1pWE%jP6`44y9K9j -zD%4~bmPxx$l}Zaz3$ELWT}4vj;o|b&RW?f4Au=+rS&W3(Wk=tsYU%oavp@E7f}DVm -zxIC%(yZclH|ChhdnFI~s{<1Pp>OJCu6!7s`lXlOji_&+0*qAmkivkdI?<%;NL2yki8pn*?l -z)cJV?xS~OpiUJ>@1hW_*s$qDq?1D0@kuYP;nV%T0-oUo9FyurPy#~g~SIMd?OA+&x -zMkbrF6lzqpKI}b}y+M3VSd>zj2~2@41dhq@tik@ng-u|S^EC;ETxz)17A1^iaBA^esQbjd0Vm*fi3MTQVc^* -zq*wh6lXJ6818=@8&AeDF$plA1%R=!USOAa*+xcRbl`HpN!K1kd$@wUI0ZTs+2utMdm19U*Gyj -z#1+;9v_f-d)+i+E{0abSjt%%evr6HIV!u`GmzB8|3q!LuTv+Js?cI>Xj-z4%)<<7T -zQUbTSvNUeZ1xY?ox3M+>I0xB4Q%48^b2nd2LL#P(Tu$=przbP5Auc-$V47=pN1Rq9 -zKwf5s3?vY&ZgNR_>WY{=uqe48%hS_SOISO}LlCmFE-XGbhrl%3+I)DR(#02IudNWU -zOSU@BFA_%pFmBwqu~!8GNP>DZ3s3}A1z9RDJ)nkfD+DY^E08B*VM+)X1M3Q1GTLSrs0gYGvQ$3MNU==eP1;R -zkk^S2f^3z56}t+>hahDF9JmVNA*hKONmxmiW?d|nm!55f00;t$)Pxo%7v_KfX1)~& -zfCumpq>sINQcW*_ETuAp-N?}Mg31vKlk!i>2%tf2Nc=K1>RgJN1W-a&T!^6rU8@#i -z8!x3G3CnW;hBJ9Uz^h|3e^Z+P$kHd-W-Hl189)IPtCyvP?WUW(?)++COjtWtAfQpB -zM&9`4OQR1@SC;?^MI$nih;42$mUT(q9TQiKi}~Z=cr3&!mZYf{Oh42<@m<2_A_#yi -zO+8#-W98^e5)I*H2v|h?+BX@-{_;`;h7%gbUS3{)eIFlkI{*`5U(UaxwD-rBX1~zQ -zyzhJy_b9^{T`_lgSIm(rbd8v`FvRD`rKoDMbo;R)Nj|=}d|4XDRM^BTPX9xKYBZV_ -z3}0T3c9L&L)Sy|wUT+PVbT(C#7mWN%9)=)EZKElleoWjBYEnSAG6TjMrHe)b9+}ranGC<@-a?kTMy<@{ -zn{Z8n|NhJZ;o#3&e<6)w*&3K)+0&-9yK;nn3dk3;lMX((UQ5vvk^O@2_TEvw2j5m#hfx# -zf&XP`k?}EvCtlcy_zm9zL#i-%5Vn;LFm$~|8QAHre%uQzZBeU>rEMqvG56kJMc`o( -ze->Hb=Dgg~48M-F`10k8uc|zv0L3}130gk&ed5nJackKJvkJ?}Si>YEK+U{V27oJo -zeId6DWZ`cBI{ruTy^weVDftL -zp=ZLv9kJNyW7PYl*l)(5tnI<9A+&5jhdT!7V=kYzL+~LxEfspYU=2me$LuF($-TfE -zyLypSI^6mCBfL;&KPEo$qT%x3b8kP)Fv6-=%XPom;L8%S8xk_@X=(rHrz?lp6Zk(Z -z5ubQ}nwj_ug`S{#Y^e4eQOe%Va3|c|fl4X+y3^CcQseC<@h(gjJNw5j*dE6)>C6n+ -zG?a&)Y7;=A$OUeN#yxtQE-o%zU-ZEQMRo#wTr*vJ0D0jNXu-Nb(8PV7{4Q~-z01xCi+3&T-0P0Jpz}#;>iEn@*nvW{g-=p)A`*N^ -z3pb@!T+cRxUVYk9-tfhI^%C#&)u*?Ie>L%Kf6H}e&RwpkiL^Ywc -z0*X_8ANcT(2oPcGvJ9x$ -zXXkzoe(+}`h_E%;3E-h{+I1ap4<*|6bnaTjd)hS!@Wsb`6;{m7^k^<`HX2caZb@CD -zp3DZ^|H1E(uZ_*xu1?}LfA%BPV8*j^>PO+GBW)uOq;vPCYjH+NM&8-7St3XsaBuLX -zT^3D9u6Ck}?b~MHE6=?6^ZsSk@QNz$ZkxX)`^?X?lBZFO?@Kej15J`9I9Ie1>D*m# -zEuxaG_^?FYfL&p5Wfb$+>n(J#?WvH}i&_6(k9`yJ@Mo(gyf!XtyCE(+S1s9z@Pe5h -z8NY7)bB1q1XtwvH{M3$Fb4W`%w|dk@)QJB;XUl)`o`x>29=Ue_)CGA(2O_gysZrh(dv$2GH=xdyJ6AU}S!(X!iJE4a3vG$_q%wDX -z+DV|}giu0kO{BCZPw7Ymb;c|ET}K%Gu08v@EzR&2L~0PJnZ|SsA5t|qwu{|`8UZEl -zax%DQ&;yNp39Lr&5Z06SCt?B!P`L%t?{xH3DnDp<4mdPCfvz!h4Uy}N_qH{_{|h3pu0jst{Gb2;002ovPDHLk -FV1ifwcya&$ +zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^U1{&~7MhE&{o8_OCYb5f}8 +z#UqzQ@e{Fk?*6@V_b=a#*5dMh$8(Q3rOK`QcRzIL*zItqaJRww`gK$K{3l7?4>7m4=f9Ww@#@kwtJ*F{>20M= +zdNr?gVsG^M?)uR4nDL?Y`WJEcH6^9%+U^_PmJrzYSU)!6SHW7lkCM3`+Tz~)jp>w8 +z7wCF?(eQPe)!DH01`&ZhPvzDs{!MN;;TU%KU+wyy-l*DF>bJtLe>=9ZAm*_^*y~3Y +zjqe_b?|CRUS234`{f-iwKj&>T;|DYCZw34)I#fCF>YbZ@hIeoN@0?l3q07_a%W!1Y +zGT!qiF0`t(9@Ng;|F`V9)KkG3zC{m?o-g~n_mKUMc%`1=*1P9xc1eUEiGO&2TcPPW +zXLZlVz8xHQv!&m+RtYjp`(g9(%A;)o$={yv#&}u%wv~Fn-gJrYk)t=ZN(L$2__||a +z#s=T~2V6}D%5zVo@lBe2xB0wo&GF7Q|1_44YxZAub-91i +z^*4>3>1&_7VOadDYq#HgJ8AW>**w>IgdT8;o#&2u`GBS5*A>e@OR_9E`NUSoTw=Vt +z_16@QIUZ}x{$9K3=;-*479(o6Smdo8(tX-)d%@U(rbZzfDQt9o$a +zE+@OhkCp24q>4{II>7v;g}IWY?CSBC+NlbMwOIblimEYv^4il^L&P#nv}WI}uN9eB +z7H&VhT*PBTUcAgki4VIsaj9-~s|%btrS6M-_hf_WyF2C2dY#y_@z9y;0`q5|q?6F +zG|%1sQ@yx@xYyn8iggWo^zhNA`=MrDHx!MG)<^cV+(>o5zcTCPulmjQ--?>%G)&lG +zv-0Qe-yy93r|&;MlZE%ezfDH|uWTPRiG27NIl1ioitbD0^-nw^r~6Lc`F={O$Bg+C +zCNt=q3PmDczkx>0#s?rGPHG>(GI +z3kw?kGp_usWZALEaatFX{6dz^5(=vlE7rehGFm;+Ao=Xf`4a2y9oV+X;E9XqUbbT= +z!%wc#_7?m+)lF^oMv<(Lt#)s0r|xyE@r#%eG=tNpQJ1CfETEV2UDuC(Hf4g70PS%NU7QA2-seAQ0Sxp>)de+wqT``GK|Lwai$j9>HCL?Bt&*pY-@TJt!Lf>KQ;6LKkBz=e1}#DY +z87i*p`Ne-FPVizmaeI0x%LK;cD=k_A46#xB>uTdoIVW826llts+90}{>u9?|DwE6( +zu1AV1I;A`#Jg23_>P(wHFSnI}gQ@#Ui>mV{^zW?-^3`w9S!&dB +z_r!(IO{WC8Cx7xk#j(IK*W-_o$*Y*ISu6ogVKE&GSz=d2P3m +zvT=RzY=#q;)NiI~-*k|4U=&$BeQE34WwZCb`;(R66JZ^$upn@;+r1x8y%+QQhfinV +za#c2(*pZuOIIYz4o~&?qPxsHq4=QwyXiZzPQryS>irvT9L(i2s8gzVZV-k{|zVH^} +zeVED-;qvE}x#Y2bpMqH0gr$zf#l_Xt%F7p7GYBWfpWDA^%lG5c()M3CyXSq4@OO>F +z60wHmmEmV5YL)cP*lKX(`H7_~vNo0c-l*hhw{Lq*q}1_{8%MPL{yR5inamR7iI3|m +zo0RWp{4z&O;&u@sk0t$6~8F@@P&*84UJUAp`I-l1?8p$|`+ +zoHY0EIAbNf*>9Rwi(F2$c(wBJ+3{|+?;bu3T-UJT$IF7lwv1bfR~vSRu623Jn8!WI +zONHm-yo9P}$vKt^-=6idc2+KzShse@&%oywJqy!gE-&*v{k?V9&Yh;UdPd4z4xL-} +zZ_}LI@MBF{(!YC0p53{++k2@c=TRrl8QVTxdCzlwnVp^8)8Eb)Cz$Uvma1*6zCY); +zl*1-5&L_MVUR}NPGbAHe#^T$Hr>=*}-R%Yc+_c@pzd)q!$=OQ(qN!$z!snMn&Sp_! +zQf;1{_2_ZF+uAcvXBYT3{r`7{>EVO(QT2+wi8rNYBt72z(*5=XnWby5oR#}u^w)fv +zLPJqgQc@U~|BR~{nTwV?upO9ss3+-A?1Y%0x-*>GN6-J0U!MPOR_m8E6?@-2fAe>| +z6`Olx1+M(OXZPt}Lq;h}r&iV*`(obX8ur&N+~;a-?tk+7)vH@_re;Airruld@PK*d +z#YsDlZWgp&#HrAIb4%~hOGoDzg*N_A&7Anruth!YM#m4{`%KQO3@QY+P31Ev+3PBK +zD_GEueqY#&Tt0LyaFp(@r3tnN3vJmJimt1RjBvnjr^!d)2a`?{dJPfnmvBc +z8Qr;7gZm(wd +zanZw14~p~c&lnt96@I#O|IG)dg*HhG8NJQS{QqLPcKZ$CANIO}^DF9S&HTaLI&VQ$ +z&Wdj`fv4`BD^S04x6w=U_pZyA4+lMdtNKyTN6h;7alIRI#|>Vd;kjWlrF~wOu*1R= +zta+`+Y^!GL>FLGB|M+=e(k(q}^}pN7?G7)~-YmA{XXT5+knhEb8MzKKW8Fpfz0?0& +zRN$FAb?!#*KAlA2jn<~oTio8dxi9S3TUH}*Vhyi#4v`g!<7p) +zC+9N$*}lAU_TR3S-d=C|G53jC)I+nUR`Hf^BK`{p +z&wUZ5uCL`{x^OE~S8%QTj}QGE0*S9T32*%OyVF}KLgVe>HQcez0;?EGa@Wb!ME_;* +z7mwiwa)L6Y5h0lD+$Lo7r%0UxJ)@$nSV*~ +z_hs3IZk}%UZf=TH@{lda|FASx%-3UG*`n^Zx6>YIpWpN2^S{)qAG);O=gr=)`uoiJ +z&6Ab~_PqBt-pA}aNzEdBi_ptEu?4z|CawLk!R1~dpt&T@t;td*|pO3Vkor2b5DSl_;%bEk66t#JRk`37&F2D+OyOH^>3 +zn0VUnOqN7L-_Oqniq3qPG=f#Vd8jBB$?B`vW +zmCcr{WaDw^s(PikOVD~z<`uH7E7ysvstR85fpl-50qN +zwz(?p +zlpfRm9qTUfcb)C;UAkvKh`D45teknQghxKe)M8ur-Bu|^)ptckJJK&O_ttQ(ar+=} +zZSptuBqol4ovfGMmwXA)vd<{zvoNt~TxU3GGK@6Bcya&$ diff --git a/chrome/android/java/res_chromium_base/mipmap-xhdpi/ic_launcher.png b/chrome/android/java/res_chromium_base/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db0fa7dd9a415fc20de85b98640cd8d84b5de63b GIT binary patch literal 6633 -zcmVXyeGA_DUwhFfLz4w2)${|5qZRgm-i&G}xeM`FRBez>xZ{sBAVn|4BRGKwBeM2s|6I^2g1d7%N(9jRtIAJz7vKZ`pqVQz -zo`_pjn~)X`-Hac!RJ}k;&J*q9?>>#-uF^*+UcIuQ9zOUtM)kW{aaK}df%8Q)Q8w98 -z;3`s&pB?yC>-AEj2o5WCgcR(*9Ub43W02x5wh(o$xZsG6f>c+r`Yc}@$<_Xl(ItYz -zN*%_@wY0t~Zoq|ggRFBD;Czu?l|)BFi2z64+H=GIOL12P0@T*tn15r11vp*NP*18WBQ(er0$N6r0)Xq -z+4g`8-5HQeC%C22=*VkFC%OV;+o4(u5J5CyBE*EoAnlTIZfQQ&EltO`r9q~yP#>se -z^LjICryH*)64Obn88!r-E2@P66(l-@cBs@_XL_XPJdfP}rB`~d^vR#s_~fH+{4!vh -zUxuKXr+y!ag+~kI>#V{OEI(dgdClm(0eKa+l#pgaSXCkgNQMBZ@f4sEM4QodhDSz$ -zq+NN1lI1ND4?MlNxD-W2#p3W6OFoe6E0UvnksNWA4=3G4IM4XHZn_O=l>v#41|@(V -z6ktFV3y=x{NOUR$upzQC`00GFY|AN>ow -zdF5{Og1hE;AKL8m;b5*m;4qr%l4Auj`9MI4!)W=huYK~yrbs-4l|Ved -z+FSbkMgwmGpKph_IG144W~1JXenTO`-#2}?-%4mjK>tH_vd(&lh;)xA1N@-*-3r!~(M7M1gF< -ziXaX+jAWyLR5S(&stzM&8AONBYo1$%eCvnhVPanAl|QWX%EOC1%6>XdLSM)%`}_#9 -z?NB1Xp%@5|0s%-ecl>M!E(;`?4e=>h#XGPOlC}=3;V|OiX-|>lfk-`2EdIhsJL11j -zxs5o4lXMMPg%4lCJ0mJQy;d$V7JuFt+fJ9I!yM&RSHrEihSW*!X4FTeCy -z3AVryiIMrmst95ufJ;||a@w;YIU2em3LbPC6&q@l&Oni>?XpP&)nIN2#}0x4UDG%mb77@5i08*`2JrI51DutA2kT(hYyiK|K-2w@w6#! -zM=S#&Y`!DE^DBW~N0fYFl~*1|1rv`fGAdbNPIQpO&^eDUam#D#z4H17FJh@r(sub} -z{^5XZI9(vCusS=03BcD;B*x*x&O+R~Um9hYY-nT@#8iM}2tabV-(f?z*>73lp^9UJ -zWmQvvIfnvj@S-pe!G~!zSHX4~2NOtbG}Joq^#=IR^mtlRvr$+<>4r^&qdA_x1Lqsi -zZ3g@ayCTiTajsBEGi?5KX2AJ+ykPcQRG -zCVEITP&5ijY=qq~=`n72;WF<9U%z$|;w9{c&96?Xfy5Mpa7)z&g|J2NdptKW*?3GSH}N*)mIu{B -z0NlX$NHQdyj|&bL$WTn5FQSpMIbJ%J(a)(oo#cjyBtfl_KrSEelv|KM?wX~`0}I?r -zm_M%Yl;EEmz0x16!Hj-id*!-Gc2;4JOYvUa(KotIbxG^d6vu|p@**jS5fES`IQT4H -z0+^a&2v05bfJ9w+Jc&*O(U*;9!_?(hi`=T>d&83I1_fZXr@;GzT@tNXT1lI*&##6pPQXW9h`&Lr8?(nR??cSrFL%pN=jhUTvQrwfd7H_$ -zL(Byr!QAh#A>DvOk=k*hOMW_6mzURgWHdey{g*qOIry-ltpH~5mZObx5>WlD?h!lv -zG7PKbO;mZGwT3M{ghA|fSlX@A4BU*0?KIJftC`s;s14b6xEJ>~7?E@;`oywh0Ziq_ -zJ?3%?Ja~^TzcDZDz;rwZ{p0RgE-UF40dNnWeIIK9jLNkG8zViQIhuR^olJ6``eih> -zxa8tYC13YGZN{${K~_v1eX#W -zj`|Sn&mg+*M#Ng&*MkdOa{Dx_*3tZIk*}?roF`pyZ;wKpz8gF;WxwA_dfWsU2?0p* -zSp*<~%<-(=5XmiI8Qswc|FpuWu*v(4WW)*!kC@TGSbE55U~85U7enZa#FP-U96Q3z -zxO%)pZL*o)!?2!WS%toEF|Ec-Zh255!2Wm$5Lw9~G|h0Ri1#Y&g;|@^Fs+9xBYYa> -z-VCE3D?A1Lfx`R^e*J4y+g%XrW~8K+STRk~jkMA*)j$K<5p78!59CJ@d^XeqI!$oM -zFX!vh8!PTL+$ZDcqZaGy3yR2b*;pQ!1%`GLC^Go -zblOJ9^Iyj5xDVoVKq_hla+`wO`rJ0ac?3PV6Jp{`Apf3OMjU(^!_~7(-O4Ul?Qa9m -zVFsN{Pw%F|ZZDAyt1@5O2$xxV1`0@DTk -zorBx<>;m-~HtzIYKKWw1SKdOk|6{F3t$?SO>hi#R3{@cJdNf8_iJ82L!%E`ItKI6p -z7>n8Dzd;(BcEB(FzVhIG9mea1M?p*lNP++)nd7!4X_Vr2G+=K3veAWpV~x$0xq34^ -ze72c{i41tla*MS5xw)uT&^jt1Ha -zr|reS;|pDp-#3#P#Ko|n8z(yCzBx|I_bgBX;66Ut7i$3wqN9P88mi*fsO%m{HGf&< -zR%v6#0V9H*&`W?Ci9;Ppdlhz+$kbB~vhC1omQxO5C35N**#1&zBNQ%;cR+PG%zBtGU!0+1L6K4&Ic!9rLm8e$bDp5-->up!$H -zApr)QPXTZPw@z`Y=E_Q=713J$2dU?75FE|NTf^^fK$Gh=+a*sf*5yyjb@|sOkGu<{ -z?DRVT5 -z2?HTgBM4|A+YTiH?2U&2rDR7#7sNLb%^Xib>f(d4l5fECB=xtbMhY@`n^&eGVy-z6 -zkZow(v?UHfv<1!(Oh&Y+XtrbrR&LLkj#A=-B(=@VL!!c}#LD{$X>8s>zoeotKER+w -z((i-Nx8a^UK!~#wpB;&zS;cDA#YTW!-Dq^ox>m9+2rmCNApC#Vx>fbB2EnwP6T0yu -z%aA9NVE!69e^$U%!~DPYWI)F6@yR%VP5gZjM0G$=lWm6~5MUVI^W%66VB@*M*RV*85 -zV_pN-teaH&eA5)J#yq)he7@>4_oLxbxPF`5GJ2O+)}mOtPRg^ATvF{eh`9hHmD8RL -z(Pg0r2)=WgLoSCEF|iPhK>*2a3nFitlrQ(rcF1$f3`_dxYmbaUT!9BU^X@qOTQ>pDFXY$(`cqlCvU(?2nsaBLKrvNqtpAAekDX3DCKrkKAdzYbE&N$#xDda;m;&(s_lS%KTE_oP(6(`vc -zZo_2TJ~P*XtH+?}Ps7xU6-2P&doOV*^jWQ|lrt2~dfaYf0$y<}AdjIDN7{}J!Qn(l -zLreu21_4MQr#%}|D~@cr2F;G3H@8g7L5wU-Aa(HA0?)MqI*rYfYk@A~^W;wWclUDQ -zc8J9Dh|BRFEmF~oM&>AzYXJ?=7n&rOLAaUVv!VJ5V2~OOtlYm~z#6vAqlP5@YRE>! -zP7Y;k)Q23##@jIrO`Iu0spxFrZft1NZeN};&h7a3*O-bKS*P#!$<%$uZ15R+$AHacBXy@&y`CW9U&H6OoC(ON -z@4Rvw2P`vrRRJYHc2Iy1Vl99Tv1Zs1T^8yg1$CX6rxHplOuh{`x#Iac!)X^e3Qb^B -z%~Q7&xq4(K -zn)6)D3@eZORW+A|4M`Tj2Fp@+t}w*@|!zzJLHjvSTa&hYcH|ss>q6 -zLC@~9%2fhd3wJaLejWZjD2NmVL9DZ#d|kP{2o5MB||FAM>) -z%7%rMSRjntb0s<&s)qnsWy3;DEO5pOGg+}fNPrLb=v6DgOH*#P7a%J-ETqH&XY64n -zCZ;%Dib1D}wZXWrk9NDY-+XkZ;;u>r;2$FxawgXxmRUC|&O{Sutgw&~ON0^qMHGYt -z=>Kh=_TW3WDelfm0OQYZBxoJ)Zlw)6u~RLtA!mxLwO{gQC4Sag^fB;O-m`<06f;TOPSx>%aXdR5nByoK>iC^k(BJ6Q}IK=T -zo*y+qdt=1`?ftC|t^W>>_Q4LfdVD{g*dB>~amM@G-CDnG9_`&NPVM#O2ejwXCMI_5 -zem^B!BtESs>-I^ -zP;1<-h1TlIHd@OoF4bCI*7nB*ss!SDyd<_S2eWS7l7y +z&juD>fm6p>OZKR5-Kse$fVm;&$XkxRnP&wnkF-wzuCnpT>y(v?msZ`*mi)JRi{U;# +zag!iz&bqQ92fa5It1c-o$xEv<);)aP|MZvqi$=AP4Z;O1^7=d}0`rPl>^4_@Nn?!u +zP-=hF*CIT$tR>_uN6A6<8_XQ{L_UPnFA;uc;js6-oUZ2kHjZ=WesZjwS+-{9w3m0K +zRqPfl-O2qiA|!W$-;T%qCJL_lN0coZIg~ej%lsd6L91zZv6UCgh2N`B`In17VE(^g +zrnc_9j_AhX$6nS0!UlgEY%Jnj|`V=}eGf)jXF} +zDnDPoEZd*&&9WWcoeWo-3Z#>gIE`;|t@AkI(-5xUFl(K(%8R37NlA>tH_z*Q_ngnW +zG@@=%z#i74Tz{jc&$BY +zan(eb!m0e~cU>*c|Jaqci#KyBV`m?mYJ;3ef`cgc1TIF85-pYuikpmnysTNDb6RuC +z+?}nPo>VOCxgW34T*mU`t8ZOp=30Nb$Tw5j#VeoYeQDbLtl~-EO}UpgS9P!ZY0Br# +zdUvcc?`2bQ*33>D=`&BF9&Ay%DVWVzaxZ2o=LJrct#a?fs+W+eb=N0e7AAXiU{CsjbYsjU@+D!rbPU?k( +zP3HC1;@YfiEg~YRp|h#(JkPD$hB4*)7YCTl)0@KT5&HNWYsv?{{U!6?ZWD?M46$bP +zIoT{~Cog~N&F6;+>+ByG%z8B`nbqj0gG1-xjGyb**M2&-%)_R6s)Nn`ThYJ%xH0E5 +z&ChS&VKF`7a@yj1y>-rthwhu#Zolu9;p)g3bZ$Gtv>nUOHEw;e=~>9aUmxO|IzlGg +z`mR0y58t$l+|!D9->gVn_VJe2!6fOl2u^R0Qm@}1^* +z(|zUkPT#??@3c#h^u`T*axYJtpD#FlUcBPT_78bx_sh+HKMi&{-}#$a;t12GM=p&y +z2fGybEP7HFH-wn5ajxQ1PLp(LzmPpIx~=AQ`_sgvxaU*t*L*p3xZCDbot2+c{0W`k +ze>gV14Ny9;P=aFu6QhSw`JWsPJ#LkmydO0qj#_UJoV1N^^+SV44>SEIK56u@4bb^_ +z$iw>4e*c}l7AKb+x#tkj;TqxU5+A{*ebZ?g@4chdo8w#7o!{qZUE<*5_Tce`rTG(2 +zrOEM}(BJST*&x1MJ!s^+bOM;>aEh_6Jvr?~#)>|sFZUmXi%r_8u26gJ_Y?6Avt}!L +zu}`=qRJcL!&0@1S_o7>U#VeoZ&s%reKW*33c{}qeA9!#7;x@m6Z$a*!{Wrt&Hax17 +z`*=jCf7iXc8)ior{C%zVy2$d+e$8CN}#*l+cfdQI2VdubRweYM($YBLvi=dD5t +zFHR~>(m$ne@W+FUZMM%Pmh5AnG{a6zNph`q=z^R!!HFL)i+1>EDza?oniJuh-fW#< +zJADCb;i5FITg?s|L_D?Uyzo9|@pRwMypa9g>yCW>dMT%)uT6zxLQght&vJ%oTM`!t +zYQ2{G@h@J0e`bZ4yeY@CcK(Tu|DW!E`EiS8p1TgSV$MG0{hzfP}Tq~hYdLvu?njZXMH(0haWqnv=z<;nk(=_~G +znH0OQN3O{gs}En4Q(Bwj{G)G8k6)3qNdC==x*77<*$n;lKYOTEd6)#4 +zaCzpm+%2QEUv*-* +zbKtv&k;>eDZa(o70Y3Bf7fsw`8D}-^;`x;}bDy+zs5q{j=%6S6eoFKNhj+7iPPj$nmxdpOiE^1O*aQ +zEPm+3G0m8j#Nn^|wZSE}(x%go<>K_-^ut%4hIijt^{D#rq*rXL30s#R_}#y&Cvyt# +zY_X?$8~l#vyqYub?1Revu|jJjqdaGCIKRG4*YALPY{!1b)zX`f>%VtCb6>ywwEy!L +zmnt^}OKq;4eR7-g8CHdZciwMMyxZVB@mAp??>ejS>C>-Qq?p(V{GDz+$MVO9g=-no +zK1^HOTPzgtcg;IN>%T@ktDpLYRL_4XU;zd2B1!~Xa2yGT9lmtu?s{PSz&vl)9% +zZDp2Lww-4=tNQ1flu2hDyORta{bgJIpvq^q%DyLeCbm`h3fM3}sJLO$_2xH?JAU3j +zn6~Ti>D#@XZXv^P_%o_e=aXyi;(ymF*m3?{A|y%1&ZO +zmi>Fcbk}K{td)P!qZsAfjhiah9@cw&OS+(6yN^A@ME2iW|9khIOuesrcuJqv{<1~E +zw|WabHkX)vsM%?uEPrT$eeco)wM(mKGl(yhKG{0;jN9?FUqWr`mdri&#k0uM<%N1| +z&b2#b3*_gsJv@Gaea7E#1*>z%Hl@$;x%YDN_Xnrn*F2pXt`M<0@Ri*uHmxm+EdQ%^JT0k+*D*KVkoI=CpAHE#jg4_pHCRCu=>VbRUOR{ +zW`9*-gPB(URd?x?)3Y8Z33vq^4m3Ziu=~-8$zmJk@;#O*I$ok4wpdSpP08u@*?YUb +z=ti=xO5YhMqa)O{S!VB|DLK+S{p}1g+jTV;i>y((dZ6I3x5F0&lU?^bMDC{Tc=E_c +zHGxIX>va2d>!}>)oqF~kO1HoD$kq7U$p`_%?*R@=g`2b=PcRmGx%lr2ww?@aHgKYp>K_6 +zQK}yn(Xm?M)`MOA3Li`6Kb+$C`14XvsrlO#Z}S~iIKXk|y1KxFixr#+Syf+>qmG%b +zcv5Y6>T=i(jq8f{-yh9V*tze)H>S(1f9E#e{`Q9HtCZQhFR^w%lXi#SbK3epd9C}} +zhUL>=eL7IX6RPm6%ET?IbLO6|!(NY0ufF?gpG5b~C;J_xW|bY#|GV$ggId{RuiM-m +zeONu37*u9H-lm#4=JaJAGs*nbA24s6U`jgs|EF`56t5#cJy()3i;-obkkyXqle!tAC)gv +zVc)Y~+kSc(w%*6#%aeWF(n{>hWGz`$ReW5lvIMR!_U`OsyT!Hq?a>2|xnn2ZH=itd +z9ity0+qtoQG+B&a$4>qGeM~TnXme^!7sbv|zp@)uLau(!~v}2e=fE +zcO~B3D5BtRK1*ivx~X3Z3N}dYy*)$CdH>x5vTpyTbpJcA+i>;7hnxfQ$uE9sAE}i2 +zxLLjBm6hab*52K6!G057+}e@$R>kg_7t;g@HoJ7SsDn-sno>!kYV)3&PTZh)n@^FE +zZH_-<0rPgh!d1^sc`X*b81;{R)*q@ +zjb_PgU$xU~hf#*} +z!eg>;ub<5f-?Cge*Vj6 +zPx&2RZMYit-A~kUI>;ft>8(I8qniW6q|=4B+X{@=NxTjSR-3K0Jn`%4un*rq%r8i- +z{;_+;v27pDyl>t;@1WMw0RA(jCuM^Tt$oT)ER9fHYxGIvhQw^v!1=ZZ+kO<7c$}LW +zt^VBmyd+;`(nRmI4d&N&Ki#}m?xcg_8T%*GeHG^aZCv!>UeA4L)3QwYneVqu%5DFw +z?~up&Vsp-doHe_D#!u)gI(<-m{rck5hq+^lggy51OkA(Zk=v6Ik-x-IOy2WTX!7T! +z+>bQhKAtzz@8`{&<$s=ePxsP)Sdl8aUHHzY@{Vs$l=eRP8Go+WYq3b2@$sg%ihYr* +zKJJZjVBYim=#O&geeY-3?5y799QojQ1Shj%kTOSx;%z=vrZ>Iq3`I!nO`xfyr1sPZ{(VLd0{eWX)v(lc|w8M7?lh2Z^9;c^r?od;|b9X1}EA~$!mMOg= +zGs{lC?b~j)WAWtNc13{%iF=?zEybwZCmyqG^^va +ze$~m?xqk86Egt+g1N*MHecsIxdP5*%o?Et->+ZnHqNguBZiMPcXC%ilUtcpjJ=$VuIe9b?jtNnR>T@w +zXF2P&iyCee=yhZ`na8b^KWmEq_j6?@icj-+|9X+#-{bgX&W`Kq-2A^&FDCwL(Ot00 +ztcCgKu@V`+sF_|mj+2Bxex1GJUeOo%xMZ<5hq&?^W$XWBFOH6DcxtojfTr!T=ia{q +zcNTe8>9w4kxJ&t*Q;EqDp9Xv9hKEx{72F@bDy-~EFf$YK-ml*I@PA_e>G_&1-;V4R +z|7G{K(|)sRS>o3mTj9>D9s!px+ILJ3do@Ym*>{oViIbjN)g1dO!8IdKqFU1RaCx-< +zA*t;TW?g?6r~70Y`}1&y<`)?mJySOF?UVbpK_yB3*TI?_ftUE!@8R8_`mK(~b2)p^ +ziC*E)8BY$GfV_HhTZt=QZ7bd&1Gg3yWtI3$#nC +zKaV)6%Rhy|;`?LUk3t8$Num|bH&YiHOWi-M-Fs>_i*;20)PpQ8s~7lQsLOEnQM+Tm%HvNDo9Rz6$!~7lT)BS= +zCGON%Eoj*~DceorW*QG8n{&g$A3gv3mNS^K%;)tn)m#xY$-zMOV)gWek>@NP1ZzHV +zHhEO;z%|+P{ZhS3iDpstn*w=ZG1rRH2|mpOLqwjq!298IT{FLEB_urf0Awk +z@5Zzn0&R8zwrR}qi*J9_RpH_!6#Vxsf6N1kMpE2!CIfGn?}Xo3cdf@i3fgXY0)8zu;I-w=osyrj>=xam||>y!wEo;$^= +zR#L0l86r~;JNf7o9OE*M-00xZ!2kV4sP+Nx;Jj_(3ffjWOO7z5ze!Y6TV@g4<+!|S +z>%krC`^$E3y+-yD1@Wj;se +z=<`sX(!ZCVEOPk$rzIm_$9i4qyQ6G(BB~$l-IZpgU3}%zy85Pi!4-4M-kfD!{YoE){4~>ca?U8&mR#dh#>UMV2 +zqm9W)&*ki|&yzQGtWG}4`1bEwzP11P`oA6I+g?>;KktTIXI>3jqScG`FG-gP*);Fkr(4^k?mJx0^V+lHZ7k<@n?DhU +zWc}@?UU=K7UO(kQIy?J=MeLS=cO+!4auG_Yo^=A~=pD5`axelKx0nMBI`ET)$c}45Di4lixoo8TRVDNPHb6Mw<&;$VC +CWQ|+^ literal 0 HcmV?d00001 @@ -1468,194 +1527,204 @@ new file mode 100644 index 0000000000000000000000000000000000000000..736f399b0a401e7e9ed5dab69a50efff3251d62b GIT binary patch literal 9759 -zcmV+)Cg9nLP)f|{(UjKOU@p7K@b#h1yMvrJ>#8H+G47wsYuK_ -zTO{Ro6q5^L6u8az_!;*J)y&uUV}^*b2(^+iS5_BO3p$Hr|6O8I-hV`L-eh2y*r~LH0X=dVQpCgKfgv6Fsk2`>*Pf~AVr -zM;|Bo2B|(f-OCx@7%{YZMoaeJ57G~qh&Oax->{vO-v)^oganm4u&w%b0R8PZ+YFFI?`(B1Y}zfIp#_~e -zX(i|1g6KJ>B3|D#r@5Vs(}9W!cSeGzNN@8zzM~@9cZ=h_o)OKgkx9ORns_BIrbPEE -zqbej<4CDyThQN8_bKk@rY8g6X@`BM3Mn#f$YAN}QAS+2Hi>gNR$s*oeHXA19P7|@K -z^*#UQgJ2|E7Bfk{WdX^d&Yv2sFNg5EzVOS(zRXkLwvDt?j}inGfPTd1EEoUX(jbU~ -z)835HPtI-#@;4~*wboZ&avX@Rk?fT*^Lz^NKNQGyzZ3<*TTmiPN;J4_{hY@b$Ja=< -zkr^5Z<-vVI%?57AXKoZ9?rt2!#c6BC1qY|sgPmNj$PY(y9Ef&8pS5}N;Wc^k^P`1w -z-ho0nW>-Ne-uX6PzOX(oEWEZcUmbJlBA@IqmyRZEqRYp`Ts;Wm(l>|~7BmdvLDKJv=zKl90(m-^+? -z>+%%(ew`;r?##Dg>fQo1OAIVIQYa^UUr@Hs4vk^o<;xep$&=^I_S%W8I!>s-i_euJ -z?)Y?3=8k^FI>8v>c+Y=Sah2$0(L$?cBeo)t__wy?%N558<&W7#GR0RcivybeYhm2( -zd@G433l2hwn3yfa@B^_y9G&uJWc$S2n*$XhiR1v-$gK$dq0K*eiWMoDc_s3=w^;7Y -zE|%LfisXjWBDv~#k&5WWhYDrf&H_0qfS1?j%V#hnDuaH=1;a55Mqx%=IR6yQfcPMk -zARw6!q>fME}*% -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 -zp@0G4O#NW@5%HHkZ4}o*dB7NeKC|1S(Re -z8&ylx7>HHSUOJeG$OWu^nG~P-iVI+HL`yvKT0~_hL}UlZLOWSMjK-8F+G7CDpJPWW%rcjS@X8@eMoh?( -zbrPum*|PbRY}po8wDas7NRnGc{-7;>x!^#)niX8`;4=>Wpr%;fg+M7KdRzz?12AM? -zj<|2g#fodk0eF61SCH&hL@WOqOt=+vDMn<_H7rF0F^V7NbY0|Dq}5E&q*@U@EeAQk -ztsThReTmM4?UJ-pU63&S9|B9somK99I>@a2kY#{qa^W()|-whw?k -zf(_7Rw1KN(75Nl&b>i+kWzXn}C_{!U5iE2#ed)EiAV!NySMt&R0wig_d=-V-!>hC- -zxe|lh6X)zU*DYg^1Bgy2g4#@@ER~^NVt9mGQ5{M2FP~^PGjtnj7t{jG0Xs4ZRgfH0 -z&Z|iNW0}WJXobiO#@LJ!6&OSI=7`(gx+L@f{AxCe;<>qMpsf3ZBsvs~0r=pDH1YR-7ls~yUVWp**tA2MToexugj+$KW~8$iqh)*f -zYrp*aXC9Rt>78ppjv^sX)yC7l%EXYHZc~2fx9K9xvxfeh -zlEs8>Jf~%?K=8Q%CE-wR5oVK5`S4$x=I4dHdkB+6=KG7U?J*@QAby3-M0*YgEScO!0PZ;MEz^fa7Hn6 -zfcg71R?xj{PuGPG*MC0T?w4<2kRD&{RSt^Ud<|Sw_m6UwB_x_-KwYOfvU|+SQAMD& -z|D5q(9WRh?ZS?7Vt%O^_0T`1Z#ecqD1CChQCoiM7H`q!o93?pD_!2B7|^X_gWzffh8KlqD~il_PJ) -zEUllAW&7NYj1yuUc;xedzH|A7-P+C%Wb~Ug#Veop4h#UHv$u(GD@ZK$-uxb;n^Ai= -zEZmFhSnm7fqJssnozAPKPB4~#k3jSJw2iBgZCD^xfp9DOqUbW#ff&(^62l>~vdAz{ -zqWU@fkQD!ndqQ!1?_7rm^ZF@Gb#d@;aqiYrnb@;rH3u@o -zhKZcI2%652w4SJXJI=r?wR~PVloIWXG3j~$-rJciZg~37ietwapf!mfG!Y|@Z?4P$ -z3v4a6tVZjRD~68|%IUx2+V%K?&I0dd1bie;bMSc1={W6KVi# -z#APX>hhZQdg0FAS=c<G?KcVv|u!WcAL-3*~n|Lep!TTkK5sw?``(UC*j2IUg}1$)38PXjzhG*pYg-G;>AS|BXJnyov@Pagxc``)j@J2xERU?WrR^b -zaDz`JSl%e5hZ018&lwUtWAtyfNDO`dVeH3mRItk4mBC{*HiK{`YXdK@^U7MBO%9}+ -z(Etf^9R`@^CQ;zdI}3BYQ8mE30l-0 -zr~#Hj|C4s-sl4&RS}$gfN8Sl{a`l2-*%J<_{j_WujY6n-a#j^(!wemvlpscQhv`}J -za(MhJA!)qk11sF}xvxAj76ixd^2;TM@|6o?L1^tiaSx8MlkEV?4+r4wEyqRI>$wbF -zD`5A_X&riT7BofDn5D=alUZaXy9}A7h{Vk?0jq~CZauXZqXrm(B8xuyT1@Ho(_ups -zI9uSJCTcy72*)40g>3QF+M}q#{Ja8=WV8B$?F#6$UZptDBR1y^j!t0Fa^okt@}jvpNVM6d -zB$IGjy=I8!a}e1#U@#tCspV<(cYY-$D=>4uLE%PC-;<@Khc=YDP00%NgsMDHTJB%& -z4kkW85Q$IP?S~sHkjoC|%LVAeNZ939AZhk5;E0*M1<6NGe|s< -zc0%ztc&`-qeejIpv|Rl+nwFv3qCxBSV%UM*n%oTiR6h)m@blnYZdu}%eG&O1wrPUt -zh)AfFBqvap4??R6>h`K*8cdeSDE7id{7%2@gud8G%8;!gMI3DFwauV~X0F(X+5FMI -zJo&dJxwi8JlWxM;^kVh;`r19BZVUccuXe@qW3=vl_|=J~V!+A|RMgN7In4r_)@I6T -z!1gpcH+ -zjR_gf81D=_SsIiZ&Vp{Uv*llL?MIM<`XLu_7R=k1FV~=tTe)x;_ -z7tSWZ*@{RGEcKr=rUs@r^|%gDFJ6<~4%5HKN7)LuAo3nWqBP?TXz@Epnr8gp8jn1S -znr|VyF3$UBB-|czvlY(9AlHxA8efOk1~^#Me=RfVI3@%3HdA(;l_jrVm?LjqoMR`N -zI`4$IGBE7 -ziuf)wv!tsc!h^}jD}r^{5hKn{wu`r!>QrVf((TSL=%ag -z`a>QZQGr@Pt!YCORt{`xmw`5I;&XF$tj -z)z2VwM?v)oj^}wcgKVCkGn6@o*QCVoL63EC*w^R2^vG&flFNe;{cmnc7cqakPH}kc -zBjtGi(5;&2cqRX7_h`}Y)8VKKOtV0fToEpqm91{jxG7pxM)@+X0U<%gZt%*-q5pTm -zV&1eEIRNhI;yF38MKaw-rmRW-Zy~dMq*n+^ON(UG0|2AD2L^}oayw-1v6XK5E~IQM -z26ZWB|7_$sf)O7;T&iAldvCWCx4rq2 -z;;cij`ijGoY>}dVG#{h27yVbx7o$+wjSW0vs{}es%Tfu?N{SUEp80}H0Zh)soV|H+ -z3}nHKw>NrKvUI|m7~Ij@gZH1im)~&CS49`?C9lD?AnW!2yV>U;J0_x?Fe;V%6|2Pi -z)T~bwSDLdheSi6_n&^HjJ#2H)I;Mws_q&6-QyE28k}Cpj=HrO2nXsor;WnNJS^rp? -zE3cZLje;o)o*y#>8eL}smjcSXeD!hZN+Qfq&cqgx8rASw#F*gys{=K-%mCCHudh)T -zsE_NN3(I>M?CB+Q0*=Q@uoEaX1j!$jR-|70uR1JRb?T|Oin+E5&L?zpi8fd9e`wG~ -z+%fPGF?e5*%JjxscZEo|fh5%g5iD*RC$K2WfP=}D(E!P~enGapX;F@R5(D-$5;gJu -zCKgJ*O5uaeUS&g#bNmhZ&vRc2vZIr6%}H=<{PBd9U^B_(VHBiiH108WYmxYC-zODE -znk&<{9!^b*63x0c#cKywpJ_wHFjRSlH4TGsD;Sj>5P9=a;`6I2tddW*2B<8U3tqx3 -ztUKNm^;Uw*gF*iLKSujWkjnos$at_`n#p6@vD^AFb{weAylOAhxiN+n6+4*R#i+E+( -za^;N1X7D#qdJr5)t_alYi(m;mPS29fk}~C4kfg}Kxv0t9R!}+~KB|vR!*OLW$cw0K -zq}xF9k#xD%^UR!8;G(PIL~|43apS3L5u!~Ooe!d-x`|g-ej`4_AdJBvj80?6Yy?*Y -z90WQVYWV2wK7|BW#3ctA#o=MWe$F1B();#PG98Gl3IgO0J1j-t1slOZcg2O~m0o%LyI`WqBF;j{xT5-)tRLUoMp -zi0dKjw2jqW>2^s^rCp;y|#1q@A-78VUhot*{bU -zWu%-?azo;gW@TLZ3Du{;=-X>+Q(O&fFhOyWqMCZ3Z>0Nwu*F|lgkJ1 -zeGi#gb67kvbpfx9KJb_8jQEbKZ|tMi`qNt3o{mQSdC-xG=JL`|Dh{ -zyxh;Qb)(s1zfP2ckMKQ=GuhNHq5yj$?T2dq0$jft%8J -zPM(|B;I(*7UR(8nebG8k;@QXFjn-GC83R#U`RT^3qT#KLS#bf00eVDqy5?3!sOy0d -z!^IQR=7_!vSBsaIZxgSt+b{mJ{u9T+YAM6^SuFU_luWTY!iJKug0vJ?Rsd` -zaMz9fp5wWA&H(BB*Gf97Yx3IK({l;=f1Y@2GjfFfO#(HSNsr%2<%12buWPcpg1Bx# -zcgjU%!`4?vw(IuSh)!4C8qwvZ+ZC|Q_aYm${xkOp?91f>YC6xsb9GSX<~6jw^N}I1 -z{kzxrlWn|tMjkbngwzoY8Z=TrXr}k3Jm?w1fuUq^rjSsAUwSpbzxf&WX|Imqu{;OQ -z#dB(j;Wcku|6bI}2?`V5 +zcxkCYxZ4!&WP7>K?yHk7tGH=RxU$O3R^gY8&2xEOm*g#z)^r-JiaDfy>Q>UKkkOG#Kd +zW6pMA3$;m~H-FeJ{(=1g@1F9Iw})#hd#uEsKiFB}SA2O>S&{LZ^4oLrY))Pe^7(Y1 +z{gGP3nOucS&AFZ5eLjRTEqh$C&huxqp@Q%g(+b^UW2T4o`y@LrWq59yH{;EIX_m7r +zH#HBoOrI3VBQo>A{!St8F2|gW9!Kmt<9b!}?|nXH^ut8$XK=$zCC=+<@=jmh*Ds6A +z&k6cxsbDR3eV#c2PQW;M!JU3rzt$zE5 +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 +z%)1B1e18`#i@4Y7ps89F!y&6UWA +zRL7OYuuJ|~N$iubC0BheEQu1d)n&IluvTfV;Qw1y^JUoo`rnwVZ*O_zX&2MiC0&A< +z9@qTkti=)vX8VQx)n)&-Vo8t9@2TOjldI0XjkYg7{qD2H3Y+nd+cLt(EmVg +zrt`n1TGShWS>6Goq*I1>y^-bc}UYK~;EzCe^ga76yIhBlTe;)1JnYCce +z?-ms+ksih$586#Wey2gzL +zUe3*S=u=Ykzk2NQzNZ?sZ;g)Y{_o*<{)?Nv_2@Z+9TQisXt6(*bK?W|{2R91?B8dCXUD=%v6|Zo9xv2B~<-`50dBJrrw!c(5v$^fx +zoJmJp@@$r;u66jZlTr0yK%QXQWdENZ;%7ezD{wLXzM$^sMAq5OCrspS4kc)pC%GY(PhBqeUdw;E|)<7M?HC}zKo4;&X$-wMjW$jXFaEDj^knt%?0dD?hrx!;5U6rx0Hrsrz;FPsmUTOhe +zoV6C7PqPm%$*Bz6^zG5xh2Ni_ed6Q9bWHo}O~1Gu8p_v9?Sjp`9&O!pW!uyW=0IVi +z&?EovPme3*mw$gg{L_i324-RY^mOIhTtfDIF~^pAeLU55^TCdJk8XV{h_hE&p?mM< +zuVr!#Z-g0dcwE1*q||NGBPW^eDNEjeeiEE*axpeQW#fiI-wQ{sbzHwUdx +zzvP|n-=d#SZZ`XEc=q$tnmZ4~-GBPFGVSEGZ0LJZ9dY#W48t|dR)<+{c5Xf7w?wqO +z=3UrzMYaY1R%A{S(ry$pnL9;Qf5ueh{9`(6=TAueeW$NSI7z1B$>)ZB#Xno`-a5yh +z@@2N^QSJHP`FI!>ZrY`}5bGVc=o=c#Y$msMzY# +z1(_4X#H{x|R9NSp^p-1gQSz#XFV-99zA$Khy8l?}=i)0xjgoWI3&UpgZ4?Y?n|0xf +zN7lZ>=}!+g-Y9VRE8olb;I;JYeazd}iX3<3ym6=M=+y)D(w*PSd_y(~XEEd)N!47` +zo~R(#v_Aj*^HtOSE}Fm|<#TSLcoM^oxecz(!+Q}?DGOg1%ZE>O#6)?fem +zRMZ?_z9q9SGH@2lvdwt@WM?JsHKjdjzmwKIiJZUWcZqyOZj|3Oru@TY_x?q$%b7Ig +zrNb8COa2`jU)-L+9Axw1;pVQ}?vt{kGWD}}S*%di+x@*paC%Y5#M7-R?1$DSygcXe +ztcr_UEo+}?6lc^G*%ge_oc>QPd%kkd$3s#2X?^bZILnK^HpSc&=3Du9OO9l((~8QX +zFwxY*JhBU?D7clhzl{7;RPje!F>}u|X6-wlcCNQE5@R|3{?lpI_D@r}lN~eO+86To +zZJhj;;S@jngSWcJU9Z31$rG!c@cneAY*nF{iR+~qOHas7j!aSA%`OqZ)N7P(cSvE(qfi*f@)Ra5Vbe0<5{u5P4ff;x!9FYGryGA +zsj6xl6z_9<=;nKW^3tX4W>a?gp5*%4vdShP>RtRhJ~cZBflmKhZ`-A{C!FScewy{g +zVUHV6!xb|B$F+L>Nfv1e78E!k+bd*rwZWz3N~N)f&BQXNkLDHYMZVX5=y|jy=CApz +zX$x;Ha(w+Q=|8=`0)8bOkU)pX|;ksmA7R!z3lK6kYR*^R +zRwYaMOgpLZ?U3sqzx{7o_TBJ2HDRryt4z-8t!Edsrmeftar4i`eKtS0tM1(PnPqa` +zp&MV4zW(}k%XU#7_rHksWk)|HZ+Tby<7(%!qywk;L#|xlwLHr-`&!zmtOMUnVhd(2 +zo)&n9*3eDpt6|`FH;}t?vfB=N{T$c-H=) +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 -z@kWdADAKm7g>B|gJB~=Sjez$ibc>3s2s3=Ah -z0RP|M73{Z6(hxIxg2}^iHFAoz>~c -z#gLe=iIH6_jD&2V+wzdz=J1=JZ}o$esUbMM|5&*pl5RT99cL+REI(abbo=*~%KSi$ -zyYIu@I`C+{2Uxuk%-ssF)Sm@OKc8 -zBXd1Hw&nH5ZCKZdbNT^ek?nS7&E^u>PfE#lB8!Yq}cDAx+iDEpE}Z -zLh8WMN(6zXN#wcXhKzp5yiO>evyg)PaG7ZN9=y3VSCh8$Q1kw@WU`Q(&kp2KlLWiF(+!WE%Wq8V -zp?HMVjG4A3w*>bcNgVq#PM?H=o@KR2u8*WF*g9ML_{m$MP}L3rl~GBZ@0RSIe?uaO -zK}^_h@UU#K-Oe9_6WG|u>-%sRrUzkqo@9E5!bml>C5Zr=a^(E)zL;scdD7`=UfhS-HN4Dy&KIwLt#*FAe -z+r`ur;~w)$pOhWz!tLepuH+a|Jp$U_yesNF)gEA;D$!o|b$zZzziYVr7;?rb7-Hb? -z6_R`DuxptOne4u+3EH~pQ`0f5_ZA5>OVObF+OQ>Hcfu}voh|r}o)y#Mbqhtzndr5> -zWj2tND0Avsj>}Cq)x^a2ABCxTWgYnR1c^7xq0Gwb@TI+*qxRQ=1O3=Zwohx*V&wl?XQnlhf -zd9U<|A>-lFd4iiO!sJcLm5XV+pXu}%ybIxbJ)5_Uqz{uT&uouAt9QD`=vhraeIV4~ -zZN3uk{tStC?tKb-Ik^IjJaEzU6!K%{vbJI5kDYH|6iAJZx>=F?s}BBNc!&V84)&LJ -z;VsGQ)49m8cWqjOX;^41%#$v%&O~DKIub8zooVcA<9Ci0Uv;8UD6{oB2s^f%7iZAwFcV|7#D){z*>SZR`8i;pJa^%s>WHT|Sf68^7CX)>*E; -zoY?%-n?bPGG)@(X>gEX6zXk;?UAv;XbH?>KqZ4)}hLhqP$U7>cds_>Zi??83WgIhd -zp0*aoVTh5IP5h5_6$&P9KM+{lP -z^i{5J7}AdWI(NdSVzz(%PuS{Pt`*w9%#!N{UId79Uj(^&vi>&uj_)hfJ{ZwmzTb+! -z7+aGz9`$&Oe;_77ocWhu7lU7G66^Jj9bU#P5YQ<5ORHje?gnPjBlqQa1OHDaW0m5W -stC$oLcol_1oB!v>I;9!fNd5mf_0j&4{7IYpO)~vb+U#!<8Rt{yd|7|ySMr=slBt&^GA>J|T?9$Z`Ib8COZps; +z`2q#!CDN{>&HK9c^v|`Ye@SIrl1#fKntEO`{bJgjuWL{Jl1jV0?&J@tjLU0J{aSbW +zPuiTXl4+Mx=X^_>^F=cK;@ZW( +zex}a-y8itC_2>Ufq+VJNGU30(o4O63W*_{j +zQ*!&`w}1JIzU{g4yJ`J*jp|pA-u?Oa|NrB+e+m|V@7ejKa^?5iFa8#+_>eg3%jBIu +zmLC22`qRIdX&-xcetz`!&zn#Gdba*}`1)_bijQVh*I#}9SFrp;!SavN#V>YT{-IuY +zCAk0XnR|a+T5hd8_U_l8|9h|gHfwpUQS)-;>2KEckAkPY{qp1AtUYgz-u!ao`QOWr +zzq_z_L>{?0%6bJn4+uRi_j+x}z6#a~Lf*Xve3{qXf)?dnfE +zE`MKf?45bbt66(rpSk}hxc9Dk%WJdh`?L1EUU~Za!#98BvaVcz`q#7LWyrL*7a#qp +zTluVb>G!Wc|2=&B@96D6D~|ts{O0GO8^61^{+Pf2?fgSOHELc}u6RFZ|IhpdkI&x! +zv+Bgp!WADLz4>+X+28QV@3ZHB+kF1lqqqMmR(wBt>vz|dAE)koTYvhOOY<#zy`Q(P|KB~?J;_WA46H4lE{-7;x859VWME)mXjt%f +zrT9uF5EF`@&EqqWU~AIgkv3>+W!1i+GC?V`Ly2X-FpOKV2<9)7mx)6S3y3W0Uv +z6MGJrp8gT5V#Fk_z{`6^IkWF*spBIzzVQAhp*(t~D(l0TW+b%RJa1NgQMko>qQbFc +zo*T=>w|_hE)Jy0n;~ut?&TiSax8=?*UzL=eW6M7;H#ztAw!Obo&0=4^3@i;@dVgN9 +z`S0Is|BJQ%ue+0Xd2amdRo6d$&hB6Tzv-E4^(}F|-prkIW`um4YIXIpf8Ii2m-N>u +zx39lAz!0`7Y3)*`ew`jo*@U75hPnEyk~>|>73CszpX3(wo9=1z%K0n(cKsSYo!xhf +z&iOk>^1|L<&bQ}F6zLQw=Y_r~aa&O;S$srz_R8FoL35OMOK=^T`oB|H +z`;b~^%Zj&`XPk+AwyOEH=(%n&6So-$nl7&NOy722_DIXGwu_ovtL&CgG8I(_(C +z=AG7eI#%j|AwLh77QY#} +zhsPrEsW@NK49ztQrpbA3(Dt>RD_ifA`|B9nvJEwxvr?W*aELX0tUCVvcvV*9fhkI> +zCcaI7b4zj6AJ;2FNm5R$Cf-fiWWD3uUB3-SuLvdjl&8Ek41X^Dmhauu&Z`$s%=mU< +zT0&O8bK<5eEt6*?L^XAFUrlWD3Jm#Ky+ZZe78_^X^{28g78q1)n^)cUZ0XEpCTFV^ +zpFInkEWXM!{MgoAb5GbF3s>m)#?1JDW$J&vv$xNgQ6VZyKdY@5Xnhl|#W7_xFVT<}`+^x@ujb5A`l|E;)8)8%uS!m8hs +z9dexiK6)g7;cdsXWyc%3>%Rq@Hd?0Yr|YlCRi?H>A~NJmv(CaDEb~+U<##J@UD{zC +zYJB!~%gg-J4<9W1Ui;U6*6J0hX3I=NEqDA{apP)3%K5kE+s+8S_!C&3@>x^AI!5|( +z@`0<1uUz`C7@UzYtz1dpRp;%&+LhZ4c!T3)PlzouK6qE>)K|lmcBg8a-?!;?%QGC(1 +zt2?hJ8*QKQr@?hmZiCgOg(({ze@-aU@RhaAz0muKS**z7#MYFRF56iD9r`sjg0-P4 +zBk6S-W6Bcd*?HeK+fB{Azw0Q|jn2}9niQ{{@6~&AOQ#)g^5J=Y;L6b#C+^ORHDAAS +z<;#7Q`TM?>@#Vx;upjHbs9jlX<8Vfc{rs+Eqq?LUS07xQZ#Z*uXQ6tdddBK|fpQG| +zPtFEDR_Bo6kvp;aUr^Jbg#ml|4gVi_GWY%7SN-Y{G2tKM!~T}oJ1*XHBE`Pqe5+OD +zGvoI=1JqxCn#WzbsmDaz>Z$tM+TuAy$_HOu*t_P}scMcOc6Nui+1neh#&})OTK^&L +z>+#>5Y2np5eX}NW7Ck*)vEtXM;6E(;Z!y-8(umaeOL=E^Tuey8zg1Api>o0>mgpT`!r&X@R-UtOR8E>@rXzs0c%0kq_|aqsJn +R{VoWS^mO%eS?83{1OWR<H)~{WX=I988*v;fx#T!U4?3cTO{6HCGit6) -zEVo?Bu^4k%#mXfjGZv$nZ2NBW-EaH#`2GGmpU30#{(K(K_xtmDeID=6iuekgn1n#qmHT@6yFTlag#9JVZ5A8Ga^-S4p?RgW3y69w -zq>ls3Lh#RLB1LLd3=*2ZT`ONEHm_`tcu<(xV$Rs8vV8)00|9ZiA)a4 -z<(0j{X&&&LDPb?kc15%5m=ed-g=GTtIe%ns?cKDDQ1|7V7;IxnX(Lj*^76Q51h666>wE7&u;^&dVqNW$l^#}42eH-*QS?b -zY#uPoSxc(qSlyV9Bnejmki96wUnys2Uukkuqk -zqly(BzTW~Unr!?l%O>ul-`&L%DKnUYZ>Cp}Q(;|GG^1HE(`2xKD`0eA6F7#klw=yKxB -zwtsv>=Ni#Fjo$eGKuEuJU~b*b6~ypP98BX$b?qqG&eobxPwUk%tFAptwj0wZ%%(X} -z>>RBr6uUu<#70_Rz)0#gw;)U%0@HRLL)Hxl&@b0*yrV=qNd0_WxAU0GX*mHS#z_4u -zY2NOb9Rd1<%A$z0#Q^<2rQ9#pgaHlf?=I|mn&p38yfxU*Y3@oFA8XteD?+1^|LavQ -zQfifzxF&^=;?nF|8rY2f^l9huC23}2-FOU3eVY5j9)tZ$${`%S{@ZWikrQhrs7o!M -zQ=tw=h0d{)Q-4>zQg>@-1n+&+GJJJWWgc6=r~%Fd!x1~IfvBxs1k$O7#}E(j^^b`< -zu1`zx$m~PTYUcEvKi8+cztqXfm7lh-${yVeEd#AD)VXC)Sda0Q=IxUQpUpEeMxyrg -zt53dFJ=00cZ4ZWD?5AWMJ2^P4eSqOPs;nwgx!;yg`U4hNevH!V4)1OW%{{rGP%PX;e0c&cSh7Y(X$`Mh|%1SH_79D;`CA#-lXs4JRR;WLuotb{2bL)yF`YQIXtiYNP -zR|s`xMw;|GE~&5gMCTEP{8X~e%hm*4c)vHe<4_zo{W|`ns_CqyJUNE@K}Y8fPQ#Vw -ziFCHyHP3kH1*#9ktNG-3TM{0+gPTVExfw=oIy!fwetyF3GtJU(|5StBCw!`Z -ze6j``#b=i=JW)6#s^7futiFAYEH?B&v2{ENM=$9V?*-9&ykA{iJ`bnZoB -zjLy0)@!><8;v%=;jF3E7&XQFh^p3VBk`R^YcN@@0klMPckBYY+QrSa4Tkn#^G)2~> -z?a4z`EMI$>GoyY>myH}VDFF{}P`6ddj4pJ@l&SQc(L{OKJdrp$deqQ{-eSj_-RCzl -z2B0ppewsl9&-dts*06izU0JsDqvi;*;n+aY1_U!akdF;^wOvni2}+1h53U-t3AOKl -z3aU6PpnA5eeupvN0%zaBaTQ?cV8NS#frbY$v2*fXdxmGERe8`9HiZfEz|!K5?S4op -zGxs?Bh|R~Qv^gTld+#>?L;ETBzTQ0*i_-og$J_g6IldL=BhMPk-N?olz22TXTT$E< -zq4(tg -zmB2Ovm#qLsMbu+tYL|iaU?7>=VUXx%=e|xU{K6K-E@U(Z8E5ENe{!^po)%=4$HELdJRKGH- +zy8h_xpB)!}U3>cX)#ra-fBc`m=jW;uKVNjbm%pz+{VRCd+rs4^wqN+T^2D#i +znICpu`aNg=&uP1V>J(q!d-b$?w$*Z~FDTc4@v2D_>(^U|=o@@(cd= +z@849hP8|jY)+A3C$B>F!cW#)7L}OVIx*~qT#!U=tFK3*Oqj%MkfO}iw_y^eLB?fh_nhU@ +zhS>6W%ON$eExufjHy!c-+2W_2!>`%14J3}$DRFByfK=veKa`=J*D(l=B?Vt>9+r5 +zjPA@`*Yn;oy-J#Oa{bT17#B|&?VtGqK0Wi@w=QDv`gd5UTG(~<(vF}Bmew39$K*}7 +zG+j+Na%J*=e^t#1H~AEo{nL)!?AEpB%A$^yD*Nx7uX}Z}>qfrT8P59`*aD9nn!G>8 +zCGO0cK0D`2*9DDFdf(*b+4$kfe+B-pkwK@HDz2Vo^M_aIo9fnZ?wvmA(u^t9SJM=a +zI8FMmoDwx@O-p(jLz3djc(u;R^d(CUs(4yAM4Wo^efQlHMouS-xQ#j##OC~wy7}{0 +zj&ozq_Fr2Wk`A7XpB(qIP3Y&R1#1~PSk?Y3axR&^E7H0lBH+_gr8MbNDZ5W|C~T|z +z6z#N2Fld4zhhhDvyY(H*1UZAJY!q|siD%J?QMi4VTJ%Oq4RF>kAACJ>!OI#N0?u%+3`CWIor0(=7ha)y8|GU=<@7-M?>T<^SpNwV6i_X#xXEvp0YX9qt +zUR)CvZqMOzed8Tut;XZK>f|$(t{Fc6IM0@G_)YXx>zU#4kLPB{i!NC=Vd4IK)5R}N +zEA>h2zqdX~|J!N_`}^yY@;^LYc+xvOCn)@k%Ir`H!-;>2Q;ZjAm(9;Pw(!Ug-GA{~ +zzWegN`hSqzVt>%+=ke{&H!YQQ_fgr;@zW`IzWMpC?L{Y~Jhm|V_QapdJ$`mhsm;dl +z@Dqv)mAAR@xqmqFWABZl$6mzs76~&R{b6OvQ!+k+ +z|7M*(dv@#8qT=WOPZ^%{&emKW{UE97oRe45p%Ocd8EclQcv;PS{2{4nk6F+X-Ts{i +z4v9~mA~uOhb?KQoW^MYW#7w!@n2jTyYR# +zaTGB~TUB;;{+W|uEW1J)`sOPbEcliBf$vg7Ebq1>wr641-cnQ%<0 +zS9Z=uyCoZsN@`zqwDGmGS2lWib@-Agt)N_Cr*6&(9D +z;h0$Z8js|O$Jo-}NM^oy&?B0evvi|4#DHvwVK-EJc|iir#@9TOyN$z^Z1jiQr_{UF +znk>Op -zk0oU`XOpwqu|!7)0sI?3!|(7NeAgdI3W!xqsB31Z9>E)75^dGlRA*tt6qj~k%aD;4t4POcEUt^pJ#4tjg+;f -zSz$n&;KI|DBS|30(-VoVInjA*{ybn#iuIA7;ZB?+SA8W^sl-vWjh-A@Tv@LY9#pNQ -z5(%LVb73?`#X}kHUI+h9wD+S)vlNg=WKw@EqIg3>J}A85+CUIKBv -zT2ZETzR<~|BM4A1>CuyIyy8^5z~Frue9nn1fu(CZ=9yLw;@NVT)^KsH{&&uSdi=7dClx1OW^t-wkD_ -z*!W}Xojm?U`)H+H=zrCx_-Y|*;GvR49yQxCCXbFN;SnYrm?lfY -z)t(t1Do?X>6ZWYih&yzKE<}*9#^>lWyI9YWWjt(j)s2Eux`{l_{Cx802ogD>lt{Gk -z@)WA7lJRSi0qf1S^Tu=Syd{N|t}C4UVG1M9Y;f}a6s|troxx*&%jAhiGWoP)nS8^! -zY`*n^#I}psd|yg7|0Oj9TrR-Rw2y7dK7q~Wv-z<78NAwbn}KnQ3PhqfGiRfIUqZH# -zfdz-tgf9qV@AV8Qh!^Iih6eg%s|D8LMojE)!$8+E2j9h;2Du;nliwJQ7c`Tl8=5d!e`{uw?9yYt;LuK=K -z7wQvnQk70|j@IyzK+}14VMKSsyRvh+H8Yo|k>|NYMm%qq20uU{W$l@4zWDbnKJM2{ -zfj&Dj_*>gD_-mAX^;lC-6uf(-lXs%*%NuT5K%sGtowuOlcUtTnw-Eld!a@5i!0k&N -zyu@S!!$umCD87)x;%v}EY3%)VO+9RP#fH1?Nw95}p2wc8HGCxSDj9v*A6Y`XOgomv -zzuliHQt_8I%bLrrWT?h-9lYjDMaa5CCuEIaV3eyBdU6B`3T0^&%8vg;Hk0JJqIyWy -z7ECP8@`Vz*3WYoXh*5QhtoB0xL}@F&Izo7Zl~OT?wA%m; -zXWMx7=>_`-LiRv<0t5hyZ$J+rlnvT9RM_r{)rVBk9DDhe!qz<=AQHgC#1Mf>Q5II3 -zP>u*yaS9QP(&+XJ9sG`E4*ukNCx2m+Q|P6y_GXCeYt9LY4QI3Rfo#b=lTvZaoUPM1 -z?l?t)UAql{(D~!}g8c)FPNC(I$rBD|@~`P!z9b+!1pd9!!P^oUs}a#E&~=ncwDQtK -zxKe~@pCmFMM_|A*S<1>zbN0!WuEK@`Hx@C83fx{4>75;g8M?~Qq}HEh=eI6#@P~eI -z@?Jl>_<&s*d^~BIrKE4R5CM*+XY-6~y*R$sfW+Wfx+EaN^~bwhyzP7IWsAEVcReOJGXg|Or~RlOPien -z_pf&3<4y{99TwU>(2hb%-S2I@_DtV^-qCK`fwsjy?_X5_gwvNOoW8ToCC=qr!rT+^ -zpqYHpj1TuxXK0sipRbB9WKiH*^`0!x&b9 -zk`(u69rq*;NO8fTrsY|D?n$KO8NB~a7k_S})DX?)+IjgTxsM`&PLBivodI>YZitrm$(Dr}e6E9&@2H6H8GQ;jANsH@F!=gBT)D -zza1{Vi|$C=oe-N((4Bi5rRS~Z+j+fNGNUPzsNdEXOoY<34TLsABQhia9;E&(PoU1z -zYQ6&eo6vxMULwJY$qo=&BV9#^)ge#RhDQ9J%RX4uRoJ#r1+{c>Q8ZDD#Ok+r@;*V3 -z#23ob-3KFTe;x=bO||i+jjCuDSG{) -zts(z7rF`ZBsknWkKU+}06b39Idxtt5hpq8yQYV*aiMsjeD7mf -zCYz+z9Ie4aK^f96Rf#A!kZ47?`acr6Bk2xB3j&?(LzL;j3)nODh7A-Ds4$Y9pk_ue -zl6zf8ZGmWk^Jqf4L`#NH&|#sCpD<_hoDj*4n*?)lh%&&9XR~-yB9e{_eqq)l&YZ(0 -zq)Z&*cMSWgfw3<#q~o(Rpuk8}3+f^Ndr5%of9<~1oTE|T5{RbuU= -zxC6vc?>JP9S5Rs`fikcGWB^og?;_39XtteSKZArZd9lh!;iBK}Z -z!b=egZJC+;^Pixh?E}%M%16q!XqnT55G4cMDU2S -z=RZX_BU9@>U+=F&dM8csKDk;l1Pf$FDC9v0U?ME^@8jkiQNKY5dwG+S-?vJ7 -ziY7#o%0vugRQjw(g{Og{08;*nQwq?SLP4iR&=;P#ZHZloUUxiB -zM%8}L9T39q`>v2Ak6A9!Ld2GY0b+2DI9Hv=For1>M6>Wlv#k6U(n0r=9(rYygAd*t -zAp*skbH%ZS{AOm)j&Ce%-g9mQNF*ziQEdFBKFR{Iu)Pm-PyZbvQf-=5q}iQmLho5==RMcS46F~`mBaUE@Ue8~EVd!d7rJ}vv9**zuCVj=^KF9cL4=>kU{X5fHHVEl!`X*x -z2MU|_+7srQA=w`RVn}H1QM^y+1X7G2lRz$;JW7foo3xr|6YFfArI0m% -z^bCrK%P2e9pMnKmauwnQyA;I`naFCiM!edAb4CV+YdA;Y2_Z{oU_w-!nK%62%3IF0 -z^7`K+?7@@izZWtP#?T}C^5^C1lG)b>6w00> -z&xN)C+5;`-+ITZc$*YJCx2I;(!9a%u53}$RO=nwq^Ep<2$5I=AaJ60FgP)xIMGv8@(wZgKj&nO^d;oe#q35lazf%mvN{Y@8%)A95H| -z!&lGo<;n1e#G2YTt8Bmp1&aqj7}R037w?XoTq&$kpMiHkM;;yt1w;_zITEwomZN!T -z6Qrp3y^YtLE=4Ouv-X%?p)+`>FfdjSC=qWK0=fEB3$HcJdsu2fVQcN_EPm3QEyA{q -zZXhh{Rp$*MU3^zdir|pTCZ;2d9c5i!t|B-PQW#Ui*N79{Bzb&^TuVSe2BRg53KZ?I -z_-Z_9ocHPOe40pd>k`yzNOULa_Z1Y}j9m#W6EZ|e)O>VAC;)zc=TbX=jYPRGJhdL; -z*XDt46iyn`c_U*2;Dxkg2o)e(of#J1iEf^rYwi3k@=9ZWaq%@I&i}M#^T+9D2BZiO -z=@OWOVaGUoZSH>r2SN&Ca-$eF?&4rUAc*G>NaGH;>p#e&Y&|bm=phrsl8PH<%2XF= -zE>dspc3L0}uR$KCCF!Ovi?MvdF0z;xM61Ik$^g@jWQw{G^a=#GT7gDZgwVH!?&O-3 -z#c7G70>rS;_aJb6L9KGTL$)R4aR3|>$40nCTO=mFfDl1JXK;yV`dum7XE~HBuy2F! -z7(*e97P00WHu@ZAeSa7yI1n^}3bL<~q{_Dn@eGA-V9Y>)TFfnr?7Z!K8E#^{gc|%D -z1c6SeJ;Tb|Er4!t@V6=5McTjMWTr@mv5p2QIYf4f(|1TT0v^GEhtU~H0n%$|lNa7115E`tX@7PToz!R-OhB3A8^~sJVTr*6bf|nC@g}2A5v(1o%G4$6xQxq -zZWDT;F6joK)^sUW%T6}yNTWqGiP=&K{!t-OR*Bt#W2k^Iu1m+QLnxb|HFl`b89j2C -zm`2xc$z{V&qBqt{aG~eil3JR0A2Q~ZU}GB>Ita0@XHU4RQf%Vo^^qVD^n{iu?u5abV0fb>O4C0j5&SG=V9-l7P_OY2x8{h! -zM5sDNdL?(Xn{Va+SY-1Gc(aPg3e|n-j2$ivj9Jt`8b2vLhm9v4^vSku3_1v$2uKI1 -z`sb;E)o6lFEBYt65awodGz>?P_ytk0`0KY+*%SJXeunl$hXwE=HeQv;f+l0IL_xSf -zk?tlke3wPCP=`9v2iu)|&|ViGw$CMsi|~M`B^@Mfr2-)kA=Dk{bZegha|h}#s7PN2 -z66uT|45YE5V$=B}YwY~%Jx)r=9U=|CeKB3nJS%TDTZX<$NyxGc3>^+Y65q&W6V0dx -zoo8L2sVg`U&^jUMs-oGz?H!nSHHa4hZIJpJp)6@1c$POvlia=B&TpiUBU1GMh=QIE -z>MFSN(FfB09!u^4KK0#vzBZ*;5nl6rAW48$eZB3g{U2 -z?UBdwdtX5i#y30(P?`i~Gx8o?m)XS91b7T&V0hk2+Z2WH)^3l28oY*f^0h!622D!n -zDR`bemkO|gj)yjaI~J0+noL<*{2@Ii5n&%B4Tjo_o-FR2EsZA8qW**I;>?w;MrwPD=c6EwBW%FNGxSevu`;xX~eM -zLvxO2^5Oekd?2OXFHi`3nh1xG26UKjK-pCi=r7AFmdx3f9wZ4??oOOI%&$`48Doxlmgos&4jQwLd4I|jE*L#9c%nrlOcCRIZAJ!W -z<26WQpfry#=dHP@H@HLz`hK-3vi{OywpDnae=fH1JC{hnASzxYZ}lO0w}(l{iUOa3 -zF@r_PxOCoqxjfE)X}?{UlINw+avO=`)^jc72_cSgjt1gbXW#-v(eF!;$0|+xFHiGQ -zd#ahP%gSG+Is1;h?=lL%dq^{(IuCLg6Ucxl-Y_XGhmA|-?8A*%Y+qL4hM&>3E51~g -zO-R`(NHdAtnAUIs0>;N$UetY1*Fo_Q>zfg72JDcc8fi1M3<`4E?FA;ulpDRC3Ph-? -zly%jdYT-A|u<|>I3^34ZbQa%!A&c*#$%LMQPJnC2@x8S@P{{oE -za)fM+K|{bplnJUU4q(Vs<+#Y;5VFyN*_$lSas8Q0zKX(D{2`e!zDd{8lZbccVyR_n -z5lN~f(zVn4fH)=`Lq`e;{QgEF=FK#x53RECN7vZ&qzDERQgcNp`()dG;zR|78$MF` -zfdi4I#jq-kE3%2Hhr=b%t#sF~rVQfSpIu^sc*&9yMP(vMTgt#5pz!zFW+&+b -z*;2s14y4HbmzDsLK#x_CAy9wvX#T=WpaAg?kS6+pu6^2(3_gg$Sno|T6Kg}B?7GS6 -zf;>9oM*<)a_Wjw;6RdnKyec?G;fR+Z`yDat{=T)yeVtLlR>%ax(gT$FA$GODLrK38 -ziRw-ZZ2V!mWBZb@#suxYBx^CaW33s+FCFj)yww7kjr$!BZ-h{}?Sf2;RmA@4;-e0@ -zL>4I940=KY48;>vnr!AHDWt6UU3wQhvV&s-5V-J&$Ov(cp*+rnIYE^kbA-9tMf*+s -z%|)Tu!S7veOO~~bN2?QYg -zKwCi1G@WJT&#sr@2H6H0rZBR0f{cJZ8Hj;LeLyVKNsyAGC<)?yvD?Y}(VhR~Iy1j^Hr!YACs?DZsK-`nQo^G{?3RIgD1qTu^jlMEpU5Ao&}hwxOL -z79jl&u!t5Z7?2{eFfgcs8dK7RN9jRCdwsK=kJu+mAR9_>~cm)X7EH7FFK#(~xbTssz<_4$ch@Cwvy -zAd*Qi(;Zum?p`4r{lG+oDo>%K5(!Qa4BNx=U|%3zmqk{}hHRqP2B1bVXfN6w1(;2D -z?EDj+_-3z5WIKAJhYD#x)1)+BJt_^6BEhED>?QgtczO43b4piC*Ei9iPA2n5|J -z%W@|TR`@{=jM$H2pIx|c7`mi3mGy&$-&^=?LZV`|as>wWhFcd}L{flO1+>zF6R32%_|Tu7{C&EnM<|2pLf>gH1LW0j -z?*TWXm!(Xs=}a^4w#3TcAdl6U{;elQpil@j_)s?c&qucjZuA`JqZXtR=;eg=M4n91 -z3kicjH`ASuIE*IYEeox@v>&3t(?F}Vr!@5L<R_ -zDv8y>6t+}+vePMwiqCt%&Tl7Ahx&?^0O1048q}z8uBbr;nvG37=rS;Lq>!q?mZ))PCnykL -zJFG26xQaWJA?i#BWiU9ZzqgXnZz1njpTZ-Ad?`VIV31ZMs7K)mt%^ri+xWBVZ2VpF -z)Tr}J_{AmC|9upO&)Gb^F2a)D@WDb$6fYQmS=NERK44@2dcBk2MnDAW@ktZfFhvq5 -zJy%PHKv93DMd%&;B^)eSfQRtsRgktK1H-fIs4C-*L#yFYN_9I?Xsb$TIMQM~eE?#_ -z#L5!Co&~dMXaS<=_c0`}OT|h(Q=Yta6%yI)P>z^o;U)0svB7q}VL*<+pgtp( -z$~r%bzkcY4Ka -zPasPYOcQ1AsVpAOqbv*rL%rpC(o%KF`*bAI-L+Jf_IqzaW!ug_*yi9P_dEHh0}@jX -z%R3$-HsHERAkZ1Iu%RPBxR3<;eAju_wp%m74cX4{GE@RFR+WuU`ArZA)kp(!1Oj&g -z!Tao^u!C#~9tFY_y&iZFEh)SKJt2_mF49d;ue0;_w#p7Q*6GYWE<66vP#`6WZ(8C8 -zf=Q&sbVLXgI)fHAbOw(s5W>dOaRzKTL7b>9xFI>>bwsiH_3>7QDs1e(hWZ8;h(UCEt1*QN -zc*TA{A!SeV4xJH;0@9%6Tg3TOQ{>?2N8SGeJ$7lux2{jT^@Wj6B9#j*~RmZK$x4hDqqhG_aeNCX{&vOcs8 -zQgwI`taCx%D%cfzAX5H&5H(MO9=t4jP^h^;yaOZlx%kIB9QhF9dyS3XLk6iNnv+@s -z78MMP>xReHSUqZ5SZIg2!Zo6+Kl7+d+yEd}ovAd>v6_8o3E~eEQghgti=4f?9LqVX -zDBSQvppL!D(q|<$?Dzz)1Tr9oFMurYDyZwA=m)(4{i7vT}fr}GL4B%VX*HtUR7*eD=CxQLmQ%DXSK@O~7=lIZ5y -za!xi~QE@jS*5Ex3Juw0W2sEB-KkO7|uOto=oCtzI6!hCQw+$=zAi7=o!144(4+RB= -z_JwkBX~L5L&Az7_AwKYJwMLGnpVdfA^sQ{7*(FNZA(1Fepdx7s=o3_35xR!&L%MFG -zblJkAP}49VfEEZxXdJ@WXdFJdR(7Vp-Rl(H`jvlVh^A~PVG-J)GIWoQ5dM%FG@?o5 -z&O7e;W?HOPY%|BK`>uf2s6n6v9m{0!^T2UAPh96$`!d+w@7yCe(e(xS+B+Y^q~!VK -zSc6;Zv2n@23j%o!W1faKLNt-2v&a<81p-wAc$>Qr#b2l>?eV|5DIpBf~ZK17?36HAdjm(j~7V4=?z$vK)BLiTuQF^-GD7; -z+4XHv11iTlc0>`;CxI}cSpZNa(z8J}a+xHJ#s$ -z)6xx$S{N`OiZ@KSET71DZy6qKuFbB$9^uPp4M-hPtX0qQ^jVD!{^dJa3ksh=cq-u? -zG8!fi69>^3=qfvW2hGvLF_WyPU#PJ+lsN4hwHV-m7AQEdQ57BR3YQ -zY#J{~gpHwdh$fhdf-Hc}coGOJB}ojIrgJJw=T-`T&)wjA;lqFwfdaK3r0^qt=dAbi -zM8O5g37;vvI-*#|2f?-~?EPiWDaFJ*Eg^yh*63)7p+bEpB0L9*g{W&RI+?)-?RJWF -zLw7H=@=o(0I?cS+6tka@p8}oEaC*eh_9d|o -zgWrV@0|JDLu|%NpWb;9XID35X+ky*{69Ey(#2ViRA$=XY`>pom%2E}*ldC0#U$_}_ -z@E*@MbRYvmsy-dBsog1s_02>QtkT1(J3SeEqYPy?2nB6sn<@LU@E(+vJWtxpj0`J!pfio{)FW|?ZZy{B -zJV3;FlhReJ+(Q#|?deRh-sg-}F3`u53aCJ1;XUe35X!#ZM-&M9qrIUsq<HcC&6^AICqRyfvM<75djZ#CP -zTF)2E%G)~jk`w^JW*l+xfiy?Yue0*jv(g2r%2H^K!MhE$ga`%*U+94iJ;B*aad8aE -zRO4IVOacWE@(yCV~;#{M_{LGm&=Y=Y1ovNjMVYLkuuQIG{8v@ImPgBC?N={XE^ -z-X^oJZ4`F!Al{r~85AO2{JVWlK7u?J8j-J)=0<>1&r|U@(6jJg; -z`1)dR4(s0M8Nq>8T>}=->L4A|7&@pDp*|b=#{og0@!@+Rl;E+<6srmYAq<+MaPQa# -zIt7{pq=2q?XA7F3RBE3 -zj3@1Y()^>Vt>mp_ie4j0vtOOzA_HVi4axg7o9P=(h_E1nmLOq4YfuGMDMU4+wJCFJOPNyVd1g_ldt{YW5cSQ? -zcK!{8$f0}Xa*@S!yp_MpwucITe|8}lz&kud#?_I+0OjLSMd*BlGO>FojNU@$j_`9m -z-6Z8fO09AIpyWjT&w>ZS7ajYvU0Lj3uRkGdAAq*tOL8gmIiJ9@9Q+m1P6ez|ahZP@YQR3t{Y4y20*WW)TFdPvNd6 -zg}v+I!WGQ$Hd-M2I?vhLi|{s%MvCnbzJk&}>VV5Cp}4R*?A;|FvGJ%-riD!)0gWdC -zSvt{O*poC3>Nat|y7+PunaDcuWJ0*9crd_oSRf=cg+Cw#SGPl^_#ma+dSmJF*$&T# -zE&~OQvGZakUq*8?>7bK;u+=U+uXg|5N#X@#lVOKkHt1K*o*Xem*t||>5GbhhT|1&# -z^;S^eHCU5dZ(<|=yr6`t&`6{qO<%fr++}Jg5ib$Q_W$IDJ5W=>S|em%5ZOPH;6#W- -z$U>@%JNOGqcV8rZ@XT7PK&N@>`Di#jO^8`7%F!JTed7-ZHx=U~@c$?SZ)1cTrlg7N -zaMd5OFSb8fzRL&+LonGGy7?vYJ&^%10*73_+HZX_tKab!Ve@LuAYnoZU+R!ytX6xx -z8>Su`uw}CFLgD`0zJSWCc0yFh_J%C9!PTS4hLm@~aV$xt42%T!e@W}yMLGhW -ztHt*qgUrAxkTFe|RBadu6$S)|1WW`Fu=?cG{4DI|xn|yVk(obA*M>~&+dU3Zj@VAu -zjyb?wAmm|gaKrW63gN6HLtubt2F4`gd~(>3V*+*Nm*ljO7B5Yl`;dR3HVT3Prz=f4zH5$~U&xY*t9ZSRspnrseWL0PZXuqc=KpDDotK!b332ikC;mAzh$SewjuTzTq?vFMK5e|{%Ej*FI*HT#9 -zbXLA*21Lc(jBtVQrvlAf_0K~20@@`{kXF+hx&V)_whBRvV?j@0`6y++L}ad(fLc)jc>;!x9DbmBA1qz%H4TgB8!EQO%G9vJ -zmpT+N-3ns5E_?8!huO$8*`iuGK2@fD5yfS(R1+jZX}&@{8j@+e+hVgQ+kd&s!Do`T -zSx)KrMnyZENSAA_LwTE7s2KjU(}OTtpgyDB#uuRbAjm;BXgQD_B?nZjzual(FK@8& -zf71=pdx -zP~IOxf>GPK_6B$xgcH<$;DHX(U5ll!FfcN^1kzETl8!>A_cZB+{}MUxRca{!s=BDD -zs6bX!V{#e^T7Qt47X+{;X;M5;iZoV(X{7VMPZPM4bPLX*=W2@xuODu+^9e+Rq(d&g -z;dBO(H&a~0(KH$MkX;#NW8*0#m#4YXks&ll@6&&ylil+8qr$co>cIQp6)s_kXYEkE -zP&rn$X&nZp_F0`MTK*nhNKcGlfNJWjqx$#epez3Kr7XUfw9H7-4)2q8c#24Y;#z0Q -zT3QkzYA2=fGSE&s!$uk@;X`jo9!)>5ok-!D^iM|;>D?(@Jwar9l|mO9u=9_*L`GH; -zS+K$OK|}REcPteH+5ozemSR1O0Jd+A%l#B -z^!3@bR^Da4S={k@BL2Z)rwVxw#`vNn+kH}~Qc#Rh+93dnDkFCPb -z@qJ@JtBL($|FhG0!)Z7s9hs#UFQRIEDuO@69Veg|3 -znbL!ylBtc@OYsB5x>;1GwM6g-10x3lq|XQ;)krhdNrHjWc#D~oelIlhM^?%VY`{-4 -zJfN+xf`ll-+Rh8I5z5eLH6TK$fKVN}*CFnDOl&YM4lN+M;T@3f -z!!tmzsz8<3eSNgR=}f*FX*6jvEl|tB?~MQthvsqNHso$_~k8}At5IqsX0m4FXNMXG_+1^*T2447^Z|mIRSN -z|7}>t;ou)r7(+qvo~34Cm>Z|ykr|p`ZKmT72E@1;0HIx4h;0Kh1Oj)$Xvs4+g|e=r -z-1PF4Ey8Bfb|}rjmPO)y)KMU)%T|N?YsBg_@4`OaaaN@E5hGEG2cqE4wM6g%;VI%S -z^XeqH(H;O=%_NUNSrYIMBH+IlORu2f9zt(Qo!{IPIC?De+y?+btRAP$_wv}HMFCGm -z=OjrIB2l#D@CTJVBhPWuJB!b=+D+~dHY;20dSSyt7S7&=DyXkhLs@i>k6vV7AIudK -z1C_5Mgg5Ao?++$IMKVMSBE)U;WpfcB3uS+3hXSo4mrJObkZgNMq&R&43G#4&zM6U* -zv?tW#<6Lk~%T7u?HFm#)_oYx)f9mD%iQ*k(6Vj9)ZqAMB*86qXid|O^-UkiSLKn{7 -zh8oJybgRlL)@@9mEu&tH8^#77=AuG9?lPbuOK61AqBN!R5W8B#U26cD@vP3Imv*S3tO6@r7BLl%g0x}pEZ)e5 -z9#`~`0Wkt3NuWTL7)v}+?#Ci4{Qs#n7Jfe&>2A_F9cHHsG*z-Lk$F)FG#Tv67|B5a -zTBr78iN;e?c?Zh;fV&o^^ZS>k>x~_0sN@-Rh(z<`tz;9t=eY?hQwFUltTeo0p-Vf! -zVAdJHj^v76WjtM;66<6H*sKZ?kRbkiFY)GHYV`?<+!an%n7#sFGO)!xN7pF5;;iGO+s>r_3 -zn?l%lc!iliy3)em-fZRl$y=!yvfD0N45487UWdoNdTp@qc9eZpB`>ElaA86v&$lPI -z>9yG>W2)bHJ8YrY1S$I!*FD~bs)ta~tfmOH7BP)(>Bjo5IVD!SfkXxdE^ItNqRG`rZ?vN8Pl-+-LL`K0)QrPCI -z&^_J;P7D=I2(;>IW+q7V{>r1WT1}eBz{rtBvLT|!CG(20DFTDZ+o-LHr6=`ENc;iY -zsM`9tuW6!NGU7aod$O(M3+urP<(>X45EN%psl -zsnO^*_ST}kV*QCEQJ&uL!5}#_=nRp}OOH?C-4~|^1#F|;PvoH?i8qYCm`C5wVPE~i -zP5(FLKuq-;@J=6)2Xl{%3$`e-Rz)O+N+PKJnyf;dru5mWM2Qj|*lTk(;6g=>NIb}& -z>_!TIz;}a$&L~$q3<#nHbPh1;B0gyj>1OZQ#>>`@m -z_LyU3uCZFeJzc+M$fFJ|iE1iEtQK^k?V_F@F+w~EF!D6g`Wzi8yg_G-s~HBw&_YX$ -zK%kOm#2Ie-U~Nv+BVUcdoMLX3IaWQ-HA^0KxRVHRxH>Ccx&bR+r4{|VZS-Be{*S%4 -z;L1uYqZK|#pMWrKd>rq}14jr!;FuL<&CPD__Yst&=7xxQ)& -zg^?JlCX#PG!}{CuwLqdaqE7LD)7E2+3LABviyDT`FjpHc`G?l{;X;syQgnQN{1fS& -zxJ@zD>fVVtWR-7dE#_3tt(t9J)1F5=R8NEpLoEW0yc>u_E$Op0bWv2#Z-$!st+S(g -zDw=5NxYz_9~>*3gj#2s26%%BU>Ax56Iv(B~tCmPBt$-iTO|iaEvH{^iKy -zKGb3(s-bxM+4Zbcg{G`r%5dCgu)vDCZJ$in;yEge`AFZF^u99F|f-@YQGK -zYr+kKNbRHk^V#R7cbA`GUmoDHKn5Zu=ZT5c89rEG9|1sX(4vAQj;!k-!=gDby|wUM -z)B_)WsbpDgl)0*}%pK;i$X66z>7kNH71waTb?J_3#!8kG-YBN>4gZXKcILcFjdvxXdK~DSF)5r4I?PRd)>xyS95FMdQr$a+*P*##B`Y)+b0z0Y -z70Z7s@~FdI7s36aON`ouyEnQix=r_o+4HeWP5n1yh=pn(2RxFhk$^x6b2XACU*jYr -zTyvpw`mN6}JvV-NbnCnRYv6S-N0=+j*zsC%p}Mgl_G6aqb>crEhaI# -zbI+&Q^KmOp{nk3zR}|Vtodc2b82Ue0btf8$m##jN7{NVELF0|Oz}Z&^xvB3D4%71! -zRz-Js^jU>CZN(g5E~MAN++dC{SAR>d<85fY5!UJ=zTYTZcDWiTlC={=YJKk`QO}H; -zZhB|wS@!vE&W8Wag;o$ANqD6^#XwgV#5rBe6W#{r32!s}PcB*z?<_eR_0)(N(XH-& -zR3T0~am_MZVGR%F0&`OAb^Hu>ZG?ITvJ1HEdaPvm79#UdJW@=B8n;C~_}SN{S7z*D -z{nk5#;2wUO3&RKlL4?9sFxnL$lu8&ilaikt)nm~M?7!Y&dS&{qs0Tk96jP!4?FAl( -zt`XNNiGyp$9AGZ~wpu6Hp?V{vq;S;`idYDR$A{`G9!U*tHxW8U-~8}XQBMqwHN7_b -z0PDZe#lG0j#UeHs(w$J^?sp@V3a#-2g~vX`K63@eTq+<8zBlX-%BF}kA8vBt9HV-E -z6C2&J$J01>Tm!B}T$A)T^_6SIHRIYb2Wom=Or9WyHzG-oBs5aZHmpQBgfs%l#8g-2ynEEYUVS_2@nLc7<)n?Kw-=wF&|zVp -z?h^GCQS}C~Mx2#~S3Q;?6oLrPb6yrYhn|xAfOq+f^jQB57WU?%6YRyLjZu$%8yEGj -z-tW*k+@p9JoYPG>M|rO0QH4kE3fF*Z!8H|ooI)J#M1meb*&anSWF~O==mj;(CsToE -z$|n@zAJI+!`Eb--z2A!Z&&S_JJw0kFdm(NG>pgQj8U7G^XX)?k{gr3MyOR5FNM#>w -zP8aCEDV6oxkj(n5Im_Nzc8a}4-|anPJ9{o}Mby*ZO^tf!lOfnA_8k)w(?vO!AWVU$ -z$tO)C*jICqF+TnnzLm^ei+R3br8A|p|~5)7e|3B92P6dIbb@|9Z)Lx9z -z0CI^AOGHoG^vUdIQb8~o!z0s1$7CVnRg(wT6x+x7)ykwRE{85|qufOC=O -zRMMs#NDDkuJkSNMgAIgm6dx -z@9Q& -z1B`|+0da~#9BL}?1kg_^vEU&PT3~z#T6hhR!5#P+euwYiyVyo03igG4V&6Chj)i05 -z*zVz}m^9bma3_>IsZ?UYGr-{R5->ghuVDoB_xLWh!L}+<+{sc*n7{Z?jjJV>J3t0^ -hXn*fclD{ok{vQ%9l>+=;?|c9N002ovPDHLkV1h_e>$?B| +zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Bd2>4A0#j?O_#b?JxXpil*WbwcgZBgiav~g-c(#iOt@?6rDYu8Xz{EZ;b;Xl! +z&Hw(Xo@+e$jzUyRAHU7g +zIT+fnnrfCldGoD}F7E7%f28dXzyBaxb6wt(t0UBBMRwW>xr5S)Lb+FOhNP!Ydr>t_ +zbtjw9B#ze+lZx$Y{~erUbm_(Aqsw+|dTBiUfant~`(n-eKb>!;&E3@Bm^44>ehJUw +zh4aD|_E*VKk10}iWfYpb(0RAMjPk{=!m}UEQRw%5-cVd9 +ze>7zmSDVzlJM2#0Nylt+ypDN%5~-f?L88s&r0*HyiN%>@0VV1LtFII1;2FyyVo&_sPR>`38c%l@=rCG +zsNAg{*u?0e%Gvt)qrw!6?~IS4t}MK#a#Y#L*?W%Wx!W0+mJ7a-o98x(P0lUB_SxBbz>^b@~)8_j0CdgGK5ndmU*!J*4jl|2GkQFM=HA(um|{G^#8M!OExg1Lg1LRjq&!Aefqr5Kja(V +z3BFPh&de1!n>%SAGpog3#&x1EIGA2=2uj)PnOM7dhBZ&_%E$V)cTRtsoZCNnyP@_I +z#=?M-%hFG?n)?*AczWb2MN)Dm%chx~{L}LA&Og=m<@Y3ud@E&TBN^rvcJsZvr*ZI? +z?%5Sz9O@%um!w4&S9iRGFJ>fY%m4z=_t +zXe|-+QomX8J@njyhFqSW$dZohir!axlXTs0TzK4T^X%U&*;lMbZbk(zE8TbD +zo;&T&Tl>4i!JQ-jf}n!X38CL|)&C5BXDp3*QGa#$k1WOP2MZ^;$eG?YQtR*2cqphQ +zGegb$(A9a8a$5eIi-o_fRPL}YY14C=u;JMA7sk6I&QDCW$tk(o+Z42`)8^ctnoln{ +zge(_L@!0b5lgO%7lRjooWPE*g+vj7&Z}+ISPF<%x=T9P+^7)*CPya;L+1;CaFuDHp +zlTLS|pIee=)*RlMv+rxuk!{^KYvR4k{;Qg@#ONJ3zokF-lwIT5=bL|S_$#^RR>|zf +z!fq~?MHa^Ci|gW@woQDpQ|q?eCEHmqTG%!H)lPV=Y<#H9xa6Y3kw23oYm_G@`WKn~ +zzdPx${_diZL*Kj>fA9BWJ}jo1b2BGMEB&xPkGR>cS57lmeR{m+|JnBv-AvQ(eR#;U +z=<8=&$vbldEf=LcfAXojPiFm(%d-yiPugxdZQcL5)|2L1+GrmyzW=NzrtZB~dt+cX +zMuVM=y18REYYR>@a|2;J57zJ +zFQ52)r;D3S{&Y5b2gTI4GjsO+_^xC3?z&H-owd=A=-Wm=vZvI3jR+19*;BoAa`~b+ +zr=|0v92OS#&E3A>ae34m+3f=VwjOf)t#jb5x9pxHDa?o6q$X+Xn{fD1&IRYpH-Afg +zZF99r{akbhobOe^R +zt@-Bk-z8IfpOsTZ^VIN}X{X)KN}Aov=#$g^TQS@0$Q70|~KTF52XbLqu5 +zZrMM5seJ#QRH@e|P7Z#tbp5xqjyKuoI6HaMH-Bo(IcYmNsPN33wU;g4S-3XE?&fW{ +z@bmG{roYVHehZ&YJSohV{%QTon0+b=)-3<_UOISNNOHB{MXd{^Q@po)y5zDWs3l{* +zijjhQ!U3bmQ>Xljznz@6?ob=ExtL)m*PS?#mvd!XC3l^=u;kkO)aTpv3O}^h6?}@b +z-}R#*RbJo%&`P&2-`Lkp~gGR1^+b(iKOzi=!({3RmRgQaWp6Rz`Sk5a5&+wSk&kU24A<2Z +zeOfMU;cYQ;A6P#33kuQ3qzFR*od(yf~ul&QiClfDN +zRdgR>J#@W%f69kU_tbB#IT^26JNIf<{av(Hi8(#Ta*>1t=cFS?qBTAjb$tF+Hox0x +z*5v)$j-GrUoBF(5cl&2I5ut~zTW+)R+6LAz#Jw;|kAE9~G(cKwi@~z0`4`1^aeh*< +zxMS0QZ^c9g8^6nzW%nvK&b{v*#h~~)`P2cmV5>c!&g<-(f9O`~a*^xX&cwVsaq6j` +zQ(7NSZIn?#Yc8Nnp600#fryKL9s!{b^kN3tZzGU?4SD) +z=8IOkn?9;-PTe(sf4;0{lZ%Y&L_u}S*SnXsZzxUZf1V?7vUfI1abbtif!_4Z6~RiA`grORuPL9Kb69OjfZMimU2PHl +zDeG&`m7I(36YOW3J5S&sLsYU^s~AVhoyJ?7+#(9%LA5WI^QLe9IYqhT`M+tJTpjZ- +z-0hz5&8AX6#red9hI8F-Ftso +z%tr#=TZHt42V~hb8f{=qVF)RFuXOfu#BhPmd*g9 +zgNM8YwI+%0>kFt|HTC+uyr*B&qFU9elIAvlzy0pfW4^SGDe|mtSLUBPq^zCDzu#QJ +zX5~Cg<+#Ah5cIDrnCrp}C&%Tk7sTi7 +z$nA{nh%2}8bGur1URL1HyWi_3sPsqbU35A!t%WhEpwA+F?s0=QO);0vAKW&t`6G78 +z@%v=Cs?^EN{P(04nU2mXKDx2(Pg>gfzI>gWd&PMy9xB>X0(1T>wL8VMal>Bz6950Q +zM&4D)tG&Oh%SyO9uTSJ2=DLm)4ht=_NP2tzRyWVfyI>m9_hR@$V +z=Qh1@Y?*%|A;{{PX?w5L;hXK*>|C?I-x7W{OYx>WW0FV4+rT~kFIa+lNglDoKm*8_#v*M7r5Q=s^s0=6!(cfC$|c`{**vzngU|SY*r9Pb1WcD|SgO6llH=o1L4enQm#1Ai=+Mr>zxjiZZ+dj)XUnj<<3ZB(1zTeuG|!*&=kZ)Wx&P5@^Xp8S_0^N| +zmI!QbUHABDFW<(sV)=Q6zxK?G`?P5;|DhLx-hydoSkJNL%u&gaFOmp89De@e(~}?C +zkIcGdu{!4fD{D8qgT$4@E#mL{=EP{O37p?p?%*yb$I0p<@Yqsl^WABSD>H?ctoXjS +z_xc*o>eOADqkCvuZ=QnA +z>(J-Cim^4}-dztSoK{<=+#{PB8@Eo$LLf*Y`0(`(;kzo8HJvfu4i0RKRlB)F-fsAj +zWs^DQ`^$GVvpkAk3th?bC{cg)T~y>wPb{adu#t=Bm6{S44Tie<=Rwx>y)HZTZMMoi +zy8f&&PsC5^a;0)I(}UJ6DIB5-(Q_rm?sewPo0t9ekM1Y0sFUfZ8ooMWpW{z6gs@T4y3 +zv{NDCnR-F_Z_A<-c-K41EmwWHOs{)m%^|%_GsIn1A67lZaJes~YnR{`E|%?4jc#Er +z7q+*(dopXv(ag@pOh-0c_^wb;>$tXPxAQjDCxr|$!pGfqxJIj}?Q0NlbWAVk%=i_n +zc`My=iuQ*5=JyiLialZ*pUIg0l1ZdP1Dk)tm|^QhY6G1 +z!N&HBlAes0vg50iLlztl?RA>^t>T}DkQ|T4BW?u&sWtQ8-|&?=AiUPG&2a1cuP6J| +zp5*Fu9Y1+l%37%5dZzEZCyYv*yDl%TKPhmNb&HVP)r(RJF)G$6v1*Nb5~pg4?PU~o +z=&#v$`{-o8^dGEyX8xASV6fHSqQ)@w!3V#^ns=s@e0Q))c4uN+!ogR0NSNO)BiWyS +zuV;bcibacN)%MzaT=K;S6yy=GVLn7Cyf-DQZ@QywS6% +z3Ca3>Q&^1JMfVA4Jqv!}xLG)kHFDZC5v>WK4&e)~H-BTxlJm%2K53aF^QY8Hmi%ir +zb=PilVlxxARp~zWBb>*|*`0~aO)p2Gr`OWoDkFB!1E&L492?iA`|nsCl=JB6*NF-O +zUs|SVylXi)E1_bsiq~a(Rlz?xsR@{uMd(~yXoZObnW5qFt!-IY0ujeZpuVys)Y5!8+A@D4% +z#DvFv;t$rq4L@FQ54kD)tFNx@n@c5lFW!Evq_RTkgh2M$Hc_Aw85E{kxLgL%o +ziN`-x$2$rfGq>Rkn8lK6{7Ei$`pqMkSSol@5-RR_-4<#6a4oODNor49*{7`zvTVLy +zFElIW*-q!$(A3v%)?_UMXVac~S%#2%< +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 +z(A}YE`KZ)o3T*^3WI0PdW>vLn +zR*g9agL{;18&18^6gm4Hq#r@ne +zyRJRYtE1ok+4nT;UTR}&(AScVylxd4q+xXa8KD1^0vh!e(ZQf+Jg*T|QLSRj?<9)3gqE!k(|EdK{ +z{hQ_X=u`)+*y*r`S^3+}AIGg_ehNIQ?(Mzr%(hZx*5oK=F;SkL*KNnIMc8IVMP#(^ +zJY>3Pwf*N6-gg)j!sf0tIlpmMZ3gEfe&L|v8#B7+?Al&)&_ +z<_F7q79)i={RW*6S}R^Jc)`Ax@$X{QCVPj3#izR57jN8P`_NoGHDQOe?4O%o&HlYl +z4ZD}8_s*mEz|^~|4{m1Z%JbGq;@k515pS~R{g)ns8pmRfSw7qF{#?vK4qWy?-g +z$a<(aFG_v&Cg1($pQV>Mt1SP_#i=sS`K8(Go`@S73JyCuW==V^TYvM1I+0_OUOc;5 +zs9!K=WsMRh(_KI_2*>r^_hNji9q8SkLpA% +zfwT>Km=1}4IJM;o1tv1uU|sQ$Bn?P-y8N^E~{w(T%(B +z?UQ6B@s@)G*HElA6_T<}XuP-;9d%yScCElJW2?K>LbDteL^G{UdOUmW0JG*Yb +z+{4r9ydJWFYeLU|`V!g8`|qiBBsbT5hYGESvPM#B{KD)P#b0Py*RY?xc=$={1?R(` +z+9TbKe}wOzb12w$GhZ$rcfRAj)k#e{|ED`En~SZ?k<#~U>0Madp*EwdNvGjlg%F3f +zswdC%WyMz=Rq{>9}W>q*Y}ntQAkMI2{8xJ~QL +z-_-M(M~~R(DmJlRdy&z((5Y5k$%ehFbw#$0)y#wJZ_Bz$oy+yNe)9XQV0CuSHIdEp +zCp_*8;h&d1v}svG&6@3-V?qr51MmNuaeQLX{FcH +zt}pMc-t4wF=Vt0W7By?03Zs^K;rL{(6%NS{ZD08boZ5HKU4-M;;=K!vm((kS +zG;X=I|J>rRvmd90&e6VQZ1Mea3Gaox*Dq%YeVlV6j=jEkb8jBou5Ybr_sY!99yRf@ +z5OPwPG*9E0gg1*+Eu(10o=5N84z@C|Zn0Vvx%sx%g>+rBg69)zm?R}EV;WR6IGi?z +zDEFTA*u%t1tuSRN(bG+gVT>L7FS@d|{41(ARO@;9FUd!=U1QFo +zbBk2n6&$pBgPa#cofkiI>bBLlNg@mf(_{)iHk!DfU%&a&wau4USDp&W=sUQZcWVm= +z8%O+$Mqb;4H@yoBc}|8rj(*_7By{0bM^f%?W#QGw{+a)C{A6UA({w?0lbL{8*5p3M +zzzM91TXa?SHjBAhytL#gxu>>yeXdB^2Zeick|jlyV*l)}^|NcT5tEv@e)5ZVTN%r@ +zPA!km68v#ph&$iz@)>D=|Lcq@7lf209I|cq9n-Qo*)d<1>4RQz-_9SGf+HfPYffUW +z2#B9rRo~EdglS9I{pGJc1x12Bx%~K*l+XA2-gC)=jbX9OVi#U1$X=1KS|PO1PWtC@ +zM#lvoA66?)d9d+}$Z9TTMV?uU3*O&gvtpgavZP^MMLPGa1z{T<_Num?Xj@{Qry$$% +zD(5Ln#a0upiJ6IFSDX%}&et$~X{7IdZ&6Z>)_T9^QRP`u`3?(L{ybB1uQ1Q*|9LO& +z`fd*MitWy4u3sxIDpkrex})-8+O0~aBi+YJTR4O`;*<3Pf9?CkadThigN7$g2Oe@W +z$M+?g-;0~+$X>gxHsu40m+292=^pW!j2E;t#GJ18sK0Hv^k?zvwNKWjbj2xqZjPV( +zP>DIkm-pmvli4q&eLFTNG)+@Tbj%K54b^lpUHtg2*TXM~N;hWD&Z#+5rylQolA$V* +zdjSR|IKN)S+EY9|x8T7m|EpSD3%G6MSuV>Ge{o`#tv9S7S(Zr)A +zd#3I`y{(3G_9OU|iQJV9xRBeAihIQ&RE2b8XQqv?A +zhT6rd-4oL*GxvtJ6wc9>yKI*|HI@0wfeSpX0rR{bawonC-F5I?e3~H3YX67p)LQqx +zesoCm%m=e5h2K`^Z{F_yVAki>^;U3S(?4X3ph?$}`U=B}#z#*ZrkmbLmSF!ri5 +zMp|8ry)oH@_mx@U{#`$cgl3+w`jFzZV`YWGf#L`S6_Zwb1=jHG&dYu%EWJ~e{PN>X +zzVq#R%&dJIKPRchyA>P1TrjzQ!&N<-^=1F>c|KxIo}AboWA-Ba+&mdWmm7Qh(gieD +ze2KMQ6!|qQ;DKqxKUF{3PGmG>YLD4>E5Fug_5F`xiJ!C1 +zDkM5_#lM=6xF)Q6kMuG*=?$ryJ~+MT%{=+ARb^kpsWoLzAt%1I>1;W8b@7R|Ddh(X +zbv&2y^ss!Z_k4ZF)rx7}>Z9Kkn$H~2nqcTVBP3UXQa5mw#r;ulaM*lw&&E5rZZ#F=v(Mf!~habdTPABUj%>DJOR4!_q_F5?l03 +z5428AG?lutJjb{z?~%TrUDvs_=f!q=9Dl#GcwaTA(Z-T{ +zX<<_NE-CA#HADq6Rx-8q$R$76c- +zI_JvSkt-zrZNA)W5VgQ=@!ezM3w|q{a5T%XoFJ>p9U~? +zR<3Xe3rQ}L;*6@FFjJgmgL-C=O+c4PSaar*&-?s^cT6tfKDY3BRyW6b`Mk}aIbB+o +zIP2|uSi&~ZJUHg?MH9(y6JjM(lOJoUOkck9(nLiQkN21B7f-(X>Br(j+eBX-`29ds +zFR?TIZNT0D%doAPvTVz~Mb6cT`X?9X;opLf0;;dB3P7q>8>$PEX-IXZu}t9bQj=f@L!q=GlK*sp3*t8zKAxlChf=D`cnH+juV +zlbY)+m-~3Fo5rKq+|%;q>&>lU_fq#o-uYOi%+`NNIJi>RDB!Kj%fbnsTjwhm{$?`X +z-+v;5rJ`3{Q$|sRv48EM^B-%I9aeY#P5Qt2a>e0H3pLr<>lR;OVRnww?C})z4Zi$a +zTW{0r=!Z`OpVY2fua+Z|_U~(`li)eHS-$;!oGJW%XsQqyzAo*a$fsWx%u4Llj;{OzbzN|{mV_eK4a(1@`XBU +zSTk3*1;4!2Q4;!C-`yytFff;GLHxyS5OE +zx%EHd~ytQ`E(U_J(QjB?y#}LhE)zzuh-UYIq=eF +zpH!wvrjc&I>4Wck8TcRX%fB+W;Ecm{`<={9mIh~&9Yo%rIJ$i0{V4I>KLa_Qx3x~K +ztdvgB$YK$VT>9(l%gvD?>sQ|2kl$bY(@MZr@DSsn&_nB4>#Z0bvfSjHwp}SW@Vd}p +z>4nX`QWq^|Ris#62ilP$BLS& +zdn>M4WSW{_k(TbX-8HRHk7H|o;EK1KkE)#$jZ~iYPU+0UD2ABL&p(#BaPSD6)^dxV +zbnE%%SesSPCj@Soo8(*~m2lbVtKF-By%TEs175zCx{&UDt^BK%*(aVo0e#b0COZ7j +zjX3u3fqbxpv*X8kOVbi(NH2ddQF2y7?y|@HY)5uTF)WOY>d0j_Vqq#jlyTD7taa16 +z#dp4ZnxcCs?NXV>*#pyDAJtw7R9JC3toe8Lkyj?~582%<3|sO|P&u%RebIw+TU|ad +zKGb}q_xY8|j*D^(QD;^99U_H3@GCvoFYdj5!6P}Re6P9p?}%7b>3qJ!&fvI4Zu!~o +zpKdI2W%PG_uHq@A6u9Nd2llBp%I6C&TX&z|e9QNpfSGpm+p5IFPGaZowP~$bAM6}i +z(%&DK5-)#7RG4|{deF+h-uL`!POe5S+)77sKc^N8DsrdRXS6e|RhsU-V&;ULYL6ur +zHUBw36*TOdRVA}U{mSFVF$I37{k&{V%l0>aUm6fr|LW<7&PTE-!k4DV=bh_)b?tZQ +zjjq^m{(J1amz~7V-D{INb)jVSDXnX{KJ#@K$Mr}bW0QZj$jSDd(E>&9jFyXwOqPBY +z*d28^Hk)DQC+BJRJ_sIIYNO;Y=gNM`_I^)muSoR5dCSdwy6^m6u~=bBB4g0XE{l!V +z-t<-$-<+`6MX6{u+cADFHY-QgS1KIxCu+8|FgTLynkjyZ +z`(ER>X7zyUh4u7rq{~%lmcz$I?S)m)s&= +z7aw(+UbbT48Yb;%F+lBI0ga&D8*O?ne613642-<*~>>Btzh{98)rvEblJ_EUcvc8e|h{CoPc*S)ft +zE1pP}bhvzevNlC{&-0y}+QDpVHP)EyNm}S_eIViHGY7*}B}=P#45w|JeS>}Vw@nY1 +zcc@I?eDsLh43pOOCl?l&KAPI(bA7Yxv8&m?^i#P1tX!7Xl^b9Xa$7X~&hHh6WBEf9 +zuV2man141o%jDf5yB`lFq`z7F8cgI6Uv3=saB*JHsuTMz%yzm_QPDcne%GZ#_wVIA +z{d+QcrNpM&dQm(J6Mn?CAKzD%yWvCGl-f{L{pH35iB78Lx2x}Xx%H-c@~Zn4);SAr +zuxS1ky>5H2ZB=`~#Wl+~wu%|{=Dj@jYn`QP*q%lgHa5K+8;2#8-`!V7u&%i3Iq}$v +z`Lcgvm7XzspRIZmu^#qAJih!pwRlsM@2nFCPE2&&q`2s~>gTSFnoP|nZ?9O}xm5kDx5ppG+beGK +z-%EWis=k!NMLbd?*yFL^yp1Q5D%)OejZ_!;v_eu`uB*XUY1^p{2JN?AP3UL#{Ixm%oAkF+C2-!o4+j-2OsH +z_`ipI|C>K`@cAnJ!B2hydvSjc_co19VXi7|UP>$e&RXL%ciESlt6VyTWN%~_n>}!H +z?e(xZG5?JlSN(zV=9Y6B;nqAHi&#te3|=YOW%9jD`%|NDzE|MC^4X7PXJn_I+h`$Y +z7I3ooYPEdnikUNg-hZ68kn3uJqwY(l{3LzVbHdqy29h7#X6#6sRNdhE6t|2A@nW{gRQ@ +z+~b(uvs#kv$OR|w9)|^!(vL{y{YuF7yP_Q5dvH!t-c-vl+w-R0a-};aa}@5d(vIE5 +zs2#sl^zZK6FR^?7_3z#OXv?DR3(k|@FWaehl1XF92UcClCP&8;r&62i9xuE8d~WZr +z=bzVeeoFB3p6<4a?_kf)eOX+s6D3xuP0F`D{Ok6otqzOK7WsXwzkDsZmrJ^IUbj@+ +zIfHO%y`SyZemr!V&>mD$Q};*s<=h>$FUnnxCQjEacqUS-G*7=eb*l__uI7 +z>oWE3k?wHOeYx4RBrxQBe%q{HYd0^h(wbGjcyjU4BQJZxLk?_YZn$<~A{&RXm*A-t +zI{UXDlKXn$xpM0?mwfMg9TAhdERWv#_w>YLyDLe`s}@%LzWH@cNb9mSF;C434qwcD +zSKqPMC|Ub=iF&&7d7+6O(g$Ocl}g$AObU7!7MKmclDXBj1?7S*z7m*;(=#YJ3QIksFn%4@47g-wY-TEQs3bTCO%9P05DLYrKKO_5W +z!-;T_xR(njd5B&w*kAgxFYB1sG~s(1%Rce`@2M(#Qxbf?G>pS7vu0sG(-)5)eexN- +z<*Ey-WM0fM)SSa>b;h^$TEyacGKR*>g6>+kUSGH~QB~VSyjb;VI8;sbbs2z2i;Qnv|bnN}mI4f_z$~w!7N?xOsh9 +zc-ot!zt^l=9>~?r;y%p5?AUTB!r+#u!W1tF)5(+O%Un&q$o*#jy~L{2U+Y$|+e?WA +zFZ}hERjz%V;B~Fe=IrA#33~swMXBFdSf#vVNx@Ztt_Y6S}L8?*I7^ +z9O%!}Yr5C$H^b}w7mx0{asH^1nZ%{J0gv95D^KNG`;oczxZM%EV%B3ZS_(Y-%-`^z +zTGnAApI7uyW^q-Wu=L%H$1huy$1tyRjhXz#;_KAxqo$8<8M0?p#re!rXfs#x>{l@f +zI%~GZ#j?dr@E(V``~5qg>jV4wrShv%Z!uW(O|3|;{*C&6`G4ti4= +z4EFuXKRmxtX8M%eqsvve8#Yam`JWuv@jDn8zq|^DD?;lKB72ecnb>z;4J=ItC +z$JJWD`j}Yw=IN5&W!uH)FSwAHIRBl{SJA+)Y#ZI?Ol=Fdou(+##BshjPRy!(-lX3R +zzld%x?~`Q!K9Y;Ci& +zsulBCU)vU2Oa2q6PJj9S&EKi%M|V&9o$rwU@@3-A#IBw%dGH +z+;R3r(tjR1GX65JQ>#n%R8bH`-2*STGt#jWk;Mv5j2KD3?EJ)(K-l*5Wg53MR#IKm~Qqn1oG +zu(M(7P`DV>_{Y9ZowLcHC3l1Fx5nDU`8Uk_8j~N+urNEfaE8hC3kB-JPRu=R28@MW +zPBK|qA6PEC=iuU!x2@%JK>=056Qar_YZd8a8u>_)>@l%--4~LHTltvcMn(2 +zFuDGqKz)k!%8;ak#s?mJ5Hhf1Sf9x9_4^OKZ3nk$1>QLsr>$?B| literal 6138 -zcmV-EKLg+bU~rWx{|!^oD*T%f{nv?5`3ezA2PqGemY#G_hYlTllF+8zzoN?H`d;lP`@EQe} -z0x4QrL?)M9TJ;1kL8+iJ+876Iy%&CjM;g`1^wlc-3`lc`pgbxGo=Ll$kZ6ei8*O^d -zYG};ZJzXwnoKJINinB~_BzBAun#nX)rYm%JtpK3ORFn&U -zBvx!ZtwD7uUE$IpB=e}Fe`4ET9ZOeQG>RUaKf-7<1|eb#qY}@Dh)=;G?sZUI8BDvg -zstJH5)1IuzyC%iZ+)eOCp5ICKM)wts!0=v6lbrK9S~M~|xS|!!+x&P+gFF@zY`GAZBndp*w;HW09>qLUws^rGPMyPQmwh>k%x~X0FPn# -zzHc-D+#|!VuMgmN4v2)tqq<6Udf|b}z@rJja{(eBHB@I_V%m}t9t|R$TB@yph=_Z?@@C^+BIb;~RJ3A^WDpc%R%eIb(ui^0r -zJcjgwnHm6c$&gksllO^u$65w>psEftnuO7VHb1TbAg2sNJ{^fEfH?M$VmyIuHJA=Z -z-~DU^!beqHeI{Wa`&7MB2dH|9q9yX6&QDR=a -z?X3BeuglB_O0JlT&;4$;ye?g>FkiS-VLtV1h57g|H_SVa|6$&=|9A7+FV(L%H~l;b -zhMH`N&NUFxIXviO_8ghpHe<=f;z#C{suG$!-6f%=t(DP%S|3 -z@40rNU&iF7m?VgX+Evk~-jLTzW)EL>*$gE;cU%?F+&cE4dG7i%_MveeCRIkJm0M5G -z#=WJfeJvYm@;)$IsUudl12|lRvdW}SQL78jo85e=4y5;XUoGqV)U;+aEAs_FwOY0l -zne~UfRy+sbh`N1hv6K;K@z!$=0-%8;Mj>$(qthK{%jlD_xU9qyp!CJRnH!HhC=ER6 -z*(aPxRjx^GML%3uMHG5?_~csr#vd^l$^gVsCHod -zj#Y2#_evgxww#_F9v+S; -z2awp3Qe}PWOUD3DwV?qFEhqgOaMV};YW1GW9tF|t6@`7!>vML{3V?iQ*cOq#@bqd9 -zibPQe@WAgl49?umzj0`4Rh=`>Rtu!x*-PGbNY38T>Vk^}m^9GBGam$#njQe<#}s;J -z#*z+>z(Zv{47Iz`mZR|C=2`(q0gxnz2xj`8L1W`-4YeN@4%Wy#qjay&t^qR+j0PNz -zD&@tWrSUw)=dUBpxBwQrsSV~^wdri>h7*&~w!z%9CQ-1z^E2rfXN?e%;6{m=S`jGaBJyHDMO9PxxEWFi~vv*M40eP -z1<<08j*NzdscvT)hhOsQD=KZl$#-iA5XySD`yPTvMj}1_uZ0`RJmiN}lv%Z2^R#s6EdE0Av|SF& -zOtk`ryA3s>kKJmEy2w(i<>WK=sxzsovJsQAlTnR1x^CKwAI*YBQva9tk8u_tD(hVx -zeVi%Pl_>G;P4J}wXu+C;W0A(l(%1%wa-0v9ZVl2Fo+kg}d=$d+R~JPeH0}U^nq;Th -zD32Ff@vl=$;f0w(U~TOBAKrat(wlP5A94~N(NMc8`dCR_@~5)0%hrdn-=4f7%UI(O -zSm5P67_nKt^WkYwP*6i_Fu1v_N9E-~(MK%pFWRceq%qQ90Zi~Cgsr774p3mddiBEZ -zdwR{?wGGgK1;5s00lWgyM~WyU%|iW*aj$m)6BujQI$0aH0=e)Js#EmoZ_ -zPj1_2%09Q#3IJ{^>lbf5YmFbQOZF6i@UuwmgYtG<*ojIEM>kt9{vtT#^Q$Mq(*%Edt?#5dg?}K%AeGl~}L90Dvb+>PigF#K6G7MwpM<+Ajuxf(W2k -zD*(8)thaU*mtOZYfNV|Zr6}dW1lXXVs*fc=UP=K(Wxf0WX#h2$HPSSdw-{p(K*0o1 -zV|M~XhFWrfG=TVyRcjH*hvf0J4?BAa68@cpqqJ*4f=k07T1QB^qUDqm10`rMp=lC>9Y2 -zjKJ<#Ta6gNBhZlfCGRT%5bbK^n+WU5FjeZ!hO0h3vjqSN=Sfo|(E=cGl=1l7?^Y-U -z5HIVKCmyl6oTKIBe|rKzwwH74S012cn~Il%39x|(1XipLQ)ytm-Qtc -zzo4wtMg=BE3BTaI1DP16@&h<;dfW^Cr?{M>_k=A^DG3nmYK0H-tGu<+5$;EPoAwpSi>l89@^X&sx}s)Z0j>+$9MoBgSH;H;z5Til&a=%g}JMCjYkD$*#ok7 -zGFfFQ-=X)!J7odr`COZaGhsrHRHlm5RZ@Cg{^&#c+vLT)QI(5N^09lk0`33NGd0gx -zQeG}i6gv2a2OTgafAm>h_}fXwK)i6cf*($Bv3okJXru?vJMn=m0FC+Q74xNQ6*eJS -zvi*{@@Vv75qMg%P<%&MbHL78WxgvF2HK$mrufRlhbQMx006QmYm41ub8(|o -z2M<*Aqg+q)ne$fR1k6QgF@2y-11aer8|CU1<$I_ -z&+YN|_pkClG-%h^2Z$PqwDK&HEhLKT_hQiu*`m;d)mQL~w+m5msZx(RC`Gm95IhV2 -zB^NxH&{U}uRuob4JJxAoGaR5}B&MZMfnsF8yd=D%uaTpw)wgAuQ -zw=PQ=eV(83P8#jP5Km{V-qU(`HO5ycGPOig(UTzJ!&v^vOTdtvX|QX{ExT!;HRb2BZomT$j?Xe8BRztI2{VPBDdP0Hxg -zH+_66b|&-ct0w77G}Bej&A>nn#!B`mB&M{2V@^e*T8}zhFRZ;HW%S8ecl@6;`x4Bv -zbI*>~aWhTxkR~y$Q@hyrLK;Yg$F6g)V<9<>Gt?(-Tur`b5)Y;p -z{ipBC<^ZS+B&0T%rmA&&e-|T;rKBv|p+)Z<$VR({FWnFxGUxQAvsmgH7xR}Mw{b6| -zM$O%Dwbo!dd$9s(3g6Qfz)~A$cppR`OdW8K`O;PUy&uPWLgGR*BS`I^Nl{4U8vl0r -zZ!oxkVDC@Y+32GJP}~$0d<>rhU|`fKML8l_%XZqf^Z68H7TUT~&&J9_=c5q28c?2W -zWy<;Wq+%F7bj=ebmnqK`x -zO59LuIay4MoQMPA&cqA7^5Z${5)S~fs -zEj*SxSm`JjS~GGBQkm(E^QSa$RF_+ -z7D=g3^^&*2s2S(?c3m#(_1M$BaIa{&Mg%v`OgcI*-1P#f{5&C?*udvxObNZmZJDY8 -zB&Bh#m@secGk$)430PSnq%J?fIJ*rX@fq`Q?z}2%%9PYE^Q)Y?4A1nBut^3-K_BOkBG?o}X9T})m|!2|II -zV-S^tF*Ma}o3`Lok!GBg)r!q0KlSzXZAg -z-J@%I*4d+4*{;<2&gYM|PVUi_MIPSoiL~%Na$I7Unkf`*aT;~BY}_XGj`XZE$Laz= -zOFz3N6+C~r?e1>42NtH;-`*Z~Mg0&h!VaaWJs`T(n9!{oAkxZqcfnJ7v~8E3-BA@Y -zHNm~Wkv-frJF(8k4W&J;U?i6x1&CPb*wUETy(>E^=5wuVcdb@#`=uyJfCrHWvrAgf -z}V$|Q5gF@Pn#HtEymMG@3}Cggz2<|_ -zdmerAA!-t$&l8KWl4a!Ky&knnCzkjWi5k-O*(5{DJ5u`3fG^UFb2a@=UYpK$-AUt# -zc;4s1Y?7DibeZ2y-JSCXrrZk?2 -zphm90?Z~74NW?qV^=U0p6Xb55(gw~sx;UJnArbl92u>Wkm^Q -z+1I1t;Q&E=083r#V5BsPMscXp@E6A3c6#914KD$tx@w%)?7Vbw#+&)`@Vh{SrV>4l -zB6kG*4qr`(KTHmeM~fO+UV<<3qwrgg%Fjk*uoE#wPE5&o=#go=m)51S9pJqBcF|I# -zE3`bw>xfaO9#2_-N1UqHDT&dDO8pQrg9hqnG^Z+~eL{-qVN`2MMx^n1SKI?myRJRZ -zaHW(UPrnO2Q@F)I)LX2y>Z-hi&b1%q^Ds>Gu~(ZJMVRasP){ccKQrx^2&jIA -zr9lLVC4T^qNYtt~P!Hr5S}>JFFm-I4kdk`;v+G|PIOoVlq&cN`mm<>StUI>x9}73U -zl+f;uR1OWj=9Vm~HiO3@a3VQ47)5Y!oJds~NR|-^r7K0G2r`y2bTmmkhY8gi6K+)J -zjt@;4a^ExSG6&8+y5Wh}5TRUGwgVQnnClpO&icDk7Oc;_w{J!t_BuK<@koJl0!664;?4rt5lQUb0ATc6Q85_#e8}&wF$aGgmCU(P+=30}#=)jcB -z!0H01Qb(*B-+TPF`2(hZvwF}gKjb6*vD5gEBWh(VF1sj{?F7f=i+Nv^orYFyIrTL= -zka8nHVaMXme{R-0f4`@XsjrWZ&u!#qI+7V~jn{y#u>egY!5G(P3Zv_KQgi}PxQPjrI$Bd2X-_Go69X$55etB^x0bq%KGqq45Qv@V -zYumH;+W;2&-U$LQag=KDTJ#(mEVL7%jh|qSbs9YGYeb4mXnk>_sNj`CnRuGx(aA`S -zxW;6}o6${ffg4U;-b6$UN;Rzj1gRB8GboWjY)POrr|;F2rzHWH253jrXBUq&92(jh -zEw1?EtopGVG#MK`T&d+VWCKR8&0YZ5h!8w -zy@Gj!LC=OFj4xgTUJp9P1dU2fu@;>mZy0eNsW?~^A^d5JHWY-nqUd8>0R*HU$rlp6 -zj4)!*qKu~rk>JLS8-D^zcdv}0PC80X<5g>$g5I<9}E*jwf2Z~Z_plOB!kpKVy -M07*qoM6N<$f_40zO#lD@ +zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Bd2>4A0#j?ON$M +z|Em16=mHBvsaAJHRLesqgCr3}k3XDE3r;Xra{f}h%`S1Nyw7;XHytBB?Wk0lefslX +zsz3hlSG~u-E_vU|4~7{x?)_;y{B7Ow>yN5mT;9%q!G7OH?tSKtFU}ui+RzXlH^Zdh +z!!!R23Y$J;B)!(6Y#zt=khesT$Vv1{^A +zo;I%}pq)>)=JDgle<#K*dN(uu$$^3h5z$3bjG{Ny^%)I5zF4x<>U+2I;k`ZbdpH&t +z+H5SIQ+Q)v4THkw4^pf%m^7oJT-2t=M15t^cU-x^=#~U~?q2b_7I&$uC%;_P`orT< +z+_At$i*ugm?l}`OI{r)NR-MbrICH}`Rxe|Ye{oXRW}o~gpG_=Px=bbnIR0gqxx8+A +zZu8>02?A4j_}6+ZF>BNhl2!`(>Ue3DX1vRs6T6L)T?$_HT;fWX&{Qg%z@fBSA=9q? +zlIWj?xb^&D3Zb4eZ%Hs5{NNE{(Gfbkj8Ue$L^PwK=5sB_bCw1*wn=p#()$-?J^sfr +zam6_&m9ieeStm`xmT8xiuVq+pGGq#Oy-HY)&05D&&De*R6jeU2SX`fUJ6_g1Jj$d? +zZjSw-3==lRB<{sR=i58{4=TPZ4TzQW*}ZucXM@`1d23GWRy%s(j_(JzdG|fPxqTPy +zJ@6sUd-9ymR#7HKHaixHp1u92!mHUvOwKFv;IS=#1kWwk@oiK89)H1pU+Mx@7b}0Q +zuSfHWQY-uR^|3j;{oX6Vpy=~2>2u)UwwVtWp3CYed@(&gn_-9Bhe<4f4H@ff7w#7p +zxR@KXrtrpfYZHc;HHq=HG82uq3MvGx-T7={d%rS6f8vjQ`6di^ln-xM&;OvDucPJI +z;$2>)RSz3a9azk{znD=;-ZUgVF6q`JAvs>9xlyauHgt4!7&NcUXl85JWRy~~vyoAN +zOZ%YWquA_BUgO{uc6&eY@-kSaNbIt<*3!}nc@uSdTVMP7hacH(+P*Z+lwv44IU&qo +z^7qb)<56rC3s&(N&uY2YY-YcXQDHfcvz=_GW`o7I2}w4Mxu!Gt-0%Obk~W*Kd6{8C +z`J2XSmt_9GD{!ZWs$<~MBmL!dTLw4 +zzgFc-_JswG9f=>V1xhiznzZl!@4bOD6Me`&P%Wm?h+Lp(NUbtiRZ9(O`U&h}S +z7RsrGx-FX;?SKB*-lZ#Rb)~aD*%?HyR1Vw5Y!TDE>C_Vcz}4L6XWy+^$+zTtS-kG+ +z-&eMznP`7zb=VrUO?c+l_B~-X><>D2)n;v+BAEX1S}`Bff<_fL#X`}=mu1sWznHvn +z$C@KT3%(rPKU2EjMuXSp3zRLP-?U7{yeAHd?Qy%-OHEqAcN0Uugd8?_P4P+vd!Zm6Pk!c(O-)5yunncQ#y8r;9d- +zm|yu|b@chVQ0Xa~v_+r!vag%<|6}4#%i5popFKIV`B~ffe?`F$llxQV9)JEQ`@>e# +zPPd@tTTFMaU!X5?a<9PDucpoJYxex|yLFL$!i`BmskN`Xk2CmhUC79ztNvHI;7SBT +z*4KHb#?J7@P7W@LrVH9jB4 +zz2yE)?|Wq)=k8s6)zr;8!{ovtV|kXzv*Z|_9v7)fKQ@W4?|^fvEzj27m!>WL@Zeb# +zqdVgSm3EG_U-KN3A7}Dzl^5f?cEV)UQ*kt;&o*tdQ^rOwu=j)Zv?qCqx +zy^{A?^wyU-FWZDCU)*-^&Stg16W#r~GZy*ePZ7JtbnI-Z?JC{&2bzE0&04$SabHHu +z^#>d-mqOE5@7K`h;pOdJlbIao{`l_&v+w;`j2f#}|4y4%DC)pB^;P$0eMSaJmitdV +zI`v~kcGVwPA(qf^Qak%Zv}+tQQvb_w}^3 +zuFOl9YLEZ)N?R-U;K}lA4uMlu+keY7xw|Q9-7>x!v~<&*Kc6dKaDLRZRSGDbmfOO{ +z&i?x6i$%-4=6y-dWo%iv!uC8fLyB13;;bOaRffkJ<+58(TzVm6JL{JP-0-UoAcI;f^{`9HiMR%RI`nOh{SYmi7fzjuKa?9GK +z`g{Qid#k=4dS6|2_U=~R3k|IMuca{VVY=wvrJ-`x>2FWr`f^5LiR>Fz8!mUt)d{tT +zmE9NT^4-eVJNb0{#CF@J*4ouD0TgL2=GHnt2dHaoLA|vL+{+l(c@{E)< +z$6qA|x!K3eY8Tf?Melq1WYdHR6EaLhEFHdS893i+GM>%Y(ETJJa{jc^Ls||IfgTJM +zB~seI94i~{-6~7touOd%Cx`Kgf8OnkQ+C@gb1~#;zZTE8&F+<7p#u>&gvU49W}FY=hijklwAsC&Nh;yHWdz<~p9Gx~4c(r0UE;#d%&&9GzZn(bwx)8oFIH01ccSgP^#Aj^#f +z3s?24I>dP~x}@&?!;r~fy3q8J$<*x<$pQ`sSpt&FnOxeUiW*EBe)NTA3!Z3y(Z$8V +zk?|<4A>i6-W(D2_vzHspDr7mVVc2j-u5m%xuTu4+X}uAlnx{kuJ1jAu9$2r?W>z3ZaQC@}SFpNY`Ln$HpqawoN>?wU9wJm8-$ +z!=|Z+6!J|vE95gWuHC%r#o%%}UR5eJV{y-&w@Y_N%4>)Ta`YT{7ZKenaX|UPgrBPK +zwHXE8W<8zF@%ofO=&Q4BtL<>QY#@53}$1@vD}R+rnjbI#(Y +zPwK0g9JWm_eiJUYAa!=v^k&WtjT|gtYxsgQ6RvHje|G)yRF;nEUsdJyFIaQMjaAK^ +zbN_?A%rhmHePXuAue!tiZ~2Zni@&$%`fG9uyv=Im|MbM9Ep_Lm_x!UrzS%68W7#ga +zeA>rmvAncJr5=e}o;lxNd49?}FJ=~J+k}7paX9yKvTd;yz}Z~MN& +zcN=&DGcG<0>hE?Esa@h9|Gp-$OhU)NHE{9G^@|oAI(=>1Jcld^Q#qsk6}k)oGK=PL +zm*!?0uhRG2W;Q>DTkMUg;LcTMVvBNK8>b$xU{Gk@Cb#2}W4rd0RnH1qcdjn$b!Sbx +z$-JrDC^A*^{=)A^tWz0Z{EV61Zk*`UAF{0LN@!43?7tVzzivM{x;JoYxBsV&)jOEp +z{=aB!dOjj3PS01w>PI`ftbuC%m&n*3w>^(J>?zpMB=1+SvD#{N#uE1P)*l;n7`t3cuQ?#mao8_)pSCF5t%c0Xew;eeuKwJg +zfnk$IcK6-n;=;ut?EE2L7RUI1nfW>FACp#awnHNpHz6!LrFf% +z@)rv}7C#kzHr0BaC+qoD=g+_W`2G9(PxdAm*Ke|SNOf)bq%%oZrR(+gq>DT^7hPz% +z8vdbsJ9l8=%AkHL4cDzt1#GzgtBTuPcr!KLr{%xkFZ+FQZ;E~x`cL_MXyd{)na9~D +z{fux{+xw$2Hdxn8TCn$yVCjc^%Re{N|0q5YJHdWo@v=_a3*1Y-9Oa+(spyBJc8Okr +z#N1OC<}5etR16YQX<)wJda>*9hX-5F|NF73<@`kbe-oCje`eyawP-=pUyYEj8$_2a +zvvq&6tdJpO);S$Vr&)z!QZ@WK+JzD_^R_XZf3aQ9Te5cE{EvQ8Zx0Fhr?0(txvIkS +zSh$AKR+r$5lNBBvj`(-N`@n=bnOkS~_9q(J+ikyfq2S;j=8A^>37cy!w$EzU&8$(B +zS?0iS^+~7glOy?(A3puliDX>#ibr+d8veUSvkzyp*mT%2I9Q#nDgK>uCwt?sRg5-U +zoFX(y|<$vaz{1!U1x%hnF^+IFc&lA)P +z*9Pyt@!d(vqxJZ@;`Pajmc7PT)N^C}?ZpdCTW@dz!k{tNEp>_1`H@o@dYR(_^y#?ztcDk{cpYyS@(!cYS +zY2_aq#W^<)JWuiA+3`xKyMFI(efIBeD|Q`P@%-_pE2-tmN^7GY^B${Mc8&SDT=e>> +zZ;LW6vbWzqX8Uko`@2vD|5%?muY=4V*^&jOHXE8;&7HmNLCD0kIa9B8omIF0`t@tB +z_xB}=bN2`xXL6#i_1x +z_uhAI`CwZVlQeynrbup~ROyzSJ8ED1zN|4m{))-L+kUs2s7?LOx9{?Hu!}9bdH+T4{w#r^?C?23Kv#oj&hwps2Cw!Mz72+TJm--gxdf?^4^f +z2`ba&Svw+L-nca5#$Ih}t!Kq+bIR9-<^5i&;n~1Gk$tmw)cL2$M@>$PcQOd_#;#Tp +zG%kMo%m4oT!!WWnlDz%)qYaU +z5?XX#xO?NI)F%)3%5C*hpY}tfQ|i*Un<~zyt%H7@Z_vNgQ*8RzFK+g^^1GgoJ1g!z +zKbSLV`m2(8ic8*k`=t9QUg0%0ioYV##{cYB<8!lp9T`iezWt{DYO&gL8`T+4mzm7# +zSm3s9|JxIb|9Kp-zVg}=PY+QmQ}dvhO7P3srmol)sb&^-zB;2H2uRT +zs>U`em$h?p>7?}76Gyk~K0KW#&i0e5p-5Y_;nw#*w{JhrdsfeO?bNsbzgpS6GN_m| +z;h$!zD`(ox>x&;gWN@ru@Q!_*u*9Uxt#HMq58}t}l~p~s$*a$}WLMUl>u>gy6ds%X +z^Ye$@4lT=sZ2OeTS^n_F`*zs-@b$TOOGU;t>3>@MA-ez6dAF1e!iKJXJ|`<)Ow8Op +z{o2w^vJdwBD!Ul8M0<B@8`A+-f`67O7xm7uU748Ik#2*>1P9S{JjOv)UBcn`*u2?5VZOzxU0VVLOR&!kG|OzJD1Xjw>(G +z7L?)K)AvX7Y_v!A!7X1^x?GodP0-l7RjK}h;=^i*s_x$@DcXRqmrdcyjZ#(b* +z;)ZOyWogUt#AgjDd7 +z!nZMtZJY60qWavg-N9mO&hOct?Ob3l +zGB2y&Ty;U){)zJ6jhBD)D`%zZ=>zbr850BmkKj$OA2x~Y}`I=SFhbQ$p(Rrxi7MBZ~lIp +zLG0H(P9}rGDOn$*zQ{=FY!P16J3pbXRLbUEwo8|HMs4Au6%VF5&8(R9_~J>A-W|tM +zj?BL3o7X7q7kkgeg~!WuEd$F+QCDM)i4HlQ3rv>3zdB{PD&q{c4EHPP;{7HvQn#e^ +z92P%WdQhcoo9hfF-3G4XysFA_XInf{Q*KX4Vi4Dyrm#6gN8E0{f}zlyiw&(xJ{AvD +z6Ph-@6l#m;FIqJSK)hTO~tnlJS4_Fsx+uw~bsVYMq!;OB~83_T)=3q7i&{Z{b{ +zY9xNy+f>=&c)m@kM?a1^j^FASORtyjMzOgH`4WY4D=i{K6#ry)n~Ah+U-Tk5hLL57 +z{7G@4y*&m=7Z&v_=bZT9Sg&+FlXu1I%X_QK8v;}pT742!Xekk}58j|B_255yS5WqX +U%r@qU3=9kmp00i_>zopr0CoJGO#lD@ diff --git a/chrome/android/java/res_chromium_base/mipmap-xxhdpi/ic_launcher.png b/chrome/android/java/res_chromium_base/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..20ce7135b94b59347d9fbe549a1a76e28e1d8158 GIT binary patch literal 10188 -zcmaiaWmFtZ&@L?Q5Zqau1ZUA8i$ib-PO!yUAV_d`4Hh)GLvV*6!QEYgI|N%?FYouA -z`}f`-Gjsa%Om$6n)l*eZcZ904EEYN$IvgAvmb{#l`r9+^zY7)l?Y=Lw)eHy6lqfGH -z{@LB|Una^A0`r?buh4RT+Q4_82?z+05b<9$N0)fZtz&*wR+^02>hv6usVxwyU1ADa -z($k64|B{l%jV>9)#231~!n}OB^_}axn$@N(VwwXl2zK@a99EW9x*fMau4#)j8yvE= -z7dBlbuTATFDmeUq8kcsoq?OwAGrZzQ1*PI72>p3l&`_(RvP5Nv@nsVH{{9-%ts!X# -z$--P)xpUNo@X4vl++0^{8~?86n`n3lUb`+tbDLa)fj?_;a?+@a^<3mU$P`x@KM2U! -zRhC0?*L5q<&#KL53W*$u){Sx4i@-#??nPR{G~oxyXa<^wm7$F -zkp*siZEVjYC1Q2NLW>joll7bc#qZR(>q*+>P-6x@_RZbiejMqoUgqZ^R39rOMPW&_ -zS&vn9YwqOhs%5Nvx!>}%gfW<#>e~H0+&O!#rBb#S@dakJ?}9PH>xOE3v@v_H*W6YN -zM6#?tGZxL&l17ew#d_byR0cgHZs)6YKx5!rswSmA#a$Q~q1LQ1<1T3&ONGsLMNDwj -z#$F10a%L#o5umfgs+t1CK-H=SRTW>Nb>_eQ7069*i;F+vHn=t87svIDMhy?u#fj5c -zv<#LgmyjbRvvs^)zKc4}_^n@(s--~6Q#TQ%@IB-Vjie&?Nc8HDCjXxp5qX+(J*#|KP>2!|7naf2!3UJZm`+KV<{>qaos$6`&gS1Ou(eO9a<%&z -z^WM=&g0Br!6hAHlnjP5B@qR81Q#2N%qz2A(~MX1RUp1efcE? -zw$A;Gj|bn50RQE6`n5E5?e3G0ZSw~|9;B;3=Nj)>bC#Kjl;|1f;RK_*v}kh5!~HA0 -zHlc(X1L!4u=pk0LK)xyRWw?IRWr48SAR$*$BOd)oy`b;Z&m)RSpE_&Occ -z`@5tQXzqa=b!w2Cgchk03nD@e#9b)T!R0zZy7(uyfHH|(5Vf^gXr)GUwDWFT&T2Ic -zGd~CVFl6vkY!%4;n^OFhIO(Sl{sp2T{8jB>@|xG89&f$?XSg6#L=efsy&dYo(K7v; -zc1d)}MLo}#qerwJ4iFs~hY!gNA3vG-7)CsuuCx6P43)hgAkAVzebxAEYRo&BgmnA- -zv=0<3L#G9s7>4ucKG@6)4L_TlGo8-+P{!GSL342qcT1(IoaCQXAr9|Ik+sWzWKD?P_dOYRf~k|>3`-ByO$1>GT(zW0 -zJL1a`-?9>=DRUHddc1B#G$f`?IAkP-HFS+3aanvXemK4~P7t)sguJ6eV)KEr|FQ7e -zDw~3jY16U8Za(*#zXVV9Y8jN+mt!Ts|LYI3y>}TpHf@{aFY6tQ({Onlu+0bg$lp%#0; -z7Et(&XxwggzFKI3SSxG?+a>r3^SbuEK6A~Y5hB45BWcclbdF5}3$|x=l`+)Xy8>Pz -zdFwCo=HJl67)DQZyD$!DTmM7HSNTI<1=r(&Xq1WVHZ)i^*7<=#KL%; -z`5*HJiD)sDo^y4OeeshGk0W<0FUKS^`2Tr}?(#P8LOVgkg^K$zTFP+Wt`m)d`{x%{!0x(Cs -zxv|~mmp@c0Z(DP6`XpE{hTX@ZF#kSYY7vnm -zl8CNt+ObWAJ>xLt_2=n=uc0+&z4}kY0<@k;201mC5Sqn6v9M^zf8O=WRw;s;=1~S> -zD<8fckV4liWhF_p8@KJIzGw5zRW*Or0#~LP4U1$W&pq|;yfBChqE{`1nDjAP@dhyd -z&=F7rr*oDch$~420c)faBK#b_e-Gs$X*|~+%a6x?Uvn+f)O*sKP-9c9#_fBNg#BVw -zgx0QDA6D}~gpDGbe>J;qYi}2r?4QW^@FRX-uzZLuzOR#TMDDJ+!-#mO^J^um{=&xU -z#52iXprO~IoU7G?F9@XeBdlBG2zIq>5CkB@eDfpGMN5)e^vFJJ3sUU!Ryuuy(D_uJ -z?AKi9v=>OtkyT@h+lYfNq%;sv{g4yc%@ARDETPUnl8?eE|I$cbclJAYydH>L&Q1jhpbb_G27Y1k*v-kMDivFdIWZ%YOu!6B -z29O<8guIFW1Trua{uXI;Dq}l>#xC8>om?K!*!^d^+==q2jhe6U3`ep>lHrXT5ew#g6Pm(}6zkszDMz&Lb-Y($&Bi#HWJI91+rY_%^;QRJd$g_r|Lxo!eQ2MNP&eVnfo* -zd!pd1=Mr!E@4i;ZEX_IkT>(DRUBN%AWWm*jbINP*-!3XM&|MVjm8@2x?KSOCK1y6# -z;4J(%v|3q_NtzKXm7RF}ey=2&*nwNBSTQ#9r$?nkqGw -zMA~;H%p{*52!3No$Df~?&%0lb#OXnW?aH{I`L}|&q)`BQn{%Q*cw8dO4;Pqr5E2Kn -z#S!3O?fLqX6U);)3p3jk#mDgv6*8U#N}*rH;%SP(lBh9Tt>^=J0aX5@JSa<0XWt0L -zJ9gG@>O?p!i}|9KRSq_C;9CiB&=#5;jvi|&!{Rre2m&!A2~Q-34WS0;W};R;=Bs49 -z?z(07{M}d7NPMGlM-nsif2B#{nx9fHStjpSqLOmW1s~V!6hn=In2(*;i7sY)I(@>+ -z_pr{0{4S^)&ok~3%|IsSmoZrFGTpr!@efryE8ZOX;=2~z)^4<+8og&B!_>}gRUdO{Kz3l)Y~bVq>p8NBP~ -z(#K4@fOKP}y#AnH2Hn*iqMB=l#M9sLR9H(*2<3%s48Xd$aZT!oX5FlkcxsB!0qajF -zGK|gMC7A#;h8BYwuO<`aG`v*njsU#kNv%^>tqyC(PhHh)(oRcIztPH~f6TFDXseWA -zetGrP_34vM(Go2T6sX*flTvQkCv|A -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 -z3RS=^W*AQ#jmHtzTJlj=wwB5hjo -zqwa8N`akkc%x&ls1Hwdg))UqSp4Dwy7*3|l<~_G!Qnk -z7^=p@l6E4Kx+I>x+mGXFws~fG!jgR@pdu#JT`Om4Zz~Vm5b&A`k+}RY3LF$*6`vY- -zTFLwDtx&eJ^q=3I)F5{Xb8b@vL3`i9a9pV98iQwHpgjoIkYfH}u5VB^-zhhdwB;*7 -za=iXxOYqM6F9fG`)6Uh7KUK&s`^vmoh1MVQRHrbJ(-A~$H$H@P$b=qnkF&YudUyDf -zZvxFmi-ItqfG?yvA@49`QA?@?60FsUaDP)bmafEar7c%?TA#xB*6wSu8{5osm?zk -z8raB2kF?BgG|m~kA;_~8{m6OrI%GJM>ZodjWzd;#f%=|`dj@D7){Vs7Fc!mm -zVVWu#cRwFh8Q`O?Ao+lnXg-C6b+B{6X1hn0if8wq>>wW(%CqFeuk8QguJyW!xiHKb -zSBrViSuW!VQA-@e+3@0&{PR6bt-)+e!gaJX#JRm0;ZX*9TEhte&%7Z50=XjCfm=bJ -zwIy+J@)JENP06DhQ(}#(B~2Q)U?K$c#4IB)W+EWtL-M;$rv^|L?RTX!w|O)mRra%oi9Q^1mDuAG}Hua&yp6 -zx*!U{Znjtc5YnEi+9`TeyP>MST9!^Jk@57%fTCj4ue#hVM-DIc*_5I$hSZ{NU(l)D -zJE_y&I~FmIB=NM{G^dqWc^G;trr<;?EfXcUEg;W&T&12Q(}fWa<}L|;*Cg2OLIWJ3 -zz&j>SR{bd{CiKsGixWThA7`N!N4NbD%Au!MLjtLsMV+FJD^I4=OQrk1G6;FooDRVK -zISP(D)96$jS4XQ7?9U+`ark|Do~@gU*{vcpd3S?g%)b5Q-ieHRXs%B9DD@VQC0WIR -z@P2z#cJCgr7E8HXIq2687H4{p0B+i@|LNeK25=9hjGv>_uu~OJvBEzIrm!~?@e!Nb -z{Luz_V4I)aAc?wsr8*4ssiz!=O(CSCj|yE3GQ%F)ewd^k3ABR8Gq;k-_dItUUGmyD -z2kwI5et&`ig$xl4F|I$pV`{OJQlqkI@V~U%49sOAW7j|bZRovmRBGi0WFxMFs|_9T}|JAyt`q5?)#38sUbiunhV9aluswt(i^KShaM8kX?C+< -zWEr`&Q4TQYn~=5qhVhA7>EL60@l!Ky3%nbL2xc9TUtO9fLGlUv<73tcPtA9vTgQC> -zHVW)Se3I;HB5~;a>x!eYa8rvI;n3h1&;#csbl>;byUGC5#BIxIV8i=oPVq21xl<;6 -z&Xb5<+z0r^aj4s&O65;Tf$IZlGRO6uW$(vH+=2IgrQOetrvx~zpZAWf|4b;VYGDsp -zM%;dQP~;dm8JW1rd_O16JSTq7RD1sI;6x9HZSscPh`Hu1pGS|RODi%3)c*MSsD@q3 -zAM%-e+|qRs$ncPmiS`UwaTS&A(aN&BL?p33jYYm$+VySlbDDB#+Iq6K7o!p>VfT&u?G+-Wtq*Y}p})?c=H0Po$(rqw;dEkTLr*aC&at;6^i)Rb<4b% -zvuH>rs>+N>0T+od!TvPCelOI_r%DqJ3s|oud3o^yIOP6bI3hzYAJK^G~uiRP3-Y-Bb7a6#1P#*2vT{NMc~K?<$NMqF&+=pdZN^Y$7OR?wz{|nuu~;;pmw(ck~G8GB(~K -zospVsPJcCeU)&F>-g_;!K|!hktd;%!>cumH9l8F!V(`prH6Wo+R#Ei6MGmtAaL&8%60I8A};)O{;H0ZWr0*?Vbf+9H!HfuT$h}SwDJ4`>`F1N~)B$4R$Cp -zsL3Nzc9p>g=NFs**WRBt$7v -zbJ~XCsjs@NsphP|1>6e6ec0ABPRz%?8AyH{G{HMV?23mKweA+Ra8AQqvh^Lz($Qu -z*+HgN-oj3>qcV{6MM>4uXESBMvC@sU#}Mfv6Fu8aD&+aQCUec(7BDaBK`j}+s;?vc -z%nu_lpQ#*j(erCL_F$@mq>bvJQERVLKb#uwknqb9DB5Vr*2Oj@2Y*J|Buo<*?Er!V -zc;KueLLHPrB;2h;GN+!e4T}AC?m@M7eUiR7UiU34@OS5We~wLd3-b_E`c%?-E1y_< -zJesp7=Oed%@f4DI^Vf8*vx$5YMh`^8XyKswjDb62A63SjFWI4r%~oDIBI`Zz0H(=| -z>Ysu8`w@1jc8GWwN^jVd=MN41qPbc($&~%_PDV9ymiXB4b(I5$?(4$11(PN-Q!HB? -zMAoSVXq1jMp2+CRlSH!DSSEnGRCfqYUiB9AbnnPOVT!wM=S;p2b+-y+=1|6+ -zl*Pr>?~1*Q_SCaGQJ)QTFGbCmZ5y4PVPkx!~zT;(e=YW^?#2Z8W@_g -zz1)|KiZ*^feqEd^z7Sky7oa{3$iCR3DH4($W(@iY?(EbwTMa{;k$Vq$ -z#-4+i)55SDQROk5G~XOaj#z41>eMPZH0@jvG -zFLPE8e(5dgh6;yJiZBtE!ExcgadUgd`eV>Pvcdv6+YSwa=ZzLqg -zfQF{4PPYJ@wI0hP%$J5$Ch9-Jx4P7EP%|M{m|$yIf;fj{ST9dCDLi{#)@_T9@vd%?uV@UPPc-qr!*DmbR!j0qz{a1?2BM4PFq=1cr9 -zBk6P*1>u(v>x8V+l9(KP?OE+FS-|6w0{$STnLU@~BjX; -z_R2JFAN|WCuUWhv@T={De3SLYFZb`Y1vFadvAygG^cm8DX`l!iGmHG1X -zm*X$|&#WsAwk4+eSmZeB6LYPPxpy$sh3s`txC-N)Jh0T028MgtS0l7Zz&6PBNGC|| -zOX^mD$GE#iZZo^r0~($MGRpdzOf!jfHy$Zsc{Koyy~?4X_q)6a7qRjm -zxjB5ENc&me{oae$(TaNI;?IvJ9Tr)gE4aV7gYC2`>D>&rZC2oLQ)N_-U+-j4EMO=| -zzUg}A`s}3{!Nwt&nRL^pqu_3`Yrg;shc}IPd_DM -zx$=W@hRw6}Ydo#w=FW2PR8#b#a1t4Bj$Yf5J<9kLKC<$GES$`kIz9_sI -z*Uf)KK#;61nLWS1F%mpiTq-(xJWj$%6g?!)PWL93t`}l2jHe+7GAsW@5d$+5Y+wZ0 -zT9@I#T6vJ8ks#fRsojpz?s@#MUaMhL6+WdgNPkaFcSJ)PQ$~@6{Qv9tTZP2RD?*P! -XjKL6+!Qk5|Jve!3WvNOD4A0#j?OGO>@O>dOP&Af5- +zM%p}wZU49JT_h={Q^?CX!T!L!zmsx=_XqztJoTx5poZe_qgTIww?2Jj!!2`T(V(+S +zCD}D6XWj1)DBrQ)?BFJ~b^m@os!IQ?nwk`uJNxC6_y0G^`K6t%Q=GT=sRMV%=98Na +zhw~iydawL;jP1OP5Vd7jH%WG#E#TGKqrNKVrTAX6P5GRvW;ZuT%D)r1e)_b0=*ASI +z72D3v_6C*oS^U5kaY_Dq=g$|&Z0 +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 +zSswVm*s#mz!>Pcq2 +zDdKfKX0r8Z$13LAhD|(jSdghm+}+4`C#%c;WKpimX6dSDR4zZrv^casbDz9yTlmj; +z&I$r)thPUvUReF1^sW2m+;1l`EzYr?$O}L7>7?xkQGQ*{6Ve);`Rh&h2zx(vIiRzl +ztJ$~2`c1=@2h-VgH%#pfdUX1~sE$+r +zGKenFZ*2JWaM!-T+bklg9mx|^qZUtzY&|q>Zd_~RlIJG!QDIx|zjiWWc1o6fyeqVF +z|Fko2o^eYrz4S-c(Z0IZZ0-f;Ld!%=mWqSN%_L8#9hllJ_rl%o^Xi9-HXaF7k?Nh1fBJNz?NuMlB9B9to1^RP8(rPLP9C2l{%&wM&$EEyc_%fV?O +zGS|2LVxA>?=6vo6<$7OE-k&gWUcBT4^TcH*oxT4QF|fDJVwmL0zi;Z{iBI)rymM?n +znlt@Q^&;jt_Ii7!x)+oBZ9f_0&Dkg2yh-Lzl4qX%staxkohz;~88zLOYkbPnZajfM +zAtpaIVaAJ;u<4OyyZk?`2>bVb$Aa|>lBM^Yj4)36`Bk +zEs}EiB!1<`^9hDKvi@rR;dTEnA}1~yd2fy8-aTvDA6QghY<2pieMa$wg^uIJ<9}{1 +z3aRm4_2ecf-@Vz$w%^9!u}pK$5uwlgC34E!TCRLHd6vw3(r59@g>}sv%-$J^xu*XY +znKm){#?F=}_g6C)-A~$oXWxPKY$ebAOy@1lv|bc&k%w&-vu*YR?bdy6Z7+<@>6S07 +z+1DWbP%-7qvS#iardY{{Rv~V8jujg$CS?YR3G9~Nw(|DGM>B7&J+y%PhLvi8{Dnm>->u8|Q^{IWqDfugH&E|)e%SNS}P +z;oO(GP5jVj&A6X73hUh}>T3hs6n{rrN*@oiTP)+0*;2gZ;oi!5{#Az#%x|tOk$pdH +za)I94316cQi5qgKs@+*``a$#4L{W|v`Hs4R6MP#MS0-gT=&IXnR#FgOcw|mTcT7~+ +zsY#80O>H6#2tOYhZujpSt|MApI;k%a#O-{Ww +zxRVfRa>}f!qZKj+Wya_~m2F4!Y~^Md%R{>V&08f8uitc0g(LUm`lFjP_q*7ho7L60 +zYoaRTKI8uEC)2%t*{ADH)bDk0 +zRR86q_%Qqafqh1on2b(NKlg!sqn_OIi#m*dET`-35Hk}`%{maSSjm_A{u`@ZNrBwU +zrrIsC=RRL#p2c;>>f;HG&%gFeNu2r0Vwc0YxsRqvKdX9LSh8sE!{a|%7^1P;k4@&u05hd(o38&MH>&|7&|*_qt|%3{PVDqoU&vYGyB3eo9Ze +zXs*hFKeka5v>CUZ%PD{9zixK&lCoct)AYaoNIznILEyMn{mMgs3*U+GmxVlgoq6EA +zPe2&o@$}B`+P{4CkH0y6{@YxwtF9VX9e=8C`cV4fO%%WGg>TaF8XF5*8o0WYXD&-( +z+B9YM??Apy=B**p=hDk=D60ONG?()))9o@l_rqcHazC+1WWMWX`*!nb-PZb|izVA1 +z{mIO;l$*Kc?~10qGRB)6Zt-;U-+uE=nfI2$2FWOg(~~-VzL>Nec(a3rt={>`!R;yX +zThha?WjJUhZTz6v*kE^ReJj(ZkLqD^uFE#Y*&Hf5yt_{L$VQ&Gy7OCK?mahS{vS!n +zS7$su{wJT!Tjelo;gO5eSL7{Ky3w&v>599ibw +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 -zpqYHpj1TuxXK0sipRbB9WKiH*^`0!x&b9 -zk`(u69rq*;NO8fTrsY|D?n$KO8NB~a7k_S})DX?)+IjgTxsM`&PLBivodI>YZitrm$(Dr}e6E9&@2H6H8GQ;jANsH@F!=gBT)D -zza1{Vi|$C=oe-N((4Bi5rRS~Z+j+fNGNUPzsNdEXOoY<34TLsABQhia9;E&(PoU1z -zYQ6&eo6vxMULwJY$qo=&BV9#^)ge#RhDQ9J%RX4uRoJ#r1+{c>Q8ZDD#Ok+r@;*V3 -z#23ob-3KFTe;x=bO||i+jjCuDSG{) -zts(z7rF`ZBsknWkKU+}06b39Idxtt5hpq8yQYV*aiMsjeD7mf -zCYz+z9Ie4aK^f96Rf#A!kZ47?`acr6Bk2xB3j&?(LzL;j3)nODh7A-Ds4$Y9pk_ue -zl6zf8ZGmWk^Jqf4L`#NH&|#sCpD<_hoDj*4n*?)lh%&&9XR~-yB9e{_eqq)l&YZ(0 -zq)Z&*cMSWgfw3<#q~o(Rpuk8}3+f^Ndr5%of9<~1oTE|T5{RbuU= -zxC6vc?>JP9S5Rs`fikcGWB^og?;_39XtteSKZArZd9lh!;iBK}Z -z!b=egZJC+;^Pixh?E}%M%16q!XqnT55G4cMDU2S -z=RZX_BU9@>U+=F&dM8csKDk;l1Pf$FDC9v0U?ME^@8jkiQNKY5dwG+S-?vJ7 -ziY7#o%0vugRQjw(g{Og{08;*nQwq?SLP4iR&=;P#ZHZloUUxiB -zM%8}L9T39q`>v2Ak6A9!Ld2GY0b+2DI9Hv=For1>M6>Wlv#k6U(n0r=9(rYygAd*t -zAp*skbH%ZS{AOm)j&Ce%-g9mQNF*ziQEdFBKFR{Iu)Pm-PyZbvQf-=5q}iQmLho5==RMcS46F~`mBaUE@Ue8~EVd!d7rJ}vv9**zuCVj=^KF9cL4=>kU{X5fHHVEl!`X*x -z2MU|_+7srQA=w`RVn}H1QM^y+1X7G2lRz$;JW7foo3xr|6YFfArI0m% -z^bCrK%P2e9pMnKmauwnQyA;I`naFCiM!edAb4CV+YdA;Y2_Z{oU_w-!nK%62%3IF0 -z^7`K+?7@@izZWtP#?T}C^5^C1lG)b>6w00> -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 -z%|)Tu!S7veOO~~bN2?QYg -zKwCi1G@WJT&#sr@2H6H0rZBR0f{cJZ8Hj;LeLyVKNsyAGC<)?yvD?Y}(VhR~Iy1j^Hr!YACs?DZsK-`nQo^G{?3RIgD1qTu^jlMEpU5Ao&}hwxOL -z79jl&u!t5Z7?2{eFfgcs8dK7RN9jRCdwsK=kJu+mAR9_>~cm)X7EH7FFK#(~xbTssz<_4$ch@Cwvy -zAd*Qi(;Zum?p`4r{lG+oDo>%K5(!Qa4BNx=U|%3zmqk{}hHRqP2B1bVXfN6w1(;2D -z?EDj+_-3z5WIKAJhYD#x)1)+BJt_^6BEhED>?QgtczO43b4piC*Ei9iPA2n5|J -z%W@|TR`@{=jM$H2pIx|c7`mi3mGy&$-&^=?LZV`|as>wWhFcd}L{flO1+>zF6R32%_|Tu7{C&EnM<|2pLf>gH1LW0j -z?*TWXm!(Xs=}a^4w#3TcAdl6U{;elQpil@j_)s?c&qucjZuA`JqZXtR=;eg=M4n91 -z3kicjH`ASuIE*IYEeox@v>&3t(?F}Vr!@5L<R_ -zDv8y>6t+}+vePMwiqCt%&Tl7Ahx&?^0O1048q}z8uBbr;nvG37=rS;Lq>!q?mZ))PCnykL -zJFG26xQaWJA?i#BWiU9ZzqgXnZz1njpTZ-Ad?`VIV31ZMs7K)mt%^ri+xWBVZ2VpF -z)Tr}J_{AmC|9upO&)Gb^F2a)D@WDb$6fYQmS=NERK44@2dcBk2MnDAW@ktZfFhvq5 -zJy%PHKv93DMd%&;B^)eSfQRtsRgktK1H-fIs4C-*L#yFYN_9I?Xsb$TIMQM~eE?#_ -z#L5!Co&~dMXaS<=_c0`}OT|h(Q=Yta6%yI)P>z^o;U)0svB7q}VL*<+pgtp( -z$~r%bzkcY4Ka -zPasPYOcQ1AsVpAOqbv*rL%rpC(o%KF`*bAI-L+Jf_IqzaW!ug_*yi9P_dEHh0}@jX -z%R3$-HsHERAkZ1Iu%RPBxR3<;eAju_wp%m74cX4{GE@RFR+WuU`ArZA)kp(!1Oj&g -z!Tao^u!C#~9tFY_y&iZFEh)SKJt2_mF49d;ue0;_w#p7Q*6GYWE<66vP#`6WZ(8C8 -zf=Q&sbVLXgI)fHAbOw(s5W>dOaRzKTL7b>9xFI>>bwsiH_3>7QDs1e(hWZ8;h(UCEt1*QN -zc*TA{A!SeV4xJH;0@9%6Tg3TOQ{>?2N8SGeJ$7lux2{jT^@Wj6B9#j*~RmZK$x4hDqqhG_aeNCX{&vOcs8 -zQgwI`taCx%D%cfzAX5H&5H(MO9=t4jP^h^;yaOZlx%kIB9QhF9dyS3XLk6iNnv+@s -z78MMP>xReHSUqZ5SZIg2!Zo6+Kl7+d+yEd}ovAd>v6_8o3E~eEQghgti=4f?9LqVX -zDBSQvppL!D(q|<$?Dzz)1Tr9oFMurYDyZwA=m)(4{i7vT}fr}GL4B%VX*HtUR7*eD=CxQLmQ%DXSK@O~7=lIZ5y -za!xi~QE@jS*5Ex3Juw0W2sEB-KkO7|uOto=oCtzI6!hCQw+$=zAi7=o!144(4+RB= -z_JwkBX~L5L&Az7_AwKYJwMLGnpVdfA^sQ{7*(FNZA(1Fepdx7s=o3_35xR!&L%MFG -zblJkAP}49VfEEZxXdJ@WXdFJdR(7Vp-Rl(H`jvlVh^A~PVG-J)GIWoQ5dM%FG@?o5 -z&O7e;W?HOPY%|BK`>uf2s6n6v9m{0!^T2UAPh96$`!d+w@7yCe(e(xS+B+Y^q~!VK -zSc6;Zv2n@23j%o!W1faKLNt-2v&a<81p-wAc$>Qr#b2l>?eV|5DIpBf~ZK17?36HAdjm(j~7V4=?z$vK)BLiTuQF^-GD7; -z+4XHv11iTlc0>`;CxI}cSpZNa(z8J}a+xHJ#s$ -z)6xx$S{N`OiZ@KSET71DZy6qKuFbB$9^uPp4M-hPtX0qQ^jVD!{^dJa3ksh=cq-u? -zG8!fi69>^3=qfvW2hGvLF_WyPU#PJ+lsN4hwHV-m7AQEdQ57BR3YQ -zY#J{~gpHwdh$fhdf-Hc}coGOJB}ojIrgJJw=T-`T&)wjA;lqFwfdaK3r0^qt=dAbi -zM8O5g37;vvI-*#|2f?-~?EPiWDaFJ*Eg^yh*63)7p+bEpB0L9*g{W&RI+?)-?RJWF -zLw7H=@=o(0I?cS+6tka@p8}oEaC*eh_9d|o -zgWrV@0|JDLu|%NpWb;9XID35X+ky*{69Ey(#2ViRA$=XY`>pom%2E}*ldC0#U$_}_ -z@E*@MbRYvmsy-dBsog1s_02>QtkT1(J3SeEqYPy?2nB6sn<@LU@E(+vJWtxpj0`J!pfio{)FW|?ZZy{B -zJV3;FlhReJ+(Q#|?deRh-sg-}F3`u53aCJ1;XUe35X!#ZM-&M9qrIUsq<HcC&6^AICqRyfvM<75djZ#CP -zTF)2E%G)~jk`w^JW*l+xfiy?Yue0*jv(g2r%2H^K!MhE$ga`%*U+94iJ;B*aad8aE -zRO4IVOacWE@(yCV~;#{M_{LGm&=Y=Y1ovNjMVYLkuuQIG{8v@ImPgBC?N={XE^ -z-X^oJZ4`F!Al{r~85AO2{JVWlK7u?J8j-J)=0<>1&r|U@(6jJg; -z`1)dR4(s0M8Nq>8T>}=->L4A|7&@pDp*|b=#{og0@!@+Rl;E+<6srmYAq<+MaPQa# -zIt7{pq=2q?XA7F3RBE3 -zj3@1Y()^>Vt>mp_ie4j0vtOOzA_HVi4axg7o9P=(h_E1nmLOq4YfuGMDMU4+wJCFJOPNyVd1g_ldt{YW5cSQ? -zcK!{8$f0}Xa*@S!yp_MpwucITe|8}lz&kud#?_I+0OjLSMd*BlGO>FojNU@$j_`9m -z-6Z8fO09AIpyWjT&w>ZS7ajYvU0Lj3uRkGdAAq*tOL8gmIiJ9@9Q+m1P6ez|ahZP@YQR3t{Y4y20*WW)TFdPvNd6 -zg}v+I!WGQ$Hd-M2I?vhLi|{s%MvCnbzJk&}>VV5Cp}4R*?A;|FvGJ%-riD!)0gWdC -zSvt{O*poC3>Nat|y7+PunaDcuWJ0*9crd_oSRf=cg+Cw#SGPl^_#ma+dSmJF*$&T# -zE&~OQvGZakUq*8?>7bK;u+=U+uXg|5N#X@#lVOKkHt1K*o*Xem*t||>5GbhhT|1&# -z^;S^eHCU5dZ(<|=yr6`t&`6{qO<%fr++}Jg5ib$Q_W$IDJ5W=>S|em%5ZOPH;6#W- -z$U>@%JNOGqcV8rZ@XT7PK&N@>`Di#jO^8`7%F!JTed7-ZHx=U~@c$?SZ)1cTrlg7N -zaMd5OFSb8fzRL&+LonGGy7?vYJ&^%10*73_+HZX_tKab!Ve@LuAYnoZU+R!ytX6xx -z8>Su`uw}CFLgD`0zJSWCc0yFh_J%C9!PTS4hLm@~aV$xt42%T!e@W}yMLGhW -ztHt*qgUrAxkTFe|RBadu6$S)|1WW`Fu=?cG{4DI|xn|yVk(obA*M>~&+dU3Zj@VAu -zjyb?wAmm|gaKrW63gN6HLtubt2F4`gd~(>3V*+*Nm*ljO7B5Yl`;dR3HVT3Prz=f4zH5$~U&xY*t9ZSRspnrseWL0PZXuqc=KpDDotK!b332ikC;mAzh$SewjuTzTq?vFMK5e|{%Ej*FI*HT#9 -zbXLA*21Lc(jBtVQrvlAf_0K~20@@`{kXF+hx&V)_whBRvV?j@0`6y++L}ad(fLc)jc>;!x9DbmBA1qz%H4TgB8!EQO%G9vJ -zmpT+N-3ns5E_?8!huO$8*`iuGK2@fD5yfS(R1+jZX}&@{8j@+e+hVgQ+kd&s!Do`T -zSx)KrMnyZENSAA_LwTE7s2KjU(}OTtpgyDB#uuRbAjm;BXgQD_B?nZjzual(FK@8& -zf71=pdx -zP~IOxf>GPK_6B$xgcH<$;DHX(U5ll!FfcN^1kzETl8!>A_cZB+{}MUxRca{!s=BDD -zs6bX!V{#e^T7Qt47X+{;X;M5;iZoV(X{7VMPZPM4bPLX*=W2@xuODu+^9e+Rq(d&g -z;dBO(H&a~0(KH$MkX;#NW8*0#m#4YXks&ll@6&&ylil+8qr$co>cIQp6)s_kXYEkE -zP&rn$X&nZp_F0`MTK*nhNKcGlfNJWjqx$#epez3Kr7XUfw9H7-4)2q8c#24Y;#z0Q -zT3QkzYA2=fGSE&s!$uk@;X`jo9!)>5ok-!D^iM|;>D?(@Jwar9l|mO9u=9_*L`GH; -zS+K$OK|}REcPteH+5ozemSR1O0Jd+A%l#B -z^!3@bR^Da4S={k@BL2Z)rwVxw#`vNn+kH}~Qc#Rh+93dnDkFCPb -z@qJ@JtBL($|FhG0!)Z7s9hs#UFQRIEDuO@69Veg|3 -znbL!ylBtc@OYsB5x>;1GwM6g-10x3lq|XQ;)krhdNrHjWc#D~oelIlhM^?%VY`{-4 -zJfN+xf`ll-+Rh8I5z5eLH6TK$fKVN}*CFnDOl&YM4lN+M;T@3f -z!!tmzsz8<3eSNgR=}f*FX*6jvEl|tB?~MQthvsqNHso$_~k8}At5IqsX0m4FXNMXG_+1^*T2447^Z|mIRSN -z|7}>t;ou)r7(+qvo~34Cm>Z|ykr|p`ZKmT72E@1;0HIx4h;0Kh1Oj)$Xvs4+g|e=r -z-1PF4Ey8Bfb|}rjmPO)y)KMU)%T|N?YsBg_@4`OaaaN@E5hGEG2cqE4wM6g%;VI%S -z^XeqH(H;O=%_NUNSrYIMBH+IlORu2f9zt(Qo!{IPIC?De+y?+btRAP$_wv}HMFCGm -z=OjrIB2l#D@CTJVBhPWuJB!b=+D+~dHY;20dSSyt7S7&=DyXkhLs@i>k6vV7AIudK -z1C_5Mgg5Ao?++$IMKVMSBE)U;WpfcB3uS+3hXSo4mrJObkZgNMq&R&43G#4&zM6U* -zv?tW#<6Lk~%T7u?HFm#)_oYx)f9mD%iQ*k(6Vj9)ZqAMB*86qXid|O^-UkiSLKn{7 -zh8oJybgRlL)@@9mEu&tH8^#77=AuG9?lPbuOK61AqBN!R5W8B#U26cD@vP3Imv*S3tO6@r7BLl%g0x}pEZ)e5 -z9#`~`0Wkt3NuWTL7)v}+?#Ci4{Qs#n7Jfe&>2A_F9cHHsG*z-Lk$F)FG#Tv67|B5a -zTBr78iN;e?c?Zh;fV&o^^ZS>k>x~_0sN@-Rh(z<`tz;9t=eY?hQwFUltTeo0p-Vf! -zVAdJHj^v76WjtM;66<6H*sKZ?kRbkiFY)GHYV`?<+!an%n7#sFGO)!xN7pF5;;iGO+s>r_3 -zn?l%lc!iliy3)em-fZRl$y=!yvfD0N45487UWdoNdTp@qc9eZpB`>ElaA86v&$lPI -z>9yG>W2)bHJ8YrY1S$I!*FD~bs)ta~tfmOH7BP)(>Bjo5IVD!SfkXxdE^ItNqRG`rZ?vN8Pl-+-LL`K0)QrPCI -z&^_J;P7D=I2(;>IW+q7V{>r1WT1}eBz{rtBvLT|!CG(20DFTDZ+o-LHr6=`ENc;iY -zsM`9tuW6!NGU7aod$O(M3+urP<(>X45EN%psl -zsnO^*_ST}kV*QCEQJ&uL!5}#_=nRp}OOH?C-4~|^1#F|;PvoH?i8qYCm`C5wVPE~i -zP5(FLKuq-;@J=6)2Xl{%3$`e-Rz)O+N+PKJnyf;dru5mWM2Qj|*lTk(;6g=>NIb}& -z>_!TIz;}a$&L~$q3<#nHbPh1;B0gyj>1OZQ#>>`@m -z_LyU3uCZFeJzc+M$fFJ|iE1iEtQK^k?V_F@F+w~EF!D6g`Wzi8yg_G-s~HBw&_YX$ -zK%kOm#2Ie-U~Nv+BVUcdoMLX3IaWQ-HA^0KxRVHRxH>Ccx&bR+r4{|VZS-Be{*S%4 -z;L1uYqZK|#pMWrKd>rq}14jr!;FuL<&CPD__Yst&=7xxQ)& -zg^?JlCX#PG!}{CuwLqdaqE7LD)7E2+3LABviyDT`FjpHc`G?l{;X;syQgnQN{1fS& -zxJ@zD>fVVtWR-7dE#_3tt(t9J)1F5=R8NEpLoEW0yc>u_E$Op0bWv2#Z-$!st+S(g -zDw=5NxYz_9~>*3gj#2s26%%BU>Ax56Iv(B~tCmPBt$-iTO|iaEvH{^iKy -zKGb3(s-bxM+4Zbcg{G`r%5dCgu)vDCZJ$in;yEge`AFZF^u99F|f-@YQGK -zYr+kKNbRHk^V#R7cbA`GUmoDHKn5Zu=ZT5c89rEG9|1sX(4vAQj;!k-!=gDby|wUM -z)B_)WsbpDgl)0*}%pK;i$X66z>7kNH71waTb?J_3#!8kG-YBN>4gZXKcILcFjdvxXdK~DSF)5r4I?PRd)>xyS95FMdQr$a+*P*##B`Y)+b0z0Y -z70Z7s@~FdI7s36aON`ouyEnQix=r_o+4HeWP5n1yh=pn(2RxFhk$^x6b2XACU*jYr -zTyvpw`mN6}JvV-NbnCnRYv6S-N0=+j*zsC%p}Mgl_G6aqb>crEhaI# -zbI+&Q^KmOp{nk3zR}|Vtodc2b82Ue0btf8$m##jN7{NVELF0|Oz}Z&^xvB3D4%71! -zRz-Js^jU>CZN(g5E~MAN++dC{SAR>d<85fY5!UJ=zTYTZcDWiTlC={=YJKk`QO}H; -zZhB|wS@!vE&W8Wag;o$ANqD6^#XwgV#5rBe6W#{r32!s}PcB*z?<_eR_0)(N(XH-& -zR3T0~am_MZVGR%F0&`OAb^Hu>ZG?ITvJ1HEdaPvm79#UdJW@=B8n;C~_}SN{S7z*D -z{nk5#;2wUO3&RKlL4?9sFxnL$lu8&ilaikt)nm~M?7!Y&dS&{qs0Tk96jP!4?FAl( -zt`XNNiGyp$9AGZ~wpu6Hp?V{vq;S;`idYDR$A{`G9!U*tHxW8U-~8}XQBMqwHN7_b -z0PDZe#lG0j#UeHs(w$J^?sp@V3a#-2g~vX`K63@eTq+<8zBlX-%BF}kA8vBt9HV-E -z6C2&J$J01>Tm!B}T$A)T^_6SIHRIYb2Wom=Or9WyHzG-oBs5aZHmpQBgfs%l#8g-2ynEEYUVS_2@nLc7<)n?Kw-=wF&|zVp -z?h^GCQS}C~Mx2#~S3Q;?6oLrPb6yrYhn|xAfOq+f^jQB57WU?%6YRyLjZu$%8yEGj -z-tW*k+@p9JoYPG>M|rO0QH4kE3fF*Z!8H|ooI)J#M1meb*&anSWF~O==mj;(CsToE -z$|n@zAJI+!`Eb--z2A!Z&&S_JJw0kFdm(NG>pgQj8U7G^XX)?k{gr3MyOR5FNM#>w -zP8aCEDV6oxkj(n5Im_Nzc8a}4-|anPJ9{o}Mby*ZO^tf!lOfnA_8k)w(?vO!AWVU$ -z$tO)C*jICqF+TnnzLm^ei+R3br8A|p|~5)7e|3B92P6dIbb@|9Z)Lx9z -z0CI^AOGHoG^vUdIQb8~o!z0s1$7CVnRg(wT6x+x7)ykwRE{85|qufOC=O -zRMMs#NDDkuJkSNMgAIgm6dx -z@9Q& -z1B`|+0da~#9BL}?1kg_^vEU&PT3~z#T6hhR!5#P+euwYiyVyo03igG4V&6Chj)i05 -z*zVz}m^9bma3_>IsZ?UYGr-{R5->ghuVDoB_xLWh!L}+<+{sc*n7{Z?jjJV>J3t0^ -hXn*fclD{ok{vQ%9l>+=;?|c9N002ovPDHLkV1h_e>$?B| +zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Bd2>4A0#j?O_#b?JxXpil*WbwcgZBgiav~g-c(#iOt@?6rDYu8Xz{EZ;b;Xl! +z&Hw(Xo@+e$jzUyRAHU7g +zIT+fnnrfCldGoD}F7E7%f28dXzyBaxb6wt(t0UBBMRwW>xr5S)Lb+FOhNP!Ydr>t_ +zbtjw9B#ze+lZx$Y{~erUbm_(Aqsw+|dTBiUfant~`(n-eKb>!;&E3@Bm^44>ehJUw +zh4aD|_E*VKk10}iWfYpb(0RAMjPk{=!m}UEQRw%5-cVd9 +ze>7zmSDVzlJM2#0Nylt+ypDN%5~-f?L88s&r0*HyiN%>@0VV1LtFII1;2FyyVo&_sPR>`38c%l@=rCG +zsNAg{*u?0e%Gvt)qrw!6?~IS4t}MK#a#Y#L*?W%Wx!W0+mJ7a-o98x(P0lUB_SxBbz>^b@~)8_j0CdgGK5ndmU*!J*4jl|2GkQFM=HA(um|{G^#8M!OExg1Lg1LRjq&!Aefqr5Kja(V +z3BFPh&de1!n>%SAGpog3#&x1EIGA2=2uj)PnOM7dhBZ&_%E$V)cTRtsoZCNnyP@_I +z#=?M-%hFG?n)?*AczWb2MN)Dm%chx~{L}LA&Og=m<@Y3ud@E&TBN^rvcJsZvr*ZI? +z?%5Sz9O@%um!w4&S9iRGFJ>fY%m4z=_t +zXe|-+QomX8J@njyhFqSW$dZohir!axlXTs0TzK4T^X%U&*;lMbZbk(zE8TbD +zo;&T&Tl>4i!JQ-jf}n!X38CL|)&C5BXDp3*QGa#$k1WOP2MZ^;$eG?YQtR*2cqphQ +zGegb$(A9a8a$5eIi-o_fRPL}YY14C=u;JMA7sk6I&QDCW$tk(o+Z42`)8^ctnoln{ +zge(_L@!0b5lgO%7lRjooWPE*g+vj7&Z}+ISPF<%x=T9P+^7)*CPya;L+1;CaFuDHp +zlTLS|pIee=)*RlMv+rxuk!{^KYvR4k{;Qg@#ONJ3zokF-lwIT5=bL|S_$#^RR>|zf +z!fq~?MHa^Ci|gW@woQDpQ|q?eCEHmqTG%!H)lPV=Y<#H9xa6Y3kw23oYm_G@`WKn~ +zzdPx${_diZL*Kj>fA9BWJ}jo1b2BGMEB&xPkGR>cS57lmeR{m+|JnBv-AvQ(eR#;U +z=<8=&$vbldEf=LcfAXojPiFm(%d-yiPugxdZQcL5)|2L1+GrmyzW=NzrtZB~dt+cX +zMuVM=y18REYYR>@a|2;J57zJ +zFQ52)r;D3S{&Y5b2gTI4GjsO+_^xC3?z&H-owd=A=-Wm=vZvI3jR+19*;BoAa`~b+ +zr=|0v92OS#&E3A>ae34m+3f=VwjOf)t#jb5x9pxHDa?o6q$X+Xn{fD1&IRYpH-Afg +zZF99r{akbhobOe^R +zt@-Bk-z8IfpOsTZ^VIN}X{X)KN}Aov=#$g^TQS@0$Q70|~KTF52XbLqu5 +zZrMM5seJ#QRH@e|P7Z#tbp5xqjyKuoI6HaMH-Bo(IcYmNsPN33wU;g4S-3XE?&fW{ +z@bmG{roYVHehZ&YJSohV{%QTon0+b=)-3<_UOISNNOHB{MXd{^Q@po)y5zDWs3l{* +zijjhQ!U3bmQ>Xljznz@6?ob=ExtL)m*PS?#mvd!XC3l^=u;kkO)aTpv3O}^h6?}@b +z-}R#*RbJo%&`P&2-`Lkp~gGR1^+b(iKOzi=!({3RmRgQaWp6Rz`Sk5a5&+wSk&kU24A<2Z +zeOfMU;cYQ;A6P#33kuQ3qzFR*od(yf~ul&QiClfDN +zRdgR>J#@W%f69kU_tbB#IT^26JNIf<{av(Hi8(#Ta*>1t=cFS?qBTAjb$tF+Hox0x +z*5v)$j-GrUoBF(5cl&2I5ut~zTW+)R+6LAz#Jw;|kAE9~G(cKwi@~z0`4`1^aeh*< +zxMS0QZ^c9g8^6nzW%nvK&b{v*#h~~)`P2cmV5>c!&g<-(f9O`~a*^xX&cwVsaq6j` +zQ(7NSZIn?#Yc8Nnp600#fryKL9s!{b^kN3tZzGU?4SD) +z=8IOkn?9;-PTe(sf4;0{lZ%Y&L_u}S*SnXsZzxUZf1V?7vUfI1abbtif!_4Z6~RiA`grORuPL9Kb69OjfZMimU2PHl +zDeG&`m7I(36YOW3J5S&sLsYU^s~AVhoyJ?7+#(9%LA5WI^QLe9IYqhT`M+tJTpjZ- +z-0hz5&8AX6#red9hI8F-Ftso +z%tr#=TZHt42V~hb8f{=qVF)RFuXOfu#BhPmd*g9 +zgNM8YwI+%0>kFt|HTC+uyr*B&qFU9elIAvlzy0pfW4^SGDe|mtSLUBPq^zCDzu#QJ +zX5~Cg<+#Ah5cIDrnCrp}C&%Tk7sTi7 +z$nA{nh%2}8bGur1URL1HyWi_3sPsqbU35A!t%WhEpwA+F?s0=QO);0vAKW&t`6G78 +z@%v=Cs?^EN{P(04nU2mXKDx2(Pg>gfzI>gWd&PMy9xB>X0(1T>wL8VMal>Bz6950Q +zM&4D)tG&Oh%SyO9uTSJ2=DLm)4ht=_NP2tzRyWVfyI>m9_hR@$V +z=Qh1@Y?*%|A;{{PX?w5L;hXK*>|C?I-x7W{OYx>WW0FV4+rT~kFIa+lNglDoKm*8_#v*M7r5Q=s^s0=6!(cfC$|c`{**vzngU|SY*r9Pb1WcD|SgO6llH=o1L4enQm#1Ai=+Mr>zxjiZZ+dj)XUnj<<3ZB(1zTeuG|!*&=kZ)Wx&P5@^Xp8S_0^N| +zmI!QbUHABDFW<(sV)=Q6zxK?G`?P5;|DhLx-hydoSkJNL%u&gaFOmp89De@e(~}?C +zkIcGdu{!4fD{D8qgT$4@E#mL{=EP{O37p?p?%*yb$I0p<@Yqsl^WABSD>H?ctoXjS +z_xc*o>eOADqkCvuZ=QnA +z>(J-Cim^4}-dztSoK{<=+#{PB8@Eo$LLf*Y`0(`(;kzo8HJvfu4i0RKRlB)F-fsAj +zWs^DQ`^$GVvpkAk3th?bC{cg)T~y>wPb{adu#t=Bm6{S44Tie<=Rwx>y)HZTZMMoi +zy8f&&PsC5^a;0)I(}UJ6DIB5-(Q_rm?sewPo0t9ekM1Y0sFUfZ8ooMWpW{z6gs@T4y3 +zv{NDCnR-F_Z_A<-c-K41EmwWHOs{)m%^|%_GsIn1A67lZaJes~YnR{`E|%?4jc#Er +z7q+*(dopXv(ag@pOh-0c_^wb;>$tXPxAQjDCxr|$!pGfqxJIj}?Q0NlbWAVk%=i_n +zc`My=iuQ*5=JyiLialZ*pUIg0l1ZdP1Dk)tm|^QhY6G1 +z!N&HBlAes0vg50iLlztl?RA>^t>T}DkQ|T4BW?u&sWtQ8-|&?=AiUPG&2a1cuP6J| +zp5*Fu9Y1+l%37%5dZzEZCyYv*yDl%TKPhmNb&HVP)r(RJF)G$6v1*Nb5~pg4?PU~o +z=&#v$`{-o8^dGEyX8xASV6fHSqQ)@w!3V#^ns=s@e0Q))c4uN+!ogR0NSNO)BiWyS +zuV;bcibacN)%MzaT=K;S6yy=GVLn7Cyf-DQZ@QywS6% +z3Ca3>Q&^1JMfVA4Jqv!}xLG)kHFDZC5v>WK4&e)~H-BTxlJm%2K53aF^QY8Hmi%ir +zb=PilVlxxARp~zWBb>*|*`0~aO)p2Gr`OWoDkFB!1E&L492?iA`|nsCl=JB6*NF-O +zUs|SVylXi)E1_bsiq~a(Rlz?xsR@{uMd(~yXoZObnW5qFt!-IY0ujeZpuVys)Y5!8+A@D4% +z#DvFv;t$rq4L@FQ54kD)tFNx@n@c5lFW!Evq_RTkgh2M$Hc_Aw85E{kxLgL%o +ziN`-x$2$rfGq>Rkn8lK6{7Ei$`pqMkSSol@5-RR_-4<#6a4oODNor49*{7`zvTVLy +zFElIW*-q!$(A3v%)?_UMXVac~S%#2%< +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 +z(A}YE`KZ)o3T*^3WI0PdW>vLn +zR*g9agL{;18&18^6gm4Hq#r@ne +zyRJRYtE1ok+4nT;UTR}&(AScVylxd4q+xXa8KD1^0vh!e(ZQf+Jg*T|QLSRj?<9)3gqE!k(|EdK{ +z{hQ_X=u`)+*y*r`S^3+}AIGg_ehNIQ?(Mzr%(hZx*5oK=F;SkL*KNnIMc8IVMP#(^ +zJY>3Pwf*N6-gg)j!sf0tIlpmMZ3gEfe&L|v8#B7+?Al&)&_ +z<_F7q79)i={RW*6S}R^Jc)`Ax@$X{QCVPj3#izR57jN8P`_NoGHDQOe?4O%o&HlYl +z4ZD}8_s*mEz|^~|4{m1Z%JbGq;@k515pS~R{g)ns8pmRfSw7qF{#?vK4qWy?-g +z$a<(aFG_v&Cg1($pQV>Mt1SP_#i=sS`K8(Go`@S73JyCuW==V^TYvM1I+0_OUOc;5 +zs9!K=WsMRh(_KI_2*>r^_hNji9q8SkLpA% +zfwT>Km=1}4IJM;o1tv1uU|sQ$Bn?P-y8N^E~{w(T%(B +z?UQ6B@s@)G*HElA6_T<}XuP-;9d%yScCElJW2?K>LbDteL^G{UdOUmW0JG*Yb +z+{4r9ydJWFYeLU|`V!g8`|qiBBsbT5hYGESvPM#B{KD)P#b0Py*RY?xc=$={1?R(` +z+9TbKe}wOzb12w$GhZ$rcfRAj)k#e{|ED`En~SZ?k<#~U>0Madp*EwdNvGjlg%F3f +zswdC%WyMz=Rq{>9}W>q*Y}ntQAkMI2{8xJ~QL +z-_-M(M~~R(DmJlRdy&z((5Y5k$%ehFbw#$0)y#wJZ_Bz$oy+yNe)9XQV0CuSHIdEp +zCp_*8;h&d1v}svG&6@3-V?qr51MmNuaeQLX{FcH +zt}pMc-t4wF=Vt0W7By?03Zs^K;rL{(6%NS{ZD08boZ5HKU4-M;;=K!vm((kS +zG;X=I|J>rRvmd90&e6VQZ1Mea3Gaox*Dq%YeVlV6j=jEkb8jBou5Ybr_sY!99yRf@ +z5OPwPG*9E0gg1*+Eu(10o=5N84z@C|Zn0Vvx%sx%g>+rBg69)zm?R}EV;WR6IGi?z +zDEFTA*u%t1tuSRN(bG+gVT>L7FS@d|{41(ARO@;9FUd!=U1QFo +zbBk2n6&$pBgPa#cofkiI>bBLlNg@mf(_{)iHk!DfU%&a&wau4USDp&W=sUQZcWVm= +z8%O+$Mqb;4H@yoBc}|8rj(*_7By{0bM^f%?W#QGw{+a)C{A6UA({w?0lbL{8*5p3M +zzzM91TXa?SHjBAhytL#gxu>>yeXdB^2Zeick|jlyV*l)}^|NcT5tEv@e)5ZVTN%r@ +zPA!km68v#ph&$iz@)>D=|Lcq@7lf209I|cq9n-Qo*)d<1>4RQz-_9SGf+HfPYffUW +z2#B9rRo~EdglS9I{pGJc1x12Bx%~K*l+XA2-gC)=jbX9OVi#U1$X=1KS|PO1PWtC@ +zM#lvoA66?)d9d+}$Z9TTMV?uU3*O&gvtpgavZP^MMLPGa1z{T<_Num?Xj@{Qry$$% +zD(5Ln#a0upiJ6IFSDX%}&et$~X{7IdZ&6Z>)_T9^QRP`u`3?(L{ybB1uQ1Q*|9LO& +z`fd*MitWy4u3sxIDpkrex})-8+O0~aBi+YJTR4O`;*<3Pf9?CkadThigN7$g2Oe@W +z$M+?g-;0~+$X>gxHsu40m+292=^pW!j2E;t#GJ18sK0Hv^k?zvwNKWjbj2xqZjPV( +zP>DIkm-pmvli4q&eLFTNG)+@Tbj%K54b^lpUHtg2*TXM~N;hWD&Z#+5rylQolA$V* +zdjSR|IKN)S+EY9|x8T7m|EpSD3%G6MSuV>Ge{o`#tv9S7S(Zr)A +zd#3I`y{(3G_9OU|iQJV9xRBeAihIQ&RE2b8XQqv?A +zhT6rd-4oL*GxvtJ6wc9>yKI*|HI@0wfeSpX0rR{bawonC-F5I?e3~H3YX67p)LQqx +zesoCm%m=e5h2K`^Z{F_yVAki>^;U3S(?4X3ph?$}`U=B}#z#*ZrkmbLmSF!ri5 +zMp|8ry)oH@_mx@U{#`$cgl3+w`jFzZV`YWGf#L`S6_Zwb1=jHG&dYu%EWJ~e{PN>X +zzVq#R%&dJIKPRchyA>P1TrjzQ!&N<-^=1F>c|KxIo}AboWA-Ba+&mdWmm7Qh(gieD +ze2KMQ6!|qQ;DKqxKUF{3PGmG>YLD4>E5Fug_5F`xiJ!C1 +zDkM5_#lM=6xF)Q6kMuG*=?$ryJ~+MT%{=+ARb^kpsWoLzAt%1I>1;W8b@7R|Ddh(X +zbv&2y^ss!Z_k4ZF)rx7}>Z9Kkn$H~2nqcTVBP3UXQa5mw#r;ulaM*lw&&E5rZZ#F=v(Mf!~habdTPABUj%>DJOR4!_q_F5?l03 +z5428AG?lutJjb{z?~%TrUDvs_=f!q=9Dl#GcwaTA(Z-T{ +zX<<_NE-CA#HADq6Rx-8q$R$76c- +zI_JvSkt-zrZNA)W5VgQ=@!ezM3w|q{a5T%XoFJ>p9U~? +zR<3Xe3rQ}L;*6@FFjJgmgL-C=O+c4PSaar*&-?s^cT6tfKDY3BRyW6b`Mk}aIbB+o +zIP2|uSi&~ZJUHg?MH9(y6JjM(lOJoUOkck9(nLiQkN21B7f-(X>Br(j+eBX-`29ds +zFR?TIZNT0D%doAPvTVz~Mb6cT`X?9X;opLf0;;dB3P7q>8>$PEX-IXZu}t9bQj=f@L!q=GlK*sp3*t8zKAxlChf=D`cnH+juV +zlbY)+m-~3Fo5rKq+|%;q>&>lU_fq#o-uYOi%+`NNIJi>RDB!Kj%fbnsTjwhm{$?`X +z-+v;5rJ`3{Q$|sRv48EM^B-%I9aeY#P5Qt2a>e0H3pLr<>lR;OVRnww?C})z4Zi$a +zTW{0r=!Z`OpVY2fua+Z|_U~(`li)eHS-$;!oGJW%XsQqyzAo*a$fsWx%u4Llj;{OzbzN|{mV_eK4a(1@`XBU +zSTk3*1;4!2Q4;!C-`yytFff;GLHxyS5OE +zx%EHd~ytQ`E(U_J(QjB?y#}LhE)zzuh-UYIq=eF +zpH!wvrjc&I>4Wck8TcRX%fB+W;Ecm{`<={9mIh~&9Yo%rIJ$i0{V4I>KLa_Qx3x~K +ztdvgB$YK$VT>9(l%gvD?>sQ|2kl$bY(@MZr@DSsn&_nB4>#Z0bvfSjHwp}SW@Vd}p +z>4nX`QWq^|Ris#62ilP$BLS& +zdn>M4WSW{_k(TbX-8HRHk7H|o;EK1KkE)#$jZ~iYPU+0UD2ABL&p(#BaPSD6)^dxV +zbnE%%SesSPCj@Soo8(*~m2lbVtKF-By%TEs175zCx{&UDt^BK%*(aVo0e#b0COZ7j +zjX3u3fqbxpv*X8kOVbi(NH2ddQF2y7?y|@HY)5uTF)WOY>d0j_Vqq#jlyTD7taa16 +z#dp4ZnxcCs?NXV>*#pyDAJtw7R9JC3toe8Lkyj?~582%<3|sO|P&u%RebIw+TU|ad +zKGb}q_xY8|j*D^(QD;^99U_H3@GCvoFYdj5!6P}Re6P9p?}%7b>3qJ!&fvI4Zu!~o +zpKdI2W%PG_uHq@A6u9Nd2llBp%I6C&TX&z|e9QNpfSGpm+p5IFPGaZowP~$bAM6}i +z(%&DK5-)#7RG4|{deF+h-uL`!POe5S+)77sKc^N8DsrdRXS6e|RhsU-V&;ULYL6ur +zHUBw36*TOdRVA}U{mSFVF$I37{k&{V%l0>aUm6fr|LW<7&PTE-!k4DV=bh_)b?tZQ +zjjq^m{(J1amz~7V-D{INb)jVSDXnX{KJ#@K$Mr}bW0QZj$jSDd(E>&9jFyXwOqPBY +z*d28^Hk)DQC+BJRJ_sIIYNO;Y=gNM`_I^)muSoR5dCSdwy6^m6u~=bBB4g0XE{l!V +z-t<-$-<+`6MX6{u+cADFHY-QgS1KIxCu+8|FgTLynkjyZ +z`(ER>X7zyUh4u7rq{~%lmcz$I?S)m)s&= +z7aw(+UbbT48Yb;%F+lBI0ga&D8*O?ne613642-<*~>>Btzh{98)rvEblJ_EUcvc8e|h{CoPc*S)ft +zE1pP}bhvzevNlC{&-0y}+QDpVHP)EyNm}S_eIViHGY7*}B}=P#45w|JeS>}Vw@nY1 +zcc@I?eDsLh43pOOCl?l&KAPI(bA7Yxv8&m?^i#P1tX!7Xl^b9Xa$7X~&hHh6WBEf9 +zuV2man141o%jDf5yB`lFq`z7F8cgI6Uv3=saB*JHsuTMz%yzm_QPDcne%GZ#_wVIA +z{d+QcrNpM&dQm(J6Mn?CAKzD%yWvCGl-f{L{pH35iB78Lx2x}Xx%H-c@~Zn4);SAr +zuxS1ky>5H2ZB=`~#Wl+~wu%|{=Dj@jYn`QP*q%lgHa5K+8;2#8-`!V7u&%i3Iq}$v +z`Lcgvm7XzspRIZmu^#qAJih!pwRlsM@2nFCPE2&&q`2s~>gTSFnoP|nZ?9O}xm5kDx5ppG+beGK +z-%EWis=k!NMLbd?*yFL^yp1Q5D%)OejZ_!;v_eu`uB*XUY1^p{2JN?AP3UL#{Ixm%oAkF+C2-!o4+j-2OsH +z_`ipI|C>K`@cAnJ!B2hydvSjc_co19VXi7|UP>$e&RXL%ciESlt6VyTWN%~_n>}!H +z?e(xZG5?JlSN(zV=9Y6B;nqAHi&#te3|=YOW%9jD`%|NDzE|MC^4X7PXJn_I+h`$Y +z7I3ooYPEdnikUNg-hZ68kn3uJqwY(l{3LzVbHdqy29h7#X6#6sRNdhE6t|2A@nW{gRQ@ +z+~b(uvs#kv$OR|w9)|^!(vL{y{YuF7yP_Q5dvH!t-c-vl+w-R0a-};aa}@5d(vIE5 +zs2#sl^zZK6FR^?7_3z#OXv?DR3(k|@FWaehl1XF92UcClCP&8;r&62i9xuE8d~WZr +z=bzVeeoFB3p6<4a?_kf)eOX+s6D3xuP0F`D{Ok6otqzOK7WsXwzkDsZmrJ^IUbj@+ +zIfHO%y`SyZemr!V&>mD$Q};*s<=h>$FUnnxCQjEacqUS-G*7=eb*l__uI7 +z>oWE3k?wHOeYx4RBrxQBe%q{HYd0^h(wbGjcyjU4BQJZxLk?_YZn$<~A{&RXm*A-t +zI{UXDlKXn$xpM0?mwfMg9TAhdERWv#_w>YLyDLe`s}@%LzWH@cNb9mSF;C434qwcD +zSKqPMC|Ub=iF&&7d7+6O(g$Ocl}g$AObU7!7MKmclDXBj1?7S*z7m*;(=#YJ3QIksFn%4@47g-wY-TEQs3bTCO%9P05DLYrKKO_5W +z!-;T_xR(njd5B&w*kAgxFYB1sG~s(1%Rce`@2M(#Qxbf?G>pS7vu0sG(-)5)eexN- +z<*Ey-WM0fM)SSa>b;h^$TEyacGKR*>g6>+kUSGH~QB~VSyjb;VI8;sbbs2z2i;Qnv|bnN}mI4f_z$~w!7N?xOsh9 +zc-ot!zt^l=9>~?r;y%p5?AUTB!r+#u!W1tF)5(+O%Un&q$o*#jy~L{2U+Y$|+e?WA +zFZ}hERjz%V;B~Fe=IrA#33~swMXBFdSf#vVNx@Ztt_Y6S}L8?*I7^ +z9O%!}Yr5C$H^b}w7mx0{asH^1nZ%{J0gv95D^KNG`;oczxZM%EV%B3ZS_(Y-%-`^z +zTGnAApI7uyW^q-Wu=L%H$1huy$1tyRjhXz#;_KAxqo$8<8M0?p#re!rXfs#x>{l@f +zI%~GZ#j?dr@E(V``~5qg>jV4wrShv%Z!uW(O|3|;{*C&6`G4ti4= +z4EFuXKRmxtX8M%eqsvve8#Yam`JWuv@jDn8zq|^DD?;lKB72ecnb>z;4J=ItC +z$JJWD`j}Yw=IN5&W!uH)FSwAHIRBl{SJA+)Y#ZI?Ol=Fdou(+##BshjPRy!(-lX3R +zzld%x?~`Q!K9Y;Ci& +zsulBCU)vU2Oa2q6PJj9S&EKi%M|V&9o$rwU@@3-A#IBw%dGH +z+;R3r(tjR1GX65JQ>#n%R8bH`-2*STGt#jWk;Mv5j2KD3?EJ)(K-l*5Wg53MR#IKm~Qqn1oG +zu(M(7P`DV>_{Y9ZowLcHC3l1Fx5nDU`8Uk_8j~N+urNEfaE8hC3kB-JPRu=R28@MW +zPBK|qA6PEC=iuU!x2@%JK>=056Qar_YZd8a8u>_)>@l%--4~LHTltvcMn(2 +zFuDGqKz)k!%8;ak#s?mJ5Hhf1Sf9x9_4^OKZ3nk$1>QLsr>$?B| literal 0 HcmV?d00001 @@ -2698,62 +2816,65 @@ literal 0 HcmV?d00001 literal 2920 -zcmZuyc{~&DA74o5BGgFi%TJCDxhb+T$BH3-j!xIiQMMvU%n^y^=u&Jycwi>Ft1a}fn%%n8P`;rUDijunXAtRjhm -z3Yd73sE*7d_VC4#z@VWj5<3`Af7{It!ZP7FMpX|t2*(V;dzY8?kyF>fGT33s*58A#oxFAxQ!~Yw~JfR -z!wJIvC8iQIAf_QUss;~=rC23)^D8^Il;Na69HXL39L7?C52^%_#Toum#WBQ~wjl(D -zkXuLjVkS(E=m26^>^&Gl9-bAb1`W7o(!{Db6)=blgb%17#AgS^QZ;x$Tu~$vsYWdL -z;pyU=mb7s&AGUPwEw%sR5V~0ISu5)-p?l6Mb4!RUV!7w6JpHt_#uPRV@ywEGMKA$7x66|YzxypWAZmmKw06VirJ{r^~*Wylw}TOnY+&9nln{3 -zkFmTV1SkEuOJHl>80GRsd9BR0aYoxu9%V&{uHMLNq)}J-OpY+)(`F)(&D;{Dzu&r$ -zF-ckFQ&;%3O(FE*;_qd_uLZ%_yZ~89#ndj=lex8h+_DbNAe9YCnVVP;U_LQ)W0z2+ -zYt&_-Ujcn-LnwYFG-0l3m^V5r$p6YY6;DYbGW=f5P?tG_vplny(agFnLi?)D&7rV@ -z1s&Az&>tSYl|yK!o86lppA(=7vw2N4v*aaI**c+{)icc}Q}}s}%RN*4wh6v^=ukun -zyR3ujmorn=zKU&SuCs-)Z`qLKpD8t4xMt4XGCKJ;zr2&vJI#O5$O*%I6-8Jo@& -zcKu@2lXtFYJN*DiE!1hN6#4UR{@&e2qK=+-VmTzvJ2GN_r@+5isHPST@ -z2%M0OCspCW-~@1jZ@hdVvN}8a1gaTdl|^?&`nsa3T(f=SPh`2EP81fRkf>=;VIln* -z9YlAjx<;o@)2kAEvq?z2my0O|0Fc=Qg`Dw-{<++eC@u;}C=?J55G4M>e_aXVHIlvQ -ze!3Xy{2@8;b7@q0g3*gtJDrwc*TZVR2-zTNre6bgs>Io`d0LCl{G;alZ8xXAW8k^mSLXysgo*} -z07T6Z+Uw{K9evBLd{29cN~KDNqn^vzjyfeq>48H^KTm*O`Hp2PSIId#eR8kAg8pnP -zee7WP%o#Z&(9;JZHA<6(UUJRDHrrAMdmX*jaEb=@$=tUXv2HU-Z#DDHVcMroTj|r91WN92L2qA)XX9R0;aQ&i^Z7@he$h&{|u^&;xe7D>rk+g-vwl|$6 -z6yt#8(wLMJ56(&A9s=G5%H9143Yp3_CIAzQe|8GCY|pTgBlV>%6}E*wG>k=KvRw_Z -z7<1J#&j8&AUjvD>fhRg1qaX$jGPZ -zs~2>yS<-ws_?e;3ZOe*xS}*-Qo}(_hAEv5lMavZqK2y1B7;CMad^^bgww|9_Uu>7` -z{ci^Q?$$T7P{M6}o5AIHiD^u-W> -zMSD)Aht-D*(hDD{sHFS6%W+G+LVlXtHz5GrW#$;ZGlWpXQs8?Bi*Zt*EJH*-xWNf} -zJ4$~;?G`A5OiZiqeP(vvd&wvKVmc^4BFNl6OB{1_5<#~ctJFd6YsLR7ur%8WG -z>6f0u4a?IHre)4QC%isqrp!Co;wI7ARM)6`^!DKk=i4gbCe{+8UX2|%!zfMe`LOxqp#cdV6wB}Nk@5m*1r3N5wyFKB%`U1TWh`Ki -z^v$BQ*y{z@h)~#jq@1vCuDS_(N&fuT3Cz(Oyz<$PaX0thLwH1l?g3HMGFx#0eMWIg -zb442RnA6&+??iBv^^8g7rj&nT6OFqVtf?#Box -zVRkl0DB+ndwDg39dwwc4lMZ3~=@GGiR3wY^+*9CXdN&?}>XenfrqZQccFrbEY4`K2 -zG`_GU%gs|tJXwmEK7V1xq7KOpYzlQWcm%X%>=?{S^xqC1*6f!`)AjtK-;e$n{~st| -zxHCUW>5{U4{cGIHjwgN~?3aGxg6HBzV*C?2a?~Ge4jFTE%9G0YP&9~uM>g$xz{LDa -zx$*dpUcBD*6=$3XqbMzVtkujv)j^erYF`T*v2pt@bTW3Z@G$+HTz$@>C-K%){7%{q -zqtCLX<&1If+=_j$W7YK-VzYvk9jN5WYoOaC)7;B8%q~4D7^I`A9%_8!*us;P5OjUc -z_1O99_B1i_6sdw0dHBr-XZjd~v#ouLfZdjB$SH~Jq2rww?Ipgtz$4wXUUHKv7TI!7 -zK0KYNZtGE0C{+uwl`*ycAd#t$z(0JMzTt5DLy-r8Xct}&Y@%SOZxOl!fhvFDoi2x1?R@ -zpQQKJbP^6Ci`wi}V|=dbvYS9l8QnYKkzPOy!`hVE+nn(}G9sj_1z2F9UH6a1hkI)XGez<_lv^hWL?zHuE#fc -z)p$mZeBGuZ=9eXW!F*Lx7xSCFAjGr2N&f>D$@_2s +zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4rT@hh76PKUltULWHb?%q6 +zx!=~E{*^HQ{o2#N(&v3!clu|>{O_rAzoyUmmNNVE`t$$O=6#)i{{Qxizt^4lv+ndS +ziL@*0&wtOD|9-nmIbYM}d`qAEef{b05*g>$p8hG3ae3{@pKDKj +zmrA=VP;fqN&ezmA-`1V{vG&xjwP${%&ibU;a|yfKCM6X +zYwf9DYtH;kn+F_eOurTrOo~J|Nnof;uneY->*CUYw6LSJzIZhRKGfQ +z=jX~(--7$!e*E??c-p(KKmO$}`W8Ix?c|+5K79SR=gM!hme)EZw>O>prBU;8{=uKK +z4}J~qz5DR>-$!r%6fFK;u>51pw2zP8{CxE0*T=7a%v)YxdHTCx#fPT#-w)mRojB{u +zn@|57nx0gy{H~OH{nwxWvkrYddh^TCTfZN@{a3f))2uzOAHVza_2<9dou3=megFF7 +zf7g~DLA`e$z5Da{?Vs15|9N)2eE82GK5|GD_+&#XOf&fNQR^!6XQtSiM!zpps{D{D +zYTfu_&iEy_c3k}Z^!>k!kN$4I +z@G*Syd&%@m$*kSt3=9l0B|(0{4DS=}-xt`w|GvWe{SE@>1>VP>k5^D|XqYhn{QCJ0 +z4h;?s3H1UC@;6MFU{J7s{`&s+0r?351?vMQB-9)9`xh82SWu8(a9?4;g7@+772f-= +zkAMIE{`>U}2@}re&ky%E?O|Zx;PG^E45_&F=3pZO0|P_Dg1;-pS2BT^SaHM6jm&4e +z5;b}rKbPfln95eLs=;XbLT;ZoemU8j_x<~>@VGB=_w0L1eLeQySN`+$iHz@I-p6|~ +zHi(H|TcwwuT&$lxVdZhv2jLHG%$(}k=7?&)I5Xk;Oi$ae&(BYB*6Mf6&Q$%fbe`?M +zqvbKC^VM8i0yZwlv{ky<#rfFa@osmSv^C6TDf6FH+|f3>X6a{?{>#m8BX?<$#Cf^G +zABMB!tgR$18PYduzg|+Y_4v6r0e`~WnAVD{b=L`dGr>cBsZm$T6_Hy83JVi%Ob}hq +z<>9k4ct>pAE@w7f>AVMyTt*6$+y2Wu+H0ZNva#c+^Ky4Lb?b-p8u*`{dz(;}tjP1;P0?E^a>SWI;M`=K^fYtd3hKbMBg +zO^SbNwiR6c6F9T!KbwUh*;a_@m~Pkyte=XnlO4Ao05*KAUrkrXnuASzhx +zv5ayB*MiGaB;yQgY*kxI)7(lm6J^fToZ@UgtS?l#W6!w~)2zlUy|_GZ6TZ*beEp*TE1#w%%97uwU!2OeW!A-Dz0VIVc29}+o%FFxBt7pz +z!1pFLwonq!4 +z@hUPes!L&Rre5ccJ1$zMAEoqlKbqQLb8ODpLq?}U0@U|v-4nT^DVS?%*LI)7d+N$1 +zUS^`dr4I%&o!Gm5kA_aET9EhAwW%hyOxMHr9G_!Yru57E=*&OI-hO8ASZU!?>FVNn +zvudCAjkA_#eGk?=z1CxurTY5kF$ME<6W!SSb!HPkt+{dLox*Z`h3kgTMH4+|dF-8M +zUbH*IQrIYZYMSSrJgwIgVnlwkXFd0Mp_~6uaK_8S#gAt2cer=iG(}ua^;%tH}ItY=y~F^pwcp$f7Um{ +znqPIQ7kd8P^>ek?ew5ee|GKN;MRlU&#=Gv>V(*JqA<^VX$d--LV4CH?Dtseazo!PL`3zgxoj3;X5%#w1pUt4bGG +zIyJ)fXR^5&UPi5}pY%TedXj^=%Z)&v +zSuDL<7hO(IE!oS{_O<6$YwpBy&3et8x4v`!_Xx9b>K-ynYIm1fS8(h@_BH#!BmaDi +z-7P{)ceQNrvN+RNbg!QKHM`L+&gHAV+>DsHM#xWh!;YSH`vq-W6_&;>kqEr|)jZre +z+qJ7KLqT0hF3UJq_r;{v%(@-Za%!G$IM$h2w*& +zZEbs8;XI+?P4^(croHEt5~w_*J>q?o&J2_&1(dDV@LQsGC$(WRAx7 +zy$Y{-Pjjc1giG{%u{C{sc7N}dlH$x$2PGCo`_+Z-yqch1xas(8IX3%^LMNK?UmEI| +zm59{#nM*j!x_(_JbY8^yZmiUw?;^JPb?W;QuLXw46*(ec><^38i|o@(el +zt$*eq_L|*Gs!m0>{is_Whr8dE3gKPXPDuXj6gIwhWaE@lqg7>7FZ^`tJ85rx`|(*< +zxz!8h%Idy(9jSPgusA!aZV%_fqbv9pXN7bAogHw}s>j!=<=vsy2T#MNZ~btibza%M +znXFlleP779TVFiH{Pg(jAOA~a<<;$NHZ;_!3+(c6H)vjz&Bf_2=k&3DclgGzl4}PT +zC6CVz=>IqU>%yfA%Hl3Y*0PI=xhWk#Hha$=Iq|Rm-~V6tVyW_C*)0A(R#0uu_A~l? +gQaG3i;$q+r998Qi`7LMJrGTV7UHx3vIVCg!02aynZ~y=R diff --git a/chrome/android/java/res_chromium_base/mipmap-xxhdpi/layered_app_icon_background.png b/chrome/android/java/res_chromium_base/mipmap-xxhdpi/layered_app_icon_background.png deleted file mode 100644 @@ -2763,938 +2884,983 @@ literal 0 HcmV?d00001 literal 2824 -zcmZXWc{r5q9>*t=U6W;wD8?|hC`&Xd3`U4#E6e+qjKV7wQP~d3(u^f*YGi9vMs>?1d%Z2b~`{c$^IXXt033p@|093aD77o!PblFo1zQ6ix=Z+ -zSX}-lb@)eJ7dMiyY#Bc|xv=4wL#HkAhh{hQ6X&NE`TB|9rK7iVhnwB_gT5lTR5?}hZY`;HrKWW$vYHuLz1%m=yVtTt?&Hzuob3AV6)l|X -zm+Uo;fYigAUlF_;;tfu3^iHjN=X~v*VvWpgH23rLBKrrXHzw&D(GOW|BfQFYoOB|) -z_!Z|4nG;E1Ce_T`YG9X;>B+S#4WEGSbjLVpe7n#~8na -zyf8)QaCw5#H=LkyM&c6|p^Y;-w^7o(kpJgAsh34)U3%2Y^~(9$L)$o0Jkc@6%dVdz -zv~i~y0xoa!{U|>KM2m`M6G_b1U9)YFZhnv@h;iv$RD)*Cd}h -z!uKs$AosE&@vEKV{DyA!jpwX}Zl+rF+~(#caAdz1GlNQgc;_x!CX53Ihf1H(2=6f_?C}zaBkYT4&^%*$(Z82W%-U4CU(4D8Nf9DY@=_0{>zjP78MO?+N9GfCWF_=&7&N0n>sDAWk|dHNK`JO -zV*fg3^=5D`J1sajOj(wa+NR+-ql_`rLzeo&5-6M_bxuWATkstQ;2iXI1jA!pIOH=b -zK{JSkU?$sOD4aL+Ln$aKsl^DKx?zCADM1aFKt#S@8bUJy@>9G8U2B`JnrLJ%XC{gE -z7!~R$&}is3oVclmBWBetEJgLKf+)lD#IwdKkdS7zJOp_aH=92Rh~FnVPC3wM)p^?2j_P^ELlx7bNen#7e(xs -z58=Qs4_rSv@ZxdtzX$ZU{g2G_|BB|^jF5k?3UK_>pBfb;R0@5YN#f0kpdO3Fzwu2O -z+eK>wl(Gq-_oqoaP(8Z}oL+^D;+Q7p=H}@*Ve9P=y0uz0=@*}`GJN@u`%ih&ET6Rm -z7;jf!>9gVU8m}gobM|kvG&6}z*Nd;|LkQbOj3aDyWVusvdqZ`N80(hi;tcg@AKWH& -z@H$d&>e?~s+iZAY%kWjP(ZiWV?OxF(gS|d*=8{32;?A)QMnGi=C`U}ktgm!tL2CKF -z=XF%XXo|5}_n&%>Fo#YnKkW)i?m3sfhxIStzb!Yy26E+!EFNdEi0@r& -zt&B7C+2^bkstDb|HDwS9=ciYcFF_w1s1AQe?ENaHW8YcRJd!=3%H7#&ZJ_w%Usi)) -zv*(E>$J*PxbWZw4H+{aVZ#A7&gdN=LEv9pFvu9jQ-;Y5I@g7&$!IP9+gQ#lghiGAa9>s8a}N -z*ip+Bd!43Sn%G`*rBvOmFXXUG7NPP5xE#5yFQkO=fDJ}wLY?{%aE?)@D%I)hhsfl8^3pkY -zzAGi+>GIgkArQ%X{uXm#k>s|e+E=a|>`3Llw8XO>xw+}A&X -z*ZyrxH>(J(=Lp#+U4XHeHK=?0s5435#@HG5`UYR_w&@AbU5^GTz^H#au9)If(*eJs -zgYNue_LIuQ6~on1DAq4pp~mfq1Ty18wuqo%*jpo3S@?k>yiP|gOjT+rmUfE7nLI~# -z3FIDssY1dV8TjSCQV-zXNyAq*F1jC_h;et3g-p!W(o8&LK3e*Aa^y7DB;p;SobrHk -zko5^cNg(a!H1K{Bl? -z4Lq#at{<|PI%IqbFMzVQ>oibZ`!p3d9p1qGE9T=@cMPj8g$9Ovff(*!r$uC&7@I5L -z6R||&x+v>QX1%K;Xt>yJO1#n7KBnF&GEPf9y>}uFcDbis4V(jgXyf3g>*`wX__m_QVQo`Ln_Y;)uzE=yVFqT -zPk*OKY3;6-=P2g8*k{}c|9yIkz3#p2)&k5VEm&2_)1KfM2zSOOXZ@wrZ&+%wTOqhQ -zJEH&tiK1I;yP)%xk!6Ar1%cFGaci<3a7Wc~jHCN*TA-nBI@_dpxg2 -z@|(SG4sc)ekQCQiA&qAsC(X)g25jf(9VjQa%UXg*15NM4&SIMo4p(}-`jWwaoW+tp -z+xX>tw?&+5zoR;2(iJgp+o-L0w67^RD-q1-PGltC^)qt|RPWCL~ZUFDj114apoSd?8-J85a)(q4vAt(O2!khD4<>>CW-27pq4;IieKIVu&=22Insz^ -z2nN2f`yKdlLMlni@^=-CI5YMW(x_ei7fT%NFoxWPkw_N%RX3jE7kL7DI>m1}EQ7sM -z=pf1=0w77!nB^k;H4z^0Ku$q`bFWFFTTTekd}$#DP|H(p*lxl6$2G8mpA<>7-54^_ -zE&`Yu@BmN%GwSHSDnLJ74~k6vEE^ZaKi9EavD{bz#{6*hZ +zo%ku4eret5U+Yf)T6*+n{-SRmzx``m_kHrtA1hCND_H#f>yLjL)vwH2UMJ3f|MBae +zo}Hh~TV4lGd$;-AuVZ(9c5V5gUU=p4n}5O6-d3*s{_D^Gqc^{7I`^w!#Rs#h>knW5 +zb?trg=-r +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 -zY#kANlc_Yr -zL~bKYWI0=biqmZGO0b;`Jk&Jb7)P3+8IxP1Qd_fl_n|XN@0&<&gozmc9*jbi$dyIl -zY((;(tpA}lVvHk6Gea|mIY&GHLxex+C4XkAlRPGJ8{3c@SupodJ -z-8ZH4e!pf2jNO;Pb8>P*0$fX77x&QbTWl~9yC^seNXr!cH!|7D2K?1Yj5)^sUuy(; -zGrx_(EHxMThw={@@BX|9o3IPf5=f$jUa8H`KsA)ctU8JOiFZ -zf4-2wL}*`NB)yKbEYYVUk~}1b9ui~!uU!eG=C`rYj(duQ{3c@SFbuo}DveF!^`|)b -z+Z)sQq9d6+!Idot>B-9B?#vwS%*-PuknG9kCtPM6P0Qwo9f9MR(|pan$=Q7B!A$=A -zS`V)}&dJNhnV-Kvf9HRS?LjoEWAcA^rVx0vkN}KzsLv_`A43*ib#JV -zX!4tgtwS4pKM^w~jaMVmVrDHLFP&T481v^!9ZV$l1v*i~2{HowIplZ(`+WO#f)i)G -z5#*2aAN1MbHIZ6}Vc`F5Fp=07=wvJ@kYgNc=WOt?L#)TPX8AaB)-@IC9Co+{5q@it -ziudU5rSE`AZ+ -zv;Jg>YP4FFPQqKkYXpP-+QB|tSUVqA&YG5YoQ93Xxn}0d9>j)Cm(Fkr0=FgNKC;rypIYVS?`%pJ+JE5A3_ksj3_kNvrikJ1Op@52n$7>P -zOB}MBomDu^_Ka-q$jAvAx`T~-{pr0o@Ow%&e}A)wS4RH8M7UB2)DMkF;;i4nIm8iF -zJ9L&D!IBr^vawOlZ@v3Ua|oy<$B#FWvbX>zHg*pPoynK}oyj*RWD$9?M5M-*X%0c2 -zNk}6@!75=QTj>P2ki&+ZYk=$yi)yIn%{^??^Wh -z=4?ZHRt~>?(HUa^oW(kFSS*dv;NzTq`RmJqGiSU%pvXTo@fsq1s+auPIw^|-mB*#= -z)+B2nPjs>b0>u9@%L1p|d2;0Mv^*&S>?b**WRi~UC$ofhh?-*f} -zT>$a~$Gy)mdT$1=IX=xyw30?_AsCgG%|?Hl}h7kG1{hd;gALk_9LO$($` -z3bZ8uK{=zqIf(m*$sw&hA&u^lhfBzRfm7UahLgvPF@L^Tp_AKZq-C+;$(((+|5x_h -z=$cGri_fSA?I!gbNgw<0k|aOM1jg^r;E5hNOJY`Caa7K{v1AmVkskmu-?7*&R*3T^ -z$(TPfzi^Hb_b(SG^8wMgrYWRY6ug8u+hHPdps?f5EH>l>XJ7voFF2IPr!%Cilz$O1|O|Y(&tFt?5~lmG{Hn@U*HfZ7w6y&NPaX#2=xai$si}c -zkyagr2bQ~emsQqyo1~N~snGG>CXea!I__WQ&UddXXF0`lDAX92_nZO4MBYGQB6$&@ -zRbT|9(C`1Sx8~y|9^?%KbibMs&qP!ki&W05c5wWsg+^?oMaTs -zSs}BK>QPjE>YvwvYa8#CXmG{>Rd}~I8L}@^JbT>l8REC}+@3Ce+ly;ygU&QyM&R7)Wh^%;@+aGvyWo;DFN -zobVDGdL31f6-dKZCM{oQqLa7&(Z%mu>gL_nc?1DaK{<~c+?7O*UlWl7ki@a4hbB^V -zCLuLl{`Oto=oI>7?w^@_%7G02;bsrNj2vrQxQJdbPK!SW{KeU4>z@(aDz#A|C4B}S -zI+tereZ?w$i13w&=xu2Besraqzq!G~`~H&7euxn#l9V|#1 -zW{?ybp2S(7-3QsrQyK`4l}afjkH3hb2k!4BzuXY5lQmFS$QOmWlbmA40?|>IA8xXv -z904`|kUNk-kQvA?VD?lodW2BbmPduP$1-Wv$>8z72M$OX{klKXy>=#gLHGW{E6;$F -z?mQ``{|w>=K#Qt4TLsMb0N;@8?g3 -zF-p`3M-s}Uxh0_2>rRxYM`$sfo@pjYK6YZQ3e2ebVClfBfW#KGEp~H3*ACs4&fneSAx9V0l`h_VdWfPXp@Id` -z1A~c7h2orX4&HoP8vhT?_MMlz_*)y?iC+7>x2mF>Uc5&TFpb0wZ3mL;n;_SUotH2ZIm<;^tvn}}Q(908%p -zR44z6mhtX1iz6P6G6aM&_0NS1QKKEa9?gn~{o`3W%yWuxB5?N-7k^+-6Kod$<}1q6N^tH(Swn*)5|T-GlD5aDlhtB1d_-pwB(x$|H8?KhGkUokU{HzOHzE`6um81uD)hKbldgH{3RlfHj&_WqhT -z1ot{mE34D8c$%91d#tKV#NOdGfb38cJrJM}tYW-F$elXgg0UOtx%fjXhya;{ -z$PxAc>`u-S@(ER)@E3HFh8qXSsLms@nTQfXe7ePBx~~oxFZuuxEhNv-H!%EJtqZ!umWHfzh<_RcUtBWIe@`LaBOl}e>^K><81) -z4i@+eOd9KtBT|+j@-E#-_L&G95~Ld8^#u-)FR<)Q!NFpW2&vh>V~_Gg!j0aYU2>Oy -zm{5jhbx4)#Y4*WP-eX%jpY}(F2v=fDAY$@}br&QxLIIQ~;68|nWAIVykL)ojOd*dp -z5|;m+$rl~Y17i1>J*|KY>jPx8HO4tigbg*?&2jSIX;u&CPB)a1W2G?@*jMBudchD8 -zAzB5#*t&x?y;u4I#kvZ}Ok5QEKH&kww#Kl|{w-!W`JQB{zx9p}1TYi~n5wBkDFDd* -zTVj^b$dmRXRGL8pN{;qM4}Xvx?faLyMO+dKi;5pQo!MtMH1K($E@)FPA}okzOT -zgeY2JpzERYA0(rDVU3%79FK6s;SZor2u6%PKwl`o2L25C%Gcx~q|?R77nsOxgaxVn -z!)ftnpS_%QU-Y!#VzFh1^Wy$7Y-Gy(;+XxBWC~QuVDOOG!r)>?hTQm;mg~33$$f~N -z-J6Nf&89ke74jL(4roCz6YPwKfuI#=wQVvbjo(14#=T@PFO#(SdWVO{?oQ`({>v(`@WJ%FrrOHBLIe7m^d)Y-$?6ZGn?NzuL|Fkb%tn16k!vQ3le5oMjVf -zLyH_XB89WBcV)6Srs8zDVu}b!trg8iBoFb<{@FTVLk%P0Ay<&>!m|AlY3R;0i=&kH -z;vby6A`)CC68i!#IeY|Gi>5UAz_sLj-?PLe@Hh?nyCjzspz%lUMkv(`IHjmWEebe- -zW%OS2_kj_+r5|CuXO~sX+W$!n+-dK@`!)fQ$sEh-0V6sj1eJe0MX=u -zcg=Nvai)s}d4qzNs7Q8I@^e;)f#5rENH3Ty6FN7{b@E46xJ1?%GcpE#+WEC0Zya -zfZF5iy!UpGNGPJfaNw^V{`yaDv4UJW%^{3K|4z^tp#kL)gUA{Fctx5LS19E;X2BW{l68Xb;h9H%{C*79VAHwS=-2aY%V$LX#6 -zr_}>x#29=461FFxJkHoX)CV<1DzGGDTpoZ`DlUh3cV89L!ju;++l -zRKEN*jlD4bM#0gr$RO!p#IT_!Kk&}}*5tP!u)lzexok!ne}?pU|6kKZa_N^-asW|R -zqYsq7K>Qy@gN-5}H4ut1 -zFi=>hWa(;JS!%(b(8(JbkPJ%Utk*AT?D$LnZ9)D~&eKF_fENre -zIsC-EOU$!BWDlHKoYnxcPbZDtdk1m=E+I`Wp;;V;gLJ=sJ%52~AVi9i1{e$yQHUy4 -zAyg$Jx`1TQ)im?9nMIEGBA1xi07OjcPo&>%L3As$BYy_JLuqwifszG$vw{hltI -z(Vp8RUS5l5atd@_2I-b2o;xNSPAQ-fvU;49T{n`{!u>zl?B=t`Fs`HL&_5d(Qgk31 -zbXr7%-kj4@a5ZEFa!URn-8>?Bt~7wO>`;*13ee)HJ3+A-N^z0w!9G^V71Z14pAQ5e -zISdB!=lVHLvA-9x>-F_+K_Jx4BLRid3CJg8nX%I7hN%N#)kc$xs)MnUG1>XHlfJET -zp#mJ!?i<~qiOiS?8E%*eZw6%0pno{~a5YLJywRXg$RH(uK3La?e*6({t$(&os!*ZJ -zD!0h4%EOtE3ow7CFqEfR8-~(oN*ZrPjx@5Ns9{Ip*T_BTd;!TMIMn-z)G#(gMc@o$ -zh4HoEt03SSNT%hHJ=GF*NH)Nz^zVloa7Js5EBLugFcC4_upqXt7@3;Qh9z?L`PO5s -z^Ea0X&W1z=Df!d)z=OG)UBuaqX7ZH;>XGc|FxM$+e-OF(;eeDCkV-fbL=V%26MxaF -zb;S(GpwuGq#a4GnB3k|cz7>23{aMUJ3@0qe8ye(@>wmqQvsWfRFE|@?Z4j#KI`+T{ -zP?ilz_{M7h#ZG?I%U?b-O&sq5nSyLC&e%zE7cEOd0Y`cc|0gY5oGgLbf0RZnIh?`g -z|CzymB&mexQvY8)BFtzaR{?+ni4bMe9~_proDAu%MNWRt;)2m>sgu9E!7TuJ^WD#$ -z+&ZDLoG%@!(#MwIwh6~PuyFpcms=_zM%Cq5# -z%cTL>!zO>=bRud4rxv;#vSl_69;yrB6JQ^1urdWX065c#|AWxT79&vv=MoO(SL9rO -zyxAkF89}nP_Y|7b>apB6*Yo0 -zJCq#T4>x&4>F#|?T)aK`2H3c99vo{60-Z515i#7bAYW+#3;@R{ezy4-yZ@WZ1$Tq; -z1LT*>h_`u*vIn96<$> -z9TSV0+HNM$nFbRf!wn0fl~xQ-In74U828?p!(NDgL~yrrkAVFEo7Vu!vO!1Q4U7Kw -zMoZwtLXzkN2jIk_gcs48gCti_pYr8)4}Wxpi+7+|yg4$t*ouf8K)!HeYDj>vVY$(% -zyuz4NDJMwwp!yMoV2I{G$19-R;O6;hxqyUvX^o3_TWiKE>s%ssKk&D7Gsuu%q0b3v0zBj(Dj*DOLD=AspHP=gv-82f$=^AI{`_>ao4>f) -z#UEMbl7Sc&9*l!Qp`N0rE>RtZBO{Y*^Ad -zzYM@c&cg8s>HozffpDS#wlOxGoJLNjLr51XTZ~985GVoznK5%BBGX`E;SMTh_xCos -z1(8v?XndhXafVL|0-mSd1Um*bKv8_dS;7umesz^o>g+pvD?olLkG6w=>0H_Okf5kRdzXe{h7oY)1@3{PlG*To0?>JeqTaDIImIMmJP*Hk!<3H=s`F4H#w;DnP2B+VK*am2V*3`Q~~zpSUkwEYFD7BkARD<`lCrl4kn7jQ4Cc -zJ&pJI*&}L>Ai>@t?f>9X90!7Zu?}*w9kfC@1R?8=m(DM$8Y|NZRB3d$n7>pj1joLO^*gFJ#0VWg#Jh0`m`v#Xz-XM^ya9Z@;SGzcS -zY21r~!=3x1HpnkWSQ$Wh*7uLMqyaemAb+aQ0HGdU?xa~Loi9C-DLN+DPF5X_LB!TP -z{hmd_M8t3+rPKnFc4LaIS&i;-<huK<*HGea2|PVaa7b4WM;v_yCpI_a~;v6~LZtB2JKi -zGmDxPy<-$0Vc-xV0)b^1AxPA_JV&}3yOB_uPmuC7}@m_~DNN3eXs7TVVK1~3Z{$S@FNb|o;hB1cv3eSd9<*-@i8+xw1?^%#J -z5J&^aW&{65P0)P7Vaa7b44`vo)c@d1mD$i!%S6pTtV$D@Zv0;f@ -zqyeOa+yF3xgY1~u;e=vm6`Wv%ILnTb6_fgROz;vLD?l~uL?VavI$9kNd3lD6=kqOY -z5l%$8#1V%)5dkL_pmrbH)t`f30|gv;owT6@W^t@G`h9~%{sV;N`;#GQ)>B_j-j~jM -zZFTb(Xf?i*e1q#}Irt^?996LzYlJU;5LdrH!Py7PcCyOn))8FxD-6NmiVD2Hg7gZepkyd<%T&ZI~ -z0K8m7e{(xRfQTyTqzxs?#iodDhq#}ENUEMET%k=J&J2071~%NRrIqN%KhpV^+uZ!I -zWocrTKW|(LuMwBR%f~_<>0}K9h9&2aa^dXbwFg<-&P@cD{V)KVH*Q*vJvQiKy5Qk( -z89<@%&g`hWxnWM4C{IAL3-NdC=t8-KJ`kaXdRxkt1X%)s+W+{y=^{*s4J}w*-dc~d -zdL$lM?iA8Wp*4&<9>2p(+Mr;P6)8N5{=PNo`u{GJeFY!~foB8;{pu0VK8a@Trl>wAzUE?pK4o?WH0eFdyc>0Cpcp`HP=>n1=>4e!F@n_6vddK<$$Q;NYNG{A& -zn`l6w_op9B7vzA0_`+%zzj>Y{ZhdmD&l`_0ZK@zKV&!lU%h8|}TfvwG(E~-yNV!r} -zAXy2SQk_tnepj8b(piPZhqK<9oMfC8)R%k!B>5H}&JcaID-nA#vc$?3OqmG2ixmS# -zfh>IENi_aCk&A*NdO?5z;Lp!CC9=EUZ7aBpm$~?C0Cx_SA<%A3h+Q6L@x+KlgI$*cYVIa&hGo9qu_Et2Jpu0Ygw$_DPsNp8h{1ibs)T`cZjb*heHaX -zEMn+Rj~I~q7CU(>k^xn4oS#m#FayR^msX7W6C@f;Oy!r;vt0Khobo)hrT@R1WXgj} -zB-+y7K^vP%8BTZ!7D7~{l@VmVcM*)kDaHg_F@HvKqqpbPzLbDb~k&V -z*DZp}ei?xLa7Fg|?CZ$@JOvtn1*!c3&WzMM#0bnJ*av_a1`h5Bl0~l)(Xnb=JOz%h -zlqSK>P^y^i -ztBj^T2{JqxJwo0CV|2;nRDK(+9Pg0KoJg_?k_!EUmHNL69A*Ls3m5?EfqMO%&hGDZ -zhv0JCw|ve9+q|jcitMfV9fjL9r1qPV;oPG{E<7@}NXd<4`e7ypp6Vr=IG?p!B -z9PTFaKSZmb{_jCU8Ne6YvsmZe{}o)mr$Z68`xt^vF@8wQXOE(1W86f$P&fpk%X -zg@UY#qw#Nfr1cdQXx4(E2#G<*^#dNhky8xg(Qx`od@cKJ5#L@=Bme?B!|g*$9U_GzMTM -zZPOoQ8ooTjVHW>xgpGjD)gkBgA|g7R*+-Wv=(;>05=rCR-B)1EqY~rn-T>K64MNk=uB-aB=oV)|AUT|oER?}n{RRKx682ly^ -z$${izM-=JvyGVXO_F>Y1(dxh7R~)21GLtc!Fc7^UzyR>s9$Ve)?$2)%TyEXfj}<@} -zz_VknCPF6{ZUAQD27;QTfv=k35M;-8JH($ctBTNCmYi+$&i4m+9{>zT?Oa+wgO8*T -z-foDvH^QXtNItck>fqJMv963=XCzAyp+Wq-%t$zfGT~$~uQC@2H?Y;!8R -z^Ie=4?WX~Bd|FDNCk9_mopqdz#1fq>UrQN6AYAzjIisU?dqiduj#wbIc5;)Tie${jbZ$k132_RG}n#mbTB$rN@2v#)8lcCg(OW}>k32r^z -z&TpWJ0#TiIWGodCoUr(g|F9r(pb%kD`t#HEr`RoB+Y2t^-4=cuz`dU|Wy2Ex6k*UX -z7y#srPG(<#@F*%6u|a#(?sO5&fj4SCUW-inxpL6$65<6`(*%4?nEN261%?Bg>1;F-6drJkUxkxtRu-X -zc|Yn%-2C?WX>t}PqE`t)?K+GFWdSf8?0mWs$tyCX|IAGzot(yBT8)xvmsm}P5@!98 -zE({MLQ#g{q5rQ$!kCn(+6bHay+sr5=>lrLe1S<`&AZKv^2Jn3XXYVgNz%IU_x!`ic -zj+oSaGyt_3hOyf0`{SF#Z2*X8q>0>Yy#0-0Tu*@BSOOeMBO1H^`I$LtI(k3?6q -zDRzDn&B#x#aEkJa;k)F{B@~B&(1_HaI1CPODE0y9z-b94;`##U|Ia{MHC=~mQgT+g0oOxvS6(+Kk21wGC8=1s!ooDB7u5vn-e2SKg@ -z_d=vfNg)`TF~+|=AyYW_YyQdLpKf-ENQ;T!rIzG?1@R2HXQ3lE!H5+cRl7&ivP79R -zl8pbVhjU!1)%ZJyw;>8j -z27nXc7(0jc+1ppv0;T$902bs86p%hQkOPTR2oNb+`L~Q)Ln`T{3?;;i_mZ;s>Z2Lr -zWC>{hK0Dm}{S7Wrp7F#A>^O6XSh|cZ*#$11oGMl#1=PZv4MZ;p-%+3FeOD0Br@x%a -z%mvP042JZnGnZ@5y6p#L4CBzMNY1h-$Sd(<#131lk@8ay~;W!|-CTrcfn&7lw2GF82 -zmW>+hy(N!J2_)j?r*-lM3nZTw{Uv91IG=&+&qWSEyzqh?Xw2M84`+y|4XO`Oa(vAU -zoK7G^l(pjF6yx5>p@WHJr3Fc01$=-zNZt(m#m(m(N*6Oc#sFi1O)vU58G+nQ_w`OQ -zfrH0sQ3~C2$7%NPcdrT#H@z1tfS(4?>NZ4ysu~kT_UCOY0p}7@#!~ -zwSmUO7CT519JdDv67p?!3MO(Ti<04nv}!aa!)i+RMuZ8c9iZA#|7`e>RPykWFN*%V -zG0B<^v+VrQrD^=*jV?ZhR$A0)>3ae&<`(1)1#-v-;Oyg{9PIYj|0g)yqN99Uj2{LN -z#p<_3;-DI9_e4`R~x?>r_;Xdr$8fdKR -zS0_yX*dx#q8$C>94F!?{LiF$?e%m}dpGd!DI{lXMdp-PXobXJON3A$NuWKfqC2WKk -zx^D#{8!ZfAM2a5^O{KxB$WuNj7sKH_NAMg)7%wcM3M!` -zN*Wdo(zDn*B4pgwN5*8A@O;Y57=5 -zctmfWTj>-f3n-64JHWDp)3MN`VFLeAgP69%zbxM{}r6-gxz6R}Dw -zOvDWykUxk3;q^%GF8P~X@xSW@cl}I)sU}0A_3I-NRGp!qXu#pc!T^So#yZ;!V+;<4@*dA;BCsz=DtVa5RGMKy -z)NtW@VF1~z@1LB#JPkEK7YgpytA_}X&mmCNWGECz%E=dv)n#97`^LKijC_D(z(iud -zVIUWhQwVqJ1lNJAF3#J8p8bO4$)hAq5PydZ0m03r4FpL=qB_Zjrjt_y+L2#^x)|Vr -z#SZ@NdYm{RftBX_Uu7wW6~5f+k`AbT4-=XE#|3oVrjt^H@$3HK5iLJH-<(%lg5yzsJ0-U+ -zBGU+YboF#QFOT|vi|+;k7)*olDg4T5IIi0+^gU$J%cP6H+UDZJeshbmiG_criwrZI -zUEPTc1t9s#Lw=cv6&T>qE~Ayu>Ig$P?Yrr>tfG5j!WpsC!~1M^^H)|osgKFWneX8L -zp}x2h#cR|z*8YJ7F~bED(F;Tl8$!?a>85Pdr={>F6O(Cmp^0R)G&&P`{ehX#eu6kT@Hn@Tu;?{P8vjIkc -zRFjS{G*p!;=g@yQVBhYWB@Mv40$7l*xB)$ny{fm8GmBLM*-e~2hD|P5LEr%EgIwA$ -zihP#n5Xl~(`Q(CQ{-Fd61;K@-hh=8DH_5qYXa&7#b}Gp)8XukHAtAa2p#Nb2eGYKj -zixZbK=znll>VLl-VAZ4}jFWZiwXQ{f)?@E2>n;k71d%n9f&Vc7#D;cHEhWBM~#jGeE)skQ7t*=V1tG|6W^MCcL%I -z$sZ@*1-S7?dx*25vIGI)O~@d5bYrIQoAB%)ZK$ejb)fGt29U1^EC20~)wd{p=(Z}2 -zpNEnQoxGs|^gm95) -z$QwMqC;dM-f!p3&k<4y*_Flo&3oe82s`P(A27o60fZDZ@4}e8AWZ&#tDhvQAXAAO% -z0*K8A+u;fzIkYThqRIO_!p8uy;q2Z*Bxpl~z{ZRykT(pGnBqfX$N=Lxk9?BmWHcRT -z+i9h8kdvGyRxg|rwB)Z0v8rJ5(EGa}JigRnCT=L8!k^#%!EG;3*+3j^EVwE;8?gRY -zP5J>iUi!QyFn|WE`{Iv8hodASBr+(;go?4rg0y-k>cEnV844TeQF062KYXW~B$AUq -zxWvJ)n3gJvz)0ij40$x!d%g0937B#ZyTMtV1Y -za=Dzv5ym`kEJ+Znibe$sLRta(84hU~GL&*7WGOE+dSxPR)lm|y>3)zCH~c8;-l64R -zTIJ+DHoJJwEfW24Ft5QM03fYUfvS9lKrrhduH_Nvv)#q(#NoLU{f3QDmdIRgL?SOk -zGk)|i@4uM|<`;0SbLp8{(&}+5Nv$r+9sFAAEB$jJ1LV)3S9PP5E+i+ha`{Sw2j>ZO-!>{?kiKX0uC*P3z%IYN&F2#MiFi!a!%PN -zb${G$Hy=O-`!21Va8@6J&qM#-dTI*4fF_p8m{@e;l_(JPA)xLb@&9l3aodX%Rxv4m -z>aZF$0;&Kls3{p#k=1E=E<=rVw;x^;4}hc?asoQ>LWF8W(y|y_i+{_7Mr_R7=Zr}v -z=P!k~oRZ4h&am^&G@#vSa8dO*=Z|#0BSF^xLpos(0P2q5T!*5_uDAi|hd8`W^1^2G -znxm4$Z`ZE{V70~O9_V|V1BwH^_L79beP+-K_8qM{aGdX5U>7rci^LSpm_qIu -z7`#L;7&+o|pKRc)(`TOwZq{ybp5ST-@bt3VALZASHD&u!2J=1MyPfE -zp>(loevY?5(u8vrtscIu941ox1~vQlKf-Nq&i<3tzw}zc%_`?Z{sa~Nv}#fYF;<1u -zYFdv$27R#Vdp6`GR)O#sfPv(wWyf|pNEM{)Q5pd~e5@FbNmoD_HfBVGO0j_iGa}>z -z2L4CV<)e1Fa{*rfazf!L@>T9x;0PV&OI$xAFl}9y3}*Om?yw&(qu)0V7KHW}FaY?V -zi2XnD{RF{D$xT#$hD`pbmM4SGZ45u40lTaF9b|o}LCYYESzX72G^6}UOEIKMu!$~w -zA96<#8ZWRw#7XTvhTnl~GW>xq%VnafEfMW+sZrf|GSFf{ -zDU~k&A%)*KD^>VW$OU}q%>^Ljj8Lc5`J>!t2PQRWJ?y6mT-=7Y=?ebiNvr0M5;+EMeQ*K<3d_dE+uEuh)X6)$5JO| -zNdpn2GQ&>s^1~B(r4h7}#3u5Vlau-V3+?

idy9-TY!&B~4`Z1v=3S1Tw!Tx$XTG -zIqZ&iUKU)ebzxn>%@8EN3Tk;tv8q+!4A&=I!g_37E%X>N!zN;d7N3%Xwc-elDs=Pb -zR?1l%(gbzyh|}wz&yU0+A!6e+s5l`3(gqTzc3hIE)P(H0hz9n?A5;0wb5dy)afpy1 -zfD9@85&&Ua_y!6n6k9KjQz;mzxI|RS2qcdd)Az5W85jvDorqRwK(Y)ZL_!Lcn{TX@ -z&-d&K2fux;o!>k=m0w22Ri8eGBo>Sh39YJRXq84Ji6j^LKwi&+prL|^(0%~3|B%FN -z_Vw@F)^*|*;$SnuMOm;JlH^xG4HwOGhR?YK$4)n5Pmg$s_5YiT0y%Lgkxsmlf|=k7 -zNdBNkrp@#eehZNqWf538P7&^El-!M6jFSJ0c8?{2vv86R!I+={omofsBCs-XY76=e1aC<8{5qLP^%o3HIyUAD<{fSL9 -zZvNp0Cx2|IUHAuA{*X-mLXrhpLyX+ne;;Q5pNV^y3JzATERR4BRSw`w+q -z0W@ZhfB!P;`==~P#o3G|l7<5LiC%_gymM#?zjA5{&EO6(dym`e5fTZK0u_zwWp2d< -z7?A>Enp{!93=M+$B7qRv#L9&|(!oZ``~f09aE4(7Cc=gur=|8^eVX0* -z!TW-HH5%dYD`bAd=KShSIm4B_mWKyu&OTnhk_|c`R{;!)iNO9MKjC$tgdv!diG2mg -z3<(5-+Ik|Bum2}QNDWnw1HIjEhl}^w=Hjofaq^c*a|18ng%R`YqNKnG#O|BW3RM&? -zB8ldU^pQ9vP<>RQn3a2Naf)Xe@Ux3g*ejnC8E`!NM)F6n0}a0?kV6P`UN -z#)gjCV`Oxu(nyIsr?EJ2$}iZ4c%wBVNg~B23a7UYp~2WBq3fGZO6DyH|D8utaj~7h -zvo4MI#!8AX=V9psp^yHc8U9$BJP*~_m*~g)sGm$^4GR$WKY_S^2D|mumjvf()`J2; -z=riP*-=bPxNE8-WzI;OlU*P@aGsLTDussa}79ye-2Fz|c$rX_3!b>ht^o25smuO~2 -zxUS=msr;&`sl0A{ve3?EqLnmGg%2iT6^wGo1;ix@BWX7yg;umw5mEYLlat4j!`vOo -zE{pGl2V?+W{LF1nk60|Y2F}UZ-x&HVHUm)3uyGY=%sM`O2m5kof_Ot83Y9Df8)`r% -zz)?gA!Y3P@{DDOd-fBupi4z;~e}o!!U`2u75(q9QosHSMZd`s88lf=}=?sHRdgZWw -zN4V{c*@^6``#TA)<)8h-?)>V_7!sB5603GWBl@!`d*z1#?7M^T1x|~z8ZAg0Ff51$ -zpspPW8vXD60UXWp!;^&JKq`Q&kUh}jsCaBMEmc%NLUy6D^nH>_C`22*3*keLSY_7G -zYJ)5&0IiLJJRJzDLVg7TRB$2^qhE8&iM;y)GY`m+<`|k3z9fI(eR|$^)~1nMN#*y< -zPvuvWF=1A33~5IObsqiRTI4@eK@Nlr*QS%OL;&IooMt%l=i{F^d+-~a_tTVBYk;z6 -zL?OYwu!lYiYDQn68mn*)@&b)nrRtZnPk-9M20{uYW{FuyCvs7+AZRFogc0g{u#*YS -zDs(^eKODx{2h#!c6ASG5x_{(ma*z(2$aQITwm|tp*ay7!sLTb7-{a;3$btTNgOfi` -zatHpwRkZS)kBv7bl7<4gL^lJW_3uw*v9I@XTi5ZsS;cC2>2+gPp(YduB0t5h{f$kn -z0_vT@=j5&eoq9aYdhf~EzC_GS}P_|3EJ{4sK7F;kED%`JA3Av`KxYLTAJ -zUE~bolsSYeeJ%3(HvxU3Lb(Waq8M@1PPYYt{e=b5tsu#t!v_3=vwkw!e_p|1S53Vf -zL)OF|!p{JY1bJp`c!& -zs(_i+_$K*K04tO69)R%~LYdgZ@9{s{V?k>Fa9S9^#~XOmV*{rNPL-?LL~yK_l0f!eDBxe6?)_V_0p9%X})$`g2PL;2Y18-4> -z2Cfxb+`p)%RsmTfggu#6>%&r;v3ovxn)Up}BNAk=W(%T*6L4BVS~Zv$Y;lq_Iih$i -z60|;2`*0Y)-sa-3uEu^?Su_UH)+Yz?TyMoDl1x=&6Gg-YbvI>)!=Q_Ri6kY1vO{G^ -zvm!lr)scz38lm>+BwmLAZQpESGVe%6^Z+^d-Bvk7$T*hd&Vobf{NDLG`7MYW2o%|M -zfc%4rEB%jh+ne*!*^OPh2`*Kwf3e_JUd>ObnEh2#VNrFQdRM~4LtZYS+!@>oYsF`v&Fm1%U2V@V*1TG~BgaWU&D48ZQKDErwUs&M~r2+uLg)_(>KUF5Zww&_ls=rJWtf^Z@dG}c)5e^w?^qxDjeT}npp~o-8$!B -z*G|i*XGZp6J%8rHDHbm@(1{)%!smlw=|`QAPKbXSR{xz|{De0`ksoLKcVEV%I`tY1 -zu6Q|vgjcDTK6*1sAsH1y;ZoVM_(7MkmnKbOy?#T7%M`ax&``mobIm{$q|-vXkPLw) -z!|-N!RG8u%%mhQcAF>DX$0$(*Qe+isAb`X%T`x7i#8R(|#WNLjk~V%TuGfiX{W`Q7 -znn+okkTw3NZ6B`XwnzKV5*z_n%9p=La7S{e)Jq?|si=@FlMo3qk;G`u;Mlx2YX$4Q -zlR6-QRsmrMW&-;P3t|TX)bQ^~%*-VTPKiVI6MJ(JJIDUs(Il0`ng1l4@TL^tiKPzV -zw4%zi{frdhGXU3;kOCD;;JcmJCG1hkd$<+q#VSiMVlv;7I<2SBVt61>1~L -z2uTZ^)lU9EE#VK8Ik(Am?9F-GQR6`dkZmG$K`;>|v_PD^(Ks0*MZ6rR9^mg#Aci=4 -z%+ON;Q6YVnlc9l`T=`(5&%_Kl$)kPvY_S1O@8{dO?b$IqV`^W}9^CM91iBxbF($mu -zC<8!KMxZK2z5YNwNTC)nmvy{_y|ZvX4mLFzfr%t%12EtrfKH+_6(E1lU%Bmt@rR-> -zX?G_$!7A5Qu-Fv1)-7zJs>kET) -zdb3!so!s`~q+`)n-i=e;T6#HwG8%B?jMV)FHKRYEj#$5t)o9R?{=6)@{nMStDcbu$XM5x|+Bdav?u8UJHQ0Mdf3Olbl;uJ4~ -z)B1Gcl^$fVF9rEeL|^mZT9H1`NRmImJ=FcM8o=4@K+d-X(Mk}Q1* -z?e!bCy)-Ey`r1dH#Mpbu-;m`wy~cR|89)20W^{^Gk_HaTxoy>;q!1>kiX~8c#*}i -z+?ijFJ;I&ff=YIsu}*JM%_=g40;h|-vp}op*7x0Kdt>f?*6UX!%W_z;7{STlVIqUX -zd7~3~i-}2=xP|-#5c&f$n)cIEO#iNcYv|W4IhcrDIFRr}sB>UK4*P5?w>=mCM|7(@ -zq4`_Un70yRFFA0=M|^y3Rz`r3S0itSw2HZ;{VnX3Y1>f{#ReUhn<7l4^%o~Y0}~<6 -zR#=d^D8RWjVjz)!(8(P7@6+t#_1xAa_Scw(*W7_IX4TI}ky|70*emj%@ev*OCyk_X!v -z-(SUTPYziZQ=?uxj4i8F2NRtlKgJ#$_}7qMHT+PuiNf!IcwRKU!i>##d)~ -zqVD~40LBnw=^az0`TzCgS4}qprXW9!p%_aU>QoMIg#3o4JH{$RdLb)Ut|@88 -z%c&zTk7?HSc3anR>)1zYNfP}j%O|iJm_I#skMLViQjjX)*Kf=@KQ?2$f>yF_GnL -zK!X3!2^vnQSs&G$NN&A4%N2EhuUN0%SI#arvSSP}mKf82MW{2-W;6noF-Bbo&VX#f -zD%B7XA{asR4bMGmdvVGx_R&w$K}KzfD6Q2=bS5Cdf9PZ^PN-Rb(8(;;_Xx-4b=$L} -z_e6Ji`UQ*)#>hKXC~3ynVGLDCm -z%!x6>*kKHfwLKB?7txGHfQmqr#i|HVLxxiVyncaL4LWvx-uB|89gJooaq`5Vgi<1l -z68wiwy3zs>*FPouwa*_iw*SoNU!vMQ`4Yw;SMSSHKrlus(u1+X7)HqNXH!OCj1a+r -zf|it$sBGnyxvN2$GFL}E_|;(BYqL&>liTkoXP<23 -zwwI=yh`R6dq15MX46{B$oJ#Uwj4)QlNKb_P0XB3RI#BrqD3w)`=pu&0QjM!YtDEj+ -zPYju5duyRngiQPY!=(`fYX}McLnqUj0+2p8ta(ywR%bnSaNFy1oVG{$&53T_@xHuS -zzYa8X^p|8kB9pD%QrJU^TcZ`i5tpqa}Kk -z?VY8WtmiM%5d2yZ68wiwq%#dh;$y}K@uBnIT9j#fV(6Oa_D^<2--=nE`dak4ob@pV -z7z>OE#wMco!_ag|q(Y^})qs418m(BFN-zRp2vN7Z_NMLGxJ|b1OS9M)J2=jp%x4Iq -zS~0;t=)^hGp%Z_=G0wjDh1=d)oMr1WVsq3@-QLb6KJ~5WW2yCxv%U&(MkG&|n=%9} -zug29t`38+?W@;{cgG#~>uqw0`hVaa&wYIkxc!ZCDM4C*ZVbF6Vu{C4RiE=hUmpOw^ -zokmDglq|n7&trRP*t)2jUIg)5=gA#t{j%7z+t}OJ=yT(&9|>_5Q?ptPpgXaV8qo)2 -z9U+S@MPvel=N-hWqB}hEyzPm>b8WBBN)#Do)ED8TIzwa0r73f0HZOS$p(>+^a)t$vW4{P -zdzeEK+TLB3ZF^zdzNk)Lj*4!6s?=x~b?d9|*`64(h-ScJwhvYd{VNC}jKLfGK2r=rC%hoN -zka;pRjPeosjpDaHK4?+Y&E4KdALJ6B`o=4D6!DeLM_=l4Co=1oqGntTup}c4hYY0h -z4{+8@Lna4R_z0|GE#cVZt_l~ozdP!lkG`}$IebN~G4vqExz9l^9K*qt8UVuo -zMbEg4vyV4&+uKWA;@RmpMBVvr&*&!C|F4X6Y9;aMH%onA2~i!y@|DIn&iDlpKSKUe -z+=?;;=vX*%h+j8i2~d% -zQ4`jCubgSIbyLbFK%RM-PeOSCLn#b-lFKMzfV^TqtVkd`?hXItLvmu@Uf>YV_SEp@ -z$kaw%|3tT#TIb)Sen%eZN#@|UN|}RjCi(zzjL^6=TQS!*U -zDiAS*F_1*6o|{}#2GKgEdi{>k*K~dwvue~M-%hqYJ!*}u>!f|Q*XJbK-dW-X8L=sZ -zeets-=r;$XfgsF?gdE75yBZiEW_kLz0Y{}?$9M4EuYMN^DRIq@euCrb7We8pd7rJz -zh&53U^_eVY_-h_~2G2&%cy%t}@$B>)gv61gM>I#x_V~^C?dSva1^NVi6CwUt)^tNq -z&aw)h8dn9xw;M8L4A8_%CRNMlGvuxiAY4q1x*ddUYX9UbQFnFk71imBVbPEFn}ONb -z_T1RbwyqO**}Bo}{Oa_>wm0S+wY@p-1kKo|Z0{^0qgkA2dyD@2jrk{RZ_GVvdu`@n -zTeqnPY%fmSX?reyGhJg@^dtSJHOL$2dL!xa -z8;!HQ3TG6Qn5e%zU0TqnUzaWTO8IbsaW7v#l(3XN!m8uIVAy$Zr6&3M} -zMxg-B4U)ErsZyguOxX9w$F*=xTpRbmy>L(5 -z8_$4e!80ks<5}^{cy{~-o%E5}KGICBAY*_;P(Fh)2(?0>5Dc;c#Dm1ZtP3(?1_m)3 -zGD%WIT9lC}V8%AW_;2_uzJu>JWb#_LCa#Tp;9j^V?u}J-JM}qy2j9gta4lRD*Ty|? -zFWeLN#xtlH-iq)M(nnfQO_4`82rHw&tP3(K3_*8t*cli?!aQ9ZLn`9l#~u +z>-3&OgQKf~sVO2rgwb{W-Z@NT}-rFF~5*WDa3InI?%1hPmRU0oX>1g6$xm31U +zb!z4RnKwQ2p50T4p4?!4zuZow?EPNr;(s$gPoH@@Vu@=MRus@%EdBc6;u|J%x)+*{ +z|7hLw-nBE^HEPM!U1=(o9@dklpH$6VF?$#PyM;U|Niq||a?aW;7WXZhP#ToQYj!Gj +zey?Btp-0Ag$&c^k-iSEQn=|LRnwi;OGschie^~!AuVI^iwERPC%;FWx?8A>}DCw%4 +zwb(6w<=AI09lgDR55>fuzjSi>*K@S`n1I-Y|M?1U7XG(8_2_c&3x9sa$rGF{d>_O; +z*#EKohk5_^&F)9b3wdL>uOHc3$X}?xOZ{DJfblw^iDH>{<^paL-Sa>0v5}sCan8}* +z)`E)F0(A<1+&n%AMF`%KD$KjTu-@FhK>v>L_hZIi7F>N?7iBxEGyO{RJbod=Hjm92 +zmBzJoO%MJ%uCh2U?DA`2k(rSaAwN5s>ujX(1wRYk+{TwfI>DwN06MIXyfA*Rw`sKN%@kIuuClTe-roT{lo2g$h +zW8phxUe@yh?&l4TC5d(x&sSQbko?2vkJ=xzd{_@PRC&eNUGy00Rt8V(P +zRFto_WH#sfz?9&W>z$HyJ%)!?J~mNo?=8DzJSp*k@z37Iy2;hXf1~w{rfvHe(+9OpznL-xE=d&W^d$019-6&~zeiW8|Jf9-_t35{clQi?!M(wySorSCye(PR3w_({L +z%T9G>wiGjmb=evH;+pv4qU5!bmBtgpm!|HM*8RDE +zMq2gD18wg2rsy3KXE~vgzeIDsVnF=PxHRR-tDk;Lc9EL;X_<`W)s&{Lj`ug`)^Gc+ +zP$X=1X}+Y(ch==+S2tywFO1&T5`836ua$T6WGRt9mbZRNbo<{I3wktPR^>ZuoU=px +z({&uTIr^Wye%w(Xz%|S6_2PMI_cp7@e_VRytRRklop$&tb_kaq*sibG42g%IZK%5Y-4luWXO@am0STNGv+J~EgTuKbAK+(kX*hM)YOdSxFKb0_uu6BFXa +zj_!1O@{F%%;!Y3l4U*F@8}@B`QuB9K|DXTcBJaE8$f`Ao34dD4wtvGy&+E~BiA#Q7 +z>^Yqg6BVvh6LoLRd%NA~wZa=qU$E$iPMEsFpy}c|6EmBiuBSKln8?q1Ww7Ml@g2YC +ze%-vU^MRF5iuTa}H;41GvoFmrou?Mw&>{HaMu>awzujtQRW|cJ`R*pC!%?#AfJ=^Y +ziPGGQ6Ovo+o7xoez23MsY~RM-Elg2*Ki~S!@Y(PENO{l7$tz6`yW}bRq*z8bc3sYS +z@3mnrugw*c`x5T67D`TzUK|v?x#IgmW3TtKJ@Q&QCH~9xI88Y*)%8J+%cuEk{x393 +z>QVMIb~bLabhrNR++zPywLWd-WE-_2>526pP9I(VQOr1o_0hYfdH*hd)M5Oy{oi}H +z2T{MidW*V=vZgOHXnLrr9(mtBUp!fsbMmG=hnHPAX7Nt-lC}4oKWa&@Hz+iS-!)(Q +zxo&?NN6+2q2aAh}oS0&~W5vH;cpsf(Ah=t@g2&^u$X|1#no2Alt +zfA5KU`-%4^Ygczo{-f6P`hv#;*Y=-!{~mCe|F4O*^7lM1cH)%TWb-QrY_I$+$hTph +z=UTsS!U30z_ym=`eOq)cE?1spqtY%Xl>C2vEa#GE+c#e9tL|zAxygWM535$M@8hq_ +zEq>mXzWj5M@=Tk9Q*}9Bo;>yN-5Hs8XU-_AO?Y$inR-l`jPL1Z?Xr!JXI!p1yZ7YH +znpX#X{{4yKUvG8pKzIm#6OqN{?zZeyHip) +zW}(Xd&IeW|LLv>X9?$*rtTpf7tt$Tc6$+D&zd!wCZ@r)RX8jL$r1;-&x^-AS@}=PX +z-Gz-VyDRnX6|9onF|UrlKA?Ql<&v{un`3r{)>*p7UeH*rH(dErQkt&3{@m!>5}%)Y$@-{#W3>uA +z%xT2*$MQ)9)9;$!rA@-=dj+5Lf0qAp^P%a)sP@DM|8or{-VlG0qN6z>Stk2=&WDZ8 +zYmRSA`)N^h%~bT2OxX@L!Mf~;Ps}Io`66`BZH4JY%^H>mhvet{d395-?(Q9%E$W_E +zGI!3lmteZH@x<~@5d{agVj({|NIcAGApogek| +z+4~$X@muu|&hgm&?dP%k9I&k8;d`G+H|Ebe`+tMC%%<6MLoLpJ>&ba{;smGEuIAqA +zzc2Tif2j5{tFPbO9`5$=_qSIu +z#|qWs{pJ%l?O;$hE92*wdvf}}xhKulQv@qFxhy$0HIvVAo~MVh^FggdrRbL|J0=`% +zoBL$V`FoB{+CO&|vzb5r(pO}se3Jj<<5L$;M#N-TUOrm=-osq*S&nm67~lTdi;~F< +zbBo&>W;KPQwUvFHAD|p^x%JlTa7mI+Yb8fwj`*ixp +zdRE87yaG<@g^mZ_{1l&eLz9$~b6dq5Am8@ZS`M><6ct!EzcKf}zocUHB@#S6; +z%(X@3zoX^i1C|}X+fOR4wN>nWH?iIOM15oMouanM$9oLx_eCt6d^>$f>c)pB=hSZh +zAO7vmi&;LY-RD=Zy;b`v?J58J!z2~^Q!K~cpMTIPXX%|37F!r{ZqLRPk@*wl8I104 +zyrCP`@mcNU411&f1$~0w^~KdcGhW=WOmj(u$etF9+lfj=3pPAHuVeOvB|ZMXn7+l7 +zRObKIxt9q-()iAvtOEw=OL*Wy^G|M3P#Pi9}Z?=C*=jM2m$8W#U- +z4Ft^u8lJQ&x!2?!NIX}SQxjEia{BhvX?y$+P^}qDo?KpQR$lmcPp$vuXRCMd&(4*v*G{)Q +zTC8zJV*2+vjE7zBIV37o3N8puU|DkE{r?TypFLKUd&0j)>*+s-dq$$JDl;P{T{4V{h2ji +z?PvaRSXE-xKjCoY9f8mON-L)(G0aI3IUT9EdBUr}klI)CuQz5(zn_{>aEvjuV!OHI +zCjDTW>O1cxA8r3~XP#c&?e6T%)|eNM-e$J$dFHO3|H)Zu{{)_0YLfnzKLpj3#M$N^ +zab$WbG{I?a{k(G_bqhkg6-B>FPW)9c?@Qr4GeN^SAB3cb=$N5IeIhw^?boQT3Z7ZRcqPgtfr^^sXeMy+woy)$BW#I +zZ*?V0XYb#6@bK?{lg`zvxR-l7O`EZBvo4!0)BVN`*~w9|Iv!GK6GWuu9f_QOm;L7H +zU@4Bisa~2Y{rfu>vA=t-y8n*A+R3H?5hui3cTJv?bd2d@;B@)CO^an1P5)1@p5QP+ +z@`QfEw-CdsmVm3%+*`LEH_E(v^1;Xb?0g=Qe|Onm-dmjbsnVUHu?B{&FW#?4jBfB*yD=M$E_|aCEn)HA`dG03hHZGN7vpFY> +zcq0rL3LT!^RAF2;(dX6o>|H11oULqkA3OVh`<0{bquvP3ytdlYJl^%3deZyn{%wX{ +zS2)~-PA%D~y5Rb2zbPx+GYsd>%T)8Ut6Devgyp_$!6oy%?RVcg8z1%h+1_o{74zp` +zuDo-P$L@Ck+kLOqPa3c2%$u0{j+<3N><_cBWjDKJP70Uh5%$mL7UnYS|@Z~wAUq4ePif37ntekHs-u&UvR*cRQgV#n)zcc-4afA@)^yZF_qdiQFo +zIu@xdY+}90+}!EY`e;re-@TeBssH?Ezs;S#`$x3&ohLfGD{GCi{%$_Xou9Yh`Zv`h +zrj`$NORs&QqMGy4vj9wJlsG +zzw;+NJ!|rNc1Mha4CBI+A?p9TrhR;8(yc7lXT;KC^!0ozci>{#J#uHeI{rS6v^rDV +zRiISxT}Zq>QFoDVWyNfn&+qFFt`z*)xWB!`P+|6v*OwOe{5ZJj*9- +zJHBl4^~|q7D!i@ax2iYy-&db|-d8BtCC#YU{jV*Br+9YVyANf^Yw3nX`Pi^4DH{c~ix#S%0h7tnxW>@1beK +zn*d>3fdv9Cm}_;fX`}S>oj;tlpZM5xbTG_pIU)Fs;f>!pp--Hlb3cfeOlp&6 +zKe6JR@}`*`LQXZijwbI~&nKb(i$PFV<@^P6gFlf^H29S~f4*}wug_7Pl;-z|Q)bV( +zidT;}Ub$XaCTDx9#-E#sy+6WzTMX;Aw@Ls1?rM9G(CN}zl>UG6y_@kZHvX?uc+592 +zC5Y`$+cvp8>Y0#b!$FsVoTA8j8|{>*=N}%qao@P2N3_wYqw{w+pV$v>AF0><%0bf< +zKk41|_%@S6T4;&X!>_D-6ZAK{@jZAjsh?xz&Hc&!pIi?0-kTd+G`)UCKwDa=$JE!E +z-wyiROOCdh|INLPBRt7lA?Z^`skn-%6XO*12X-Bu$sYn=_rEdJ@=@$J6Posa?n!ak +zbIeKKXV|W7;CaoQvc>e6rB4g5>8-PcpYCUd@jv%7pE5CdsiE+V@F&Vu2L%KbqgeOd +z*wt*hH~bgV(Oq08d}2g?+dX7FyzSVAbN_VHEPl>QS-JmfA3uwM2+xdFD;+f%PW+8d +zns(vD*BIHNSEpwB3FhbfxmDV&b=d03cSUK6>|FO< +zms&KU5*NH)_*q_Madl$v>>8Q=f+G+47x;0w_1HPYYwTzH$Mfsd^(RV8E+0K1KI24g +z3+u|ipe!?g@0`;3FIyfYZA@+d{OF%yPRgl2k7oRxn8FouD&fO~8;2ewxwYN-F>TuG +z?I%vwcFeguyYs@?Wmc7IitW&O;uP;yCWWMZC$$XBv5o{#Sc6b_kfAt=UpF=RwMizYI(N?!R-Xp`+l& +z>c5B67*5q!-7rEot&; +zk~f$hCbC9n;TL-^p}wA+kI?~QM*VfSU1oU%h=2K~#$R7Hb#{5wt4HNJD*xMlsalmE +z-JlSk>9EFjHm`N-r;hp?!OnVucivbT^$03vGF*JpSbny&u5ej5Yh`oO^c5aup`VJw +z+8ZBO7kKE;&=IyWKU4b2J#2@|H3?%Qwz|iiJ`X=E;^0}X(QxNs&xARe1y%g_el`Dk +z${BTWQIc*)y2H%Cm4D`JEQ_0%_HU7$G~0;@FUo&gR%bhwA3VFk^03ht&M6C}^|@~S +z+^UeT(6DU(oUpdtnJ3-dge@6FPOP`%R`Txg&b^oiR)kEJ6&pVPs +z_Wd#K-D~jA?cl`?Clp>L9NDl?-TuS5f7hODSJ<$>p=W1~n^b+g+Nmpk_$H%;{23BH?=1tsS?Y*T6`c>MbQ`JhXV +zy}_l4%CDMt>HmrnD?i25lM%fSvI?m>fh*QnG>Fp^p$T* +zla{YTNb+IM7T#2s$D&FWM)PJYb<8_+Vd~@5)Z|PhE2qh($E~;;=N#=_Ar`N6Zkg%_ +zndg1mKTAJf_Hp{PQ&U-XHk3ZGK41_Ku{`BvR#arx!TA?XN=r@P@p`!Cx_;)HpMmDw +z>)JxtPCg0ekuG|Z>-aD5++~-H25}yJ%RfiBpTa*Ua?Uk|P5$b=cdOZp81xi< +z^%h3Tv^AIPud}Uh%vNyen#3l-BNW)76{;Abs=TWq<@{BX&s%4@_I+2HKI0~Xi_a_n +zCHHe3OSHEr*R$<+&Mb{@oWxple#Ot@f9L7Vxj65(N?crbdJ$Ji9NWujYV)ksWc)N2 +z2yUvHGbPr1(v?Gh?Qgz$w)up?y2Z~g*h@@yUwqT+uV3>V +z6|S6BW^BF0c|tv9=Eh4e+Ey|rUUi$?y{dWRWW$?3w@u!+wrC-f%;k5|cNcb^nZY5M +zH-jUeE#<<3dW+u$re4Z>E-nZ-p`coC7jeC#?vG&p+WKvNs{$6D*4lnz-KoPfCvY3o +zFEg03JW{&tQihjQzH6V!riCjK-5*{*Vf(U%@uZ5ymEWCL49r|yAMhl%e%$(CwZa1_ +zk7Z9M+FlhZ^)NfI;>-JX=>oUxUhN+{eGCK*?`%-mwq9c9tg~&ZMc;m2OJ4KYd^+d3 +zHWxO{pO?QMXx=$H_Q=iNv`t`^^aknXbs2T$TKcH>N+Q+rJi)WuHQR*bGVwlzJ+v2uE46-R^JYA +z1x(}h{BbOs;izBTmDBNd#=bJ|8D}=-=$*UaStPFO?ZoI_#rI!bH+qgv4$sSVu6}jrA2nUfTse9F?t{7v +zm7njPpLfS<;l?N8XDn6b3rhI^zh5LJxx912QAXj&!_5;-48L0+xoOSa#(l17w_|9> +zszc_-PHleJd3q`1jl*j74@#7>n3s#~lG&7M#w)jq`=M}xeBK5lR!atp%N_rlFPsol +z4rF;Q#P>A(Nlg8oo64&s9XD-zvLn{@NS-0@)qcK*FXs6lac$e8b#|G?zfF+>dzJ|L +zt}tS|I$P-J!oR*pcvN*bBIh_5@fdNaUXovT%VEx1ogLch9~fp|`EU4U?NQ%|8DH(q +zQXel+d*jS{vGfrelc;HvvGo+0+x+I0E-&BJddKXs{mFJ?N1>cdHaF8;Lr8SSXEO3I +z9M`DZ_ETc_|JkQm%bPzjKbd~IV|!)yCiaE@pEfR4WD^RtYV2k@$J}Jxxx@HS&Izgg +zJC2?GZ+!oxwBMwK-YE*FCo0Pdch9_)r*>f`o3P?xUhYLx!+88H&$?ZZ_&S6Pi$=Y*Pi_IXBfZyrpwNkbYeyBFI3|cRFhe{F3wB* +z9Fxrx1uX@h9LF0ECd?0*?z{Q(!Tl%iTekfBQ?hyX{vEfD%11tXBD>Om*58EZTaV4! +zAD(leGftp|aRSe)`WZ40TPv13R33cT@QLx0x8a)1-C8*jm#p^l9B?^z=p)C=|3_6C +z3l=eKGc=ns$IWk@GOXaPsy}KLwx2a_llTHgkM}!ysx8+sYM)>< +zn`mqh=I_0d +zi{9$AM_6iIteC2rsoLYLp1XpPS;DRF!*c1qjn?-vv@GuI%4X=>aOuCTS +z0_j^73O*Q24rctSJ>z12qpuDyb?^^T~JpmX>sN3i|Zj4{X8717k-uZ9Pn8Y +zXWFv)GFO6S8r51nd9DVn-tT|fv{L#-)y?^&x{pxPl{AW<#m+&chfiwGw`AvQm +z9AYyV3gj-HX@0rKe67^^ORFyab7!}o|LdO1y$cHMyvyxg?Yw(Z?tS(02L%j$8+vVJ +zDH4zq@4No`y +zW}EJJPhrBEf~YTd!*^R$XWr>mDj%aZ(qV_@kgP4)p>@6a&hmL +zL~6{{x1FSErFO$FOt#nY$Tge4^IQ+P94Sy*dWC7yQ<+Hy7ry6uJiotBq1WCo`RZIX +zPK(ng+LAx>{EB*CAAg}=P0n~?x0Bw*wTwTFmA;z1{%oDD@9&tJ@$&%BgLBtU8HQZt +zwYueh?q8qN6aTCO4LKLAkBKLobSslsF6;d4%ktL?)c&ST;_nr-+p;6P(O{yHg#vT; +zRi+Jnk7k?<(@Io|Ke%H?&y#DFnR}#9UP-jJJtTg^$xb4yuW8Aue6|F~PlptE9o`94 +z*B;9_n0PYPo_9fM_78@sH@>ScJ0W^tUapegga+g8S)zNBMHCVr2q-Z%rb;M!T-j~o +zzDsKN#DG}=`GW?Dpfz7iP~1viW@bb?l$UrI{-4FZ~d`Ec@ru%CdViI;tPKSldre`xW&uuHDol +z{i@pvk4qcud>N+yOL#8p@p->bn_=58uJdidPd7w9ldf8~=Y8Y^O92n&6KTx<-Fz?9 +zfc?y~pg8@?{|DYvZ(ayK?Q+(BjhA}Jgob0+Jo{HL$@saH>{Dp}baJX*-BX?x*V>p& +zofEk(sYcVhH$*mj{CrU)UO!dl>b;Wri59+1b8anlH#)M4sk!;{>-F~&SzX*qF0~0g +z@Adv#DLz;5MfQu2&MMX$E9G`?TPEuv?sD|aA1TS-!rCV^m(Se$Q^eZ7y@qw}n}5nP +zdGw~1&w2dd`nfH|(s6BTCtGApQ0|$mbT4|>Jc}OPNvV70eA~E^>w;A8s*Q=A(MuSY +zwA^7ZXl{Npip(-W>%TXxmy;pq!q3)`&HZQ`j5Hg>F>#knb(5j{q9Xa +zSDjn>SvWs?R4BJ$&wClmc0!fF3AI`m5v3qBt-z*J(hfUlc%ip|k+Sy_!u&}Kv`qVU*NT$YH +z|9|X#spQkas~Zt}FRFiYm5N;CJCRFX3r%~h<@O);xwRl+lBlLl*S~$HFMs{ln^McF +zz}}e7!uI!-;CZ{ww0BQcJ{xpDK5G&o`t`nS)&hCOjRM#HRZQ--_i4MBCG|6J@rO5J +zEPNs-SeTs?8J=+0YBTBb5iNsoQ3znIUTV>M$%XJ5sy)+ZH8#oRBM +zCMmvbxheB8{Y*yH@n6g*WKPI?=$#3fo#C+H`*L|7@h1(lu%oK_Lo}oHK*w2F$JtpS$r=Wb3i^&G%-`Ntq*h +zWqJ*R%1<%*a{{$nwFRqG9w +z_x)V$9X-=`{>Wh{=bNT@A#ZY&uxD_S83T8^h{IRKuC)Sz2hZsFRdE+g7hl3LttKN> +zK-TZgq5VcbI%4H!Exl{9VN>4IS2LG{E>~FC>Z`1oc1hG+=S0+>4GJ^GC+KWFzU+gV +z%N6bAw|~|@v;4vAed)*R6qOUKXMP*UK4D6c4c&HM{ma%L2lI9Qx0rRM +z_9Vv8f;sd3wiqxU3z;6)^GjGo%E#yF^vj!LzAMl9WV2=I|NXO5PBnY0+`4q%QF^wg +zq+bQ6m{Z7-se&o{$_0B4YaU~XHmvtPBXVxDT^-j?9tZWJ1p#ayj+U8MFSxGTbh=Km +z;ZK3N5P8`i!JQ`8Qg +zdt&I~aDvH0&SU;F6Aj&Ew^$XD#Pzp%>aYFWGHFcg+!7408ms=! +zIrr{;Y5Rks+uLi-vEAOY@^ROjwLfJ${>)68&g-zc+J}lR=ATVT#o}_U~>t^=tV5-aN#bk*Kop +z49hpslXVNvoJg^IAYT6N43F~P(|w2QjDKnseG?3nc6a+{`}J(K^peX}k8{}fXDH3P +zShJUDq44EyFOzAy88YwGKH0mhUhwa|qqF1z@!Ojtp5OZ~8nbV?yX(PR`KXX}jC;(a +z*(M0;F*{5XF-m*YSQ6OM+O(!?@yGniC0|8FGp;o)(m@y79ByAr->PhY_z|0=gNKC@BdCHW}46mcjgK5>yE_Dxijs= +z>o4~i&am*YOt8K1=*F@e#j9ugE39nt)l-;ZC$X@N>$2j;%`Xh%R8_WfFUonec7Dts +z-cPOplAS8onZ4)iVO|?okkJ@+IYlCr(Q~)NA2s2VjZc!?MP7d1?NR6OE%8#r#aH|9 +zhs!LnGn#BT$3S4O!U2X4H|3)5zIk^(UpOZ3?$v%#2gw7Qlh>&^sf*_^q&;G5nzf{H +z{j7%qDaXsKkIXk*-E|>q+ML`k=f1O7$TRS`zm17dB4kdScU6yag6I{@HWJ!=laTVT#&Ddk;NPhlP_o0YpF|{T((Kpa;5)czVcl-TfE=g(mB0Hgy!nRdrLYg#Qfy3T)eof+9ge>FG6AKQ;&5HeF>L&f<8@E46%%>NCdixek1FFfnB+h9k`1e-(m#l2;F +z_=GQdaqDzQYaL){Q!D!Ran|BDw~j|~>-|n;@O|f^v_@$6zRRsSCsy87O=Xy1-(j&v +z`J_>${VR_+6wc}R)~bg!mC-=vP0cQ$liEg0{-5zxo;&AQd{pnG%;^!n +zZ9-{(C+hL=D+XIkIw06&c&>lyi3kz)0|~d!XsEoF)bU}_=G~x>UdX`qp_VEAy}tDU +zy?qOJJ}5feH{(jJ3By*&wvD&m{C+(9a4ti~3Wr|`vzQJo)?u0%JLP86gsVQP+gzEC +zwB;Rt!=u~p624iptWNms3IBBkU7xxi?tXGkRiwS~LdTT_7Cd|f8s8XS9LVHUd-RK0 +z_@EcJjz`2DhmX;E9jlxBiocy(bid>9b8fxu8I8Zp_VY0KIqRCec(JKK(m{FF$?!jO +z5AIiW7ZDUa^QQ6C^j(jGeu`dBF;y`uuh*2Zu#8@;ry=sYr}?ON_MFO;Z=!0Orm}fl +znkqf>NdDaP=lSc3KRpk>)Ma`9p#FTX)tNQ-(hs%Ow3sJ&EHY_ebhoU|<}*8TMJ#68 +zoNp%?Cg^r2ZjF9WayM$t|M?@mj+JQXEo86Mkjs~BwYJ^SCu2lMmFIz75O +zA1s~rq=EG#&yMtk%H{_=(d{guWb_Jmht +zf}QyU=FVUa0nMnN+k2v&wO%gaQ9aWAebS~MuNF%_O5x1-Z)bhy&tG1>zJ`>h@zYN%pGah?fUjkF^%lkeP88YXOXK^-NDg6b-_cIDYuq= +z48OMH$eMSr4~Fk!P~A0Sroizw!GjZ99c#CoboE;|`M&e&lTRjMk#ci@PyYNLX +z=1ER$BAZyF_VImDW;PPEi11*xI9v7p(VLeKEflt^W#8R7>%o?IwhN1lr}av`*{j;` +z&8hO}+49m)Y}_jI#r~?Mms!kjd~@EF&tcDpCYg*gcf9%2J67m3DXV89YfXc-$331uN6$W&^%6I>ImVFO=&S$BLbCCW@At2M#*NL# +zGXuHq79Y?2_Mv<|7oYiFaqWirY!_acxiqfYtloatV{Yd8vux25EFv7dU(1F_EHD+^ +z+IZ}Un6-zH%yxE8p-;JGTxvzC-IE@+ZOJlGJDlb9-K~Xlx$J^lf&X)UObGe(VUm8= +zzukr>XYp-*^XKBy%s-EN_3YZhqON4VtY$KJCiaAvwde%ESHpMa9br8)zwrEe?%bq!f^p81HNQ74e$y4b +zQGSQi>g!Qc9e<=SWCX796jnL>fc;7;^S?ON@P;Qj#*MYEMU6jFHha5-2CQyAWGpk| +zi~Xgi;gd@&>uXl6h`+u+SRz5hV8W_o0ZXrkUr#6=UB<7nZP(huPx<9176%neVw9bB*bdMvI;r_elZ>>vt(m +z{`>u~Uej*hb*(+$E!h{$GGTaWdp$*VUjETGl|PEF{JL8gn+Dl^&sC<(`P +ze0i~im*o|&8pp+jI!x}rc$ZWwtZYp=^Y-(EecL~CKgdo{-jR9io2aKMzwkycZJ#5& +zaue)37#@E0c(3=1h@oxru}umE8yYrC +zpNM0qVJ~7?DiEPKfw^O;=;OEZWB%k7RXOIhXuh5(9Ffe!*Y-*7e7e#GeGje587D$! +zB|2UycvzjtaC6Q3`E&N#@R~Y^bG^H^x}9UfdBuRMDHK=%tCMZZCI_?J +zni$`-OX5M}QNDlgs^(ZIHcox^J3dvjU3A}_SCjZw)bR_?{BxYOYU2aSNv!Fr<$`CwXtS)E)x#2dVINzw`QKMlj-OyZ!F7t?Kv37- +z?*5$c=%&Ykb=Ioe^^`7iRF-@#vDWYZRp0%djY-0%`J?8aQ<)a)ZtH!qO}Th_N%#I+ +z&mJAFEAHOZ*;>D>o5y%g?A=ZtR)wFZoa<(Gh)O)TptpGHg;yNT7H@aI+`eW}bx2UySWRIg5v>BAFmkJo-?);aNvyTCxW@79Z5UXx@a!(N8WvX7Qf +zD9(Bmpf-z9vA$sKZ}FucuV1rr?MpmWw`YZ;)z#gTQ_|HYuH`9fIYufF=nL%lq9FU$Gg?>>C?e#~sQ+RW!`moNRGCOkQ_bYW-8 +z785Js%D;^>FVr*knS23w)=7OS`MFON6?d^N_@Bs7%U5u_TX?$hi~54FSM~d46Rs{% +z?wMTrdh0sZ`fJJWbzkdo^|DM7EH)K1l5sfeyLV%evsu>ZhYylo9((9>gSjDyrNww6 +zGslt{=fV@pS{xJ0?#%2^7BoI;>~M%-f=KZ9=ZPGd|Kp-#)b?yWcT!&cKI@K;?$sTe +z7j0r;eCT^Zp|T`-*@xL5-YDd*Sd~+{;JqQ+g!LTS|KCoyx?Q98#WtG7L|bshh&CqIwv>@_&S@cS*p>SZzyH?4Un+QBkc-S3uc&7&nNctow=pH1Oq +zo#1jP^N2<34{jx%KMaK_3vErLWIi#lF*_yyU#DQod+nae&Wm#EIh!7LDci>>D&5^L +zv0ULsWpz>6`kC{z%4|(%a&S&K^!nK3J5qCX0?KyG>``r9k=VJ%%5!qtfA>}3C2b4D{&u}E2=WCQ21t0^2? +zUsURxkha;U{@323@%FvwiD&XEzQrB9%B|P@e$|(H2et;azYVvxPULTJHBGtyCR&S! +zK{K8EQyWvqS@zoxxfCq7=%g(=`P=5uafXc#-`sOj$#8BtaI8mTf;rE`8IPQkPB1*S +z?5~;hEX71N{dVTkq6w4dsD?@FRtp2mVh^Y8yVn5*x9 +z(?KRzXNQ)h^oD=ozP}hP;(qN>GiYF2^ZQZ1OZ#FKB^4u$lPz5vPd06-Qh#+|Qnw_R +z^vl2^?z{Fi%V(=hnry%0$iek9rfGE@2zVP&YBJ|>N}%Y<`{#X@ePD=Y3=~}%*5e>x +zJcsRW)0V{M#vC&z%U$(TCwl&onRWJc(0;R}SD(K7Syt3Hw?@HNZ$j*B|CEm0i5k8K +zCEj|TdLsHz<@FO@-jpAkkDHy7dv`m$Af!mta!te6{aL5@1AaDCz3DTz-qd(p=+AUV +z&pO719-=1$-al+wcSKO7`~M-gD)aiHopX)~9<#~U@f29y<;KeG6vg;Uk}p%zXiAZC +zil)9vRjN|n)j*-OFY6`xeQ)8@_^78(Y|VC8oYxilTWGNUpge=Z+JMGYHEj+C +zuNBrk6@0Pz?$Osr9_|$W+twQ}?L#7Uz%0_I5|S +zk1b|hd3AM$PNJieePj8ZzI$&4{gkzA^(E#%`rVdwpy>gZX@*&@iQ}sz4?O|NzQ^q< +z{SUVE-evan*&O*!J9sk_pKcrXj95j_KfI1^f_chCemB)i>+j^5%R8|B)>}KLAWXjL +zyz~EiRasp78`P$qnh{a*XsU+5SH%VIH +zoXLW_nFWDgEuQz6>{E8U_TSkmk)PpJ--DR;MJLwnV0_tbvB&Szp|sDl7Ed~oe|M7T;F8ZS{2NBADbX*Y?u^Kw_c1OxM +zv?_0Vp!o04)v!H{N0gN;wb%vLO^DBAU}BA*@TTdF!Q|x$SCrYq_lGGQ_$%1vwxaak +z!jg?yb$#0%F0~Yku9e%jRz@x8H=F72@Aijs^UwX8e0BeqsDo#irEC)SL`i9iE`TSckO}+VCE|2{J#@(xb%cj(>bUdxl9T|JP*<|q_ +zPjAB|UK={~YUGRD1*P;iI2`eOYuk3eF~{gnqu%M%MXPiL-xe7i5DN~fc+7cn&%Yfh +zb#}VHJ2r=_S_W#0ou4TYHN!(VDrEWdwwB6@PUk1gRe96)@u!?y_E@qeJZaetX~z5P +zKN(Ia#n&o)dB59!X`yhYGi!_8)X%@)39-NaaHY9va;aXE3;)VLfx7xqA$zMz!!|1E +ztmXV&bGbiBRASZ?RW@Js?eksqIWBy$QGl +z8R)sXRDF6kJz~!Wh4f5^GX|Pd_5Lfi-nY;W{SkPAwdUnnR)r@$0n4xco?ZV-y?M5W +zGzZH?U4tJgJPO^lJG*bs>yK93!Qt05Te0Wg3tzRP606T-nYS#yIKlSPcTckq`8)k1 +z;#qY%WO(%E%}{#M?pKiWrA@{02%CGs0}VSKvA##E&A9Yayv3$YE9fiCX|IdzJhFk& +zWtFG4>sv$C$4*g!daCJ{I=t1qjt8lyc`^$wF*@w`@zY`9%B6x^CLK}xG;Q+apMSaE +z{;_@ad!qH-KS@!lzA4{WtuAu280}Zz`S!1<<(t0pII);DrHQcz&kCsQ=gO+|+_)VgrxnA0dXs=pSrc8Y0p9eZiU% +zD|WbqoZ?XF7rXp@{SrwDPK~)8VHpmacvM`RxTem|Uo-Xm_cvVZ`)k+Dy>DYZHQw!5 +z=zP0&6|o+E&b6yjGN!tzbgGE|a)>+Mv|wRV=Y=|k&HpDH$@%v6{he#2kHj7&7$0GdHh@8w(RT|kvi^) +zlBt3bmI37=-hMh>_0wf1MoC!hP`Phl+4sbaResY71%1Et%lqR6COEd+xOg%%aoNj# +z>8NpdzxIYU&;R2G-_M(WDu2e*L(+ZTk3`*B5=E>!o14nN{V(86FR#52Td*Nb*yotr +zb8{WGhH1}v!dEtNU1Z}CyOI2wO+;DrxK@H&U6Ha{-%P1nU)e6L%VM_BGJams|2|lM +zi^Ce}txgv~E*9N#4JQ +zZ0hwnD`S7KhyR=4^UrA#Yov3}otyRYY5(VUR!`^R3tOkt@4)}~&HAW$#y!H@v&`BU +zP15@7{~NvjyDYe6B-Nlc=>uTt}l +zvPw*3N_t|TBfBW%M)jsQ@AuB;orl>F6Ku!fArnB;#9;TsPd-YRZRG+f&7FRrk +zi{1DssNzt_Xwjvn5VoX6VwZY8IbEW6~Bj;e7j-_E!2 +z;0=|9uV?#vJ=5j*Ki55|aO2$loAr9XAM@%mc%Jx@d13#*1(N?FX4&vxy)pg8@!u=v +z`=s!43w*b4+)>ZA`|H)|EYGv9H8VNBFn%)g{-UTj4-v75eKpQ(@elq!H9oRBbAv4} +zvzXE%akevgRwqR#yg1~o7x1OksB?Non%j|i^0^5%Vs +zUpi*Y0p~Upie{X#va4nPU6kHb;VjQJRfj`5%R%ixpbO_Ab?Lc(8eRGBWqEmZ3QK>i +zZ;>iZaBaLV#G$7?xA*4myqG!>sfC7uFL|1Ms-AABbKmi{_h#ptRllt{*FBy8_wc(v +zug*#cO?@x4y3A4e*JjP?r|pbyb~k@u_3Pd&rRyPWpwq#&V4WAlC+uLL#%dy(2 +zj+H5-KuKtEeDUedJ-?ZZ`A=^}~3D}LKq8~?VlURwCXE-Suu0PLnrH5cMUg-hTFu6$wG$C&)1YLk3IlZ9Q6 +zu$G#qwjW;5-O#C`+Puj*)nl`gZTZ!SoqMDfetV%3*Upf8KPSoPy@%Tu2Fo9J!z^7+ +zSWJ6zuF3i3pL;*8e(H8ebBNq5ZTQpNsr|RV==SW-mu~jP?&j1BU0c8LL0H^b|CKZT +zh6X1Fmd>e)4O@Cm^~>|6fwAhf=l9)mwvUoHkU4kBL$*UpI{w@57uvnz&7vKzjb_>E +zD-?xyyM9&XUF8>3pWwJ-Gqc!|ui{oaYY%5iG`wv#wRyEL|9FFQoZiAal6SbWkESm; +z`$pjOQ!f5{U3>Rd=$^|}IV3V!%QBM)qCu+ +z*>NK8P<@8zCHvLP#@j!}UCm6pKL5D6goiZGnUrt*UcbKFIG5{xe9@JkMF$stx+=}( +zH&y8P_62Dr9fd8YcCN|F)oj(<{a5VU#a+s4?k5U(T;poxS?z{a@3k{B6%~hW+ZN(-|hTAK3g*QvFTo=lpGtcFz4{`HR12ggp|dS|99D(SjIMPdRb{h3@$Y`pwwt9~rG3Ly!8ux{eff^O(=w+xeT|q}IFd{u!LoJXsUwwaZk^l{qRmd+woyb6ryoRx<>AXnP{`?a-^O +z`svC6?|SZcsYGrRxXb1By*uZU@MZ%%yaK6ip&N4<2||G9C0TFjj$%BTM>k3Y89>Z=sb +zx(dtYmhhF+?W&Bu6eUHS9tPdq^uuxb#_4LlNqg&@+fR#Z_qz~qa7po52azS0opw*) +zX;eG>A*~{0#v_?CEY5r6H?e;@t`W!*lp>m?&~U^sR^N30k)ZY6M~y{GCYjY~ue;uv +z_Sb5Q)GUw4ITK9(Ezgx-_jH^4@AE=3jNzxI@AoKhFIsWMTYm4#6%%wO3ve1uJd$zl +z!Hqp;*{rYkPPS5L3}Z~>NMriV#ht{?bmhZ)&ogIKIsH1FzX?|t3tAulckiOg)FU(h +ztIYneOyoi5Qoe^<7MIjnQZZ{ +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 literal 9667 -zcmV;!B|O@RP)vbR& -zi1*;6ZQBs&zJSNkxr}4%{?%#~G)>c;2Vot;^?^Co<@&a;TMq%l4C=a$WZPY0-5ys} -z6~mQ>j^#B%5Qtb50^Q~M{ICP<{3-=!J;W6dU+EVYk6Xfagk*=Xoj)GDDuGX$}_(>q(Ln+y^p| -zo(~db&O+JS+XF0=kuqE?7F|)8XSaWe;0Bk6-gZbkrD5O^CQePX3r|c3Pl}>QY`C*c -zdshJ-)zxiZ;1S|T0x?=#(%`g6UD0}r6P#b6?(TxL{G~+#E$-Ca6{`zQ4JfWbt26Je -zd3()wdOGvxPBKaEy>rg@?O)oGCYiPOS$l0c=Z$WiamlPRvIe|4vi6`4AI=)KVm>T; -z_@_&=|Mul(v7+q1f9(%t_(NNMCI{Hw2WtzCxrpn8Px%}>Np**s+VDb -zF>~O1w`31rIS+s(u*=-&D8oPd2o8ep0pClt_9N@lDa0{T;jH4ciKI+AU7|BkX)?~> -z{Y17Bj9gw4%y>yW6NFNvWMpKd0!*ML02iWq*3gxc0Cs@TiH7eDH%9G#FBjB0@6pzz -zQFI0+pGcrHP?1s{L2(8H9G4$eo{VFpSLjVVsf}=JQkt5Gs-PZ-wDv*hJcq~{x_lCT -z7NJd~Oex~%iBz2Q1e!Go10fenmTE%FXpavZoE{&(aOPBrlr_Pz5#>o|JY~o~hOV54 -zpAokj9350ieg{cRqIoN*^#>H-T$DJQh#!XAS5-kDP-zJIfgg+}=wrf0Sc&$~74xc} -zJGKq;22egVU!Wt<2|$rZiyZ6>M#g0ImE4}d7Y>|;XkYEbe>TYM|L(1p(n5L@vj(-P -zR=+n!@>URvl*}7JC{h*VOsXT8TcP5qPAHzQNBkrLACWGQ%nsJ0y)oVjnM0OM!L6V< -zLZVteH3w$0$RSx^Pym5UcUGuXx(KF -z29qprf@%Z_**Za5#MW)LYDXb2Fh}jZr@ABHPf`=y?BSm*HQ+4&{6M2cNlL#Fn(kOY -zqeXDc`3vO%*Ov-zij?%zGYj6m)zF;^rA7NQ2fcf%(q@q&pHaM?BpWBNf7BL+ptK3T -z$s{-9?9pvez;Or=j1B+fqiU8~Bvs{9$;+y$bps=r7IXAAWk!9qikq66nx5JJ^-&Iu -z`X)E%`}!#622wjnP^!q4^}&Aa7{0Gl9_sqw`tFc6jb#pAT8PgIln72BpJ8xH&5UUl -z)5ilPfo%*b<#Cb1V{F71n^-_&g3O*GQ$Y>`epYmqqE?_=vv%JX2O7%b#svAx1GRg< -zI1rzqT1BQx#Pu;T*;Gf+YtvZ)l}ET^b?|*OuDKfs#QHPt -zfIgw6N}TwGWe)zZ&;ZCYdBGG^kSUdNV4pXESX?Y6yzJm)vdgM&^=j?@*3cBTyk}X% -zK6x3REk0v>)*Q!V9}zGSOQVXFRhg5$JZWu*HL^c+Zp?)<%3q^ipgMtNA=;}wzL7y0 -zT1hZUPYfzVXFb?Xie`Ut0w%{^ukKRgk5TX&Ct&4RZh|CWf(0`#DnoJFxFQEvYE-kL -zL5zamIDy;*2!z^Az~LJ2$ek+qP2{H;CrE2EtP!vvTPYGLk!suOTtByqA1K((2~F4} -zyfl*-(+Mb%q8q^V!}sb^Dplu~f=I2bAuC@s05As28usxkDJdznrFDXdF`d9&J4=84KIG!ebdgp&^S%?|1e8a)jLYfyfI7{^w&s*Ti$m+djqQWqm{Ep4{|1<0jeyFK -zW7{S8Hm=J1k;p*tL3WQRA@ji+i^v9jR0y>Y0aWsVs;m?PXO7hR+1<&tB>}~!-^*8; -z53~ek%m?f!ZPZC>rPxU~K^zR=r{pPBy_(>1hWeD+Og_M=GG(HS!!(W=Y2^A6@_x%| -zTLq3~=7TJynK^=`7M3#gN^ymEj)L>6)Cb_lJ{Wmi3>8XFP7YEbV2(pHPqm4O-a)wHU_Y?V+{p~~fb -z3&d#;(Iv3jo0OE4ZB(DKG&4Vt+OmIBQH4@@3zTm{tc^Ab^{Ece?D_DPU-n}6y0!vuL$4x9sy@zti^W8NW_tUPw0^JRZ)ruPc5O`=SBKMfARHfJWj -zgCF0%=xnVR>L8Wtj`aX*0e-?q4u|)3ngQcXvVz{eJVFUt9oha~n*1^~Z5qF2J?x -z$}_D|Z~#Vsc$#G2Il~K!wiM$4u9HQf?nIO87ajBYS8e^xzwqOu{yUyK=)Y<~k^i!Z -z`~2sP+v9J4-|m3n|HFn%-yisAroMl~zwFyz@Moh}OR#>VuQvY?3w416!D=NI$D-Bo -z$)2CUm}9T|zq}gYwqpY(7P$iaPGRr8Dd -zTlSUihWd7gx13>KnLIdAD -zjsPd{STdZImX-#Fl2Ym>IgUFj$#1G88o5kd@IuXjY6HMI(mLL^8@EBMCdR&d -zCcW85p?|QM5HgdI~={!UWgxhVM1f^VtvXZ=aa{ -z`qpVohDn2v!;%J-Nd3W8!X;O@VoF1QR9O@WaRn8*BGvgJL)rkIt0@uc1Spodo(5Ss -ztplM(?GK9F0hG39c72wd{y3^nh!tMjd>=_B0OdxzdVW#F72_8__XG{9O&WwCE=pz` -ztR$@uDUw-d7mWY$$!IwMWl^W{et;jL&&ZJ -zr~~go^=H_WeX9Z9Xj!+1c9tvkiR9Ri{NB3>K3MmgtBYca8k8Eb1E|F>;s4c;S?8TK -zC_kFuR}*5VQ6I{jUa~u_JjUk1{IRQP&{-D@$_EXSErm(8=LERvS)`+?P=8qby7aD( -zhT8|WqhwJuxJ9D&cn#?cV>@*=D;p6Y%32?-uKm;-!d<_@wHxM34Y3=7@v%O -z^f%N;w_M9?woJHnz}|QF6R-7V9sn$>%d=o%_x-c|f%-q%ANoGD`fh-qh=KDYKR{EK8T$mi!NNY&qROww}9u8VI;x` -z-qIb)_UQQkrUb>QuROB-*|OtDOg(h4yc~ezlVz6tn&_|I0#JnPB*Si<4>%r)F#Cd( -z7w5w!z?HStCs_?T^=x4uyw2zo0{t=3-?k#;RT|_Qa?RM2kqE1A4Tql((02c@|G(Qc -zFZQ+%UMI++==a}hbbp(ccl%D8m0{PZLB4D5oz)#dT%QjJ=K#UA=Sl-y&Sm#}d|i10 -zKMGsrY^^dx0;qw(B*WfPgM8x`e|asHAYd9T5#f{|c!WLy1_da$-`EY~bznL@A?Cn~ -z{UH}agS?mr6u$J`qrkAH1hFC_b2XfD)D -zbxzdvk$>T5>{_`k7lY;=ikblJ4n{15gmrxYrf -zR#&COh3W$ROAWwUfw)Eoq?2XQSHCPOLC?Rjg`XTPeuvN=cR9e~6-PH)7_N(VEcCsh -zbbxSOpf%(V)#Vn5iZ%ON<)8qW1UPcT@5Ih~WNvbRMaz$DNk~Yjr>;*A^`c}POnvuP -z{$V&kz2Q?2>Q!JzC&XKduK;5WxdFXqS1mYTYioqt8~_-WT7d2VmBJRmlpCO)L%>g2 -zG(ri~C_whtuaug#zX6-z?PuTyhJPPy#iE6)<*=8y$da -zQc&Lt7Q@sWAjAWBHLV-Kc@AJ>eA2W)l>F@huQ~wcgY~V^x(f6s2ap^9UQ^#;4!}Mk -z;{dkIIDnM|*GEqq`+;x+pyh{kfUq|J{*dEt02{KXonwFFo5=w@a04_zFqa!3HPj6d -z$5BXlhq?+8-s3@Gk4;?_>Q)L~1H-OU}0J3N~7Q##+Y}Y|o)&c4(%W^{x$H!Sm -zp+JfZ>TCz#R=G%Lf$?Uq0e$3a6SwYnmjf*L=-_H#7>XuUAif&&rzBV&5K#Al1`AiRXl?2xvIDYdp -zD&U+hi((m8Q=e-x2!YO -z;4+dx-(Kx52YB+;%})Wt9E?|bfs{IcGJ@W-nsk+7dQZAQ8N@@M*M%53y0z#eDd9Y -z$V8a7Bscs}JSM`h6^;{ObI{ -zLgZSNw1)anj0)r2En%M{oO_d*oCVRR~#*}@Y@g%=Ha0XEPBuuXxjQG>3Uf530&Y})O<<+$_S-@5`;U~Y&GQ3a0sivw^uE~~-l -z2f|DxrBFB7fC-!ZJSG_~dGyD5?JM`KN1yS=wx?wtI2-N#Y=sW@N(}b`Q3?$%$Hf=v -zb>A2Fy9xZ1MQx}-I9Lp2qQ6JfAKHW^U*D^4giv3LR3%Vd3Jul*pafA0?Rw>s0RWZT -z?B1vCjrncf`@4z$Va}&NxbummTgE*z0N7;_%+5Puam)ksch@zNL -zgvN0fsP~dzny+J*UTyh625SJoHu~PeI=~-){1K-qLFw}Byz3HS+6&ezhd6c=p$;+f -zOe&67qd#o^hed0ES*VzlK>1d%bb=D|Vc!T~S7>lDtlzi|Gu`L_SIs`=Kk|z-dfDg_ -zMRCkfANNLo*tA!FoUTlQrK_Wman=dx033{AS18w`FcH4w_786YpxkIv-#O;Dd#1kc -z-L;8RKRDv`=nwPVGwIELNfTU_C_vgips^!LHSKaUiqB|^AUh9nb>hCH$3W4AiM*q49y^TgWwVOQIfJb7OH -z!nNQh|8FFi%@8#+G5iy$Ve)`__3H7hV9p0O==1RE32wdx-de>K;P#T@&K_8wf}bIh -z^BJj+yZL_uwE_$*hpqsJK5i>v9+O=Fi7==@(>g;MNMpG!>whmt2|P*iBb#yGdy%?s_TLOkPKSR+6l -zWA||7$&>H78vNEmgu_2s7;Oyxug(CdbHKK403-`~9)Pw|G{*HCLpjvFHvN6IQ`EjX -zlLy>FMPxkX19{esQy#6ylx+X1H61ba -zkgI7BZRv)H!9q&psM{b{WKQt?NDqX8Yv&#VfLu?1tmxlVs5<4(2TaY5KRbR0u1=$C%> -zMD!msYuU{xehK|a=ln1G{}IefdIRVWXK-n5-TEi?XwRB}mu$wnM-CshRVT1tQ3iM+ -zqrxeMPTvnu!>rq4SHMuM#s9y0!2$d;Sl)}yR7U!!oWqvRKmCJW@G~;{djb5^{+n?L -zuCfA=-Jig4iB24j-W(?hhUb!Dy;!!}s)~B$Y~JI;&!qm0u9rP&g)e?T6IhhuR|fb0 -z2>oI7FWEuXOf^X6DfxIt4m{4Qw}48C-0lX*ZO{Uu{#>^$c75VY^IbOd`g8aO0O(Js -z^`FNxvM21R*ET;Z$?tJY -zeiiytnc%l4f7)n`z^t%zh^9-oUHvvat~=Mm4xqMAINuS-_1`Dg*UUSzC(L*0kQ>j1 -zAOl9i$uF)y1ZMT=uaYJLq(SP=pz1PhAE*o$Jo3YH6$?<~2mn4Pn@)FVOnki-{ki!; -z?fhi&i^$LDAB{YKw?MEm%+-nNEf7nNuxYQ)5mX1?OBmpLG4X}@E*X5od3XR%9eii> -zx4>UnR-pe+w2u0UjQ);TUG!k|8@--gqA_LnJbMg`R -z$e*Hrw82jYfK>(!VtMw0Mck2p8y_T6JML4kJKi; -z<$mhJrMKk%Y<&QHN>^bQ?Bofc!4sPM4Hy&wGg3HgN^6Ni}i<}ZP0{rRTf -z10ddY$mc(B=-0ylwrcom_3sD?TY6jOCl03P0(?^pRH$|LYtAdLgxHw(Wlto&JuTUj`+n5u5AM(C -zU!D%Yo8W)77iBOv3|X|v<#&GkkO5&inD=E*-y`!re-P9M*iz -z4$LGevM8xg-jK&jH#B3+B))Ur-Lq0ne8DtiI4g-gKN9`R^{B1VyaiYsi1IS3t$evVvE*^MYXUzJ_LWbIcu@p7>D+*=#9aP$sgqX!K%A#2^pV{=1Ti(0X -zfYL<&5P>L{2>%g)YDQe;p2^S)(V8>oyXB#ut9Ta;8Nx5c>~O@YiLzV@llp`Y5G -z(X}Hdy`|JAC3Aj@vZPf8Wd`Nn7f2($ws+`$On4g_tiuLSd;jMFyDkF-%J$Av!VLJ -zqcY~mS01VRJLgFMbsTO1yX>r{t*&xjXWx -z9ixBA2cYFLDb8(iPN$)hc9-()VPlWH>h8pM-UkQPw(ivVWVSj8Mlz(;J~8r6Pv<1X -zsx+FcEY-@9j=rX?x?b7E$fGeUd#Z|0u-L`rR%+4<-tQU*U~NEMr=mImi)7*i&02Q3 -zqN{O&*podq@Yk0edk_r~~geP7ph?C%}KB-4 -z-!8|_(Hii6d4V$E1Ub#mKDl80rguCAS|fY!R9h0 -zrA>R+J=ABhHOPL|-7|(Gkg>CqBaJHO7Yx{#?D8HJs;o_uQ5~Wa)RoeBev8f{yFno` -zvZs5Lp7Z-%*$o3N@)_2p&X3PH9QY}B#=?oi7@IGRO)IiN&F_H;JiZ`tA8Q>Ckuv%J|XazOzk=VuTE4!FxdCXPylI7h%XYAJ!EVw^6I -zo*hSp2-oRFH@`qd(r$7zrK#8`Qa -zl5G=o0(OxyIS%9nq(p-!Z2Kfu65mBDesR3Sd4WZFkh95W#AG*9x;oR8_6E-KdO7Ob -zPmFQYiZN~j?i!*(q$S6Vq>$3$(%YAfskj8$$exJ$V`i@$ZG9Fk_DH=Z; -z+t|~ut39#p1k4GvE>b4P>>mP$%#v%hfz%6{<2L9&ZsQBc4UFtrzEQtN-z&O<^02st -zK^9UT`OH#8>ejb7(9F^E0&$2?$+1p}>Po~3+y)oi_(s|11}5?KLE(YCX#u|_6J5EP -zbGffyR+cAon56{ZH@AYG7vPCj6i(FJfC;i?O=X;}b?gD2xy{1UJzKhA`vB-Dv{gmy3g+9=W`5zB!hA^Abj5kQT4KeTGDB+EV{d;a+mivKM7a&n84 -z&N>|tUw&szgj&{>1!o8{>G)kU>Z5qcM3;+d%cr!(g~gqs!|s}MQ!-YIY1Mc^~yOZB}j)g1yK3J>Xy1feQgVXG{Q -zTL%25gDa5<=+rt*9Ozk>VsjWb9At+J9NtB#OLN5F^496>(hM)INO^Hw-( -z#IzBrGk8VzBbw!aXQgUcH<&Q%&MweIiexk6{2v$|S6?A8?jLwiL;8Aaf`n(}PnIzKE -zDFDV6LOoj2K>%7fiTrmv>%U=bVb=c-m;jsBniNK?h1^1+=m~s+-Xyo)I{HAqek%khk^q7?L#hBKoI~Uyk!CV213L}q7%)jRn}~zJ -z@}y1U1feMSZ(1IKEwqaO=hp$y8^E;aUWXB0zPDQPz2bYWj!L=YJ}Kn(nubrB1B*dP -z(>OzA%Bb97%9}xT1^`KQ2qcZt5>Q)Y!z_RhJ5NcU#EuuM3zM}ky4B-ndNP -zj(lB4_AEws&^CN81U$Y+pQ|m#hz?5^tHG))j1itmtO|Mpo_#t5zD(e0 -z6vrHsGiW!1T4du5AqiuGB+{^C7$UBKF-@$R+#EGDs|iCg3giEWBN5ziEdF^>ty0A( -zQzqfxuY#Rz$SSqbUR1PAam+E!pjss^_|Ox|3K?op}Inqv-!Idq4hQC$+NLgQRBc{hx}#VrC0^}khc)A%(>WwgXq9Xc`9 -z+44Uoe<1K+s&i-*q_S!nClCH_-ZI*sh4J5IB+4kB{{x%7bS}~Se9Qm<002ovPDHLk -FV1jW1&OrbG +zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Bd2>3_*8t*clj9yF6VSLn>~)na0|8IDp4R +zT4VddRJXvRr&xe;LYS7AY24(|m!;`I5gA53XYy#Dn>Nse@hbe2Jw8aq3?Y=qddg!J@uwSNM^hl&q; +z{AjrT`0LN}n4=}USmJ_t^uif(UbJ>x7Lop8ow)s=Tf=j&NzW^__>7$AEz9H+=X&iq +zN#qW@(ZqTDLaFDRZr;AltTSbzQH+jQY~YOa?e(1x*rvDNEAy~kn)pCa&ChoWx4#d& +zf7c?9oE@8etHT-Pu3pWJe<1kCgUK)|=F)>L9YGxB`5xA@%mxAC_osmf@c5wOl-ukjU3`N6uUh5{pF2>a)FzZ!9P-rV=|`_E +zJ?T@_TN!UiUS-_z%0hPis_BW1hQ$x6x2N#OTkYwq^8PG9_r)%%OrmIRitsm}LUU>q8eCWKMbbh-a`gzrS>utQB*#hiL;}t(|tssY-Y=+t!s~`_0`xg$Z;`IV0_;5hVJ= +zXO;4d=!K6~`f1Et@BT-HNq(Z!J~QXh~TABO$wx?%U_h4{T4r_Wsl&cYd}Pf}dHg3eGT?eJIM+wXXMF$0}!6b&fw# +zj1Sh&h&NJ@I4!lQrta8H{_RKK2Q7Eo!yCeR^@`xB^|6d%Ec?t +z{^DfR6e%J +zI{8gmESxv39HWk0%iWgcuBdO|{&w&3UCIyqgM{zAc{pFk^nuR*KMspsJ-zk|&UzQ& +zu-LWW%unv8jMt}g<#kQ@a@m;s-rlPh=5j4{{cX&?w|e!Zw24ad1NY2RkyhVOe?_cq +z!4}SaCsoWJzqyzjc%YC&pojPWlf_xnqEtekhMYXTYE>z-@=USfFJ`H3wOhMp&zd!B +z-p&7C1NnM?shPj{{Y&E+TadL!z^W5dzaFf6E3t2Vu-vO(4}QIyVAh+;7Z=rWo@)w+ +zpThja08+!b+wt3R@7px$M3; +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 +z;E|}id9=j3?sAF?;L3m9gySQH(8f8<*@X+ +zPY;h3%h&nye_fO!<5T-R{9mGl!`_F%{I5b2+|`dncdchg=H1D-H!WP(A|X4w<+coi +z#I&e}cMMYxi5;9Gyi^g$g5ykhgAnZ9@tgK9OBd|(aQAn +z?R}lAj4?&rQv#Sw+e8h@`lMwWvV#KdbBP_kBBOAGxx#d<^npsggyfn_TO6kRdCR!o +zis4!F*R>aSaeYx|pCH2!7kodF?|_}+V}@;KEE=Y=TzB`E{@qx>yx?hjX~PC{hJOxC@CqCc^r&dx#U*&}u><>qFw4m-w+$z=d}iag +zDcB{&u>D}`9>z9b%MZei&)ZsVwDEAAJl_y!>~T15isS0AwYMC6n<|-EBKTz;?ggjH +zHkdbDmSxzKVJUXVM=|HRWB4`3SK6nGocWI*k91$?(8cpAhy6j=PLK4)k7?@}YoBBb +zZ+}-lomuC{iw9W=5?yMc3j3r!FIS0>6A1X;$i|)Mto|;>bHh$W#cdaP+P^lieOYx= +zrYmyu)!5*~&uh{w#10){oOCsA!G`k-ixj6#Ww|bEQTN$c>%kno?j*^uCvPttd$Yw^ +z|Ne`0WiKq>zpbvpw67DAjp>TS`J +z*WF|2d=+=WZ~C3uHgB1R=%;UZk4a0p{Ce#AkNhe5pOwlRvRBYy3RFlo70o1 +zsax891@v&I1WJo0E@nHp?akl2Zmc(2R||&A=x+LOTY&%B!-YILRTspbwB6@9TgGv^ +z=mCSX`uoV&LhKKIEa|Ok2y9+AtNuX#^PF36_dVV5`QH8AOrZ&R9ejbTeZRYz3oP|k +zAAG@n$VYW)fceb^&e?x$)FkyPzZ|c8tNneg`}~i`wk=PUvyguKH>Z{FyBE)Qra&%U +zz2is4UzXk%|Gt~^&lK0(6^<4WJgJNJyI+yN)uI}Ie|26%_t{%wL{Hl-{0u +z|61yU=RZ<97R?B3IaVmX;`^ldS?iOh$L0QXV9RDWVD{_YA*%!O^?wAHYdXIC^k&a% +zp~PF<*RI+|NpYyNXHM=2l#f&KqKf^YZGzoo9yw8yko>5@5=Kc;| +zQg!o%kZa+Y0Qv83^*6SJ*Uwq!)3kK;;t7Sq6yIVVh?JXXCeZl|vuJOyW^`62p(=;4z*)7=6pVEF` +zu&U;^+*<~9e9X4xo(FW(OyvhNpJrs}jKxJ^a4 +zx6Nkb1~^x2M=t#{D_8^?~~Te3cnz1x$?%{|K*4{M1nO_0`9< +z3Fp|&Uwr=XiZgE?>%FL>q7S}JdUQ@MVt&(n#YvwfSN8AzS9Yecap-;<9 +z_Jn0Zl@8PE^|cgc+?geifA{z4haL=tTf6g_TS+NX8HbKpY`=Au`|WBco5wK`$_{eL-wU3eocw;L)SqikEr;zR +zC31QGtv|=GqWHkJJO&l+D!GPjK_+t3T +zONS?Uv-7_GkC4b!*{c2O|F@U?vJ6*^^iDmRr?AlR>-oRe?=)I1*b}30Ia+N_jE?if +z?5qCYKFi4c(No*=&)DHf)i36rwhHMRWlU!z6Jz<-_AOI--QCP)Dr@+4!s<+c+?Q<~ +z2c5j0thlWZp5pi6uLpliWA<}7=7t#m`ZX`^hpe!AdY=PK+W`sWVXDPjH&TxD2 +z*YM;WMte_dta6kqVG_4sYCNC#?NY=4cj++(d&!qnJ<=*YFhv$8-`L%#+frMwzTfdnHB?Xo;#zZVhSpG1Z;fvX#y??g2cYmpW%Q!!)VS3K7-R^wy +z+d|bh#0RofC@wyv+2(hjKj841+ezUE0@fb=zrX4r;~(RQd)?HDRWts%@^5w_=ekWy6YtJHP|)co(|1osowM!vq{O`u+itJws(PAp@A2XDOaAq& +zn{J!gs$XX>95LllINSIC9DftP=-+g_=40ydO!H@j8=uX&)!Q4qI`6z=JCS>VY0PkGwy}ntl0I{DY0*h5w2t;%on@+P->p=f|8mb5uMHvbv9(>Q#I>o<5g7u2_1_ +z?SJf6318u`o7B&gznma_zEy$Q?a)d6b@nW2Utg}Dq{g(w@zuEnuZ(i# +zSMZ42d^%h#${p~SgTYQ?wqJRMPt9JjzdL_AzWtN(sr$tF7xKL}4ci?y7@fJ=`AS#7 +zyKh70`tyPz?DxGT9#k8CZ2hSxS#!9ug27+5CjHCy1M!hz3;z3W>HF2y^RF)=_DjMS +z>Amw}7a690x2fi7RlURYRPOD`k8dSX{rO%0FRM7{G2_JiMfF<_`m;BLvhgO>Pw-f@ +z^TUyx$~X{q68M|3bd>gRx{A +zYkO*lE5}ZUxnZ%l_-F6AA9;S2l=Gw4OIPK~rPoc}`n)shcJY_~imCVHCa$^8S{3v8 +zk_NLC`;6_sY7_QdG`8DiS#o*ywr_jZ@GU=jCAy(MbAz6My!`!~6OV7pUeL@slf6lO +zgQ{?R$G?{~UtOcCqMxbrEql&X6U-B`qV#+AIqmf=H)ecK^;g+vt9x_u@4725_}`s> +z5kHUb!0ZS0Tg6ii%y}ZWoP1hd_h$lQq9sV>edW(~^#WJeZv;K74Q||Pe9ppo?swhm +zi}}u|Xl~M28E|jHac^^zhLJX>b=(+LNa +z{=7P+~n4U +zPw)QhTl{~Dh_vyh<@ukurPHH-oVZ?LUtKG7rHtLJ-rdS!#ZJbs&YNbrmX5{WxFwDM +z+8N)!@oQUa_p<|S2`b)2CluZJue80JKMOa+Thuc*%$L4J9%EbJ^Or3;kcqYzp}>9yKO$*t}kReR+*$(^yet&6Y;Bip6{LS +zzs;^>el}xvivRuO?)|ftG|%7C9<`sZ?!9G$R)5=a=Q+wJ1bugK-cqxQ-}vKI#CxTs +zzSY-lucU7@JyCb{u5p|4gpHdgEB9(W7w5S#pyQH^Fy=z*rCqD60@D!S7{U7 +zWob4pPMV|FKTp=ZmE-zLSMzO}fgf%$Vy9NDUV +zT~(TXJhT7rk%-FPNx8x$Ol1>|Ecu?WE^%pA&-twqCUoCbyRLB0k;+Eb$_blKrXNW$ +z58h>UdCE7obDyd#U)}caDZJ8Un8*B1YLU|t)#JTOCR}=S>Gt&Al{;8&o|xD1D>-ew +zOm3~1?o;E;6iI8VY)vV9>DxChuU~Du@h!_4&MkUDYRBKmGqs3<)#ZhaXj@5Ft?bJGvV$X +zj*LalaRL!Ll>}91YE8VuwnoxqNzj!?d+N*OKb+Wpe)m+dztvWY_ZKfYD>m0^{yGht +z-Y0D5rrx|;vU6du#Zgt0X%F;YR_|>SDts?6r(sG5=O&TR3h517cWqQj(Vad2_j$R$ +z$EO(B8*Eyhe@olm=KkLEC*&5)xc2@F%j;#iXY~BCe&=LfSZrr!Ec|uxOAaa3N7p!C +zoc79_a9Abs$qwN+)=i!@o~3Gb+w;~j$lJ&tSiXgG*JS0A<;NA_L`IQ=Q*K~@< +zYh|wsw=^!P3Z8CMQvB(7LC~SM%6?1MI+fFQ%GLjV3U>Y1`BhZZJ^7rKtYCayx^GL= +zwW+M>97ZpH#2UX^TyfH6dUw|8-pz8`Su_Pblw^_VPc)`RU=dogdoF +z-^th{zFzKE)G}L4X0?Fj=X;v@_go(sKl1*%SMRDUlROvy%RZKcT2YCsb-JV3{=Bja +znkwe0k~C?K8tWFGr)~$n-gS^s^xq{CZEpWu{`um*1JR0XDgN_aerqzj+g{l2HC1cv +z)AEZxb>>T~dJA^5 +zou6JShEG@&CD)+TkXakkz1jc0QPIV%|KAH(U%RX*v*qqt_SwG=?kg3ZA8Y=7nfttb +z+kSSY&pqg&@0(RwQ1Yio>ujPRck~R-8cwOsH}@AVd%vkuw^-R@%O%mpDJn%-^AslP +zb07X$!ghLwg?Teuo@7Olw$+iB&T9YPUb426;;s}uxg}(N?G~d+wzW%)i|^mxUH9tr +z{rv`I*EVhJ_^{S`9{Yjqj@?ZKRW;|Ie098V`uq&tF1}1ZQ`1N73$57x2kWTRS9GtR|^lJ?@-)XzFanm?hpNTmd~+XV2RR_g#E?%Jq6&-FNlY +zTDd6G^$#xkzCYl&M%?(i^7e!}$IU7J@{M~FGB1Wn9I*ZTR(8JFzAtyXAH041ygsnv +z`x5i_PM4}2-`CIQU*KJm-}*|2QU89lFzbg>$(NxQ7Q05W+SbVjg)4qAod3G+!tA<5 +z8?JDKh3*wCN#D?OZi426!2I@KdlVgJs$9CH$#6`}$u{beBSVx$=bv)x*ZUK56R-W} +zpTRKu+AI;bHLZ7?mKdL1BEMXavHu$j)4Y>9dFHy8mTz>GJfQx9v!>~u%JzF!zZ~|} +zX|rfdVrVjVUd5m`$N7oU#55yaW^3LT5(b_ovpbp(d|KlBm}Q~HkNhaPM%^vl49~AK +zUXVVpd4(l`sSo?d +z>~nu&!C-4;%vs@5ReAWW|55FuNna)0FWlBSvdUvh%SFve2WEbiW}58Jbf9D-kHlPO +zCF8j*(|k8iS&{Q}{pb0sb&qxMd5f<;xJsu-aGvKHt}3Q^wN@&+q9G97FoMGM^ +zmGYQZku$kT<%U2)gtzYJrc6YfjXWWQ;r55n)%41=b2}g%ksyZHxfUV +z_}q)>c^A0y(yU~@cFU6X1%a_btDPRl7+0G295|}W#Qk-DXu;(lrk<%=j)clu8D72l +z$zH8q;X}fz;tY``o3fFS##>1*Kqz01FrZOuCSG_?Bo3d9oB!DgCyCRYLf5Z=e*{OR$8$!)8})1=8PSW -zT@}{%=&^E>Y6g&ka$Z&!?$z6EEPb9yXDy-_t_@|?kzJ^M6~y+Bo;?fu=kqYdTi*=i -zAf@4R>Pdxr$1j6ul+MkrO_%MxjjyoGOAgtURf{gUIP@o%C*Whl)h|K*iB?H~qWbTG -zTEPlyRD&VMx!|9!8rgSni(UUXL0L9m01YM=9X -zn>|k0@NF`)RUn>P~*}u8|lM?f_agEw)p?HN`thr;)p_tXo8BY$SW2PKa -z=Cn~Na(GR6nC6OOFFo86E3$uwF`Ws?4jV~7Cs-8RxV@61{Mh7RR_PY-A!9t4&V@b- -zMu57&-XvXJO~%H@*qAIM%kc&+@bDaBV9N7gTMV2J5j3Zrw*rA)y_YgLy;{_>jD^qo -z-n`3;NsxGG|It97bL89wunIIFQg1fHTn>YCm19n$eg387=Ql!H2=YK#JaIyDM#tR=6(HT&bPl(~p18v3_QmV?NkrPvu%kLBPbRtsR#GW82M -z_DMfF?o^eiK&vdS4b>uu8rMuRKk42`YiqC9YpFi{CgX6k%QtyE_()Qz@ -zzp8-H`p#Sha9&2xjJC`}Mi6%Mn`QRo`SL?vqoKq{hK3X*SwWb>Uu9Dhy<@QYVi-1I -zFnKMmdNbl1N5^iB1z@6*tvYt>MOaeVDwfA^c@ph3;Iu*>NPbO(SY{CUvp(0f8Q^D- -zOV;?`tF}bQTXfI>2RDrIuloh(yC_7-S~jG)THH6qX2iY>VZgICZ!f=E&qco=0)r%Q -z0)FZEEu@3E8HgEdg<&JD8)0Z&!qy8xbY%sqspn*b%6(yB4v7nckJFp;!3^MnAm2=O -z+C-8(HE|d9N#{FiZH6=$Vy?GQ++Lyp;y)C&(>?*+ka5t@R(FC>Z!7M+`9IU`MAhKB -z(#?a_WtlewG)-tK`+WDStbqrOB2w*5INvn=_qZq}D5!5M&h>-@euGx6pPvi!(M0fx -zEh;e_K_y_qV1zM+VZ$W%`@In9zZ!ZfewpEfKwY9+4u7WKCp2ur&vI2=Jr -zbWt6#dJ#QR*JwCdTnoxKP@M4&V_JiN+|=ab6qR{`V!RgF%ey$-wjV5dL(7l#UQo8p -z_l-=rxUvyApy{UOHE^1U0q5}pD -zGXRs?`NX*+vSJ%$9W<~?;lGAhD9a-ZN0whxKnyxMvqcperbZD#GqANA?4tEi -z5b&S*rhCKl$s46aa8efHE;eoTH9Y+SW85u97rE$TpHJzNH)ob`x8m+-vQf9w@WHM)7m{t1d9th~Y4n6kbyt -z>xdOFSkTN>cEI+}*T9=lHqa#&=4sL~?fRzL3VD8SJKP@f@Uluw6n&)fyZs(%Evn-e -z|0{dilJ|X3Pqq(mAhV2MeiZ+L(XVke-fK9EUIhkQ)}GKrK@{{GSF|V@&k%snRkwQl -zPX}E8N|75*FfiAzJn(gQ?rzzgnM3yRz>J&!?Kh$h=tipRH|`!Ey&j%ZM`d1+I@?1mxfs~P( -zsZt6fy8gH^nkygV>Q}Ks?@Bn4M(tc}!BO6poig(iUrfMj5X|*xW3jSZO`z2Wb)$nW -zUibbtn)A4gce`&jkSWo1OADGE2ww~->JPLR -zXYKyy*J*tbu;JgVnzHNF#ekE;+4A0U>u!#G{ayY%dyfIpJUGGXtz6chm*rI3XZn66 -zjhvo*3BS)HtCGzkG>`WZ(3LkwWPfbisXPBAx7JG -zaPEdbaiNx>g-RiW5uy+jpaG^17+pl~}{a^K+z78+mrA3(Wa_+kj@^U5~R -zz%N&C_yZN+h5AoweNt -z;<6_15{+GL)C&geYsu>+&4bN4WcCuJh~^$)mMC3)2QUgz)(-l4RO%XDxoStWh}p1~ -z`BQ}hg5QG8Vq@9sMVpMi$ckz(yk=KUd|B5wOYh_3{YJc>sh;EFMi!2`j0S=O)Fi?e -zlW+H(B);3We{q$0p_C@O{+O`yj3vl{@IJj=>LYU)nT~q4?`}%yD$qZF`k`U)8Vm%dl=?>&G+blo(&BMfz*49@J>>NqnB~5 -z_|4EtDj5G#0YLWs{W1p^SP~pdSjba9p;wqBd#esempQT0zV2EH;8Tprfo0lGB!SlL -zhv8chQ=9mh+|nx1oN87lUPe55>4#dUW)G^-lrcZDoEHY1#?AKfXhC+vNB>D~OktC^ -zkhMcTK7jl(;xdmF-&dT|+R#f+&!(72D0`VHutP|KRlnkGSeb3pezVEkA3PahVfYLmPAa!|t?LC>7Lw{=VMq)qDP?@a= -zAlF4N>*pb<1A=-sx81!J1V!7GY7(koAPCP1AtjD({@ -zj}ovbiaEbeaY`Q9p| -z7`rYU>ryqe>mAOgF5_n8j73|YQZ{mv6c!WWtnj}vu3F`+xE^91kme7;DPwbr@sdVhj)mSBmkDEs+ol|J$7#^p`L|lB3Gm4C(87i49}@(IACa9!*xC;SD7p(m%R+ -z`3BlqMEubEje!UC;!5?`aJjX(Ti^}kMlIg&xjQMCZn~^X05*WwUvxQM^$r)-q#;YQ -zE>SxY9JL86-EiJa6;bTvuNKjgbrEVPcF8D#>*l@2IDiX8>dxLiWHIXYeY|_6T4F?# -z*>L;k%(y$z%Twarkc%jqTW`Cb{!_6D)s)ez$){oeOR9dT9?@9p&`m#dwyZ+{;E<60 -z`0r=Uzy}rcyn+KCf)=K|5J%jkf!L-Ypa!M*3Ok0J5>vh^0Al45zOqD!8z`okope3a -zLFTVTQ?IaQdy`ja9qq9;_wwG&zotN{`GeVHHg4=A2g3oCPfxcc2Fa>`S -z!n=oKD65q$jllcZ+OiJGK8&P+Lu?16r%c!9ChRuneO-ZfO+qhEB2w&bnkttH;94No -z`tEg5;|u_bY(%P$<-4YV+Y*>ac*}G&_m1=20S~pKT7C^xx@Sr#nZ*p=9B)i6@BKPc -za+p43_r@p0+q)>f$~Yo-)tFy_cRs|x8bEAOg;jwpZsRMTP39A5C7cjAZL0s}C_7*z -z8x1SSg9!5m1ctxmG)h>I9Mt^|XriM&JG$@G8C=W&(UDI%So_nQO~<3S-QFhMC>4_$ -zarHjSc;66HsMdqpsy=Ko|$i8dw6Mn|qDH$qn( -z5yJ<-q*cV^;oI}$aU=O4G6FrlQV#t`y1@##0Jip|K!{Y_ym@w*qI -z_FoJ~W|!|;t2fggs){6hv#U|(;J4O&@w6IS9|Y=>Dsvgm#WE8!;ff*BDl8-V3DMmLMaXnhi -z;6jP*r%P#WuYG)Da}>^=j4u@RmYkc6v-(=J&->s7Vxdvk(GSVO;M^z{1FosPK;|W? -zLaEyRD-_~;h^d)#c|~8kq%J8J#@1ZM?!a4)rF6^NV7eboj=xh*tWyr(1n#vh#8Y&aQ|^vN467%lvP(A;3k_iOa?$W0sRs^mqxcHEmIox*BhiHtJg*NYr$>gxk|U5WMc -zjZ&`E`<$nXK6-0BjB;RDtSXJOBSwV44(WqT!-<*R&Kvr8^e4w-UU50QG>~0z>+!luqE|(IBq#+#FLtq7#%NiL2w7j6Mpfj-jbg9 -zh{YR5%s})~Bwp9Ul$DZuCw!oOjTU1DBKo$etHpK6MjD2pMa=PRMhdG>{MysSf}VX#L4fIgYCEbJo3)}^>;g+Zu~ -z?yU6tPX~0?P8x$y0VF+UHD|RpN^`Zs;C_wRzoKNu?T_B_?XKZ>nh^*zE6^9RX$7Sw -z9n|GyB~)iI)ak{1x*cnl-O4FbC+L;QoC*F2;HcF?w^w=ZTsi4N6g-xD<+bl@PSy{+ -z@DtN2sPRDQ2QaxpVU?kk3cuvBDf8diTo=Ao4@+}|%IPI_0KoOwD^jd6R`wu -zOtF=ISNjzG=r<-zbsrRMCCc@9@>AdrJ|^kwrQQH8Kmj(Q)(ES4h9OmmNw$n9=Y?Q= -z_?2S(4F+KiXh&yQh)qNqrrOA5+x58>Y4yNt@gf=9In3w-3s1-^#=2_O<5^1@Zl}Vj -zB4hXgn0ba15w_EJlHu~hye8KkcVaA_jyudR_3xC&8DV{umVIwDx}61IVz94U>1yEK -zH$p=Kp{cr=W#H0j9XkQ7Fe6f88D5twe;gkf>$%Wx1l+h-_(@n8hL}O<6EI4k@29q$ -z6QhG7ciX1@={No_eIliINPz|nUL+&I7b=%`=`3C%D<-^zLILg!F -z_L0j78C-;RCe_>uT0 -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 -z%%Ex8+^o{KC#$q=SL-0n_54 -znN1A7-};Y67F#J3oToM3RL)LA3<#{o3X9KHx~sh{D9uAxq=u`W{#XWy(VYG`qJi3G -zj{a8f;{vs03N`a&$iQ;@uTG{74767pNwIF`cpY8rT-8D|=rPYM*XMuebeZu8kRN!+ -zckV&71`mo6JFa3}2aA9!>y%UeZ0L#UhK;PJ=FdoqjGE}_FR_K_YGhZaZ|2?*+468B -z=<)rJ|5*?p-pW;Zz0PM26M$iQ%S+YV_xVyo7D;nappHkBQl8z=y7!8=ON@DnNL_uR -zi6i|rNPX~Gr&pLJ*)uszX}a@DTvIv1gVOAu|2=KZ6pq5YW4dJ!p@IomoshVzzZ^Q! -zRl)iedDX=waiDc+1n02vlLX$l`A!woqy!_uP!YE@RJSN~Io+G|_mtZ4LauhOKIlbE -z^39EuATA-T^X7x&bJah+2w^HSz!T<25LXK~fcG)N7|5MO|2n+u9iM*mkQ5maA{ixO -z#_9}GB)THFKFl%QBr5GY+-=$W>%(!tJwxlZp4CUA$Ie`|lFM@t5{!;y8VJME)UK5W -zO9ribFa?Zq;8>tdQ`JOL>(_XjzK*2(`|U{Jwf3IKlgee~M?}zb86`zF^$24{lIAse -zk7BNNCvCbD;PGG)Z$~Q;2{J-%Mf2BKvmbfpn#@^%%Jh!CBPQ-r72pc<^@pH^WMC)$ -z4s^hdiMQ=;i-2s6_Bv_I?e*VS4&l_v#64IA%8TEQiNr~dbj709&sPrEA$|~#iUtZD -z1|!fWNG7+rTuR3P?~Jw`C-^2cDxd`$?^0p(kc5F~WJS@})?@;zqL -zy?kis17U}HIu3j85C1?)MH0<;7VPFHOp<;z6K?YciqARqxE>56`El?VE`Yq%;C7iX -z2U%Azdovqn#&*6|zi2P`gpo+c0FxEjNm)6YHr|~2o`Klfi@5V{%G%`d6w^3gZKqV5 -z3NIo5Agb->o*YU^^9E!JAYbH++1((Dv?nX$`3AL$L?Yb)jNXQ#r+5 -z!YFMTKdHd0|ENYR0r3bSk|(fX61?WV^ocZ -zbacP0SZD@{bFtTJKZXrp@Hx=A)`b?&RCSd+SMBHh9tLuojjImo51<|`+^P4NVnlT@ -zl+cbjPbHk_-T@EqRlY1fWijBJ-AI)r;b7%A5du$CW?Nm-?giBc$?OG#C6-c-kCcomSNcaY6=OFE5^{eHkKKtC)cN)0O=D(HS$Bw0M;R;_D -z+&$#uIaq8d%0C6)O$Wzr%xl2?152Dl_da+!I2oT3 -z9KMrB`A{RDSo>jrCNkF{DFWAUPeF2N>^-vf)Wfi8JX%K%FavM9J%@B)56J^k=N`{0 -ze%ad=)h>)lk6RYRTF8HETIS)PCuLia{dd@zrUr*a(yO=jwEbw5iZfxih}0*;@4vt* -zEQA$>6qhjQxvh)7PA*G`N($YS$ap4rX1z(nI#Z}v$;xVIv*c?P!P#Ax=Gy)A=7NMt -z=XWY_XU3Z#5OawyvyHMX3^s+ZPm}1}=%QQuO2iR4KoI$xFB&t-P!mQ7eV2f13_}-K(c~lx!YR -zeK8Z1J3UkZFI1ny4yA*psi{btsy6{%*YQBI -zrsc8PxbPE$BY{W(6GT$O9suzl1&>$fCX>S8E(F_Y+9rvM{m@uP^nV+62E3R>0->;< -zhqw9oK*eY{te}_qQpu_ns29=5Duw!b(q|`}iak~Q{K4Zq+rNpz?rZ2Gs6d7dY?O!B -z8U>SB^ry=z4b6TKB~Ce$f9yb!U8}kfZV|rs+IUELBEv`F$RzP}TDJx$p=`FU3#3&K -zqMfL2FHj-K(P({yREitnIEN0v8y#oP7nvSF -z%ofaOvRM016+_PxX0$z*G@RTc7L^zX7UTYVK5&Z(Vx^i8=*U$AOUL5KEmj%M!?)7r -zI{abXT!7YF&#^ZM_B@m!S^lB4jVI8hJL@}iUcK$Ky&GdB(yj07=#TT8fI_(9$jHS+ -z6-;#IGeks7zUxfv3{92S&q7dvm}PbaK!~Y}byySXwic5o<*1FTF>n7HoSK*C>9;rm -zT^t%g*T+mj)VX&LAq_U|myK7%VOFit%yDbveZEUCoXa9c%UDTU=0^`{ihp)?VfQXt!TqPV-rPpQ{cwnii6pkJUqT@6}Nx -zowQg^A=x@c*MGM~!#;E}HX;tZhrOH(_agMhbk=~&RP -zOy>R_!bzX`Gl?oCzA#$V2&tb$QxTw%&lG63`u-dO|L|q;Vi}@eDrx)qAqg{ew>Q%T -zatIo@9Wi|*@^bq!CXdV^Z*-x^RFPxKd)?sil+#smgcby%4wGG9Wsvm -zk?>slJWO%?#x4Ysn|xq25-8+mvwg*&%?% -zc|yD*kWZvJ{zy(A(WE8Rh*z!BWh!blgfBo1maUifEZSlFr@vgnt)LqrX`wmB0thcQ -zaKTz{HIS34wiN!OWmO`yz;yt3@_rXJ -zZ10?hzCM*r7EiVL3%Pid6b}k!urA}Jl7An!6t%=oxkKpRPt_(&4YO?|jLU@FFy#~H -zfgphir=x)M*_*XMee|jh0K#D2UlVy~3|d@~qIifX6@0cpT`1lzq}#Ig+-}DOyKw3( -z%)kdHRDL=(FbxIT8IT`Onf_!3=SDCZ55_{|p=n*x4kKNv;2g>|NquGNCl!6Q(fee6 -z&xUb>-BC!`wWiq`!@-BFv5!@qfR#mlg~AGnv7|)5zyE78JT#FTv$1R(vUcpODp%J%UmkhJe{~db9;@nzVuSs^_JhQKoL)=*oBM7Mp{SmCG;id -zYSL};`MHlk#xje;o`o-k4ndYzRLxdV8s*NaFdbKZ%z%&0a&khQYUrBNk#_M>5JMFi -znyAsMTW@y#A|_bT_CRTUMfNkg@l*b|UWR}wd`FW3-0^1GoXq}s)NVM4s(kr;L9)@y -zGkIx#iOdE5Ukez6ADn~r?Mfp~?){r{>az8v{x(*Nu{6wFH+af8Xu7jl10apW>~Z5{ -zjUve}4-Ch(ZweZJ{`d!xJd=bdz)T^Q#jzsTO -z@X|wm-P2|1|bh#&1ZfnZ28$$`aD`3jlRSH3r_96SK!iOYq5$dfd^w~E?2Fk3Ub%zeXZDQpHQ%O~xXj!ZpADQv5c -zuFFnW*8ds67t24bYWL;?1~(%gxUxtNP!Z1~s5F%T`B2U85Ww@YP-N2PyIfc8vwl~h -z$mE}LHOYhTG!gzVKY25}V6cx<2e6-s>1~}PmAaFh3SRU1F(>hu*sx-%HR~SDa@dL2 -zQeW-;Pu>odjCDfu0smuB=0gF_CaVjBdyG!|LaD(Mgn{;SWBjZQ&L9USc)cV8ONlkTLSoBGg -zNyhcdP20<73;(2D8T<&w%Pb`ija3ydMahFya)T_)Z#$Ha7T%3N}j0xehUr@C}`kO!&tdmP>*U$X? -zb?8x!Oo6`R3%rcd?I-gW+Sr*yVUr}{xaeLUTP?p}a4rg>JWL^%$PWBB`17Q~M)eql3`U%bZU_3`#!<=MvYnHMyYhGR4g`QE>uMWl -zE8%^Nlt!(pJC^=CpaOIJ779Y -zAci;aZ}h5A%;((D=*C*^4|JPhrW50wv&Ej4|1Srd;(PjEP}2+RkY_$Z&k?7u0B_{q -K$yLdih5Qe*;OWW$ +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 +zKAonC$BvD3T5!*Y4M&R1^n7x%N7 +zzRd4+tSSzk!1kW&(uuo@2bs+FJpFz8hgE!9f6s!I>#XOm*UB?i6LfX_y)kcBiQKvA +z=c}dW|5xGP`gs59Zgbt}KQ)&Oxh>ah8^aai42EtFkIN#zP(bDX?@(n>+*`}?}C?~O1e7NCVKy=gRdv#J1=_B +z^5zsj-^`hg`}-qjTxDg6P(Qi()6>s;1)1-9C}clLOa9sX{y0Bh6I(BrQ@b+#)-{sztvM1yjn}3#O46+uB^uC=dZi>ul;nn`!(~G +zeD?{*>g0voI$!_3sJUL8lezrG1cRKKZ%dVc+6ja?Lzi`@LjO~(%X?`_fAw#7kkb+^>!*%dm{ry}2c +z|38)a+3o2+UcB5|_iD4P$L4RXE)V*CFn;I#?%!Yi@9^YCr7NornKhh<*?A#cPvYq5 +zB^ze4IBMOI&k=sJ*V5y={`bpEWnL`0zf@7`kVv5WAtw*EO*hKV>oMLG4al#kliuB|#?#*jT>-k(p~H=M}wNnE)2Ri*H5^%qS!0+Ubl?l{F5C~JF9m&?UNeUUE% +zZ%RS?y*nZTbv8lsCVxA1K&mEKVYAzV^zRFoq;{7)xc)z+sAj`rhh13-m*xrd{?Su; +zC1D{>Mfc-J9$tPa(Wi$PqQ}}NO +z-`@O};bwk2EdKwsa?mXb^7-P%wvmzN;q!0xTdy+cu*674@>D$t6xdxiQRIjEo9ll1 +zAF~D753F~6!0veDvc)vbgw|dCvC^&;s&nj5D>ps=UfEPpv9y0(Y{!E8v8HauH=3eS +z8N`y-@vLF7O{;R9CskROVmYDiN_^y`H}h)G%;VsxFA?Sb&dk>8r5`ilrv1tA1Qqa@niCLk7bfE21o2H^moKtoIiDIk0IloZ7eH& +zLnp`{+jV5)m-$Cs8WSXhPx#mTjhE%P?5wRM?eB6%X?;hJ2?MvHJGYU^i?Soj_&DBI +zyBj|J`S|mSej +zy>6*p)x7oW*IR$29_v>Oe3E6h>CeX!tB-~XC7*4LCmlal@W$fxdF`aW_ATZN+=A}? +z-i+QGe=3Hs{E2_^U9sTIHE)XoxqrD6{vCGwY^#&=<+Q_%7gHM-D5eRjs5L2Fb1A&W +z5t$S5|A}N>a^8&h@f&yahY9n}>r}dv5}3sh9ejsjUIMekDYk}Vs(a3O2o}5USj1Ev +z6L{0qo}po>jQ78|<#Uc+WbT*w|Nr+P_vahBSsJ%XOl2vYexabn`^)Jq3C)g-Yu;vT +zU-2qU^HJzZ`!lY#X$fK9BtL|4^lZ^S|IA9=x1?KAO6I6>-Rz5#roEYME_3eDR)LZ| +z39S|r_rJe0vq-hFs&~HIhrh9(-6QVg?}(jyYpe`OW>#T%cHzk1EFS@z+Q23$|B&whTwOYhFCl$AvL(~BTj+V2{`$Pq3O4g@%Pf(^sLNGTy8oT|zE|?T{pbCmeV%W^maJ!7;p8nc +z<@5Yh`ERdUH?2th_uXTGL&*HUpN}c03UaMxZ0Yq?$j{;GFncEX+iAOT>-Y@qEhlln3V&zTQ(Q +z{${TCt;^{`<{K}Q=MRJqCJ3ADa#LQS9b7+S@~chr=T2BZS7lQ~Pw9{IyPTiQUlkyH +z)M?Ju##{!yjlrCmJ|X#QFBOP3o?q~_{AGTk)N#ho)i%M4HIzy9n_Qef}jlHG3@_GWCG +zZsk8k>G+%2X^Tq2BqJ0bur-z?$1IXy-F}RxD>x$dOu|-2sbCp@!SqcV1!8=SPBb-c +zJ9JEAc(rQx +zbE@3zoyc@r?$HA6=aoOK_LOk%E*C%l?DgzpY?c>Y-FpjzHVdZOM?am>D%aU#%D}xa +z`eH}=m7n(QuBVOTzLos6(Jae(rtyEXpZ5i|hGT1!k9h_j&Nu(x!}o2E(uUTG?-r-b +znrDR1S;e;UN?3+ja7&D&n3HkA*Bbsxr_}4sQ-uu$c!VbNa7A<1b6#waWvnXQJO5qG +ztEI*1J6>M#toeV;YUNLlBT}ylwU6q&ia5c+yg{IB%YsW>@_YZ>U;U`{|Glg!-F>p} +zm+e3ErNc=;>cRz$w%Ftw>$|5i&%U56$+$@)&F~m=nC6mbMwa#j+1|>F4Q5aK_w#+o +z$ral!>3(LXeC8y^DAyZ2Q*udus;wZuzNyuZfFv_{~d+Rj7KX +zz5m5LmuS{+9IvJCKU}xqQJ2?ytFq#N6HTu#f1jivS6Sl| +zuegl?nzq$ZB@O{kkG}ViQumwiP9;WHLT#P##lO5iT$SVhHtxOb_=|tN)b&qV#XQID +zx+XkcdWB)z2F5*8SF$bW3S`&gNz3`N=+4Qc|2fqS)BcDFHJRA=oN_1?U+wssV`tS8 +zWBoaA7w)frC|Y0kSb||)aPmXxaP~f}<^K%W=bo|q&${`}BdhAQA2`d|U&imKzy0|s +zH(P>?hyG!Qq_tg#mj<=Sn7TfdjHrmXGy9A&Lwd-9F7E3`YbGydPg +zzq|)#3S8`vx88kWll8pmi93|dKRUlY#=qXsYy$se{i>SIGuWJE|5&pB{^$4WHWR><|gUZ +zn;!y1JERq^H83(RF?`6!a73Ql;-AB=3px*45P)aZ|14tWm-p*dmCs2EI`FqS +z`?GId#1W?X`QI-eKE1c(rHpy$%p>QsRKl3K8P&V;81k<=F$YNKMDvzRXO-mHA-?Ov +z#pCl&@bEDobQ4~~At1(;^qRjd^JV^~*TQzTMGyLm4gMZ5lHcvK$*YF(e4l|`!6}tF +z^PjxfXq38|!y-y2hEMtI&Dh4Rc%HyI +z?&_6+rEXp(6RX*#zc%+b%sqK@mEe-?X1`vvwZ575?179fi!3iQFHZuq#FI6tYypq< +zEs$kkOqqT%@1pbiZrRXV6>)#MmdgG6uurH^|DUOgb2;nF-bpt9O5f~{JHhxQGdM=6 +zA!llHoT-um3CsuuT%f~q5`@Z~}4({1_(BHX?^+@f(7N+k4 +zleykS>#Pj;qZ7vNdLymJso%v-y1_Ldi$zjw&$8W{!mA}3t(ziwH(PKe2Y+X=T=4aC +z&)cQi&raT{`|UAvB8%gC-{!>^(9Ew@9jH_FX;bwB+P*r<$n~&N}9_U-Yw@ +ztlq5se5dRG3)Qp#nzX)uZqAx0sGqR4XUq3T8>g}{8+2QV869KLVTqGGzos*0m-~md +zP=;fT31Z%Vv|s-%5oX_IdqdPhiT!xNksgolyc1a$x2Y<*O_n(I_wKS?E3DRvb1Zz^lshweb-q2{jW5BEN->p_&eX{oO-`r$J|u>DbxLP +z@%q&1>PNb551r_Guy7WyL1a(*Vb{D^(c)AQSJz;%zXoPLKYs4ui#h-5Z&9%Qr9J=e +zz7oG)dpn6g_Q-ePbrXL|Oq-0YkF8Q?PpAGWgT;dK1avZzt6)3uAzpBEYqRIx13!Qh~X_5_Ek1`x4bYB1Pb;H;nHfJ7 +zp6J(4eI)x+*UIj%O#g{8<`U~To72i&PA{rl7HBj@nK^|7ZuDXdaW8!pz01P&DpS#C +z^`7!e!mIawxuz!Ho3=gu*gXZ^r>~t~34QJAs@u)?>3@32N=Atzd9J^t8?>HeWZK9y +zE|30lYXP^2e(fPXZH}vd7HBcAW=P8lv7G+l@Nun=_ntBQ&0gwLUv~KRH7}RDvyS%E +zP5)6-tlgC**ZksD@rT<}njcbTvX2Xh%`ZPs_;uIK9vb@eaJOS}H)w^C#->y6&FvZR~t!Bb?wRyFyW +zZDTx9W53Jc<3HaYPc%Np8{Jm^m3U!MwpgKx6yH&vw<2ssHuc|X_~zvQJESeO&+gYP +z|H*Y6mmbACCFSeq{D00k^LGF8sY-Dhk``9o +zDx9;!d}3frxbPJ5N3F)Odv5()dEU(4cHbrM@Ux|#PrX>6>?RWUc%f@Z`h?bsWJmET +zm8@3A2#%db7uxyuOGi%23l5n0g)8}>PTyI>sc(7v#7s^|)*lyZ_;?~dtiA8NL9UI) +z?>Eo?wA@qLDack6aH*L8;T)TT3U#g}rj4x3yxi{QDKUaUBVJx@WEzc +zFNgK6xcd(l$7$~=xjkL(mE~>U*o!YuZmxJ-QB&#KaJAR5Bk+>ma*rjgXTPsfsw)=1 +zeB&--CC}y=j}_PQ9&kFcv1yalteeyRiV5wkd$Xr&`FeTX-5=gwJoA?-dE^B_wGkv3V*_n(&{#A{KwA8yB*WWLy5R^SCd^B})>=%ps*ZnJnX71Ma +zu;#uJy5o9Lzt)qAm2cS!t_xjd*ub^GpJS!FNtNv(ewOHO3SYvMQ@6Pb=7=mPe3Kz& +zSZ1O4!&&-+Zny21_n}5#J44iJ?z!5xAL;rMyYSA>R!RQ5b8jRx-C(X?)61#asFX`p`?D*^?hOqPrmJ*)*=0lf0MKPXCJfD +z`~VsG*$x|SJ}WPqzG2pnLm!WeXDrQNaSk~WBiYIsJe~QX^e2tq-pJW?kRr +z{pH=B%_sdYe>)ZbqV0~|k=(dVlXX8DFw4U7jE&OT?YI_LA~%^U-^ +zh3-mwc^yPEjT*8WuNN#h%CMTT>gVq~{tn(3H}o48MH#93kmIWzU{bsLV&epf4|y>?B}~*PP&=DcT*GNy +z&!JcDf{|JYiZ@a&&3}2E&7k4^&)HiqGVm;_PHrwup2MfL<^HDre%}xIoBr4Gcgqwy +z+}^>Gx5Pl{>y7Jnc|Fa^B5`w3I54`dWuVuDdgSE#v?4vgfv}z`BY1P9FQQ?z~H!m?(GhKJI|MEa`7P +zFFU&LeR%zJ4W`-{^L6sadVe?m{`5|5zD7o@`FYoL-?D-~!pj3^u*zy@<}-*TtUG +zL&)0=lkYn%ILY*mYum?ItJ}JpoIG5Wx|szN+#`&l=6-xosB@-E;PtA%MUT0+aW2~Q +z>*n>ks=VIm^CDg@t)8B+tmLw3@!gVRD(dXlCrv(X?K1TW#~t33REOXn|HYd6*k!&S +zYt5^wS=v7D*^Nj0qie2|@1CEmlyi%d%RJ-p!3iCc|9v{0_-$e*(0e|0G%LudzS(tw!@rri{hnT!-@lu_nU156oFK +zcfsWdo&T;^=A_?riJkf+SU@z==W}A~l`0p--A%3~TGDEFW_71oyqxBmSCzJPy4|w~ +zme@H0#%8A<|9fQTD*SrSdB(j;cTy6i9TF`CRy-;%n*%;eqAzB@g9 +z)9lOHGuxZf<$a%bCPmNt6U(_{zX6|3ce1kQodiQzqd8dB7 +zXa4diJnonEZl;VsPFn*Nw_WaZQ_VKJzxQ3uG%Wos;XTO*gqkg-0JS(&@cy*iMYwGm( +zrt@^(#Xm}OE(_Y;DKmRR_mxS#OE~?dzOs8>_Y_SxGUTuodYKE#5LsR>>&jIZX|$L% +za96lGZ1{DoN}l(&CiFjiD!;)U^>=%El+|wZr;`T +z>NCS{co~!biggCYU5wSzZSL>WPv_{K|<$giI#1nh& +zoZ)}HwbV}VLgKS^I&mwwCPcdntZWWnI^*uF3dwz!{omeP5ZV~Y{NKjj^Sgt&fQVxL +z|)_scTu#`(+_{*KkY_Qvq!T3){ETiFMW!3gWekPIKryQh2uf`n_)!;c;?=JdP +z_}lCG@sCAU9((l%21LN~gy+1EcT +zQLjCx$DhP;MQ%ffKdUYIoz$P9XxGUc!?K5?Ch$S#nSTbC=HJwDI(ptuOze=anL$fc4KGL2Y`%&6 +z>azKI`qK~Z?cjZK?r2`%^%uv#C!gZqd0f2u)Tu0y0|B%6br)=_sgrdV59-(C+x3@Q{J4LdVd55t7)>TB&W +zU~o-2`E-?~p46d6-Cf%Hv!5;sK5l)K?VXxvSQNJwOP;s)JjMP*`ClqxspVn^e_l?F +z`}3YVc9H+Hm7#Ki6BfPd+PnRQ3+swqk9aRLxGv4-KD@=6>4mdXnJ4=?al86&DeX!= +z#%n9Y>Z=#`FZ<+W_OaSz*TvVWBwvJ9l_x*FdR6?|3VogpPXBEWa3p*@cWG@+?CQGdUt1Ne +z|6HkVo-P;nY+3g6Lje}cB;#G&pNn*bDpWhveFd!=NoMHZ$jGxIlX-$tdv +z*;`2&MlY^Ue->xyoV;4$-e1Ywt_@a>-N&76nrE}-FDqBAR(ZtO_>nPxV}YVzyzhPK +z1^(NAz2IWmn^qXczKt!Meuc +zLq8wdB>Mb_-S;fJlU3wGpH$?EuFX~}?y@c5+GBL^FZkN|3^~%wMPn>c#1Eccl;QAKTx?Ld%1L1r98{K)M~yq(Zn$E +zrED7vFY_)?$Sj%rBA|s&p=8gQSKM_!4wsz@Yxq6wgu};@e?Haoo+hm?P@DYcNs?GF +z%dHK&Z?rQ1^-i~X>Bl!GKI-*S$NN7r6_0bsx?gSi@%hw?+122I)rKZ5R!ISo`hR;5 +zDQ|L_Ya!>r87~@pwejl19f7HHES7nsq?~%ZV#+$<4?hnDJ@|Fy@lCt9gUjXE4$k(h +zXVzFzrE`S+(cH6vCQf`ZmX$lKub(Tuc=pZo!@UmASYNuGnb2W6!O&?n^QE~bHXL|= +zt|t_nLqZs&iMXM +zFn{sN((jewO~<)61)}*M{|Ul!rdE1`qee$FX{86V;fxHy-oatk{~Q=4P$m +zQu}^-Ue#RY^AmUfS>(t!`}D-w?rJP6{W;FC|F`HoSmMj@U#_j?wPXDic{#})>mM_e +zf9q$I+Hv>%#=iDt`RP$c +zlri^Gv*w2FuYW8OVs!6rZCHF%$1{ty&K3s+TICwae+wu>JVED{$+#F%_UAN>CQ=)i~k&vQx`xp#ASOZ8@!t~vGZVuIq4FADmGXOh-(T{^|^ +zYxyF^C+fT@z7y(l3^p{(;?Y~M%;)q%p_EXA*V|HeE#^47S?|S3wzAhw;&-=sJQXxM +z6n?Gh)W`Kt^PWEMiLp8yS(Q`6zfV}ka?P8Vf;e9`(GQiUL=~l<=Zod*%y5mIdxK4Y +zdsW6_M&9^>)RrCWPlMIVWY47)#u^{@ZyL|q~OOH&JLLwlG$++SQEa{lzTAlaD9 +z_2!j7rF2=Qy}Dw@yg?vmPXxzaqX*u~&PjKC`qK4?oH#*7S0q8p~eM +zTzsy^1+gXHoNBR!00y;fnopm##Wc{?Ix;IXD4o@(tMud&%4bF%xY%@Fs=qb){?XMwtEG4| +zc$3y~Z0-%k_^{5kRSIu;7%XpZF=*KHBamhCx+iX+)l99q3@4TJ>qH(d(cXD6SuDvnQQBe6 +z6V*1QStY9GR%e>LO>>x6bRcxZyllv2P|&XvIk-f7=f*^_pj|<`c@*>wMJ_@N@Htix +zaOwGh#6tgj5%V+ICWza2C0v?%=S3jPB+n@wcYWla8Jjhn{~5P;9v`SQiZDgEMyb!| +zkkb>ljnNZ7u@&4i?lnnd5Z1r+>p6SNi;qUin`dY{3;OPwByHQ}V8qJZ7_Rokqvn{Q +zgS_3d)!EIrO4rA!Z@IQtT~gG*)$u}xT8`Zg-QnK2_u`t9ZT?HX(g +zI@DrM_VT*w%sk|neddra+kDvv_L1K5e|;kT&;6QaTDIjv)bn$^E#HC?9;m#^ntMKX +z-9d(Xw@uxatg$;kd1Cb~h?85JCmM2ZU3G!?!P|U~YK`>13p1`n-4%L!^~VIZfshv+mkD*_Z{_eAM5r&7IwP{+hnNPTmHkU9*^;3$b=N7y8#)Ea;1H%4Zx?0EO9X4m{p^CBH?ZC!7px#jA&EoDyGLB*P>47^*#bo(wyZMB;A +z|F_E9jh>6QZr}Ea*ZzY&uUiBAA`a8Qf-@2UER!^4wj9%0RpKaazuP`iUuWSP>t8;C +zvzoRoFwD?x7xcI&aV{g3SZ6Z|gA&9w-xu4O*hwYBbNqL^-vqn(NCnW>HE +zT{@K}_&iKVIiuudu27};r}=_M#P2WVO+Pljd$&I#gL76^iHeZ}N5ewX485g13+AZ> +zFI>A->}>+Wa)b1Y@4Rz0m}ZohpJcykF5l}bl+yL&RlS1pn}>exBs +zBkPjAo4Ys7o8=w3z1F1H^onnWXBL;CnhD$5r7jF>`i;yzE>GaiT5puCeE4&XyL!#^ua}I3@-DXjzH#aM>6=k6`8P3SUhO%$=aQtuPy5S_4=T4^xBD}3 +z%f0yEYsKA~uMZ0D-n_ozlWPXMl-9+d-$J=d=lovG|5&R)rMM?-|IL+Af7O;hcA6n~ +z^Sa%CuWPl;V(GSKh5pxqH*;-@i;}t&7gy*}U0GSEsh_HKI;UsPi9H*>1Y9fjJ{0MH +zM(;#b#hrO;cK@oIS^M+y`i)`d1Rtfp<=}Pn4hq(^{QcTFo;6@$_A#dyi4vUE +zShhfMrD_J(Ew7U|ecFPRQ%?SMm$I;ol+-h3V$nOnQ+jE_sY@nh-LK}aGtI1Ac5TPkn^E0- +zcW2t)zT&luo7W`srf&w*tqD?%VGATPj%)mza_WzZl$-K_Nv*47i?(Y_QtZ7t(K2qb +zSYP*1qx9hFMz#g48BDht+!lytu-$5GyX5xg*M(k&e^Ir*VecLsez+*%>W%|^v$hn) +zZ18={D%BvifHQ*`VmP~$m-a{L_CnJGM^Dr;U)r>Bi{jeWV`{Q7dwicI*F3wxu!X_b +zLHYv6mPuus>y|Wf8?58lVX$OV!NiDr40^YgeOqW>pTRh*!K}x)?pF7Gi=MUx&D~o! +x8fGayZi&BmLI2vavSfY|Ha7JiIsTu0){;#uS95hfGB7YOc)I$ztaD0e0syn%>B;~A literal 0 HcmV?d00001 @@ -3704,423 +3870,444 @@ new file mode 100644 index 0000000000000000000000000000000000000000..7bcc9a4bf187221324d322171be5a15a7a87fce8 GIT binary patch literal 21647 -zcmV*LKxDs(P)&TRQfdu0%3Yt0PH)2EGcIG}+-=xc&kbyx=O#8b{Wbyd-}pQFH+%-4 -z#dq*sT%)L_KUc&kA}u7%IJ+0r#`8)nF1-=q78d8}LPY+I#e2pO7SR81Anc+4KFZ?L -zQ|M0*A(N0pI8ESQ;J@*A_&1ODvq!~uaSdDx*Tl7P4{XMI9EyVY;9`mK@nFKkLT8{0@;k&Sh?^GcZ&^yeuv(EuXkSa+6}=pgNB -zFL;=t?jsEa&k#q?FvemPiF2PKtRQ3fO#CMNHe<8;{gHN-H|fmAoudyJ#lrp7)@FueR0%;J^7;-F(VGS9=o1zblEh3N3vZgQdnC0R; -zHxt3*nRFxzn&r)e3C7~r&X16GPYGWrUU=+PP0bg46uSEXgX8!h?2m}YzFz=lWOlrF*- -z1jr<968lwf{KXm*`0s3_aJf;I?|sRME3=!&8vcI -zH=$d;gj>W}E`<%VlNuEKIokOci%;JcQsSQ-B=-egLqK2Ut_a%*kLK&+h<{KDnm+5J -zo+jS2Bp>mm)bXGA{~p2@1oW9#B67UrhU`lFps65;>MM|^$8KYMg~=#fkEf{>`tnaU+WutjI7C*1VrWL)Iofj}i}Or1$Q_lmip=bV!9;K!xr8qWISi4by#Adk -z#=>fhA}xe1->jeZ2oe4m836afJ2P1f_`ek8XRL76RWX`v>=-?;xLj| -zBjOJ?L?>j}P9OY#BTOVWLMLy?kY5(XxklvX4vdkxNDHtTm(wwhw&Z;MnveYdwprgq -zY#kANlc_Yr -zL~bKYWI0=biqmZGO0b;`Jk&Jb7)P3+8IxP1Qd_fl_n|XN@0&<&gozmc9*jbi$dyIl -zY((;(tpA}lVvHk6Gea|mIY&GHLxex+C4XkAlRPGJ8{3c@SupodJ -z-8ZH4e!pf2jNO;Pb8>P*0$fX77x&QbTWl~9yC^seNXr!cH!|7D2K?1Yj5)^sUuy(; -zGrx_(EHxMThw={@@BX|9o3IPf5=f$jUa8H`KsA)ctU8JOiFZ -zf4-2wL}*`NB)yKbEYYVUk~}1b9ui~!uU!eG=C`rYj(duQ{3c@SFbuo}DveF!^`|)b -z+Z)sQq9d6+!Idot>B-9B?#vwS%*-PuknG9kCtPM6P0Qwo9f9MR(|pan$=Q7B!A$=A -zS`V)}&dJNhnV-Kvf9HRS?LjoEWAcA^rVx0vkN}KzsLv_`A43*ib#JV -zX!4tgtwS4pKM^w~jaMVmVrDHLFP&T481v^!9ZV$l1v*i~2{HowIplZ(`+WO#f)i)G -z5#*2aAN1MbHIZ6}Vc`F5Fp=07=wvJ@kYgNc=WOt?L#)TPX8AaB)-@IC9Co+{5q@it -ziudU5rSE`AZ+ -zv;Jg>YP4FFPQqKkYXpP-+QB|tSUVqA&YG5YoQ93Xxn}0d9>j)Cm(Fkr0=FgNKC;rypIYVS?`%pJ+JE5A3_ksj3_kNvrikJ1Op@52n$7>P -zOB}MBomDu^_Ka-q$jAvAx`T~-{pr0o@Ow%&e}A)wS4RH8M7UB2)DMkF;;i4nIm8iF -zJ9L&D!IBr^vawOlZ@v3Ua|oy<$B#FWvbX>zHg*pPoynK}oyj*RWD$9?M5M-*X%0c2 -zNk}6@!75=QTj>P2ki&+ZYk=$yi)yIn%{^??^Wh -z=4?ZHRt~>?(HUa^oW(kFSS*dv;NzTq`RmJqGiSU%pvXTo@fsq1s+auPIw^|-mB*#= -z)+B2nPjs>b0>u9@%L1p|d2;0Mv^*&S>?b**WRi~UC$ofhh?-*f} -zT>$a~$Gy)mdT$1=IX=xyw30?_AsCgG%|?Hl}h7kG1{hd;gALk_9LO$($` -z3bZ8uK{=zqIf(m*$sw&hA&u^lhfBzRfm7UahLgvPF@L^Tp_AKZq-C+;$(((+|5x_h -z=$cGri_fSA?I!gbNgw<0k|aOM1jg^r;E5hNOJY`Caa7K{v1AmVkskmu-?7*&R*3T^ -z$(TPfzi^Hb_b(SG^8wMgrYWRY6ug8u+hHPdps?f5EH>l>XJ7voFF2IPr!%Cilz$O1|O|Y(&tFt?5~lmG{Hn@U*HfZ7w6y&NPaX#2=xai$si}c -zkyagr2bQ~emsQqyo1~N~snGG>CXea!I__WQ&UddXXF0`lDAX92_nZO4MBYGQB6$&@ -zRbT|9(C`1Sx8~y|9^?%KbibMs&qP!ki&W05c5wWsg+^?oMaTs -zSs}BK>QPjE>YvwvYa8#CXmG{>Rd}~I8L}@^JbT>l8REC}+@3Ce+ly;ygU&QyM&R7)Wh^%;@+aGvyWo;DFN -zobVDGdL31f6-dKZCM{oQqLa7&(Z%mu>gL_nc?1DaK{<~c+?7O*UlWl7ki@a4hbB^V -zCLuLl{`Oto=oI>7?w^@_%7G02;bsrNj2vrQxQJdbPK!SW{KeU4>z@(aDz#A|C4B}S -zI+tereZ?w$i13w&=xu2Besraqzq!G~`~H&7euxn#l9V|#1 -zW{?ybp2S(7-3QsrQyK`4l}afjkH3hb2k!4BzuXY5lQmFS$QOmWlbmA40?|>IA8xXv -z904`|kUNk-kQvA?VD?lodW2BbmPduP$1-Wv$>8z72M$OX{klKXy>=#gLHGW{E6;$F -z?mQ``{|w>=K#Qt4TLsMb0N;@8?g3 -zF-p`3M-s}Uxh0_2>rRxYM`$sfo@pjYK6YZQ3e2ebVClfBfW#KGEp~H3*ACs4&fneSAx9V0l`h_VdWfPXp@Id` -z1A~c7h2orX4&HoP8vhT?_MMlz_*)y?iC+7>x2mF>Uc5&TFpb0wZ3mL;n;_SUotH2ZIm<;^tvn}}Q(908%p -zR44z6mhtX1iz6P6G6aM&_0NS1QKKEa9?gn~{o`3W%yWuxB5?N-7k^+-6Kod$<}1q6N^tH(Swn*)5|T-GlD5aDlhtB1d_-pwB(x$|H8?KhGkUokU{HzOHzE`6um81uD)hKbldgH{3RlfHj&_WqhT -z1ot{mE34D8c$%91d#tKV#NOdGfb38cJrJM}tYW-F$elXgg0UOtx%fjXhya;{ -z$PxAc>`u-S@(ER)@E3HFh8qXSsLms@nTQfXe7ePBx~~oxFZuuxEhNv-H!%EJtqZ!umWHfzh<_RcUtBWIe@`LaBOl}e>^K><81) -z4i@+eOd9KtBT|+j@-E#-_L&G95~Ld8^#u-)FR<)Q!NFpW2&vh>V~_Gg!j0aYU2>Oy -zm{5jhbx4)#Y4*WP-eX%jpY}(F2v=fDAY$@}br&QxLIIQ~;68|nWAIVykL)ojOd*dp -z5|;m+$rl~Y17i1>J*|KY>jPx8HO4tigbg*?&2jSIX;u&CPB)a1W2G?@*jMBudchD8 -zAzB5#*t&x?y;u4I#kvZ}Ok5QEKH&kww#Kl|{w-!W`JQB{zx9p}1TYi~n5wBkDFDd* -zTVj^b$dmRXRGL8pN{;qM4}Xvx?faLyMO+dKi;5pQo!MtMH1K($E@)FPA}okzOT -zgeY2JpzERYA0(rDVU3%79FK6s;SZor2u6%PKwl`o2L25C%Gcx~q|?R77nsOxgaxVn -z!)ftnpS_%QU-Y!#VzFh1^Wy$7Y-Gy(;+XxBWC~QuVDOOG!r)>?hTQm;mg~33$$f~N -z-J6Nf&89ke74jL(4roCz6YPwKfuI#=wQVvbjo(14#=T@PFO#(SdWVO{?oQ`({>v(`@WJ%FrrOHBLIe7m^d)Y-$?6ZGn?NzuL|Fkb%tn16k!vQ3le5oMjVf -zLyH_XB89WBcV)6Srs8zDVu}b!trg8iBoFb<{@FTVLk%P0Ay<&>!m|AlY3R;0i=&kH -z;vby6A`)CC68i!#IeY|Gi>5UAz_sLj-?PLe@Hh?nyCjzspz%lUMkv(`IHjmWEebe- -zW%OS2_kj_+r5|CuXO~sX+W$!n+-dK@`!)fQ$sEh-0V6sj1eJe0MX=u -zcg=Nvai)s}d4qzNs7Q8I@^e;)f#5rENH3Ty6FN7{b@E46xJ1?%GcpE#+WEC0Zya -zfZF5iy!UpGNGPJfaNw^V{`yaDv4UJW%^{3K|4z^tp#kL)gUA{Fctx5LS19E;X2BW{l68Xb;h9H%{C*79VAHwS=-2aY%V$LX#6 -zr_}>x#29=461FFxJkHoX)CV<1DzGGDTpoZ`DlUh3cV89L!ju;++l -zRKEN*jlD4bM#0gr$RO!p#IT_!Kk&}}*5tP!u)lzexok!ne}?pU|6kKZa_N^-asW|R -zqYsq7K>Qy@gN-5}H4ut1 -zFi=>hWa(;JS!%(b(8(JbkPJ%Utk*AT?D$LnZ9)D~&eKF_fENre -zIsC-EOU$!BWDlHKoYnxcPbZDtdk1m=E+I`Wp;;V;gLJ=sJ%52~AVi9i1{e$yQHUy4 -zAyg$Jx`1TQ)im?9nMIEGBA1xi07OjcPo&>%L3As$BYy_JLuqwifszG$vw{hltI -z(Vp8RUS5l5atd@_2I-b2o;xNSPAQ-fvU;49T{n`{!u>zl?B=t`Fs`HL&_5d(Qgk31 -zbXr7%-kj4@a5ZEFa!URn-8>?Bt~7wO>`;*13ee)HJ3+A-N^z0w!9G^V71Z14pAQ5e -zISdB!=lVHLvA-9x>-F_+K_Jx4BLRid3CJg8nX%I7hN%N#)kc$xs)MnUG1>XHlfJET -zp#mJ!?i<~qiOiS?8E%*eZw6%0pno{~a5YLJywRXg$RH(uK3La?e*6({t$(&os!*ZJ -zD!0h4%EOtE3ow7CFqEfR8-~(oN*ZrPjx@5Ns9{Ip*T_BTd;!TMIMn-z)G#(gMc@o$ -zh4HoEt03SSNT%hHJ=GF*NH)Nz^zVloa7Js5EBLugFcC4_upqXt7@3;Qh9z?L`PO5s -z^Ea0X&W1z=Df!d)z=OG)UBuaqX7ZH;>XGc|FxM$+e-OF(;eeDCkV-fbL=V%26MxaF -zb;S(GpwuGq#a4GnB3k|cz7>23{aMUJ3@0qe8ye(@>wmqQvsWfRFE|@?Z4j#KI`+T{ -zP?ilz_{M7h#ZG?I%U?b-O&sq5nSyLC&e%zE7cEOd0Y`cc|0gY5oGgLbf0RZnIh?`g -z|CzymB&mexQvY8)BFtzaR{?+ni4bMe9~_proDAu%MNWRt;)2m>sgu9E!7TuJ^WD#$ -z+&ZDLoG%@!(#MwIwh6~PuyFpcms=_zM%Cq5# -z%cTL>!zO>=bRud4rxv;#vSl_69;yrB6JQ^1urdWX065c#|AWxT79&vv=MoO(SL9rO -zyxAkF89}nP_Y|7b>apB6*Yo0 -zJCq#T4>x&4>F#|?T)aK`2H3c99vo{60-Z515i#7bAYW+#3;@R{ezy4-yZ@WZ1$Tq; -z1LT*>h_`u*vIn96<$> -z9TSV0+HNM$nFbRf!wn0fl~xQ-In74U828?p!(NDgL~yrrkAVFEo7Vu!vO!1Q4U7Kw -zMoZwtLXzkN2jIk_gcs48gCti_pYr8)4}Wxpi+7+|yg4$t*ouf8K)!HeYDj>vVY$(% -zyuz4NDJMwwp!yMoV2I{G$19-R;O6;hxqyUvX^o3_TWiKE>s%ssKk&D7Gsuu%q0b3v0zBj(Dj*DOLD=AspHP=gv-82f$=^AI{`_>ao4>f) -z#UEMbl7Sc&9*l!Qp`N0rE>RtZBO{Y*^Ad -zzYM@c&cg8s>HozffpDS#wlOxGoJLNjLr51XTZ~985GVoznK5%BBGX`E;SMTh_xCos -z1(8v?XndhXafVL|0-mSd1Um*bKv8_dS;7umesz^o>g+pvD?olLkG6w=>0H_Okf5kRdzXe{h7oY)1@3{PlG*To0?>JeqTaDIImIMmJP*Hk!<3H=s`F4H#w;DnP2B+VK*am2V*3`Q~~zpSUkwEYFD7BkARD<`lCrl4kn7jQ4Cc -zJ&pJI*&}L>Ai>@t?f>9X90!7Zu?}*w9kfC@1R?8=m(DM$8Y|NZRB3d$n7>pj1joLO^*gFJ#0VWg#Jh0`m`v#Xz-XM^ya9Z@;SGzcS -zY21r~!=3x1HpnkWSQ$Wh*7uLMqyaemAb+aQ0HGdU?xa~Loi9C-DLN+DPF5X_LB!TP -z{hmd_M8t3+rPKnFc4LaIS&i;-<huK<*HGea2|PVaa7b4WM;v_yCpI_a~;v6~LZtB2JKi -zGmDxPy<-$0Vc-xV0)b^1AxPA_JV&}3yOB_uPmuC7}@m_~DNN3eXs7TVVK1~3Z{$S@FNb|o;hB1cv3eSd9<*-@i8+xw1?^%#J -z5J&^aW&{65P0)P7Vaa7b44`vo)c@d1mD$i!%S6pTtV$D@Zv0;f@ -zqyeOa+yF3xgY1~u;e=vm6`Wv%ILnTb6_fgROz;vLD?l~uL?VavI$9kNd3lD6=kqOY -z5l%$8#1V%)5dkL_pmrbH)t`f30|gv;owT6@W^t@G`h9~%{sV;N`;#GQ)>B_j-j~jM -zZFTb(Xf?i*e1q#}Irt^?996LzYlJU;5LdrH!Py7PcCyOn))8FxD-6NmiVD2Hg7gZepkyd<%T&ZI~ -z0K8m7e{(xRfQTyTqzxs?#iodDhq#}ENUEMET%k=J&J2071~%NRrIqN%KhpV^+uZ!I -zWocrTKW|(LuMwBR%f~_<>0}K9h9&2aa^dXbwFg<-&P@cD{V)KVH*Q*vJvQiKy5Qk( -z89<@%&g`hWxnWM4C{IAL3-NdC=t8-KJ`kaXdRxkt1X%)s+W+{y=^{*s4J}w*-dc~d -zdL$lM?iA8Wp*4&<9>2p(+Mr;P6)8N5{=PNo`u{GJeFY!~foB8;{pu0VK8a@Trl>wAzUE?pK4o?WH0eFdyc>0Cpcp`HP=>n1=>4e!F@n_6vddK<$$Q;NYNG{A& -zn`l6w_op9B7vzA0_`+%zzj>Y{ZhdmD&l`_0ZK@zKV&!lU%h8|}TfvwG(E~-yNV!r} -zAXy2SQk_tnepj8b(piPZhqK<9oMfC8)R%k!B>5H}&JcaID-nA#vc$?3OqmG2ixmS# -zfh>IENi_aCk&A*NdO?5z;Lp!CC9=EUZ7aBpm$~?C0Cx_SA<%A3h+Q6L@x+KlgI$*cYVIa&hGo9qu_Et2Jpu0Ygw$_DPsNp8h{1ibs)T`cZjb*heHaX -zEMn+Rj~I~q7CU(>k^xn4oS#m#FayR^msX7W6C@f;Oy!r;vt0Khobo)hrT@R1WXgj} -zB-+y7K^vP%8BTZ!7D7~{l@VmVcM*)kDaHg_F@HvKqqpbPzLbDb~k&V -z*DZp}ei?xLa7Fg|?CZ$@JOvtn1*!c3&WzMM#0bnJ*av_a1`h5Bl0~l)(Xnb=JOz%h -zlqSK>P^y^i -ztBj^T2{JqxJwo0CV|2;nRDK(+9Pg0KoJg_?k_!EUmHNL69A*Ls3m5?EfqMO%&hGDZ -zhv0JCw|ve9+q|jcitMfV9fjL9r1qPV;oPG{E<7@}NXd<4`e7ypp6Vr=IG?p!B -z9PTFaKSZmb{_jCU8Ne6YvsmZe{}o)mr$Z68`xt^vF@8wQXOE(1W86f$P&fpk%X -zg@UY#qw#Nfr1cdQXx4(E2#G<*^#dNhky8xg(Qx`od@cKJ5#L@=Bme?B!|g*$9U_GzMTM -zZPOoQ8ooTjVHW>xgpGjD)gkBgA|g7R*+-Wv=(;>05=rCR-B)1EqY~rn-T>K64MNk=uB-aB=oV)|AUT|oER?}n{RRKx682ly^ -z$${izM-=JvyGVXO_F>Y1(dxh7R~)21GLtc!Fc7^UzyR>s9$Ve)?$2)%TyEXfj}<@} -zz_VknCPF6{ZUAQD27;QTfv=k35M;-8JH($ctBTNCmYi+$&i4m+9{>zT?Oa+wgO8*T -z-foDvH^QXtNItck>fqJMv963=XCzAyp+Wq-%t$zfGT~$~uQC@2H?Y;!8R -z^Ie=4?WX~Bd|FDNCk9_mopqdz#1fq>UrQN6AYAzjIisU?dqiduj#wbIc5;)Tie${jbZ$k132_RG}n#mbTB$rN@2v#)8lcCg(OW}>k32r^z -z&TpWJ0#TiIWGodCoUr(g|F9r(pb%kD`t#HEr`RoB+Y2t^-4=cuz`dU|Wy2Ex6k*UX -z7y#srPG(<#@F*%6u|a#(?sO5&fj4SCUW-inxpL6$65<6`(*%4?nEN261%?Bg>1;F-6drJkUxkxtRu-X -zc|Yn%-2C?WX>t}PqE`t)?K+GFWdSf8?0mWs$tyCX|IAGzot(yBT8)xvmsm}P5@!98 -zE({MLQ#g{q5rQ$!kCn(+6bHay+sr5=>lrLe1S<`&AZKv^2Jn3XXYVgNz%IU_x!`ic -zj+oSaGyt_3hOyf0`{SF#Z2*X8q>0>Yy#0-0Tu*@BSOOeMBO1H^`I$LtI(k3?6q -zDRzDn&B#x#aEkJa;k)F{B@~B&(1_HaI1CPODE0y9z-b94;`##U|Ia{MHC=~mQgT+g0oOxvS6(+Kk21wGC8=1s!ooDB7u5vn-e2SKg@ -z_d=vfNg)`TF~+|=AyYW_YyQdLpKf-ENQ;T!rIzG?1@R2HXQ3lE!H5+cRl7&ivP79R -zl8pbVhjU!1)%ZJyw;>8j -z27nXc7(0jc+1ppv0;T$902bs86p%hQkOPTR2oNb+`L~Q)Ln`T{3?;;i_mZ;s>Z2Lr -zWC>{hK0Dm}{S7Wrp7F#A>^O6XSh|cZ*#$11oGMl#1=PZv4MZ;p-%+3FeOD0Br@x%a -z%mvP042JZnGnZ@5y6p#L4CBzMNY1h-$Sd(<#131lk@8ay~;W!|-CTrcfn&7lw2GF82 -zmW>+hy(N!J2_)j?r*-lM3nZTw{Uv91IG=&+&qWSEyzqh?Xw2M84`+y|4XO`Oa(vAU -zoK7G^l(pjF6yx5>p@WHJr3Fc01$=-zNZt(m#m(m(N*6Oc#sFi1O)vU58G+nQ_w`OQ -zfrH0sQ3~C2$7%NPcdrT#H@z1tfS(4?>NZ4ysu~kT_UCOY0p}7@#!~ -zwSmUO7CT519JdDv67p?!3MO(Ti<04nv}!aa!)i+RMuZ8c9iZA#|7`e>RPykWFN*%V -zG0B<^v+VrQrD^=*jV?ZhR$A0)>3ae&<`(1)1#-v-;Oyg{9PIYj|0g)yqN99Uj2{LN -z#p<_3;-DI9_e4`R~x?>r_;Xdr$8fdKR -zS0_yX*dx#q8$C>94F!?{LiF$?e%m}dpGd!DI{lXMdp-PXobXJON3A$NuWKfqC2WKk -zx^D#{8!ZfAM2a5^O{KxB$WuNj7sKH_NAMg)7%wcM3M!` -zN*Wdo(zDn*B4pgwN5*8A@O;Y57=5 -zctmfWTj>-f3n-64JHWDp)3MN`VFLeAgP69%zbxM{}r6-gxz6R}Dw -zOvDWykUxk3;q^%GF8P~X@xSW@cl}I)sU}0A_3I-NRGp!qXu#pc!T^So#yZ;!V+;<4@*dA;BCsz=DtVa5RGMKy -z)NtW@VF1~z@1LB#JPkEK7YgpytA_}X&mmCNWGECz%E=dv)n#97`^LKijC_D(z(iud -zVIUWhQwVqJ1lNJAF3#J8p8bO4$)hAq5PydZ0m03r4FpL=qB_Zjrjt_y+L2#^x)|Vr -z#SZ@NdYm{RftBX_Uu7wW6~5f+k`AbT4-=XE#|3oVrjt^H@$3HK5iLJH-<(%lg5yzsJ0-U+ -zBGU+YboF#QFOT|vi|+;k7)*olDg4T5IIi0+^gU$J%cP6H+UDZJeshbmiG_criwrZI -zUEPTc1t9s#Lw=cv6&T>qE~Ayu>Ig$P?Yrr>tfG5j!WpsC!~1M^^H)|osgKFWneX8L -zp}x2h#cR|z*8YJ7F~bED(F;Tl8$!?a>85Pdr={>F6O(Cmp^0R)G&&P`{ehX#eu6kT@Hn@Tu;?{P8vjIkc -zRFjS{G*p!;=g@yQVBhYWB@Mv40$7l*xB)$ny{fm8GmBLM*-e~2hD|P5LEr%EgIwA$ -zihP#n5Xl~(`Q(CQ{-Fd61;K@-hh=8DH_5qYXa&7#b}Gp)8XukHAtAa2p#Nb2eGYKj -zixZbK=znll>VLl-VAZ4}jFWZiwXQ{f)?@E2>n;k71d%n9f&Vc7#D;cHEhWBM~#jGeE)skQ7t*=V1tG|6W^MCcL%I -z$sZ@*1-S7?dx*25vIGI)O~@d5bYrIQoAB%)ZK$ejb)fGt29U1^EC20~)wd{p=(Z}2 -zpNEnQoxGs|^gm95) -z$QwMqC;dM-f!p3&k<4y*_Flo&3oe82s`P(A27o60fZDZ@4}e8AWZ&#tDhvQAXAAO% -z0*K8A+u;fzIkYThqRIO_!p8uy;q2Z*Bxpl~z{ZRykT(pGnBqfX$N=Lxk9?BmWHcRT -z+i9h8kdvGyRxg|rwB)Z0v8rJ5(EGa}JigRnCT=L8!k^#%!EG;3*+3j^EVwE;8?gRY -zP5J>iUi!QyFn|WE`{Iv8hodASBr+(;go?4rg0y-k>cEnV844TeQF062KYXW~B$AUq -zxWvJ)n3gJvz)0ij40$x!d%g0937B#ZyTMtV1Y -za=Dzv5ym`kEJ+Znibe$sLRta(84hU~GL&*7WGOE+dSxPR)lm|y>3)zCH~c8;-l64R -zTIJ+DHoJJwEfW24Ft5QM03fYUfvS9lKrrhduH_Nvv)#q(#NoLU{f3QDmdIRgL?SOk -zGk)|i@4uM|<`;0SbLp8{(&}+5Nv$r+9sFAAEB$jJ1LV)3S9PP5E+i+ha`{Sw2j>ZO-!>{?kiKX0uC*P3z%IYN&F2#MiFi!a!%PN -zb${G$Hy=O-`!21Va8@6J&qM#-dTI*4fF_p8m{@e;l_(JPA)xLb@&9l3aodX%Rxv4m -z>aZF$0;&Kls3{p#k=1E=E<=rVw;x^;4}hc?asoQ>LWF8W(y|y_i+{_7Mr_R7=Zr}v -z=P!k~oRZ4h&am^&G@#vSa8dO*=Z|#0BSF^xLpos(0P2q5T!*5_uDAi|hd8`W^1^2G -znxm4$Z`ZE{V70~O9_V|V1BwH^_L79beP+-K_8qM{aGdX5U>7rci^LSpm_qIu -z7`#L;7&+o|pKRc)(`TOwZq{ybp5ST-@bt3VALZASHD&u!2J=1MyPfE -zp>(loevY?5(u8vrtscIu941ox1~vQlKf-Nq&i<3tzw}zc%_`?Z{sa~Nv}#fYF;<1u -zYFdv$27R#Vdp6`GR)O#sfPv(wWyf|pNEM{)Q5pd~e5@FbNmoD_HfBVGO0j_iGa}>z -z2L4CV<)e1Fa{*rfazf!L@>T9x;0PV&OI$xAFl}9y3}*Om?yw&(qu)0V7KHW}FaY?V -zi2XnD{RF{D$xT#$hD`pbmM4SGZ45u40lTaF9b|o}LCYYESzX72G^6}UOEIKMu!$~w -zA96<#8ZWRw#7XTvhTnl~GW>xq%VnafEfMW+sZrf|GSFf{ -zDU~k&A%)*KD^>VW$OU}q%>^Ljj8Lc5`J>!t2PQRWJ?y6mT-=7Y=?ebiNvr0M5;+EMeQ*K<3d_dE+uEuh)X6)$5JO| -zNdpn2GQ&>s^1~B(r4h7}#3u5Vlau-V3+?

idy9-TY!&B~4`Z1v=3S1Tw!Tx$XTG -zIqZ&iUKU)ebzxn>%@8EN3Tk;tv8q+!4A&=I!g_37E%X>N!zN;d7N3%Xwc-elDs=Pb -zR?1l%(gbzyh|}wz&yU0+A!6e+s5l`3(gqTzc3hIE)P(H0hz9n?A5;0wb5dy)afpy1 -zfD9@85&&Ua_y!6n6k9KjQz;mzxI|RS2qcdd)Az5W85jvDorqRwK(Y)ZL_!Lcn{TX@ -z&-d&K2fux;o!>k=m0w22Ri8eGBo>Sh39YJRXq84Ji6j^LKwi&+prL|^(0%~3|B%FN -z_Vw@F)^*|*;$SnuMOm;JlH^xG4HwOGhR?YK$4)n5Pmg$s_5YiT0y%Lgkxsmlf|=k7 -zNdBNkrp@#eehZNqWf538P7&^El-!M6jFSJ0c8?{2vv86R!I+={omofsBCs-XY76=e1aC<8{5qLP^%o3HIyUAD<{fSL9 -zZvNp0Cx2|IUHAuA{*X-mLXrhpLyX+ne;;Q5pNV^y3JzATERR4BRSw`w+q -z0W@ZhfB!P;`==~P#o3G|l7<5LiC%_gymM#?zjA5{&EO6(dym`e5fTZK0u_zwWp2d< -z7?A>Enp{!93=M+$B7qRv#L9&|(!oZ``~f09aE4(7Cc=gur=|8^eVX0* -z!TW-HH5%dYD`bAd=KShSIm4B_mWKyu&OTnhk_|c`R{;!)iNO9MKjC$tgdv!diG2mg -z3<(5-+Ik|Bum2}QNDWnw1HIjEhl}^w=Hjofaq^c*a|18ng%R`YqNKnG#O|BW3RM&? -zB8ldU^pQ9vP<>RQn3a2Naf)Xe@Ux3g*ejnC8E`!NM)F6n0}a0?kV6P`UN -z#)gjCV`Oxu(nyIsr?EJ2$}iZ4c%wBVNg~B23a7UYp~2WBq3fGZO6DyH|D8utaj~7h -zvo4MI#!8AX=V9psp^yHc8U9$BJP*~_m*~g)sGm$^4GR$WKY_S^2D|mumjvf()`J2; -z=riP*-=bPxNE8-WzI;OlU*P@aGsLTDussa}79ye-2Fz|c$rX_3!b>ht^o25smuO~2 -zxUS=msr;&`sl0A{ve3?EqLnmGg%2iT6^wGo1;ix@BWX7yg;umw5mEYLlat4j!`vOo -zE{pGl2V?+W{LF1nk60|Y2F}UZ-x&HVHUm)3uyGY=%sM`O2m5kof_Ot83Y9Df8)`r% -zz)?gA!Y3P@{DDOd-fBupi4z;~e}o!!U`2u75(q9QosHSMZd`s88lf=}=?sHRdgZWw -zN4V{c*@^6``#TA)<)8h-?)>V_7!sB5603GWBl@!`d*z1#?7M^T1x|~z8ZAg0Ff51$ -zpspPW8vXD60UXWp!;^&JKq`Q&kUh}jsCaBMEmc%NLUy6D^nH>_C`22*3*keLSY_7G -zYJ)5&0IiLJJRJzDLVg7TRB$2^qhE8&iM;y)GY`m+<`|k3z9fI(eR|$^)~1nMN#*y< -zPvuvWF=1A33~5IObsqiRTI4@eK@Nlr*QS%OL;&IooMt%l=i{F^d+-~a_tTVBYk;z6 -zL?OYwu!lYiYDQn68mn*)@&b)nrRtZnPk-9M20{uYW{FuyCvs7+AZRFogc0g{u#*YS -zDs(^eKODx{2h#!c6ASG5x_{(ma*z(2$aQITwm|tp*ay7!sLTb7-{a;3$btTNgOfi` -zatHpwRkZS)kBv7bl7<4gL^lJW_3uw*v9I@XTi5ZsS;cC2>2+gPp(YduB0t5h{f$kn -z0_vT@=j5&eoq9aYdhf~EzC_GS}P_|3EJ{4sK7F;kED%`JA3Av`KxYLTAJ -zUE~bolsSYeeJ%3(HvxU3Lb(Waq8M@1PPYYt{e=b5tsu#t!v_3=vwkw!e_p|1S53Vf -zL)OF|!p{JY1bJp`c!& -zs(_i+_$K*K04tO69)R%~LYdgZ@9{s{V?k>Fa9S9^#~XOmV*{rNPL-?LL~yK_l0f!eDBxe6?)_V_0p9%X})$`g2PL;2Y18-4> -z2Cfxb+`p)%RsmTfggu#6>%&r;v3ovxn)Up}BNAk=W(%T*6L4BVS~Zv$Y;lq_Iih$i -z60|;2`*0Y)-sa-3uEu^?Su_UH)+Yz?TyMoDl1x=&6Gg-YbvI>)!=Q_Ri6kY1vO{G^ -zvm!lr)scz38lm>+BwmLAZQpESGVe%6^Z+^d-Bvk7$T*hd&Vobf{NDLG`7MYW2o%|M -zfc%4rEB%jh+ne*!*^OPh2`*Kwf3e_JUd>ObnEh2#VNrFQdRM~4LtZYS+!@>oYsF`v&Fm1%U2V@V*1TG~BgaWU&D48ZQKDErwUs&M~r2+uLg)_(>KUF5Zww&_ls=rJWtf^Z@dG}c)5e^w?^qxDjeT}npp~o-8$!B -z*G|i*XGZp6J%8rHDHbm@(1{)%!smlw=|`QAPKbXSR{xz|{De0`ksoLKcVEV%I`tY1 -zu6Q|vgjcDTK6*1sAsH1y;ZoVM_(7MkmnKbOy?#T7%M`ax&``mobIm{$q|-vXkPLw) -z!|-N!RG8u%%mhQcAF>DX$0$(*Qe+isAb`X%T`x7i#8R(|#WNLjk~V%TuGfiX{W`Q7 -znn+okkTw3NZ6B`XwnzKV5*z_n%9p=La7S{e)Jq?|si=@FlMo3qk;G`u;Mlx2YX$4Q -zlR6-QRsmrMW&-;P3t|TX)bQ^~%*-VTPKiVI6MJ(JJIDUs(Il0`ng1l4@TL^tiKPzV -zw4%zi{frdhGXU3;kOCD;;JcmJCG1hkd$<+q#VSiMVlv;7I<2SBVt61>1~L -z2uTZ^)lU9EE#VK8Ik(Am?9F-GQR6`dkZmG$K`;>|v_PD^(Ks0*MZ6rR9^mg#Aci=4 -z%+ON;Q6YVnlc9l`T=`(5&%_Kl$)kPvY_S1O@8{dO?b$IqV`^W}9^CM91iBxbF($mu -zC<8!KMxZK2z5YNwNTC)nmvy{_y|ZvX4mLFzfr%t%12EtrfKH+_6(E1lU%Bmt@rR-> -zX?G_$!7A5Qu-Fv1)-7zJs>kET) -zdb3!so!s`~q+`)n-i=e;T6#HwG8%B?jMV)FHKRYEj#$5t)o9R?{=6)@{nMStDcbu$XM5x|+Bdav?u8UJHQ0Mdf3Olbl;uJ4~ -z)B1Gcl^$fVF9rEeL|^mZT9H1`NRmImJ=FcM8o=4@K+d-X(Mk}Q1* -z?e!bCy)-Ey`r1dH#Mpbu-;m`wy~cR|89)20W^{^Gk_HaTxoy>;q!1>kiX~8c#*}i -z+?ijFJ;I&ff=YIsu}*JM%_=g40;h|-vp}op*7x0Kdt>f?*6UX!%W_z;7{STlVIqUX -zd7~3~i-}2=xP|-#5c&f$n)cIEO#iNcYv|W4IhcrDIFRr}sB>UK4*P5?w>=mCM|7(@ -zq4`_Un70yRFFA0=M|^y3Rz`r3S0itSw2HZ;{VnX3Y1>f{#ReUhn<7l4^%o~Y0}~<6 -zR#=d^D8RWjVjz)!(8(P7@6+t#_1xAa_Scw(*W7_IX4TI}ky|70*emj%@ev*OCyk_X!v -z-(SUTPYziZQ=?uxj4i8F2NRtlKgJ#$_}7qMHT+PuiNf!IcwRKU!i>##d)~ -zqVD~40LBnw=^az0`TzCgS4}qprXW9!p%_aU>QoMIg#3o4JH{$RdLb)Ut|@88 -z%c&zTk7?HSc3anR>)1zYNfP}j%O|iJm_I#skMLViQjjX)*Kf=@KQ?2$f>yF_GnL -zK!X3!2^vnQSs&G$NN&A4%N2EhuUN0%SI#arvSSP}mKf82MW{2-W;6noF-Bbo&VX#f -zD%B7XA{asR4bMGmdvVGx_R&w$K}KzfD6Q2=bS5Cdf9PZ^PN-Rb(8(;;_Xx-4b=$L} -z_e6Ji`UQ*)#>hKXC~3ynVGLDCm -z%!x6>*kKHfwLKB?7txGHfQmqr#i|HVLxxiVyncaL4LWvx-uB|89gJooaq`5Vgi<1l -z68wiwy3zs>*FPouwa*_iw*SoNU!vMQ`4Yw;SMSSHKrlus(u1+X7)HqNXH!OCj1a+r -zf|it$sBGnyxvN2$GFL}E_|;(BYqL&>liTkoXP<23 -zwwI=yh`R6dq15MX46{B$oJ#Uwj4)QlNKb_P0XB3RI#BrqD3w)`=pu&0QjM!YtDEj+ -zPYju5duyRngiQPY!=(`fYX}McLnqUj0+2p8ta(ywR%bnSaNFy1oVG{$&53T_@xHuS -zzYa8X^p|8kB9pD%QrJU^TcZ`i5tpqa}Kk -z?VY8WtmiM%5d2yZ68wiwq%#dh;$y}K@uBnIT9j#fV(6Oa_D^<2--=nE`dak4ob@pV -z7z>OE#wMco!_ag|q(Y^})qs418m(BFN-zRp2vN7Z_NMLGxJ|b1OS9M)J2=jp%x4Iq -zS~0;t=)^hGp%Z_=G0wjDh1=d)oMr1WVsq3@-QLb6KJ~5WW2yCxv%U&(MkG&|n=%9} -zug29t`38+?W@;{cgG#~>uqw0`hVaa&wYIkxc!ZCDM4C*ZVbF6Vu{C4RiE=hUmpOw^ -zokmDglq|n7&trRP*t)2jUIg)5=gA#t{j%7z+t}OJ=yT(&9|>_5Q?ptPpgXaV8qo)2 -z9U+S@MPvel=N-hWqB}hEyzPm>b8WBBN)#Do)ED8TIzwa0r73f0HZOS$p(>+^a)t$vW4{P -zdzeEK+TLB3ZF^zdzNk)Lj*4!6s?=x~b?d9|*`64(h-ScJwhvYd{VNC}jKLfGK2r=rC%hoN -zka;pRjPeosjpDaHK4?+Y&E4KdALJ6B`o=4D6!DeLM_=l4Co=1oqGntTup}c4hYY0h -z4{+8@Lna4R_z0|GE#cVZt_l~ozdP!lkG`}$IebN~G4vqExz9l^9K*qt8UVuo -zMbEg4vyV4&+uKWA;@RmpMBVvr&*&!C|F4X6Y9;aMH%onA2~i!y@|DIn&iDlpKSKUe -z+=?;;=vX*%h+j8i2~d% -zQ4`jCubgSIbyLbFK%RM-PeOSCLn#b-lFKMzfV^TqtVkd`?hXItLvmu@Uf>YV_SEp@ -z$kaw%|3tT#TIb)Sen%eZN#@|UN|}RjCi(zzjL^6=TQS!*U -zDiAS*F_1*6o|{}#2GKgEdi{>k*K~dwvue~M-%hqYJ!*}u>!f|Q*XJbK-dW-X8L=sZ -zeets-=r;$XfgsF?gdE75yBZiEW_kLz0Y{}?$9M4EuYMN^DRIq@euCrb7We8pd7rJz -zh&53U^_eVY_-h_~2G2&%cy%t}@$B>)gv61gM>I#x_V~^C?dSva1^NVi6CwUt)^tNq -z&aw)h8dn9xw;M8L4A8_%CRNMlGvuxiAY4q1x*ddUYX9UbQFnFk71imBVbPEFn}ONb -z_T1RbwyqO**}Bo}{Oa_>wm0S+wY@p-1kKo|Z0{^0qgkA2dyD@2jrk{RZ_GVvdu`@n -zTeqnPY%fmSX?reyGhJg@^dtSJHOL$2dL!xa -z8;!HQ3TG6Qn5e%zU0TqnUzaWTO8IbsaW7v#l(3XN!m8uIVAy$Zr6&3M} -zMxg-B4U)ErsZyguOxX9w$F*=xTpRbmy>L(5 -z8_$4e!80ks<5}^{cy{~-o%E5}KGICBAY*_;P(Fh)2(?0>5Dc;c#Dm1ZtP3(?1_m)3 -zGD%WIT9lC}V8%AW_;2_uzJu>JWb#_LCa#Tp;9j^V?u}J-JM}qy2j9gta4lRD*Ty|? -zFWeLN#xtlH-iq)M(nnfQO_4`82rHw&tP3(K3_*8t*cli?!aQ9ZLn`9l#~u +z>-3&OgQKf~sVO2rgwb{W-Z@NT}-rFF~5*WDa3InI?%1hPmRU0oX>1g6$xm31U +zb!z4RnKwQ2p50T4p4?!4zuZow?EPNr;(s$gPoH@@Vu@=MRus@%EdBc6;u|J%x)+*{ +z|7hLw-nBE^HEPM!U1=(o9@dklpH$6VF?$#PyM;U|Niq||a?aW;7WXZhP#ToQYj!Gj +zey?Btp-0Ag$&c^k-iSEQn=|LRnwi;OGschie^~!AuVI^iwERPC%;FWx?8A>}DCw%4 +zwb(6w<=AI09lgDR55>fuzjSi>*K@S`n1I-Y|M?1U7XG(8_2_c&3x9sa$rGF{d>_O; +z*#EKohk5_^&F)9b3wdL>uOHc3$X}?xOZ{DJfblw^iDH>{<^paL-Sa>0v5}sCan8}* +z)`E)F0(A<1+&n%AMF`%KD$KjTu-@FhK>v>L_hZIi7F>N?7iBxEGyO{RJbod=Hjm92 +zmBzJoO%MJ%uCh2U?DA`2k(rSaAwN5s>ujX(1wRYk+{TwfI>DwN06MIXyfA*Rw`sKN%@kIuuClTe-roT{lo2g$h +zW8phxUe@yh?&l4TC5d(x&sSQbko?2vkJ=xzd{_@PRC&eNUGy00Rt8V(P +zRFto_WH#sfz?9&W>z$HyJ%)!?J~mNo?=8DzJSp*k@z37Iy2;hXf1~w{rfvHe(+9OpznL-xE=d&W^d$019-6&~zeiW8|Jf9-_t35{clQi?!M(wySorSCye(PR3w_({L +z%T9G>wiGjmb=evH;+pv4qU5!bmBtgpm!|HM*8RDE +zMq2gD18wg2rsy3KXE~vgzeIDsVnF=PxHRR-tDk;Lc9EL;X_<`W)s&{Lj`ug`)^Gc+ +zP$X=1X}+Y(ch==+S2tywFO1&T5`836ua$T6WGRt9mbZRNbo<{I3wktPR^>ZuoU=px +z({&uTIr^Wye%w(Xz%|S6_2PMI_cp7@e_VRytRRklop$&tb_kaq*sibG42g%IZK%5Y-4luWXO@am0STNGv+J~EgTuKbAK+(kX*hM)YOdSxFKb0_uu6BFXa +zj_!1O@{F%%;!Y3l4U*F@8}@B`QuB9K|DXTcBJaE8$f`Ao34dD4wtvGy&+E~BiA#Q7 +z>^Yqg6BVvh6LoLRd%NA~wZa=qU$E$iPMEsFpy}c|6EmBiuBSKln8?q1Ww7Ml@g2YC +ze%-vU^MRF5iuTa}H;41GvoFmrou?Mw&>{HaMu>awzujtQRW|cJ`R*pC!%?#AfJ=^Y +ziPGGQ6Ovo+o7xoez23MsY~RM-Elg2*Ki~S!@Y(PENO{l7$tz6`yW}bRq*z8bc3sYS +z@3mnrugw*c`x5T67D`TzUK|v?x#IgmW3TtKJ@Q&QCH~9xI88Y*)%8J+%cuEk{x393 +z>QVMIb~bLabhrNR++zPywLWd-WE-_2>526pP9I(VQOr1o_0hYfdH*hd)M5Oy{oi}H +z2T{MidW*V=vZgOHXnLrr9(mtBUp!fsbMmG=hnHPAX7Nt-lC}4oKWa&@Hz+iS-!)(Q +zxo&?NN6+2q2aAh}oS0&~W5vH;cpsf(Ah=t@g2&^u$X|1#no2Alt +zfA5KU`-%4^Ygczo{-f6P`hv#;*Y=-!{~mCe|F4O*^7lM1cH)%TWb-QrY_I$+$hTph +z=UTsS!U30z_ym=`eOq)cE?1spqtY%Xl>C2vEa#GE+c#e9tL|zAxygWM535$M@8hq_ +zEq>mXzWj5M@=Tk9Q*}9Bo;>yN-5Hs8XU-_AO?Y$inR-l`jPL1Z?Xr!JXI!p1yZ7YH +znpX#X{{4yKUvG8pKzIm#6OqN{?zZeyHip) +zW}(Xd&IeW|LLv>X9?$*rtTpf7tt$Tc6$+D&zd!wCZ@r)RX8jL$r1;-&x^-AS@}=PX +z-Gz-VyDRnX6|9onF|UrlKA?Ql<&v{un`3r{)>*p7UeH*rH(dErQkt&3{@m!>5}%)Y$@-{#W3>uA +z%xT2*$MQ)9)9;$!rA@-=dj+5Lf0qAp^P%a)sP@DM|8or{-VlG0qN6z>Stk2=&WDZ8 +zYmRSA`)N^h%~bT2OxX@L!Mf~;Ps}Io`66`BZH4JY%^H>mhvet{d395-?(Q9%E$W_E +zGI!3lmteZH@x<~@5d{agVj({|NIcAGApogek| +z+4~$X@muu|&hgm&?dP%k9I&k8;d`G+H|Ebe`+tMC%%<6MLoLpJ>&ba{;smGEuIAqA +zzc2Tif2j5{tFPbO9`5$=_qSIu +z#|qWs{pJ%l?O;$hE92*wdvf}}xhKulQv@qFxhy$0HIvVAo~MVh^FggdrRbL|J0=`% +zoBL$V`FoB{+CO&|vzb5r(pO}se3Jj<<5L$;M#N-TUOrm=-osq*S&nm67~lTdi;~F< +zbBo&>W;KPQwUvFHAD|p^x%JlTa7mI+Yb8fwj`*ixp +zdRE87yaG<@g^mZ_{1l&eLz9$~b6dq5Am8@ZS`M><6ct!EzcKf}zocUHB@#S6; +z%(X@3zoX^i1C|}X+fOR4wN>nWH?iIOM15oMouanM$9oLx_eCt6d^>$f>c)pB=hSZh +zAO7vmi&;LY-RD=Zy;b`v?J58J!z2~^Q!K~cpMTIPXX%|37F!r{ZqLRPk@*wl8I104 +zyrCP`@mcNU411&f1$~0w^~KdcGhW=WOmj(u$etF9+lfj=3pPAHuVeOvB|ZMXn7+l7 +zRObKIxt9q-()iAvtOEw=OL*Wy^G|M3P#Pi9}Z?=C*=jM2m$8W#U- +z4Ft^u8lJQ&x!2?!NIX}SQxjEia{BhvX?y$+P^}qDo?KpQR$lmcPp$vuXRCMd&(4*v*G{)Q +zTC8zJV*2+vjE7zBIV37o3N8puU|DkE{r?TypFLKUd&0j)>*+s-dq$$JDl;P{T{4V{h2ji +z?PvaRSXE-xKjCoY9f8mON-L)(G0aI3IUT9EdBUr}klI)CuQz5(zn_{>aEvjuV!OHI +zCjDTW>O1cxA8r3~XP#c&?e6T%)|eNM-e$J$dFHO3|H)Zu{{)_0YLfnzKLpj3#M$N^ +zab$WbG{I?a{k(G_bqhkg6-B>FPW)9c?@Qr4GeN^SAB3cb=$N5IeIhw^?boQT3Z7ZRcqPgtfr^^sXeMy+woy)$BW#I +zZ*?V0XYb#6@bK?{lg`zvxR-l7O`EZBvo4!0)BVN`*~w9|Iv!GK6GWuu9f_QOm;L7H +zU@4Bisa~2Y{rfu>vA=t-y8n*A+R3H?5hui3cTJv?bd2d@;B@)CO^an1P5)1@p5QP+ +z@`QfEw-CdsmVm3%+*`LEH_E(v^1;Xb?0g=Qe|Onm-dmjbsnVUHu?B{&FW#?4jBfB*yD=M$E_|aCEn)HA`dG03hHZGN7vpFY> +zcq0rL3LT!^RAF2;(dX6o>|H11oULqkA3OVh`<0{bquvP3ytdlYJl^%3deZyn{%wX{ +zS2)~-PA%D~y5Rb2zbPx+GYsd>%T)8Ut6Devgyp_$!6oy%?RVcg8z1%h+1_o{74zp` +zuDo-P$L@Ck+kLOqPa3c2%$u0{j+<3N><_cBWjDKJP70Uh5%$mL7UnYS|@Z~wAUq4ePif37ntekHs-u&UvR*cRQgV#n)zcc-4afA@)^yZF_qdiQFo +zIu@xdY+}90+}!EY`e;re-@TeBssH?Ezs;S#`$x3&ohLfGD{GCi{%$_Xou9Yh`Zv`h +zrj`$NORs&QqMGy4vj9wJlsG +zzw;+NJ!|rNc1Mha4CBI+A?p9TrhR;8(yc7lXT;KC^!0ozci>{#J#uHeI{rS6v^rDV +zRiISxT}Zq>QFoDVWyNfn&+qFFt`z*)xWB!`P+|6v*OwOe{5ZJj*9- +zJHBl4^~|q7D!i@ax2iYy-&db|-d8BtCC#YU{jV*Br+9YVyANf^Yw3nX`Pi^4DH{c~ix#S%0h7tnxW>@1beK +zn*d>3fdv9Cm}_;fX`}S>oj;tlpZM5xbTG_pIU)Fs;f>!pp--Hlb3cfeOlp&6 +zKe6JR@}`*`LQXZijwbI~&nKb(i$PFV<@^P6gFlf^H29S~f4*}wug_7Pl;-z|Q)bV( +zidT;}Ub$XaCTDx9#-E#sy+6WzTMX;Aw@Ls1?rM9G(CN}zl>UG6y_@kZHvX?uc+592 +zC5Y`$+cvp8>Y0#b!$FsVoTA8j8|{>*=N}%qao@P2N3_wYqw{w+pV$v>AF0><%0bf< +zKk41|_%@S6T4;&X!>_D-6ZAK{@jZAjsh?xz&Hc&!pIi?0-kTd+G`)UCKwDa=$JE!E +z-wyiROOCdh|INLPBRt7lA?Z^`skn-%6XO*12X-Bu$sYn=_rEdJ@=@$J6Posa?n!ak +zbIeKKXV|W7;CaoQvc>e6rB4g5>8-PcpYCUd@jv%7pE5CdsiE+V@F&Vu2L%KbqgeOd +z*wt*hH~bgV(Oq08d}2g?+dX7FyzSVAbN_VHEPl>QS-JmfA3uwM2+xdFD;+f%PW+8d +zns(vD*BIHNSEpwB3FhbfxmDV&b=d03cSUK6>|FO< +zms&KU5*NH)_*q_Madl$v>>8Q=f+G+47x;0w_1HPYYwTzH$Mfsd^(RV8E+0K1KI24g +z3+u|ipe!?g@0`;3FIyfYZA@+d{OF%yPRgl2k7oRxn8FouD&fO~8;2ewxwYN-F>TuG +z?I%vwcFeguyYs@?Wmc7IitW&O;uP;yCWWMZC$$XBv5o{#Sc6b_kfAt=UpF=RwMizYI(N?!R-Xp`+l& +z>c5B67*5q!-7rEot&; +zk~f$hCbC9n;TL-^p}wA+kI?~QM*VfSU1oU%h=2K~#$R7Hb#{5wt4HNJD*xMlsalmE +z-JlSk>9EFjHm`N-r;hp?!OnVucivbT^$03vGF*JpSbny&u5ej5Yh`oO^c5aup`VJw +z+8ZBO7kKE;&=IyWKU4b2J#2@|H3?%Qwz|iiJ`X=E;^0}X(QxNs&xARe1y%g_el`Dk +z${BTWQIc*)y2H%Cm4D`JEQ_0%_HU7$G~0;@FUo&gR%bhwA3VFk^03ht&M6C}^|@~S +z+^UeT(6DU(oUpdtnJ3-dge@6FPOP`%R`Txg&b^oiR)kEJ6&pVPs +z_Wd#K-D~jA?cl`?Clp>L9NDl?-TuS5f7hODSJ<$>p=W1~n^b+g+Nmpk_$H%;{23BH?=1tsS?Y*T6`c>MbQ`JhXV +zy}_l4%CDMt>HmrnD?i25lM%fSvI?m>fh*QnG>Fp^p$T* +zla{YTNb+IM7T#2s$D&FWM)PJYb<8_+Vd~@5)Z|PhE2qh($E~;;=N#=_Ar`N6Zkg%_ +zndg1mKTAJf_Hp{PQ&U-XHk3ZGK41_Ku{`BvR#arx!TA?XN=r@P@p`!Cx_;)HpMmDw +z>)JxtPCg0ekuG|Z>-aD5++~-H25}yJ%RfiBpTa*Ua?Uk|P5$b=cdOZp81xi< +z^%h3Tv^AIPud}Uh%vNyen#3l-BNW)76{;Abs=TWq<@{BX&s%4@_I+2HKI0~Xi_a_n +zCHHe3OSHEr*R$<+&Mb{@oWxple#Ot@f9L7Vxj65(N?crbdJ$Ji9NWujYV)ksWc)N2 +z2yUvHGbPr1(v?Gh?Qgz$w)up?y2Z~g*h@@yUwqT+uV3>V +z6|S6BW^BF0c|tv9=Eh4e+Ey|rUUi$?y{dWRWW$?3w@u!+wrC-f%;k5|cNcb^nZY5M +zH-jUeE#<<3dW+u$re4Z>E-nZ-p`coC7jeC#?vG&p+WKvNs{$6D*4lnz-KoPfCvY3o +zFEg03JW{&tQihjQzH6V!riCjK-5*{*Vf(U%@uZ5ymEWCL49r|yAMhl%e%$(CwZa1_ +zk7Z9M+FlhZ^)NfI;>-JX=>oUxUhN+{eGCK*?`%-mwq9c9tg~&ZMc;m2OJ4KYd^+d3 +zHWxO{pO?QMXx=$H_Q=iNv`t`^^aknXbs2T$TKcH>N+Q+rJi)WuHQR*bGVwlzJ+v2uE46-R^JYA +z1x(}h{BbOs;izBTmDBNd#=bJ|8D}=-=$*UaStPFO?ZoI_#rI!bH+qgv4$sSVu6}jrA2nUfTse9F?t{7v +zm7njPpLfS<;l?N8XDn6b3rhI^zh5LJxx912QAXj&!_5;-48L0+xoOSa#(l17w_|9> +zszc_-PHleJd3q`1jl*j74@#7>n3s#~lG&7M#w)jq`=M}xeBK5lR!atp%N_rlFPsol +z4rF;Q#P>A(Nlg8oo64&s9XD-zvLn{@NS-0@)qcK*FXs6lac$e8b#|G?zfF+>dzJ|L +zt}tS|I$P-J!oR*pcvN*bBIh_5@fdNaUXovT%VEx1ogLch9~fp|`EU4U?NQ%|8DH(q +zQXel+d*jS{vGfrelc;HvvGo+0+x+I0E-&BJddKXs{mFJ?N1>cdHaF8;Lr8SSXEO3I +z9M`DZ_ETc_|JkQm%bPzjKbd~IV|!)yCiaE@pEfR4WD^RtYV2k@$J}Jxxx@HS&Izgg +zJC2?GZ+!oxwBMwK-YE*FCo0Pdch9_)r*>f`o3P?xUhYLx!+88H&$?ZZ_&S6Pi$=Y*Pi_IXBfZyrpwNkbYeyBFI3|cRFhe{F3wB* +z9Fxrx1uX@h9LF0ECd?0*?z{Q(!Tl%iTekfBQ?hyX{vEfD%11tXBD>Om*58EZTaV4! +zAD(leGftp|aRSe)`WZ40TPv13R33cT@QLx0x8a)1-C8*jm#p^l9B?^z=p)C=|3_6C +z3l=eKGc=ns$IWk@GOXaPsy}KLwx2a_llTHgkM}!ysx8+sYM)>< +zn`mqh=I_0d +zi{9$AM_6iIteC2rsoLYLp1XpPS;DRF!*c1qjn?-vv@GuI%4X=>aOuCTS +z0_j^73O*Q24rctSJ>z12qpuDyb?^^T~JpmX>sN3i|Zj4{X8717k-uZ9Pn8Y +zXWFv)GFO6S8r51nd9DVn-tT|fv{L#-)y?^&x{pxPl{AW<#m+&chfiwGw`AvQm +z9AYyV3gj-HX@0rKe67^^ORFyab7!}o|LdO1y$cHMyvyxg?Yw(Z?tS(02L%j$8+vVJ +zDH4zq@4No`y +zW}EJJPhrBEf~YTd!*^R$XWr>mDj%aZ(qV_@kgP4)p>@6a&hmL +zL~6{{x1FSErFO$FOt#nY$Tge4^IQ+P94Sy*dWC7yQ<+Hy7ry6uJiotBq1WCo`RZIX +zPK(ng+LAx>{EB*CAAg}=P0n~?x0Bw*wTwTFmA;z1{%oDD@9&tJ@$&%BgLBtU8HQZt +zwYueh?q8qN6aTCO4LKLAkBKLobSslsF6;d4%ktL?)c&ST;_nr-+p;6P(O{yHg#vT; +zRi+Jnk7k?<(@Io|Ke%H?&y#DFnR}#9UP-jJJtTg^$xb4yuW8Aue6|F~PlptE9o`94 +z*B;9_n0PYPo_9fM_78@sH@>ScJ0W^tUapegga+g8S)zNBMHCVr2q-Z%rb;M!T-j~o +zzDsKN#DG}=`GW?Dpfz7iP~1viW@bb?l$UrI{-4FZ~d`Ec@ru%CdViI;tPKSldre`xW&uuHDol +z{i@pvk4qcud>N+yOL#8p@p->bn_=58uJdidPd7w9ldf8~=Y8Y^O92n&6KTx<-Fz?9 +zfc?y~pg8@?{|DYvZ(ayK?Q+(BjhA}Jgob0+Jo{HL$@saH>{Dp}baJX*-BX?x*V>p& +zofEk(sYcVhH$*mj{CrU)UO!dl>b;Wri59+1b8anlH#)M4sk!;{>-F~&SzX*qF0~0g +z@Adv#DLz;5MfQu2&MMX$E9G`?TPEuv?sD|aA1TS-!rCV^m(Se$Q^eZ7y@qw}n}5nP +zdGw~1&w2dd`nfH|(s6BTCtGApQ0|$mbT4|>Jc}OPNvV70eA~E^>w;A8s*Q=A(MuSY +zwA^7ZXl{Npip(-W>%TXxmy;pq!q3)`&HZQ`j5Hg>F>#knb(5j{q9Xa +zSDjn>SvWs?R4BJ$&wClmc0!fF3AI`m5v3qBt-z*J(hfUlc%ip|k+Sy_!u&}Kv`qVU*NT$YH +z|9|X#spQkas~Zt}FRFiYm5N;CJCRFX3r%~h<@O);xwRl+lBlLl*S~$HFMs{ln^McF +zz}}e7!uI!-;CZ{ww0BQcJ{xpDK5G&o`t`nS)&hCOjRM#HRZQ--_i4MBCG|6J@rO5J +zEPNs-SeTs?8J=+0YBTBb5iNsoQ3znIUTV>M$%XJ5sy)+ZH8#oRBM +zCMmvbxheB8{Y*yH@n6g*WKPI?=$#3fo#C+H`*L|7@h1(lu%oK_Lo}oHK*w2F$JtpS$r=Wb3i^&G%-`Ntq*h +zWqJ*R%1<%*a{{$nwFRqG9w +z_x)V$9X-=`{>Wh{=bNT@A#ZY&uxD_S83T8^h{IRKuC)Sz2hZsFRdE+g7hl3LttKN> +zK-TZgq5VcbI%4H!Exl{9VN>4IS2LG{E>~FC>Z`1oc1hG+=S0+>4GJ^GC+KWFzU+gV +z%N6bAw|~|@v;4vAed)*R6qOUKXMP*UK4D6c4c&HM{ma%L2lI9Qx0rRM +z_9Vv8f;sd3wiqxU3z;6)^GjGo%E#yF^vj!LzAMl9WV2=I|NXO5PBnY0+`4q%QF^wg +zq+bQ6m{Z7-se&o{$_0B4YaU~XHmvtPBXVxDT^-j?9tZWJ1p#ayj+U8MFSxGTbh=Km +z;ZK3N5P8`i!JQ`8Qg +zdt&I~aDvH0&SU;F6Aj&Ew^$XD#Pzp%>aYFWGHFcg+!7408ms=! +zIrr{;Y5Rks+uLi-vEAOY@^ROjwLfJ${>)68&g-zc+J}lR=ATVT#o}_U~>t^=tV5-aN#bk*Kop +z49hpslXVNvoJg^IAYT6N43F~P(|w2QjDKnseG?3nc6a+{`}J(K^peX}k8{}fXDH3P +zShJUDq44EyFOzAy88YwGKH0mhUhwa|qqF1z@!Ojtp5OZ~8nbV?yX(PR`KXX}jC;(a +z*(M0;F*{5XF-m*YSQ6OM+O(!?@yGniC0|8FGp;o)(m@y79ByAr->PhY_z|0=gNKC@BdCHW}46mcjgK5>yE_Dxijs= +z>o4~i&am*YOt8K1=*F@e#j9ugE39nt)l-;ZC$X@N>$2j;%`Xh%R8_WfFUonec7Dts +z-cPOplAS8onZ4)iVO|?okkJ@+IYlCr(Q~)NA2s2VjZc!?MP7d1?NR6OE%8#r#aH|9 +zhs!LnGn#BT$3S4O!U2X4H|3)5zIk^(UpOZ3?$v%#2gw7Qlh>&^sf*_^q&;G5nzf{H +z{j7%qDaXsKkIXk*-E|>q+ML`k=f1O7$TRS`zm17dB4kdScU6yag6I{@HWJ!=laTVT#&Ddk;NPhlP_o0YpF|{T((Kpa;5)czVcl-TfE=g(mB0Hgy!nRdrLYg#Qfy3T)eof+9ge>FG6AKQ;&5HeF>L&f<8@E46%%>NCdixek1FFfnB+h9k`1e-(m#l2;F +z_=GQdaqDzQYaL){Q!D!Ran|BDw~j|~>-|n;@O|f^v_@$6zRRsSCsy87O=Xy1-(j&v +z`J_>${VR_+6wc}R)~bg!mC-=vP0cQ$liEg0{-5zxo;&AQd{pnG%;^!n +zZ9-{(C+hL=D+XIkIw06&c&>lyi3kz)0|~d!XsEoF)bU}_=G~x>UdX`qp_VEAy}tDU +zy?qOJJ}5feH{(jJ3By*&wvD&m{C+(9a4ti~3Wr|`vzQJo)?u0%JLP86gsVQP+gzEC +zwB;Rt!=u~p624iptWNms3IBBkU7xxi?tXGkRiwS~LdTT_7Cd|f8s8XS9LVHUd-RK0 +z_@EcJjz`2DhmX;E9jlxBiocy(bid>9b8fxu8I8Zp_VY0KIqRCec(JKK(m{FF$?!jO +z5AIiW7ZDUa^QQ6C^j(jGeu`dBF;y`uuh*2Zu#8@;ry=sYr}?ON_MFO;Z=!0Orm}fl +znkqf>NdDaP=lSc3KRpk>)Ma`9p#FTX)tNQ-(hs%Ow3sJ&EHY_ebhoU|<}*8TMJ#68 +zoNp%?Cg^r2ZjF9WayM$t|M?@mj+JQXEo86Mkjs~BwYJ^SCu2lMmFIz75O +zA1s~rq=EG#&yMtk%H{_=(d{guWb_Jmht +zf}QyU=FVUa0nMnN+k2v&wO%gaQ9aWAebS~MuNF%_O5x1-Z)bhy&tG1>zJ`>h@zYN%pGah?fUjkF^%lkeP88YXOXK^-NDg6b-_cIDYuq= +z48OMH$eMSr4~Fk!P~A0Sroizw!GjZ99c#CoboE;|`M&e&lTRjMk#ci@PyYNLX +z=1ER$BAZyF_VImDW;PPEi11*xI9v7p(VLeKEflt^W#8R7>%o?IwhN1lr}av`*{j;` +z&8hO}+49m)Y}_jI#r~?Mms!kjd~@EF&tcDpCYg*gcf9%2J67m3DXV89YfXc-$331uN6$W&^%6I>ImVFO=&S$BLbCCW@At2M#*NL# +zGXuHq79Y?2_Mv<|7oYiFaqWirY!_acxiqfYtloatV{Yd8vux25EFv7dU(1F_EHD+^ +z+IZ}Un6-zH%yxE8p-;JGTxvzC-IE@+ZOJlGJDlb9-K~Xlx$J^lf&X)UObGe(VUm8= +zzukr>XYp-*^XKBy%s-EN_3YZhqON4VtY$KJCiaAvwde%ESHpMa9br8)zwrEe?%bq!f^p81HNQ74e$y4b +zQGSQi>g!Qc9e<=SWCX796jnL>fc;7;^S?ON@P;Qj#*MYEMU6jFHha5-2CQyAWGpk| +zi~Xgi;gd@&>uXl6h`+u+SRz5hV8W_o0ZXrkUr#6=UB<7nZP(huPx<9176%neVw9bB*bdMvI;r_elZ>>vt(m +z{`>u~Uej*hb*(+$E!h{$GGTaWdp$*VUjETGl|PEF{JL8gn+Dl^&sC<(`P +ze0i~im*o|&8pp+jI!x}rc$ZWwtZYp=^Y-(EecL~CKgdo{-jR9io2aKMzwkycZJ#5& +zaue)37#@E0c(3=1h@oxru}umE8yYrC +zpNM0qVJ~7?DiEPKfw^O;=;OEZWB%k7RXOIhXuh5(9Ffe!*Y-*7e7e#GeGje587D$! +zB|2UycvzjtaC6Q3`E&N#@R~Y^bG^H^x}9UfdBuRMDHK=%tCMZZCI_?J +zni$`-OX5M}QNDlgs^(ZIHcox^J3dvjU3A}_SCjZw)bR_?{BxYOYU2aSNv!Fr<$`CwXtS)E)x#2dVINzw`QKMlj-OyZ!F7t?Kv37- +z?*5$c=%&Ykb=Ioe^^`7iRF-@#vDWYZRp0%djY-0%`J?8aQ<)a)ZtH!qO}Th_N%#I+ +z&mJAFEAHOZ*;>D>o5y%g?A=ZtR)wFZoa<(Gh)O)TptpGHg;yNT7H@aI+`eW}bx2UySWRIg5v>BAFmkJo-?);aNvyTCxW@79Z5UXx@a!(N8WvX7Qf +zD9(Bmpf-z9vA$sKZ}FucuV1rr?MpmWw`YZ;)z#gTQ_|HYuH`9fIYufF=nL%lq9FU$Gg?>>C?e#~sQ+RW!`moNRGCOkQ_bYW-8 +z785Js%D;^>FVr*knS23w)=7OS`MFON6?d^N_@Bs7%U5u_TX?$hi~54FSM~d46Rs{% +z?wMTrdh0sZ`fJJWbzkdo^|DM7EH)K1l5sfeyLV%evsu>ZhYylo9((9>gSjDyrNww6 +zGslt{=fV@pS{xJ0?#%2^7BoI;>~M%-f=KZ9=ZPGd|Kp-#)b?yWcT!&cKI@K;?$sTe +z7j0r;eCT^Zp|T`-*@xL5-YDd*Sd~+{;JqQ+g!LTS|KCoyx?Q98#WtG7L|bshh&CqIwv>@_&S@cS*p>SZzyH?4Un+QBkc-S3uc&7&nNctow=pH1Oq +zo#1jP^N2<34{jx%KMaK_3vErLWIi#lF*_yyU#DQod+nae&Wm#EIh!7LDci>>D&5^L +zv0ULsWpz>6`kC{z%4|(%a&S&K^!nK3J5qCX0?KyG>``r9k=VJ%%5!qtfA>}3C2b4D{&u}E2=WCQ21t0^2? +zUsURxkha;U{@323@%FvwiD&XEzQrB9%B|P@e$|(H2et;azYVvxPULTJHBGtyCR&S! +zK{K8EQyWvqS@zoxxfCq7=%g(=`P=5uafXc#-`sOj$#8BtaI8mTf;rE`8IPQkPB1*S +z?5~;hEX71N{dVTkq6w4dsD?@FRtp2mVh^Y8yVn5*x9 +z(?KRzXNQ)h^oD=ozP}hP;(qN>GiYF2^ZQZ1OZ#FKB^4u$lPz5vPd06-Qh#+|Qnw_R +z^vl2^?z{Fi%V(=hnry%0$iek9rfGE@2zVP&YBJ|>N}%Y<`{#X@ePD=Y3=~}%*5e>x +zJcsRW)0V{M#vC&z%U$(TCwl&onRWJc(0;R}SD(K7Syt3Hw?@HNZ$j*B|CEm0i5k8K +zCEj|TdLsHz<@FO@-jpAkkDHy7dv`m$Af!mta!te6{aL5@1AaDCz3DTz-qd(p=+AUV +z&pO719-=1$-al+wcSKO7`~M-gD)aiHopX)~9<#~U@f29y<;KeG6vg;Uk}p%zXiAZC +zil)9vRjN|n)j*-OFY6`xeQ)8@_^78(Y|VC8oYxilTWGNUpge=Z+JMGYHEj+C +zuNBrk6@0Pz?$Osr9_|$W+twQ}?L#7Uz%0_I5|S +zk1b|hd3AM$PNJieePj8ZzI$&4{gkzA^(E#%`rVdwpy>gZX@*&@iQ}sz4?O|NzQ^q< +z{SUVE-evan*&O*!J9sk_pKcrXj95j_KfI1^f_chCemB)i>+j^5%R8|B)>}KLAWXjL +zyz~EiRasp78`P$qnh{a*XsU+5SH%VIH +zoXLW_nFWDgEuQz6>{E8U_TSkmk)PpJ--DR;MJLwnV0_tbvB&Szp|sDl7Ed~oe|M7T;F8ZS{2NBADbX*Y?u^Kw_c1OxM +zv?_0Vp!o04)v!H{N0gN;wb%vLO^DBAU}BA*@TTdF!Q|x$SCrYq_lGGQ_$%1vwxaak +z!jg?yb$#0%F0~Yku9e%jRz@x8H=F72@Aijs^UwX8e0BeqsDo#irEC)SL`i9iE`TSckO}+VCE|2{J#@(xb%cj(>bUdxl9T|JP*<|q_ +zPjAB|UK={~YUGRD1*P;iI2`eOYuk3eF~{gnqu%M%MXPiL-xe7i5DN~fc+7cn&%Yfh +zb#}VHJ2r=_S_W#0ou4TYHN!(VDrEWdwwB6@PUk1gRe96)@u!?y_E@qeJZaetX~z5P +zKN(Ia#n&o)dB59!X`yhYGi!_8)X%@)39-NaaHY9va;aXE3;)VLfx7xqA$zMz!!|1E +ztmXV&bGbiBRASZ?RW@Js?eksqIWBy$QGl +z8R)sXRDF6kJz~!Wh4f5^GX|Pd_5Lfi-nY;W{SkPAwdUnnR)r@$0n4xco?ZV-y?M5W +zGzZH?U4tJgJPO^lJG*bs>yK93!Qt05Te0Wg3tzRP606T-nYS#yIKlSPcTckq`8)k1 +z;#qY%WO(%E%}{#M?pKiWrA@{02%CGs0}VSKvA##E&A9Yayv3$YE9fiCX|IdzJhFk& +zWtFG4>sv$C$4*g!daCJ{I=t1qjt8lyc`^$wF*@w`@zY`9%B6x^CLK}xG;Q+apMSaE +z{;_@ad!qH-KS@!lzA4{WtuAu280}Zz`S!1<<(t0pII);DrHQcz&kCsQ=gO+|+_)VgrxnA0dXs=pSrc8Y0p9eZiU% +zD|WbqoZ?XF7rXp@{SrwDPK~)8VHpmacvM`RxTem|Uo-Xm_cvVZ`)k+Dy>DYZHQw!5 +z=zP0&6|o+E&b6yjGN!tzbgGE|a)>+Mv|wRV=Y=|k&HpDH$@%v6{he#2kHj7&7$0GdHh@8w(RT|kvi^) +zlBt3bmI37=-hMh>_0wf1MoC!hP`Phl+4sbaResY71%1Et%lqR6COEd+xOg%%aoNj# +z>8NpdzxIYU&;R2G-_M(WDu2e*L(+ZTk3`*B5=E>!o14nN{V(86FR#52Td*Nb*yotr +zb8{WGhH1}v!dEtNU1Z}CyOI2wO+;DrxK@H&U6Ha{-%P1nU)e6L%VM_BGJams|2|lM +zi^Ce}txgv~E*9N#4JQ +zZ0hwnD`S7KhyR=4^UrA#Yov3}otyRYY5(VUR!`^R3tOkt@4)}~&HAW$#y!H@v&`BU +zP15@7{~NvjyDYe6B-Nlc=>uTt}l +zvPw*3N_t|TBfBW%M)jsQ@AuB;orl>F6Ku!fArnB;#9;TsPd-YRZRG+f&7FRrk +zi{1DssNzt_Xwjvn5VoX6VwZY8IbEW6~Bj;e7j-_E!2 +z;0=|9uV?#vJ=5j*Ki55|aO2$loAr9XAM@%mc%Jx@d13#*1(N?FX4&vxy)pg8@!u=v +z`=s!43w*b4+)>ZA`|H)|EYGv9H8VNBFn%)g{-UTj4-v75eKpQ(@elq!H9oRBbAv4} +zvzXE%akevgRwqR#yg1~o7x1OksB?Non%j|i^0^5%Vs +zUpi*Y0p~Upie{X#va4nPU6kHb;VjQJRfj`5%R%ixpbO_Ab?Lc(8eRGBWqEmZ3QK>i +zZ;>iZaBaLV#G$7?xA*4myqG!>sfC7uFL|1Ms-AABbKmi{_h#ptRllt{*FBy8_wc(v +zug*#cO?@x4y3A4e*JjP?r|pbyb~k@u_3Pd&rRyPWpwq#&V4WAlC+uLL#%dy(2 +zj+H5-KuKtEeDUedJ-?ZZ`A=^}~3D}LKq8~?VlURwCXE-Suu0PLnrH5cMUg-hTFu6$wG$C&)1YLk3IlZ9Q6 +zu$G#qwjW;5-O#C`+Puj*)nl`gZTZ!SoqMDfetV%3*Upf8KPSoPy@%Tu2Fo9J!z^7+ +zSWJ6zuF3i3pL;*8e(H8ebBNq5ZTQpNsr|RV==SW-mu~jP?&j1BU0c8LL0H^b|CKZT +zh6X1Fmd>e)4O@Cm^~>|6fwAhf=l9)mwvUoHkU4kBL$*UpI{w@57uvnz&7vKzjb_>E +zD-?xyyM9&XUF8>3pWwJ-Gqc!|ui{oaYY%5iG`wv#wRyEL|9FFQoZiAal6SbWkESm; +z`$pjOQ!f5{U3>Rd=$^|}IV3V!%QBM)qCu+ +z*>NK8P<@8zCHvLP#@j!}UCm6pKL5D6goiZGnUrt*UcbKFIG5{xe9@JkMF$stx+=}( +zH&y8P_62Dr9fd8YcCN|F)oj(<{a5VU#a+s4?k5U(T;poxS?z{a@3k{B6%~hW+ZN(-|hTAK3g*QvFTo=lpGtcFz4{`HR12ggp|dS|99D(SjIMPdRb{h3@$Y`pwwt9~rG3Ly!8ux{eff^O(=w+xeT|q}IFd{u!LoJXsUwwaZk^l{qRmd+woyb6ryoRx<>AXnP{`?a-^O +z`svC6?|SZcsYGrRxXb1By*uZU@MZ%%yaK6ip&N4<2||G9C0TFjj$%BTM>k3Y89>Z=sb +zx(dtYmhhF+?W&Bu6eUHS9tPdq^uuxb#_4LlNqg&@+fR#Z_qz~qa7po52azS0opw*) +zX;eG>A*~{0#v_?CEY5r6H?e;@t`W!*lp>m?&~U^sR^N30k)ZY6M~y{GCYjY~ue;uv +z_Sb5Q)GUw4ITK9(Ezgx-_jH^4@AE=3jNzxI@AoKhFIsWMTYm4#6%%wO3ve1uJd$zl +z!Hqp;*{rYkPPS5L3}Z~>NMriV#ht{?bmhZ)&ogIKIsH1FzX?|t3tAulckiOg)FU(h +ztIYneOyoi5Qoe^<7MIjnQZZ{ +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 literal 0 HcmV?d00001 @@ -4133,75 +4320,79 @@ literal 0 HcmV?d00001 literal 3652 -zcmb7G`8yQc7q?^!eaXI+Xdz-yBP4`E2rXL3*oIKHlr3wvv1Z=~rR-zLng|WDjj=N_ -z_GpYTjMVg@uLR)Wpb!g@v{LpT*72 -zM2^#bh_kS;VXVv_7&Aj~5wUKV>JB9__u6492#Tv4rnnXz)((-t1&1&M$sLLVLrHFh -zM4yjDw_>6X^tg7IQaeP2B938*W0!&h=26`Uy>^5u37%vY5eHAz{-S`34`CzJ>S2;| -z;l7011Z;>38zxDBC%}b=;_e7$qH7_6iPsI&#oZ@sMkq|*HJ<=3ATpUuTJ0ct1;b#H -z!3BhWa)+2?q#Kl2J4|-ZAqn^(z=cG&B9hb#q=f4vY=|P_ijZ`l5PyMW3Ts8u#9b#O -zz)0q35^j^OMFdIrNpUbz0z3)+x9Rc@qj#3hB-H&POS&PKF-NH_6iM&|Qv?b0>hW5Vk9JEv%o -zb)>dQa#H)j{cLPl<>o4uZkLS*2G7Fh3CZmTJNpdCSF+ESJ^Ufv=L=pTbQ`nJz!Mo2 -z0~E)6!u{mm_fxS+&E(1<;@qDjM<}jwjH(m9x`w5%?$TFxC`s*vjCQh5#U8YW0(_6j -z{zmcnNCIUqR}N4s`*$n)cWsh?Pp*-uG=^#X_96LrWQjh2q9Ir4V=MHertQf!Vk-iV -zTs@-FkBwqB|L!xsPt&4cq*W|qZHEzFzwcj8%ITyWQW%&6M(-T0X^h&2q+ar!QV9K< -z--(&ppjjqi&Uj3rwvO;5hIh#tFa*7VIm+)nEa*Ahz%g3K@v|F8Yde%tG<_4t$p4OU -z%vr7+CQfe9^49$HNbtK9h9Po3X9YMUfYt<%&3f5$YC3%e=c{LQc`Y}Fv;502&uC1!s+ -zL@d(-D@co5M{N_d%3+eS|7;tQW}AUq-JvqCRrxjQ%E_oQ=5u#=ZDV<#1&x-)bqkr=LmOwbR!+-!i_@mgap8|Gdw_ZoJtAHCPhMrW{37ti^HX`-%|1ns -zVcG7Vr+%8f^}kA>UuYPzxcVmRy8S3}@qy4;P^g3pCcuBE_dv}z>f0QD^#D&-fBLkc -zDtv)tWB%`6^F$R+u$3*Md4m#jwQbnfh>&GUK{%!;Gej_e>RMmejPScje8?3skQ(_DL< -ztt~H6EiXg7FVr@?M3KEvz!_#lDp->tesZgx-0pb$+NRt2qvb;e>9cmNyX?Nz`ujmc -zLHy4a$3NPmzs^WMYF>S|j6$_kW-)FJZEZUr{}RFW2c0}QWAR*jz-otYw4GsFRsZ;c -zqC`8JS{-QL#<27l2h*A^XOWr~_B8&rW#`z_^dh}cz*V{ -z{t7oGieg^~Dj#k>XE;X~GkT@g&gp4OZ**z@Yb1U{s2%=Evc|r03P8w7v{HYib}PEs -z^J5&D&tPxS@0A(^Rf@)qg*m)#T3bv!6)p -zec$FDoZEE9G2Z4|!bhN4PNw%wgOKZU&#rSuRkzH8MmxT`JF0&`>j<53oUw%j5V*uu -zOuOJj|2ajzmF7uMbH|BL1keQuNa6v(>#L@NK_=QuqLOyzbH`^OLr>Zw) -zzMdN>Tf*$)7PxLDrSn{aTg5N9YT)C$*rQnxAt1805W`cs^z}+aTrjjQ^WOfsH^oA* -zFu^6ztaMC=Q%o=JZ5PAXjzt{fu6Ju%o)2Gs$N@O}lgRn3pX-;jX@^t6hRwh!JHYw3 -zHK)U}I-HVc?zkg8UDDmX%>UF$qNi&37&a7#e(xou%Ee6=qwugF4uVv(HAu*!EL57)%rN4-rr+0ynI1Qp-b$$jcrv* -z{HhS+wV-Z52_#$?f^f>~eYC!u8ZEo1zTF`q~?*q;9+L -z^J$riNAJC~W=;L{+Jrcg)(?1$ -zMTP~z2+93az|Dlx&AYaIm9r-_kF&TOVbK6#IGf1fe&{O!nVQn;a|KDltm>6Pee2HA -z9-3E#ixUJ?*)rqaok=tkW~~yHxFKk&@gWV1DhFa5P3r_%&zJ$I{&M@~?`M<^&L&!) -zh3G#CX{WvY2N~=VxjS0gk~0Vy0S3xVxXCp*^-gnYVLDtUqrp!vBKaY{I(hn}qlvb^E -zC$80tk(XazczE#+MQV7q?Lvc9$ttUC&+?!F>W#d3`{NU0lcp#B1aU01^QTC!Zzxiu -zlR#nTzYYTj889tGoouz)cwkkD;rkx`+xLj)KXh|PK}@!$WRak6FBYB7TR0-%HR@Z9 -z<0U9t`DIc0Oyz2x;I<8^q-RNw8iQKm9C^tX1~tW7#itiZUSIPrb@2ro`$Q{xsYQum -z@`IMHcycs(MenMQR=%O1Re12|!HPlRweku+YCM3ZLVg -zUI9cE(1>Ffj<`8R1cbyUON7KY@{O0z-c>mcMJt8wcB_V`96Qw&rW3?Iu)mIDKb=ur -zYT{csW{Bb1Nr+=zA*zJbeH-xbZ?r&xk>kGT=NH{bmNrWb- -zxAf&GIL|EK&1|q`MqpQpQvfcTplQutGSp!$tvweOZBg%tMk)NIB9**Pb)|#4O#bH? -z=regeQQ5_JE26!}80>2AaDx!27c5H|U7V@aafLvLGC8de|Yg}{4=1gu(s -z^;{O8hZ^ggf7h5IJ8t*dgu0~6=AgX#InfYGDU2=gyX30#I>CncVq8QZfMDNp#}?EQ -zgIhH*Ne1V^)Wc0-!<*e1j#i}HcSiwj*(1H#R?USHUJ1T$u5Vv!i2_u_POhOj?6RG` -zI5L3}qECK*>C#qo8~n?1U>c^Wn@iA^u|K5X&{tkno8IhHg7sEt=jd7$ -pgB6YKiTwA^n0D+bUs3g+jOB7&YJy#MG4`JVrpA^=b+jd +zcmeAS@N?(olHy`uVBq!ia0y~yVB7%09Lx+14F4w_kYHe7dL7^s;>y6lkT&<*y3@Zh +z=6_#z`q$dizY^xZUw8Uv>fEnuPkm3D{dN8M?-}#or_KMKKIdD(;&18mz7@>>zxMRc +zwWof~KmULI`Tr@iKc~<6w(iWIwP$`wrCnZk`j-n{r@tr9`6QWs +zY5l2R>ra1|OuLje=c`1<`Ss`jr_T8znSN>A=|2(~m)D&6DVcsLb=H@(+27Wm`X!lm +zY3+$04`2UFoAWho_7{-eQ(q+0FQ(7`w)XUojOpJ63eKm^`IbKSyL9G7$<)j1PyG~4 +zJuj7UNh0&&+Ec%_U;HhRdPy?vV%pqqlIfRI=YEmOxGa%&Q8Mjv8raeYZ~h&+{zo$H +z;<}SRq|z@wc>TA3+fS*qOOolABthgwiH!47>6iZh|DQJZn^f_Ob*FzFyYqAD(Vt&` +z{Bvk};@bNrf6=$fmESe0Uj +z{)w6P(X8tF(VJg-cYc2J>0j5D9|g-leEj;SVEIRlnwPIX{rmXs--_cu6K8!1?!6n_ +z|F&oAkCmss-FW^tasK;F=YCn&KYIN3&!cyL9=-Y5v-8X3oj(dze3*amr&-JEX}fHB}% +zFMPcI^zY+0KhNI(^X&bwdc);um6tT{&V!!?}8N{7aaOI`_NaHmRp<7{XTR5PtEG@bt|7PJNE15v%fno +zf4}nNw_(NI){Q^r?EjfI>sj5Zx2sP4eE$A-_WW^`$unnNv2=YDY>o7)wGC#fg!#m$S;`T{(Xh_`vva5PiRn3sNes7zd*wT +z0Re{z@e}IL$2Xjx?+~y*!J+@WgTjP(3|DH=JLv{{8y}8_vIf|Ni~@e1-WMpO#EvVBlKm>EaktaqG>k#xz++k%otr +zeLE65RM$B+9G#SL>ROhTh}qjGfA2qFn6hYh#0k_a4fBHYaj618Kl+UzN=J +z-|aS2jgIFRYg*cW>3_U&neD>9zrmgVXU&t#w_o~9BJa1&@y=&=?(?k_ZCf`#Y3oW) +zleXVB$D^M*`-&ean40Xl`R=^6H(cy^Ufy}}%hJqv|D5vTlrtMQzMOFG*ppe0dAc&U +zeU9ON>b1%E=_H?Z_9um+CB0)DELFB$c)DXkzUjxf!@e;Wwx+zlGBu(||J~IO%6jjX +zs+rlu@y&d>wP0?<`e_-ycE&k12<|$up2(f?Ivwd6c?QOZ$`KoI-=HC91bKC6Nw%qFPvmeWTTav!| +z^2=T2B|-a>7yE_&`@YO-ZHB_9fF~^{oCQA~*_Qa+>g-85nXs*oq95G8y=~>xe@>@f +zyiERoQuOVyN-nNzzHwH^1K#kQ-T5zk)rJUFP05{1hU*eO1vxML|9-vY)ujy5S4Fa2 +zPrisrJh(Y?(!w)>vz*`lvu}8`RjcZC$E!rS++ +zRQZa!_!oBz{^73*xqK^omcr)~W;eg_BMxY56Zqwf|J@ +z)eU$pynWC6?n}E}UBlIOUgN%!-!?_oq}`JH%%R?I+84Gw?E3tYBYqCI?Ua+fM<1J} +z@06|*SX65z^ep_k`%A~8&yKFBoA7qI<*7bv=LWNrRXZ1b6<8E2B>Fg|-kQZr`5L#r +zxZbs;Taunz>KDzZeED@%@3q`h-3vo|l8?VjNb34FrHZw(?BT25VL3A$x9w+ES5my? +zue@ctXU=>z?FTbGW_7&1rSW{d{h}`hPp7Z8>VNy-NoR)nt>s@N+jnsm>YRHp(_?1G +z+kM+UGMpAotF-c*V=#N?oOGo`rET8abFE)-e06%lxw*VTt!;zy0w?$1D=YS-x>%ye%M{SG_iqO@U1z=>GT}Br-8GqDxey=#f{dZu7%arevK2+aT__3dvi|yKn+(xUTf`XRaXP?aIxW(sG +zy*Pib*M}2|`u10Rp3JCFSg>aC-}H(n0n*lS#vFP@RjZCKu5J5!J>g4f +zqTA43HGka{|4)i#^Mu#e3EoS%F4MXzsrAtN@_qkYV;Ce}XV^PkRp$A)^ed}@{E=^L +z(Z|?N%6RTdn*B8BIA4r`O8FY0x~aR8dat>s-xK;Fe>JdrGQ +zURPfmxEP7|>@#WAc)Qv7>I&^J&-t^#b +z9sa>ytMPuuzn_lro8FYO$Xzh8>rm|a|K|JrGkyjZSA&aflm2KeIXcCy&zEg^RgsTN +z&Gq~9YiA^XIDfe5h9rlV@s;fneH)6ip4BhCC9Sbfd~Zsv7>!m|9)6PCoMo;nGOtrW +zpJ_^atz5U42;(X-NgF{=14t6XL|c)TwMaZFb_{ddu_c6jpm(s93eYx#b|QoBubJiTgR4x;$Q7QMj0}JM&JGif`ii +zqic*_Y`U=EcDV8bG36;bt2wK7JeBT=?g`sexvf2s`-kcYbBXN|SMPk!*)mgoA5WEQ +zL9=F#VUyVFS(W#6vspLiG`}-CyRz($yhcb^$V10&)1@nTesvi9;BhOo)-e12aM6#h +z>gg3$+*?!bP5IpwrNnsgK)S)Ky@>%eSr;yT-~98^yfe8ME(#yt|7KQW+F=KYhROF_ +zFDaC4ymIE+HI0DWz^sBY_(tZq%@xv=!Qx8DDn``R_{_UqU8 +z{ZCpqXVMq(iOePK%tDjrE%YdybI$oS`o#)scz`Sx^3b?_XWyQa}YQ!234L-Ui~ +z0cNeq6TbZV&eZJMu_WD7|AExzP5+`cv6{W9v0eBmY*O4cafyeCe^}W=V*P#n(`mHr@N|vjYY)7qYz(jIG)hbTnN<3I+86Uc-UX+2 +z19|owyoTYn9qfeF_(1N<4nu(_xC& +zd9{xngT7^65EUr>61&YkJYiew`$rxgy=gPo8`XQRKmBa~?{SkZR*@qN~qX~{XPQ_LjABJVEWXQi2b;uXVZ +z&pLD48DFeqW551L26%w+9=+t;Pxevz1q@ +aA_*{Pt?TcMnKth&$N*1QKbLh*2~7YY5~D5v diff --git a/chrome/android/java/res_chromium_base/mipmap-xxxhdpi/layered_app_icon_background.png b/chrome/android/java/res_chromium_base/mipmap-xxxhdpi/layered_app_icon_background.png deleted file mode 100644 @@ -4211,70 +4402,74 @@ literal 0 HcmV?d00001 literal 3519 -zcmZuzc|4SB8y@DvWXYOkM7GFsj+q==g={eyj-{{kl^7L`tVc-9AfqHIoR|o8LQRRW -z6hfFn3!^B6$R1{lvCLo=-!tia-}lEizj=S}b3e~@U)Oct_xsLouDQE8Nr}V7ArOcZ -z%Gtpa0udq$E*KQ-Y~E^71_8|-eZ;Z+{YF3mE3IZtC9nsq!MCJsJ?t-*8DZX>FrQS; -z&aPi`%%H8V@k#GkOcpxCYF*b0 -z|2)6Uzg)r2Z(VI0b}hGYy?27u -zHOif0@b6L9hrjb4zgZun@ro$xd5!b6ADF!p?7H5yi;vjjv<<(UZ+VThe9CJ46L#Me -z4^NtoEMccqt~n$Ro-bmBKVp*JvpPq(q>hceruo`#rf0_2)wRvuDNg?s@8dWRll$#% -z^LpD5cj!B>bCioGO?@2aR#7>zj~E*qe&-0Mw0&cPv-x(I`>1_kn!zW%+1Q64dDO8! -zPUpWHX5pSJeVOL94{|?EaxgjH{(P}s*UNSw48kM7Z*Fdash!MWV)9nN;M~&Z9a5(E -zCyXDB`02{I;(6gzkdT(aq;Je)C-i -zJpCdOHx&m?N*0Smo83|*Y9EE3Ko^UcIce)Be(q8CX0arL%df~m&X-t`JqMxJcOm_j -z&2k{b8sj7s$85lWe!?%(oCsn@B8sEvy_qU>q8JB34+gdj7e4Td9qfj=>6j3{);l24vnfxW+9l*r^Jm2qrfw^CS^l1Q>>ZDtW_YK5Cb?K-5 -zdaNb;Z2VgkBgKIRkg7;(iylcd1s95=48qI*4dKM0NCl(k%c5nK%cAJP{vR$X0c{t! -zdR|ITvvxw}8I3~o#a85lgV1?UPGyZ)A1cl-3EW0wp=QRBhKVAea1DA=N?|obVxdt; -z0)Q9kD&8BG5`rW_$d`o*(2CAmi3wEUvSuKf!)o!zN(Za!DnledodV<}NKBZK67UIV -zL4ySPPe41}eo|3Y$=+K_fg_thApt9I$mDOWpFV-XpK?b9avX+Hi!fH&=oYJ`%J_5A -zY7y}Iv#91Hej#GYdQqnPv^oW2U%i*F6oI-e4fXlc^73;ef -zj;+W-wTH;GuYG9w!}~(fyR?Het6FEZ<3MY!rsAZn+MeHtMsA@M8l!JC&_07UA8BWv -z=m?KdbxFTKkJ%I7$*P7mhZLlzeHi%l*;D}RG`8YZKR*EFpk?m+r)n~pfVC-fRyy`v -zg`!M|4V=T(@0PuO*U(%P6NXoAFyC|Qt%q#>Ne@qT8O7%P2CcX{eYr}N;4)Fn0s7~= -z%~yh3J@%e)lcLDo7;sf+iAU)KL=_5qCzH=$H#I~)$Q(ZB4ym>E&Zaa=v-#Uqvy@o|jt8lCA*_LL0o& -zQ0HZh%86vMMe~h1w_M{;qu=j3X{49n8trOQ6lvc)3FLFw=BKpAofH4ClEN(2J@{)D$M4HF@KS9DIF+KoUgt_G=&80uHa1;I -zRW9$2PP+!d(U}v%lh8U{BRGgrw3PL^ua>JE1zK0Ml!!dK%zXi+*gfR!IFx4JqXvzF -zN!(#gWbJpb*EWM;G<*4>OOaX*aBVY5%-E?nBS6;-d05!eK0ylx6oyis1$$RXyyK|G6qg#QQz!&K4R+YQ#&WeF+Dm2q#JY*Rn= -zIfzjvvA)O`T8H~y?<1gk`9cp2wX~h^M>WuSte87Enf5(Pu9B29SYNZapnwCe)}cuV -zY|L+6p_p|2Xt`v>@xfj2m(zZe`;Lkcn)KrGwT&gS^>%>=MTg$uT0~Jc&b;Ys2ZD;- -zyV&BHK~X2SVbZIqN?te$0yjCa9X1g^P&xOIfGO4Sk;X7$6wC}Hs~xTTG{CE{|H_k7 -zJ*(RZs2+UBH&-o!zH{7?HoE#SUT}z&keAV&DOivb#f)72x?7Sm!hmCB+ItJRMnx_d -z8P=hgvsT~%oN**dfhq9|m!nLhQ~(u!p~g5t(@1A?w!FhohK2tIMITe1_Pv;>@(VDW -z@Pe|3fXh~(jI1^8=i^?UqNorMsKH&HkA1=>Olu!uo3n#-7sefXVDX&|Bk@snJ&&&< -z`qW}FZ$3sGPWaQAKxQ-RJz};kTQ}A0gCD9z#D7q-qQ_9X^{US+65jUm%U9H|F?U43 -zDR%J_Y`aV6$ICBBBqOLpVQOYxC**y_pQYF;yKwfFte`t}@#4u~oSX7XCPh7@J9tS9 -z=3?$u9Nw~E^4`3r(eQ2mJD#y=mcK_>n_fmRXemby8TIc9b0i=buL9uO&)x8+YV3qD -z4Bvc8>QpLH3Uhzm9&Q6qE!qj1b4U4sGU6Kf!n!3=chv@V`lJ*__TqB)ndkfa^xys> -zMu<(&yb%&=`&xR`fAN_A5z`!hQjwf`o@Ow?LeEZB+M~w-$oy&14|6@4JSuE>FGjm* -zSJ>vpCD?VUWW>^O?U>ZHXE?NCs#h1Bx%!s~hS`v;V)E@e9;}GBReQ(g%@ql4XKX{! -zO%;`r1brjNP;|ZVOcB_eJ}!J -z3N3awZ^K~oYT7-OnO}GcE#8a_nNr;Y7V~L^2}oZhBbduOrYK3h>S?o=47D;hi9ET} -z9TAE?yF2&t@fG|zTjHV9HR|@qu~xsg4$rQh(Lh&J&e?y_c|kO00HGl7;d{|_&tYAC -zs1rWa&G=PsnbNcgWYGJ`&__r^Q}Ne}t5;^uYM}dL)4gt4HryQ=w_?POh)7V5z)#$} -zapbE{Lq?gt;74_>vp-t}=Jnp_?Hi>9dj4RQu~L!83+~cWl6B19-}eSIb-Nd=$V^)` -z*uul{4BVlcBA7#Fdo7oy7EOM&BW@3HMplm~4F}qKD@lH#q_TIbzqO2s5e9&1iGU -z*w)<*d`d=y|8sKeUw0QRRA44f4BP9J@f!Y{5T=U*%%tV@_-v8$yN@(j^;t7OfXc^O -zhWPlHzE`w6x>F`6>se;oo&Jg-H8os0)pB2u&+0~JD>AZeEvz9r@r%2RBc|@@h{~A= -zT&i%2(_gA@_}3Mv!f6jigU3v`<<(-|pBseF$BLk&%k*cHZtGc*pN~WOvQ}FDP=cT% -zAlWM|Ea9W8)}q8>G2PiDUeu4R1t_`)>b0{4o~=HxW9y{tR|s(&0w7;Sx9)ASvP2&U -z0wqlo-s15Ggg>%akZK75(y<2$7Nr)6K8dCa!ioCZ{j$^tPPNd46H%A^GFMs@#01&a -zEjl>uElMlFL6*8VKx~1ZN@{Db0uvVi{o$%=-6@&Jp4mhhHYo~{+5O$ZdgIR*B?vJ5$!R3PXBkQ0>lqcPjJ -zG!=nXw2&abs#xr~fFDF!vq@X7`+qtd5cw$r{cp#9R6!ToGG#p=PkT1k)Wlt8^P%Pg -W=g!Ha2?pSwIRxeC=1^|uclqCxqvpf_ +zcmeAS@N?(olHy`uVBq!ia0y~yVB7%09Lx+14F4w_kYHe7d=uak;=1niue7<}y0-j~ +zOuw}5^sjZNe=R-wGk?)HvzFK9Ew3BbeV@GZhimVfuRs2+JoWA4w||u@zaP8vvun$b +z$M631?EI`z{p#q=FJ@KOAHDsv*Ps7~Zv1}q?$7H_ +z|9ZCm2%h%t&8L6)3mz9N{(j}@?}8N{9=`s&>D;e9SAMG(UYT|1>*F{7rtSV2+4inu>3>8@{b?C|C@jCr+UHF*Ps72 +zt^Ypz;Mb$Ke!u$k&#dLuqc=aVJ^gd;;h()%f7fsL)U)|T&*qmqF8=P@{$u){pO+th +zJA41n)A#=t9Qt|Z#otvYem;EjcmAQDv-Z5+e&OTg$KQ8c{!y{w`=d9%5~e+vwdc+3 +zLtkrFf4}zhZ{5mg#Y?}pZv5fWd@FnYw}KTPSDyZM=H8!`$A8V*`+EENk3qe6zyA1t +z`RVWLPyb$g^fz((gE{+u9=-kN_KUw~?*FM<`SjwWKby||u3Yi{*YAI4?)_eN?ANc~ +z|4-iev*OshXYc>5Jn_q_?%s;yKOepQck0f!+SQ+KKKpy@)}Jd+ekV?QFlE=z9hbkm +zwA_*^e)0eR|FpT^Vy1meob^RA{gPkLYnRq%*7c9VC%+Hwf2&h+TPgRtT-FuOj+cfN +zcO9CZs2AQetG@5eY@o@&z`$A(*?YcQgQ3e-F8kUM*)Yx +zga15>)6bb{1?n8+KQHub?9kDjfmKR@^W{r}tS6JDRS2}&q7=oh;Y!?T37%xr?# +z4COH9XrCplX70+G4OcJ8MST0lle4Z(h#`Ba?S`OR%-!;a37^fTG0fPa-{|?=gE4wZErZXk^aFS1Elw!A=agXAQ+i-YEx*sL?+5*k2{UNF +z*~2*bo2kL}=L!-34@+#gIXi&C=N9{cJM(5IESzheFqc31z>-?tGjA=quHC3)R(qSA +zaLJD6ntjp%v0|gx<7YOX +zTi3y^*f`fb;p|-VgiHJQpM8^Ic>R74|edqc7xw7X0TD`q&GxBm>?I~ +zr!#^~{d?OOW*10Q-Vo$KkVNAa_Arojzu)T|V9MmznegqvCjG08U*~UT0GS3-yg!5; +zs#2_OB_BuyNa3$Uo``R79~ijv%-GW3==oa;M%l-$X@rDlW93RY=E>hoH}F@dAAD-j +z*LqQP`J}wtD|58wh!`6eUo|i`Ha>4;ynbH$&a!_m-hKG7RajDG=cebo>mSZjk3IQq +zYR4H1x2(^ZEVL|JAWi9QW!91O2dNyF +z=Y8`wpXfA4swMVNwU+lk$DlK(1(q4U)i$44G)JoCrPpuw*-IK5!xef8)3Pk@%rE&p +zPwH%%_aoy?-(CdQei!@Zc`R4p*pCYbiXuwppXzdWW4ql$HgdJ&j8|LM$2iJrn9R`e +z%UiE-|Ac~1>@E9?Z&FsPFg-k{wo;cl+;KX` +zU6jn@r${$%Xvwsn=OG@xP4bXLOJ(}2+MTL`-E*|f*%I^XBzBu?OgI@RI6EdVNKQa( +zzqQuE+8vrg8zpnruqE2Oy*g)qTh75iqZB{hLqdHwd_@k_c&en8&SQ#b-jI^{UxD?4 +zfLBHU!*<7rNn7eoG@j)y8TM?2&oQV#}NOY0Grc<9jX~vnga#)Oi&D@YE3rEzaCEVx5LOi5D-` +zby`F&6x{u{!|}%Njchr=8B5o{?Qop&J+p^VT4>fxm17Dmt{%U0|8grOZvjb^i&+ZB +zE|i@vQOc2=Isa3GVc6$CyO<9-E&nU(*5!OjmbsLJd*-*tldN5wmCZO36)*qG`&6vt +zBBgA`llU<1#7d7cgJk8f_6-4<_IjQ!$>Cl0ts4R|Yc=HB +zBdn<7Qf}i=_pQZH3e35cFYUv3OzY=Q!IoBujnyaI9XqaEb74R9Bs1P{my*}DBUUY* +zm;W&?)>cw>uM1P~nf0xFX05<6jZeNjhf*@*&8oA~Y<%tV8VxebP0r>e_Gp#~H5)|U +zl9$@|Ea8b&7<<-?t4sJuPyJO7Y`{>1)xrx_}5*Q?5Z=bD&R8pD~` +zv-zBOaP1+3+9!|sI3CyB*!XIBOX4z>SpLNKI_}a}z823* +zb;lq0Dz#{ORDV+T+3ZyZlFZ~57EpUW_ni=1;=T5}syv78y_ZT9ICgp7AD#K$i2~o; +z%2RDyD$}34&frbFc{=M6xU$3a6^8e+!>K-urgiAb&uV|3e +zeS6%ue%B$5mfFc8hwlB@WBspoU)&+d76Z>)@Gw +zS5vy<(yDfYYqI4N`&Suw)lczg+3@}2&cJfc&vtvaSV_5UH>kNFZu_?U+Ui2=$eXzEr?Zs3RL6W7fp2azB^FBoma;lH2sAv`I>bXwBN`9gBD6mwcE)SaaH +z124I>7`&fiah=0ArujaT_JVTdz4H10e^qgGpW`X~6scU^@ndVPk61_WS*ed-7qKRO +z+}$i`{GhvzHSyz&snVApzBU(YIhx{_=d*YHMxGW;9oIaco%+w`i?tkm7RhC>Y|Xpv +zpGq|CPdm(*l;O`C*J%kavcsJcp?*Ekmr-CI=w0KOI?QJ47cPh +za?X*Nw*Ck2y!@J?;In??E9aXkyJqOWU&NZ26>(=l*^X@-XRmoi$DaFN^EE=EI&Q{V65jfgD=g)aPvL!JL!%Q;ygDGb$nNq*|>%X$7h +zEB7Iu!h+Bz52NOMu#n_1c7N~Kedy7aeN1S+|)z;_7au>`GQo{xzB}8>gzw1tDeS8q+l(dbYA+lAmV$-eG5cI%4wg9}HCgV4C`9I{9>a`B3~DbM +z@3KMYqk@7nVi^oP`QI=>%t;bwfavq$WeV$bb&p~ch +zvEATNmC(gJV+s2=hGiB~2UTnh++7lW3*Y$cSp~8Np=+51$W(M)WemYG2UKh~SST?; +z9Q#+z*5D|k&n4#HaR*dD%r%BD8|Q+;Ve*#)Ag_S~h7V$=n7d0t86!ylrX}p#K<1Y* +z9#DGO2=U@|s0(kfLM>s2cn=g}U|+mtggDCXhVYxMulDZ!^ZENfX7d{v8Nxm-S_}*f +N44$rjF6*2UngEoe=EML1 diff --git a/components/browser_ui/styles/android/java/res/drawable/ic_chrome.xml b/components/browser_ui/styles/android/java/res/drawable/ic_chrome.xml index 41072a348f244..ef0766c75cd67 100644 @@ -4325,5 +4520,5 @@ index 41072a348f244..ef0766c75cd67 100644 + -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-disable-first-run-welcome-page.patch b/build/e_patches/Browser-disable-first-run-welcome-page.patch index 7234b1eea6f8efa9b93e213196ac1558dbcc3aa8..beec9e0689e58bd93dc383c727d75cc165d6e38d 100644 --- a/build/e_patches/Browser-disable-first-run-welcome-page.patch +++ b/build/e_patches/Browser-disable-first-run-welcome-page.patch @@ -1,35 +1,28 @@ -From 64a76316a9c7d865e689d0443ce25ef3f8c720c1 Mon Sep 17 00:00:00 2001 +From dc24b17ff4181b6938a23a05a3dee0ded54a8c11 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 26 Nov 2017 22:51:43 +0100 Subject: Browser: disable first run welcome page --- - .../org/chromium/chrome/browser/firstrun/FirstRunUtils.java | 3 --- + .../org/chromium/chrome/browser/firstrun/FirstRunUtils.java | 2 +- .../chromium/chrome/browser/firstrun/FirstRunStatus.java | 6 +++++- - 2 files changed, 5 insertions(+), 4 deletions(-) + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java -index 6a83155e04e70..fd45dda7d78c8 100644 +index 5c3ec5a1db540..a753141834e71 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java -@@ -36,15 +36,12 @@ public class FirstRunUtils { - boolean javaPrefValue = - javaPrefs.readBoolean(ChromePreferenceKeys.FIRST_RUN_CACHED_TOS_ACCEPTED, false); - boolean nativePrefValue = isFirstRunEulaAccepted(); -- boolean isFirstRunComplete = FirstRunStatus.getFirstRunFlowComplete(); -- if (javaPrefValue || nativePrefValue || isFirstRunComplete) { - if (!javaPrefValue) { - javaPrefs.writeBoolean(ChromePreferenceKeys.FIRST_RUN_CACHED_TOS_ACCEPTED, true); - } - if (!nativePrefValue) { - setEulaAccepted(); - } -- } +@@ -29,7 +29,7 @@ public class FirstRunUtils { + // Backup and restore does not restore native pref, so this needs to update it. Note that + // these prefs are slightly different, the eula is set when the ToS is accepted (early in + // the FRE), while the FRE flow is only complete at the end. +- if (FirstRunStatus.getFirstRunFlowComplete() && !isFirstRunEulaAccepted()) { ++ if (!isFirstRunEulaAccepted()) { + setEulaAccepted(); + } } - - /** diff --git a/chrome/browser/first_run/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java b/chrome/browser/first_run/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java -index d9ad00c856f6d..9a57484a9b7f8 100644 +index ae781f16eb405..5351b1d87da37 100644 --- a/chrome/browser/first_run/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java +++ b/chrome/browser/first_run/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java @@ -52,8 +52,12 @@ public class FirstRunStatus { @@ -47,5 +40,5 @@ index d9ad00c856f6d..9a57484a9b7f8 100644 /** -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Browser-disable-price-shopping-commerce-integration.patch b/build/e_patches/Browser-disable-price-shopping-commerce-integration.patch index 1b25e1fba0f9b61b6e2608737dd5ecd302aa7ba4..e3f1cf32cbb3d2f9fdfda0946759d51602613531 100644 --- a/build/e_patches/Browser-disable-price-shopping-commerce-integration.patch +++ b/build/e_patches/Browser-disable-price-shopping-commerce-integration.patch @@ -1,4 +1,4 @@ -From a4e8a2559d7e8f13111dad4cacc0afd8d8a314c0 Mon Sep 17 00:00:00 2001 +From c175f9095a45cd31533888986346a0a5c156e4dc Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 4 Oct 2023 19:36:24 +0530 Subject: Browser: disable price shopping commerce integration @@ -9,10 +9,10 @@ Subject: Browser: disable price shopping commerce integration 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -index ea52a6bcfebec..ec19a7db64a51 100644 +index 6916eddbf8144..0706ef94e4d7c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -1251,7 +1251,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -828,7 +828,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties } Profile profile = currentTab.getProfile(); @@ -21,7 +21,7 @@ index ea52a6bcfebec..ec19a7db64a51 100644 ShoppingService.ProductInfo info = null; if (service != null) { info = service.getAvailableProductInfoForUrl(currentTab.getUrl()); -@@ -1284,7 +1284,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -861,7 +861,9 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties } else { startPriceTrackingMenuItem.setVisible(true); stopPriceTrackingMenuItem.setVisible(false); @@ -31,9 +31,9 @@ index ea52a6bcfebec..ec19a7db64a51 100644 + stopPriceTrackingMenuItem.setVisible(false); } - private void updateAiMenuItemRow( + /** diff --git a/components/commerce/core/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc -index 92209b46f99f5..abcca7e722315 100644 +index ab1416392f821..ed9ad1ac4caba 100644 --- a/components/commerce/core/commerce_feature_list.cc +++ b/components/commerce/core/commerce_feature_list.cc @@ -120,7 +120,7 @@ BASE_FEATURE(kCommerceAllowLocalImages, @@ -45,7 +45,7 @@ index 92209b46f99f5..abcca7e722315 100644 BASE_FEATURE(kCommerceMerchantViewer, "CommerceMerchantViewer", -@@ -346,7 +346,7 @@ BASE_FEATURE(kShoppingPageTypesRegionLaunched, +@@ -354,7 +354,7 @@ BASE_FEATURE(kShoppingPageTypesRegionLaunched, "ShoppingPageTypesRegionLaunched", base::FEATURE_ENABLED_BY_DEFAULT); @@ -55,5 +55,5 @@ index 92209b46f99f5..abcca7e722315 100644 BASE_FEATURE(kCommerceDeveloper, "CommerceDeveloper", -- -2.34.1 +2.49.0 diff --git a/build/e_patches/Browser-disable-search-provider-logo.patch b/build/e_patches/Browser-disable-search-provider-logo.patch index f45b4ce39c4e24cb616b70e46bd88675be9cdfc0..f8b08f101e7cc74f69373285dbb37de1c857ac54 100644 --- a/build/e_patches/Browser-disable-search-provider-logo.patch +++ b/build/e_patches/Browser-disable-search-provider-logo.patch @@ -1,4 +1,4 @@ -From 5cec55e2b5ec8d34456b30fe3149c088e290fe8e Mon Sep 17 00:00:00 2001 +From 208450667f83f7bdd898368426c446033c694c63 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 17 Jun 2019 12:03:52 -0400 Subject: Browser: disable search provider logo @@ -8,10 +8,10 @@ Subject: Browser: disable search provider logo 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc -index 4d5fc91d347ff..b50533bbe332b 100644 +index 4c485e580a736..62ba25efeef7a 100644 --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc -@@ -184,28 +184,7 @@ jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( +@@ -183,28 +183,7 @@ jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( jboolean TemplateUrlServiceAndroid::DoesDefaultSearchEngineHaveLogo( JNIEnv* env, const JavaParamRef& obj) { @@ -42,5 +42,5 @@ index 4d5fc91d347ff..b50533bbe332b 100644 jboolean TemplateUrlServiceAndroid::IsDefaultSearchEngineGoogle( -- -2.48.1 +2.49.0 diff --git a/build/e_patches/Change-accent-and-switch-to-match-our-palette.patch b/build/e_patches/Change-accent-and-switch-to-match-our-palette.patch index ce4ada77ce2f41baaa4eae282fb3fe7db46ed354..911945ad2deb67b3724b2fd35441232afe615316 100644 --- a/build/e_patches/Change-accent-and-switch-to-match-our-palette.patch +++ b/build/e_patches/Change-accent-and-switch-to-match-our-palette.patch @@ -1,35 +1,34 @@ -From 2e447117df26affe8e08f19a29cc8b005d445cde Mon Sep 17 00:00:00 2001 +From 2939487aef2aed1b8432b5f9fa5055f72c77d5a8 Mon Sep 17 00:00:00 2001 From: Nishith Khanna Date: Tue, 20 Feb 2024 20:35:25 +0530 Subject: Change accent and switch to match our palette --- - ...board_accessory_sheet_tab_option_toggle.xml | 2 +- - .../tab_management/TabUiThemeProvider.java | 18 ++++++------------ - .../res/layout/improved_bookmark_save_flow.xml | 2 +- - .../layout/incognito_cookie_controls_card.xml | 2 +- - .../res/layout/readaloud_toggle_switch.xml | 2 +- - .../chrome/browser/tab_ui/TabUiThemeUtils.java | 2 +- - .../fast_checkout_autofill_profile_item.xml | 2 +- - .../layout/fast_checkout_credit_card_item.xml | 2 +- - .../res/layout/fast_checkout_footer_item.xml | 2 +- - .../browser/omnibox/UrlBarViewBinder.java | 2 +- - .../styles/OmniboxResourceProvider.java | 2 +- - ...unt_picker_bottom_sheet_new_account_row.xml | 2 +- - components/browser_ui/styles/android/BUILD.gn | 4 ++++ - .../java/res/color/e_switch_thumb_color.xml | 5 +++++ - .../java/res/color/e_switch_track_color.xml | 6 ++++++ - .../java/res/color/text_highlight_color.xml | 2 +- - .../java/res/drawable/e_switch_thumb.xml | 9 +++++++++ - .../java/res/drawable/e_switch_track.xml | 9 +++++++++ - .../res/values/semantic_colors_dynamic.xml | 6 +++--- - .../styles/android/java/res/values/styles.xml | 4 ++++ - .../styles/android/java/res/values/themes.xml | 2 +- - .../theme/android/java/res/values/themes.xml | 10 +++++----- - .../java/res/layout/preference_switch.xml | 2 +- - .../res/layout/infobar_control_toggle.xml | 2 +- - ui/android/java/res/values/color_palette.xml | 9 +++++++-- - 25 files changed, 73 insertions(+), 37 deletions(-) + .../keyboard_accessory_sheet_tab_option_toggle.xml | 2 +- + .../tasks/tab_management/TabUiThemeProvider.java | 12 ++++-------- + .../java/res/layout/improved_bookmark_save_flow.xml | 2 +- + .../res/layout/incognito_cookie_controls_card.xml | 2 +- + .../java/res/layout/readaloud_toggle_switch.xml | 2 +- + .../layout/fast_checkout_autofill_profile_item.xml | 2 +- + .../res/layout/fast_checkout_credit_card_item.xml | 2 +- + .../java/res/layout/fast_checkout_footer_item.xml | 2 +- + .../chrome/browser/omnibox/UrlBarViewBinder.java | 2 +- + .../omnibox/styles/OmniboxResourceProvider.java | 2 +- + .../account_picker_bottom_sheet_new_account_row.xml | 2 +- + components/browser_ui/styles/android/BUILD.gn | 4 ++++ + .../android/java/res/color/e_switch_thumb_color.xml | 5 +++++ + .../android/java/res/color/e_switch_track_color.xml | 6 ++++++ + .../android/java/res/color/text_highlight_color.xml | 2 +- + .../android/java/res/drawable/e_switch_thumb.xml | 9 +++++++++ + .../android/java/res/drawable/e_switch_track.xml | 9 +++++++++ + .../java/res/values/semantic_colors_dynamic.xml | 6 +++--- + .../styles/android/java/res/values/styles.xml | 4 ++++ + .../styles/android/java/res/values/themes.xml | 2 +- + .../theme/android/java/res/values/themes.xml | 10 +++++----- + .../android/java/res/layout/preference_switch.xml | 2 +- + .../android/res/layout/infobar_control_toggle.xml | 2 +- + ui/android/java/res/values/color_palette.xml | 8 ++++++-- + 24 files changed, 69 insertions(+), 32 deletions(-) create mode 100644 components/browser_ui/styles/android/java/res/color/e_switch_thumb_color.xml create mode 100644 components/browser_ui/styles/android/java/res/color/e_switch_track_color.xml create mode 100644 components/browser_ui/styles/android/java/res/drawable/e_switch_thumb.xml @@ -49,10 +48,10 @@ index 9d1713c43e8b1..5cefd325aae52 100644 android:layout_marginStart="16dp" android:layout_width="48dp" diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java -index 9d8b39203d2ff..44f5110e1c361 100644 +index debf4ddcdeae9..9c8db127e8f06 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiThemeProvider.java -@@ -114,7 +114,7 @@ public class TabUiThemeProvider { +@@ -116,7 +116,7 @@ public class TabUiThemeProvider { context, R.color.incognito_tab_bg_selected_color); } return ColorStateList.valueOf( @@ -61,7 +60,7 @@ index 9d8b39203d2ff..44f5110e1c361 100644 } /** -@@ -166,9 +166,7 @@ public class TabUiThemeProvider { +@@ -168,9 +168,7 @@ public class TabUiThemeProvider { } else { if (isSelected) { @ColorInt @@ -72,20 +71,7 @@ index 9d8b39203d2ff..44f5110e1c361 100644 int alpha = context.getResources() .getInteger( -@@ -216,10 +214,8 @@ public class TabUiThemeProvider { - ? R.color.incognito_tab_grid_dialog_ungroup_bar_bg_hovered_color - : R.color.incognito_tab_grid_dialog_background_color); - } else { -- return MaterialColors.getColor( -- context, -- isTabHovered ? org.chromium.chrome.R.attr.colorPrimary : R.attr.colorSurface, -- TAG); -+ return isTabHovered ? context.getColor(R.color.default_control_color_active_baseline) -+ : MaterialColors.getColor(context, R.attr.colorSurface, TAG); - } - } - -@@ -231,10 +227,8 @@ public class TabUiThemeProvider { +@@ -239,10 +237,8 @@ public class TabUiThemeProvider { ? R.color.incognito_tab_grid_dialog_ungroup_bar_text_hovered_color : R.color.incognito_tab_grid_dialog_ungroup_bar_text_color); } else { @@ -112,7 +98,7 @@ index 8b83198cdfae7..3c883d9e4aded 100644 app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" diff --git a/chrome/android/java/res/layout/incognito_cookie_controls_card.xml b/chrome/android/java/res/layout/incognito_cookie_controls_card.xml -index 9efaf7fdd684b..750bff260cbef 100644 +index 0610eab74ac2c..68e862d7e0c19 100644 --- a/chrome/android/java/res/layout/incognito_cookie_controls_card.xml +++ b/chrome/android/java/res/layout/incognito_cookie_controls_card.xml @@ -26,7 +26,7 @@ found in the LICENSE file. @@ -137,24 +123,11 @@ index e980248bb75e2..59bf07c11172c 100644 xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toggle_switch" android:layout_width="wrap_content" -diff --git a/chrome/browser/tab_ui/android/java/src/org/chromium/chrome/browser/tab_ui/TabUiThemeUtils.java b/chrome/browser/tab_ui/android/java/src/org/chromium/chrome/browser/tab_ui/TabUiThemeUtils.java -index 80b7b8611405d..c948629ab0bfd 100644 ---- a/chrome/browser/tab_ui/android/java/src/org/chromium/chrome/browser/tab_ui/TabUiThemeUtils.java -+++ b/chrome/browser/tab_ui/android/java/src/org/chromium/chrome/browser/tab_ui/TabUiThemeUtils.java -@@ -130,7 +130,7 @@ public class TabUiThemeUtils { - @ColorInt - int colorInt = - isSelected -- ? MaterialColors.getColor(context, R.attr.colorPrimary, TAG) -+ ? context.getColor(R.color.default_control_color_active_baseline) - : new ElevationOverlayProvider(context) - .compositeOverlayWithThemeSurfaceColorIfNeeded(tabElevation); - return colorInt; diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_autofill_profile_item.xml b/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_autofill_profile_item.xml -index 3a1e173d18087..7cc57a67dba9f 100644 +index 8521910dd154b..e7fe84b68c599 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_autofill_profile_item.xml +++ b/chrome/browser/ui/android/fast_checkout/internal/java/res/layout/fast_checkout_autofill_profile_item.xml -@@ -81,6 +81,6 @@ found in the LICENSE file. +@@ -87,6 +87,6 @@ found in the LICENSE file. android:layout_marginEnd="@dimen/fast_checkout_detail_sheet_selected_icon_margin_end" android:layout_gravity="center_vertical" android:contentDescription="@null" @@ -185,10 +158,10 @@ index ecc6bc6b9b150..175082479e551 100644 - app:drawableTint="?attr/colorPrimary" /> + app:drawableTint="@color/default_control_color_active_baseline" /> diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarViewBinder.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarViewBinder.java -index 141a674ec162e..86da486c4a949 100644 +index 39452da8d56e1..8d860982c1a5b 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarViewBinder.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarViewBinder.java -@@ -144,7 +144,7 @@ class UrlBarViewBinder { +@@ -167,7 +167,7 @@ class UrlBarViewBinder { final int color = useIncognitoColors ? view.getContext().getColor(R.color.default_control_color_active_dark) @@ -198,10 +171,10 @@ index 141a674ec162e..86da486c4a949 100644 textSelectHandle.mutate().setTint(color); textSelectHandleLeft.mutate().setTint(color); diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/styles/OmniboxResourceProvider.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/styles/OmniboxResourceProvider.java -index c9fea8e3cbb84..c52583ee654e3 100644 +index e54b751094641..9d8409152c4c1 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/styles/OmniboxResourceProvider.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/styles/OmniboxResourceProvider.java -@@ -355,7 +355,7 @@ public class OmniboxResourceProvider { +@@ -371,7 +371,7 @@ public class OmniboxResourceProvider { if (brandedColorScheme == BrandedColorScheme.INCOGNITO) { return context.getColor(R.color.locationbar_status_preview_color_incognito); } @@ -221,19 +194,19 @@ index 56a1aac203baa..40a9798da1323 100644 - app:drawableTint="?attr/colorPrimary" /> + app:drawableTint="@color/default_control_color_active_baseline" /> diff --git a/components/browser_ui/styles/android/BUILD.gn b/components/browser_ui/styles/android/BUILD.gn -index be538b0b26b4c..a0fd551143424 100644 +index 8ca3232e23313..731615ffb2486 100644 --- a/components/browser_ui/styles/android/BUILD.gn +++ b/components/browser_ui/styles/android/BUILD.gn -@@ -60,6 +60,8 @@ android_resources("java_resources") { +@@ -69,6 +69,8 @@ android_resources("java_resources") { + "java/res/color/text_button_ripple_color_list.xml", "java/res/color/text_highlight_color.xml", - "java/res/color/toolbar_button_highlight_color.xml", "java/res/color/toolbar_icon_unfocused_activity_tint_list.xml", + "java/res/color/e_switch_thumb_color.xml", + "java/res/color/e_switch_track_color.xml", "java/res/drawable-hdpi/btn_star_filled.png", "java/res/drawable-hdpi/ic_delete_white_24dp.png", "java/res/drawable-hdpi/ic_edit_24dp.png", -@@ -239,6 +241,8 @@ android_resources("java_resources") { +@@ -247,6 +249,8 @@ android_resources("java_resources") { "java/res/drawable/smartphone_black_24dp.xml", "java/res/drawable/star_outline_24dp.xml", "java/res/drawable/toolbar_hairline.xml", @@ -307,10 +280,10 @@ index 0000000000000..f5b1eed6f2e6f + + diff --git a/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml b/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml -index 3355579948d4d..c77354a73b353 100644 +index 8e1bff0e66c29..85af0fb69c95b 100644 --- a/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml +++ b/components/browser_ui/styles/android/java/res/values/semantic_colors_dynamic.xml -@@ -9,18 +9,18 @@ found in the LICENSE file. +@@ -10,18 +10,18 @@ found in the LICENSE file. ?attr/colorSurface ?attr/colorSurfaceInverse @@ -333,7 +306,7 @@ index 3355579948d4d..c77354a73b353 100644 ?attr/colorOnPrimaryContainer ?attr/colorOnSecondaryContainer diff --git a/components/browser_ui/styles/android/java/res/values/styles.xml b/components/browser_ui/styles/android/java/res/values/styles.xml -index 02585125cdd61..ef97cec350f25 100644 +index fb0202a423d86..57316b90496dd 100644 --- a/components/browser_ui/styles/android/java/res/values/styles.xml +++ b/components/browser_ui/styles/android/java/res/values/styles.xml @@ -20,9 +20,13 @@ found in the LICENSE file. @@ -351,7 +324,7 @@ index 02585125cdd61..ef97cec350f25 100644