diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 91f4af0e4e257b26f7f35ec67f9017f3b5466341..dda09ffee1a935e2fb9f8407f5ce216429e1bef4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,13 +4,28 @@ about: Create a Bromite bug report --- + + ### Bromite version -Version: `76.0...` +Version: `83.0...` Arch: `arm` or `arm64` or `x86` Android version: (example: `9.0`) Device model: (example: `SM-G960UZKABST`) +### Flags + +These are the flags changed under `chrome://flags`: + + + ### Is this bug about the SystemWebView? Yes/No @@ -27,6 +42,9 @@ Please pick the same version of Chromium as Bromite from here: https://github.co If the bug is reproducible then it might be a configuration issue or an upstream bug. Upstream bugs can be reported on the [Chromium issue tracker](https://bugs.chromium.org/p/chromium/issues/list) and do not forget to read [Chromium project bug reporting guidelines](https://www.chromium.org/for-testers/bug-reporting-guidelines) first. --> +### Allow ads for the site; is the bug caused by the adblocker? +Yes/No + ### Is the bug a crash? diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 3c732ec9dbcad08322cd965ad1f13b17b7c5a316..8540ae0a1c687150e052536d5a2a4ea814107ea6 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,6 +4,18 @@ about: Suggest a privacy-related idea for this project --- + + + + ### Is your feature request related to privacy? diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b8f019897dd37afcedf3140f69239657d8b9d539..b27d54123fd109bb854a3bd959fb8a417a3aae98 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -50,8 +50,8 @@ build-bromite-arm: - gclient runhooks - echo ">> [$(date)] Build for arm" - gn gen --args="$(cat ${CI_PROJECT_DIR}/build/GN_ARGS) target_cpu=\"arm\" " out/${CI_JOB_ID}_arm - - autoninja -C out/${CI_JOB_ID}_arm chrome_modern_public_apk system_webview_apk - - cp out/${CI_JOB_ID}_arm/apks/ChromeModernPublic.apk ${CI_PROJECT_DIR}/apks/ChromeModernPublic_arm.apk + - autoninja -C out/${CI_JOB_ID}_arm chrome_public_apk system_webview_apk + - cp out/${CI_JOB_ID}_arm/apks/ChromePublic.apk ${CI_PROJECT_DIR}/apks/ChromePublic_arm.apk - cp out/${CI_JOB_ID}_arm/apks/SystemWebView.apk ${CI_PROJECT_DIR}/apks/SystemWebView_arm.apk - echo ">> [$(date)] Clean" - git reset --hard && git clean -xfdf @@ -85,8 +85,8 @@ build-bromite-arm64: - gclient runhooks - echo ">> [$(date)] Build for arm64" - gn gen --args="$(cat ${CI_PROJECT_DIR}/build/GN_ARGS) target_cpu=\"arm64\" " out/${CI_JOB_ID}_arm64 - - autoninja -C out/${CI_JOB_ID}_arm64 chrome_modern_public_apk system_webview_apk - - cp out/${CI_JOB_ID}_arm64/apks/ChromeModernPublic.apk ${CI_PROJECT_DIR}/apks/ChromeModernPublic_arm64.apk + - autoninja -C out/${CI_JOB_ID}_arm64 chrome_public_apk system_webview_apk + - cp out/${CI_JOB_ID}_arm64/apks/ChromePublic.apk ${CI_PROJECT_DIR}/apks/ChromePublic_arm64.apk - cp out/${CI_JOB_ID}_arm64/apks/SystemWebView.apk ${CI_PROJECT_DIR}/apks/SystemWebView_arm64.apk - echo ">> [$(date)] Clean" - git reset --hard && git clean -xfdf diff --git a/CHANGELOG.md b/CHANGELOG.md index 24b2821f26fe226ee0ee1571307fbc56749efab7..e6f70f0d92a55d0afe452cb61cdfbe865645f2f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,197 @@ +# 89.0.4389.100 +* enable AImageReader by default (fixes https://github.com/bromite/bromite/issues/1005) +* fix missing flag for AImageReader +* move incognito snapshots flag to proper section (fixes https://github.com/bromite/bromite/issues/1006) +* add missing icon for exit menu +* implement SAF for bookmarks export functionality (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/831) + +# 89.0.4389.92 +* updated zh_CN translations (thanks to @zhmars, https://github.com/bromite/bromite/pull/1000) +* introduce Alt+D hotkey to focus address bar (fixes https://github.com/bromite/bromite/issues/979) +* use 64-bit ABI for webview processes (fixes https://github.com/bromite/bromite/issues/997) +* use dedicated folder for bookmark all tabs +* fix Javascript and cookies permissions missing (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/990) +* fix missing enable save data header flag (fixes https://github.com/bromite/bromite/issues/989) +* fix menu items not properly displayed with tab overflow menu regroup (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/963) + +# 89.0.4389.78 +* make all favicon requests on-demand +* restored older icon for view source menu item +* prevent adblock filters update check on app start (fixes https://github.com/bromite/bromite/issues/967) +* removed UI for adblock filters (fixes https://github.com/bromite/bromite/issues/941) +* dropped patch for swapped favicons bug +* dropped patch to enable reduced-referrer-granularity by default (already present upstream) +* dropped password reuse detection patch +* dropped UA customization patch +* enabled PartitionExpectCTStateByNetworkIsolationKey and PartitionDomainReliabilityByNetworkIsolationKey (fixes https://github.com/bromite/bromite/issues/985) + +# 88.0.4324.207 +* add flag for save-data-header +* add option to force tablet UI +* fix bug with adblock filters not being downloaded correctly (fixes https://github.com/bromite/bromite/issues/960) +* move up bookmark all tabs menu item (fixes https://github.com/bromite/bromite/issues/943) +* fix icons for exit and view source menu items + +# 88.0.4324.187 +* fix exit menu item not working in tablet mode +* add menu item to bookmark all tabs (fixes https://github.com/bromite/bromite/issues/570) +* enable app overflow menu icons by default +* UI for adblock filters (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/811) +* dropped patch to not permit user-installed certificates +* ignore enterprise policies for secure DNS (fixes https://github.com/bromite/bromite/issues/832) + +# 88.0.4324.185 +* fix favicons fallback search (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/788) +* fix potential DIAL crash when network state changes (thanks to @Ahrotahn) +* fix crash when opening links in incognito-only mode (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/899) +* disallow empty custom user agent (thanks to @uazo) + +# 88.0.4324.149 +* fix proxy PAC URL option not working (fixes https://github.com/bromite/bromite/issues/908) +* store proxy configuration in LocalState instead of Profile (thanks to @uazo) +* fix toggle for reversing the meaning of bypass rules (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/884) +* do not permit user-installed certificates + +# 88.0.4324.141 +* fix bookmarks not opening (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/891) +* fix proxy page not loading (fixes https://github.com/bromite/bromite/issues/890) + +# 88.0.4324.95 +* fix broken recent tabs behaviour (fixes https://github.com/bromite/bromite/issues/886) +* re-introduce flags for number of raster threads (fixes https://github.com/bromite/bromite/issues/875) +* avoid initializing histogram data for the WebView (https://github.com/bromite/bromite/issues/873) +* dropped patch for manifest changes for Q/R (already present upstream) +* fix check for HTML extension in bookmark import dialog + +# 87.0.4280.131 +* enable all network isolation features (fixes https://github.com/bromite/bromite/issues/836) +* disable unified autoplay feature (fixes https://github.com/bromite/bromite/issues/804) + +# 87.0.4280.106 +* enable SplitCacheByNetworkIsolationKey (fixes https://github.com/bromite/bromite/issues/836) +* fix random timezone option (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/828) +* disable autofill server communication by default +* ask permission to play protected media by default +* disable SystemWebView variations support + +# 87.0.4280.81 +* fix text fragment not disabled by default, unexpire flag (fixes https://github.com/bromite/bromite/issues/803) +* turn AImageReader off by default on ARM64 (fixes https://github.com/bromite/bromite/issues/814) +* fix issue with global autoplay settings (thanks to @uazo, https://github.com/bromite/bromite/pull/825) +* fix issues with user agent customization (thanks to @uazo, https://github.com/bromite/bromite/pull/823) +* updated zh_CN translations (thanks to @zhmars, https://github.com/bromite/bromite/pull/821) + +# 87.0.4280.68 +* user agent customization (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/798) +* fix for intent handling for local apps on Android 11 (https://github.com/bromite/bromite/pull/816) + +# 87.0.4280.67 + +# 86.0.4240.194 +* fix native pages displaying incorrectly with the sticky desktop mode (thanks to @uazo) +* re-introduce simplified NTP (fixes https://github.com/bromite/bromite/issues/701) +* re-introduce site settings to block autoplay (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/791) +* fix Omnibox flag not working (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/789) + +# 86.0.4240.181 +* allow sticky desktop mode for all tabs (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/780) + +# 86.0.4240.112 +* fix crash in new overflow menu (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/771) + +# 86.0.4240.99 + +# 86.0.4240.92 +* upstream fix for video playback audio issue (fixes https://github.com/bromite/bromite/issues/755) +* fix order of entries in privacy settings (fixes https://github.com/bromite/bromite/issues/758) + +# 86.0.4240.73 +* re-introduce ARM64 AImageReader mitigations (fixes https://github.com/bromite/bromite/issues/766) +* re-introduce menu items for autocomplete, autofill assistant and contextual search (fixes https://github.com/bromite/bromite/issues/763) + +# 86.0.4240.70 +* fixed crash on unused menu item tap (fixes https://github.com/bromite/bromite/issues/760) +* fixed issue on new installations without DoH configuration (fixes https://github.com/bromite/bromite/issues/761) + +# 86.0.4240.66 +* switch to upstream UI for DoH URL customization +* remove weblayer dependency on Play Services +* build fixes for password service +* removed obsolete patch to kill Translate +* removed patch to revert unified consent code +* removed patch for dav1d library +* removed patch for improved cookie controls defaults +* removed patches for ARM64 AImageReader issues + +# 85.0.4183.114 + +# 85.0.4183.110 +* hardening against incognito mode detection +* fix background playback issue (fixes https://github.com/bromite/bromite/issues/734) + +# 85.0.4183.94 +* disable the DIAL repeating discovery +* removed patch for session-only cookies support +* add timezone customization patch (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/331) +* fixed bug happening when configuring proxies in incognito mode (thanks to @uazo) + +# 85.0.4183.86 +* fix LocationBarPhone app crash at startup (fixes https://github.com/bromite/bromite/issues/565) + +# 85.0.4183.84 +* fix crash in About page (fixes https://github.com/bromite/bromite/issues/710) +* fix adding more than one proxy (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/679) +* fix system proxy configuration (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/377) + +# 85.0.4183.82 +* fixes bookmark button not working with always-incognito (fixes https://github.com/bromite/bromite/issues/654) +* disable scroll-to-text-fragment +* remove NTP blocklisted URLs when adding an URL as bookmark +* removed duet flags +* unexpire `#darken-websites-checkbox-in-themes-setting` flag +* rollback dav1d upgrade which breaks x86 + +# 84.0.4147.132 +* fix exit menu item not always working (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/673) +* session-only cookies site settings option (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/142) +* add setting to enable history on incognito mode (thanks to @uazo) +* removed old non-working site settings patches + +# 84.0.4147.121 +* removed Qwant search engine +* fixed zh_CN translations +* added patch to not embed non-free unrar library (fixes https://github.com/bromite/bromite/issues/674) +* enable improved cookie controls by default + +# 84.0.4147.119 +* update zh_CN translations +* disable CORS RFC1918 (fixes https://github.com/bromite/bromite/issues/664) +* restore duet flags (fixes https://github.com/bromite/bromite/issues/667) + +# 84.0.4147.113 +* block gateway attacks via websockets (fixes https://github.com/bromite/bromite/issues/590) +* enable prefetch-privacy-changes by default (fixes https://github.com/bromite/bromite/issues/659) +* enable reduced-referrer-granularity by default (fixes https://github.com/bromite/bromite/issues/659) + +# 84.0.4147.106 +* fixed bug with Javascript site settings not showing +* add exit menu item to overview menu (fixes https://github.com/bromite/bromite/issues/619) + +# 84.0.4147.95 +* show warnings for TLSv1.0/TLSv1.1 connections (fixes https://github.com/bromite/bromite/issues/645) +* fix bug with unconfigured DoH (fixes https://github.com/bromite/bromite/issues/646) + +# 84.0.4147.90 +* added menu item to view source of current page +* fixed dialog for SSL/TLS errors (fixes https://github.com/bromite/bromite/issues/638) +* build with feeds support due to upstream build flags combination bugs + +# 83.0.4103.119 +* restored non-CFI builds for x86 + +# 83.0.4103.101 +* enable HEVC and Dolby Vision + # 83.0.4103.93 * fix undesired replacement for search engines (fixes https://github.com/bromite/bromite/issues/595) * fix resume flag not visible @@ -20,6 +214,7 @@ * drop patch for DoH minimum timeout (upstream also implemented it) * dropped patch for removal of support of CCT dynamic modules (upstream also removed it) * removed upstream patch for SD card not found issue (upstream merged it) +* enable reporting because of COEP # 81.0.4044.127 * fix always-incognito crashes (https://github.com/bromite/bromite/issues/135 and https://github.com/bromite/bromite/pull/529) diff --git a/FAQ.md b/FAQ.md index ece13e2a181069b019ac1acbcf02d1cc8d71cd0e..f92b47019c5e0bc36ffd7816038211b1c0f96aa0 100644 --- a/FAQ.md +++ b/FAQ.md @@ -71,3 +71,12 @@ when websites use the [Push API](https://w3c.github.io/push-api/); this will not ## Can PWAs be installed? PWAs are only supported as home shortcuts; WebAPKs will not work because they are generated server-side on googleapis.com (which is not allowed in Bromite). + +## Does Bromite support the Android autofill framework? + +No; the only autofill available in Chromium browsers requires integration with the Play Store binary blobs. +Some apps use accessibility services as a workaround. + +## Does Bromite support casting media content? + +No; this would require Play Store binary blobs. diff --git a/README.md b/README.md index 6278589c0c2de7f084bc759f9d4207639e48d219..8c8050e70fd55586495fd9de55d72279abe71c7c 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Bromite is a [Chromium](https://www.chromium.org/Home) fork with support for ad blocking and enhanced privacy. -Bromite is only available for Android v4.4 and above. +Bromite is only available for Android Lollipop (v5.0, API level 21) and above. -downloads on Github +Downloads on Github For the Frequently Asked Questions see [F.A.Q.](./FAQ.md). @@ -95,7 +95,7 @@ No; Bromite will support extensions only if upstream (Chromium) does, or similar # Features -* customizable adblock filters via user-provided URL +* customizable adblock filters via user-provided URL (see https://www.bromite.org/custom-filters) * remove click-tracking and AMP from search results * DNS-over-HTTPS support with any valid IETF DoH endpoint * always-incognito mode @@ -106,18 +106,22 @@ No; Bromite will support extensions only if upstream (Chromium) does, or similar * use [CFI](https://en.wikipedia.org/wiki/Control-flow_integrity) on all architectures except x86 * disable media router and remoting by default * disable dynamic module loading +* show warnings for TLSv1.0/TLSv1.1 pages * enable site-per-process isolation for all devices with memory > 1GB * completely remove safe browsing and other privacy-unfriendly features * [proxy configuration page](https://github.com/bromite/bromite/wiki/ProxyConfiguration) with PAC and custom proxy lists support -* [DuckDuckGo](https://duckduckgo.com/) and [Qwant](https://www.qwant.com/) search engines available by default * settings to disable custom intents and clear session on exit * flags to toggle anti-fingerprinting mitigations for canvas, audio, client rects, webGL and sensor APIs (see full list below for all the new flags) * use frozen User-Agent to conceal real model and browser version * privacy enhancement patches from [Iridium](https://iridiumbrowser.de/), [Inox patchset](https://github.com/gcarq/inox-patchset), [Brave](https://brave.com/) and [ungoogled-chromium](https://github.com/Eloston/ungoogled-chromium) projects * security enhancement patches from [GrapheneOS](https://github.com/GrapheneOS) project +* disable scroll-to-text-fragment +* reduced referer granularity +* block gateway attacks via websockets ## Features not related to privacy * import/export bookmarks +* bookmark all tabs from tabs regroup menu * flag to allow screenshots of incognito tabs * allow playing videos in background tabs and disable pause on switching tabs * all codecs included (proprietary, open H.264 etc.) @@ -128,6 +132,13 @@ No; Bromite will support extensions only if upstream (Chromium) does, or similar * allow changing default download storage location * do not ignore save prompt for users without SD cards * disable articles and increase number of icons on new tab page +* adding an URL as bookmark will clear its blocked status for the NTP tiles +* history support in incognito mode +* view source of pages +* timezone customization +* sticky desktop mode setting +* disable video autoplay by default +* mobile/desktop user agent customization You can inspect all functionality/privacy changes by reading the [patches](https://github.com/bromite/bromite/tree/master/build/patches) and/or the [CHANGELOG](./CHANGELOG.md). @@ -138,15 +149,21 @@ Flags which have been retired from upstream Chromium but are still available in * `#enable-horizontal-tab-switcher` * `#pull-to-refresh` * `#enable-search-ready-omnibox` +* `#darken-websites-checkbox-in-themes-setting` +* `#simplified-ntp` +* `#enable-text-fragment-anchor` +* `#num-raster-threads` New flags: +* `#fingerprinting-canvas-image-data-noise`, `#fingerprinting-client-rects-noise` and `#fingerprinting-canvas-measuretext-noise` * `#enable-incognito-snapshots-in-android-recents` * `#max-connections-per-host` * `#resume-background-video` * `#ipv6-probing` * `#disable-webgl` * `#enable-device-motion` and `#enable-device-orientation` +* `#show-legacy-tls-warnings` # Privacy limitations @@ -199,6 +216,14 @@ See upstream documentation: https://github.com/chromium/chromium/blob/master/com Bromite uses an unindexed filter file, which is periodically published at https://github.com/bromite/filters +# Contributing + +Please submit issues following the issue template; beware that GitHub does not display the templates from mobile. + +Patches are welcome and accepted if they match the project goals. + +For any usage or development discussion please use GitHub Discussions: https://github.com/bromite/bromite/discussions + # Credits * [Chromium project](https://www.chromium.org/Home) and developers @@ -207,7 +232,7 @@ Bromite uses an unindexed filter file, which is periodically published at https: * [ungoogled-chromium-android](https://github.com/ungoogled-software/ungoogled-chromium-android) for some patches * [GrapheneOS](https://github.com/GrapheneOS) for some security patches * [Inox patchset](https://github.com/gcarq/inox-patchset) for some patches (via ungoogled-chromium) -* [Brave Browser](https://github.com/brave/browser-android-tabs) for some patches +* [Brave Browser](https://github.com/brave/brave-core) for some patches * [Vadim Pleshkov](http://vadimpleshkov.me/) for Bromite's logo # Filters credits @@ -216,6 +241,8 @@ Bromite uses an unindexed filter file, which is periodically published at https: * [uBlock Origin](https://github.com/uBlockOrigin) * [Peter Lowe's Ad and tracking server list](https://pgl.yoyo.org/adservers/) +The URLs of the lists used are available at: https://github.com/bromite/filters/blob/master/lists.txt + # License The patches published as part of the Bromite project are released under [GNU GPL v3](./LICENSE). diff --git a/build/GN_ARGS b/build/GN_ARGS index 8304c6ca2a8e5861079e88b5a0c9f862b6dbfdcd..a33a7ab31664a0b08e1e6f04f018420b3492d3b1 100644 --- a/build/GN_ARGS +++ b/build/GN_ARGS @@ -1,5 +1,6 @@ android_channel="stable" blink_symbol_level=1 +chrome_pgo_phase=0 dcheck_always_on=false debuggable_apks=false dfmify_dev_ui=false @@ -8,31 +9,34 @@ disable_autofill_assistant_dfm=true disable_tab_ui_dfm=true enable_av1_decoder=true enable_dav1d_decoder=true -enable_feed_in_chrome=false enable_gvr_services=false enable_hangout_services_extension=false enable_iterator_debugging=false enable_mdns=false -enable_mse_mpeg2ts_stream_parser=true ffmpeg_branding="Chrome" proprietary_codecs=true +enable_mse_mpeg2ts_stream_parser=true enable_nacl=false enable_nacl_nonsfi=false +enable_platform_dolby_vision=true +enable_platform_hevc=true enable_remoting=false enable_reporting=true -enable_resource_whitelist_generation=false enable_vr=false +exclude_unwind_tables=false +ffmpeg_branding="Chrome" fieldtrial_testing_like_official_build=true icu_use_data_file=true -is_cfi=false is_component_build=false is_debug=false is_official_build=true +proprietary_codecs=true rtc_build_examples=false safe_browsing_mode=0 symbol_level=1 target_os="android" use_debug_fission=true use_errorprone_java_compiler=false -use_jumbo_build=false +use_gnome_keyring=false use_official_google_api_keys=false -use_openh264=true chrome_pgo_phase=0 +use_rtti=false use_sysroot=false +webview_includes_weblayer=false diff --git a/build/RELEASE b/build/RELEASE index ee67bcb5c837a2961b1e9aa2fa2bda466f1e7eff..614a4eff6727c372ebb13c7f26fa9d6d162f350d 100644 --- a/build/RELEASE +++ b/build/RELEASE @@ -1 +1 @@ -83.0.4103.93 +89.0.4389.100 diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index 2d647562b44576ecb1cc736fa2068bbfbf21f319..9e81db24e6feae6bc57e122913579ae31690ff07 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -1,12 +1,10 @@ Disable-third-party-cookies-by-default.patch -Revert-Remove-pre-unified-consent-code.patch Restore-classic-new-tab-page.patch Always-use-new-tab-page-for-default-home-page.patch Always-allow-partner-customisation.patch battery_status_service-disable-more-privacy-nightmares.patch Battery-API-return-nothing.patch updater-disable-updater-pings.patch -prefs-only-keep-cookies-until-exit.patch Remove-EV-certificates.patch promo-disable-Google-promotion-fetching.patch Disable-omission-of-URL-elements-in-Omnibox.patch @@ -37,7 +35,6 @@ Remove-signin-and-data-saver-integrations.patch Hide-passwords-manager-link.patch Disable-Omaha-update-checks.patch Disable-update-scheduler.patch -Fix-crash-when-accessing-page-info-site-settings.patch openH264-enable-ARM-ARM64-optimizations.patch Switch-to-fstack-protector-strong.patch Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch @@ -50,14 +47,13 @@ Open-YouTube-links-in-Bromite.patch Add-exit-menu-item.patch Remove-help-menu-item.patch AudioBuffer-AnalyserNode-fp-mitigations.patch -Multiple-fingerprinting-mitigations-for-canvas-text-and-client-rectangles.patch -Add-flags-to-disable-device-motion-and-orientation-APIs.patch +Multiple-fingerprinting-mitigations.patch +Add-flags-to-disable-device-motion-orientation-APIs.patch Disable-metrics-on-all-I-O-threads.patch Always-respect-async-dns-flag-regardless-of-SDK-version.patch Add-flag-to-configure-maximum-connections-per-host.patch -Add-site-settings-option-for-session-only-cookies.patch +Do-not-ignore-download-location-prompt-setting.patch Add-bookmark-import-export-actions.patch -Disable-promos-displayed-in-bookmarks-manager.patch Add-an-always-incognito-mode.patch Add-custom-tab-intents-privacy-option.patch Add-option-to-not-persist-tabs-across-sessions.patch @@ -72,21 +68,10 @@ autofill-disable-autofill-download-manager.patch first_run-deactivate-autoupdate-globally.patch translate-disable-fetching-of-translate-languages-from-server.patch kill-TOS-and-metrics-opt-out.patch -kill-Translate.patch kill-Vision.patch kill-Location-fall-back-to-system.patch kill-Auth.patch -Remove-dependency-on-com.google.android.gms.auth.patch -kill-GCM.patch -Remove-dependency-on-com.google.android.gcm.patch -Remove-dependency-on-com.google.android.gms.gcm.patch -Remove-dependency-on-com.google.android.play.patch -Remove-dependency-on-vision-clearcut-and-phenotype.patch -Remove-dependency-on-flags-places-and-stats.patch -Remove-dependency-on-fido-iid-instantapps-and-location.patch -Remove-dependency-on-com.google.android.gms.cast.patch -Remove-dependency-on-auth-signin-dynamic-and-tasks.patch -Remove-google_services_gcm.patch +Remove-binary-blob-integrations.patch Remove-SMS-integration.patch Do-not-compile-QR-code-sharing.patch Allow-website-sign-in-without-account-sign-in.patch @@ -94,15 +79,14 @@ Offer-builtin-autocomplete-for-chrome-flags.patch Do-not-grant-notifications-to-default-search-engine.patch Add-flag-to-disable-IPv6-probes.patch Add-a-proxy-configuration-page.patch -Do-not-ignore-download-location-prompt-setting.patch Disable-previews-by-default.patch Use-4-tile-rows-never-show-logo.patch Disable-metrics-collection-for-NTP-tiles.patch -Enable-site-per-process-isolation-for-devices-with-enough-memory.patch +Enable-SPPI-for-devices-with-enough-memory.patch +Use-64-bit-WebView-processes.patch prefs-disable-signinallowed-by-default.patch prefs-always-prompt-for-download-directory-by-default.patch Disable-offline-pages-in-the-downloads-home-to-be-opened-in-CCT-by-default.patch -Enable-changing-default-downloads-storage-location-by-default.patch disable-payment-support-by-default.patch disable-background-sync-by-default.patch disable-sensors-access-site-setting-by-default.patch @@ -110,31 +94,56 @@ Disable-media-router-and-remoting-by-default.patch Restore-Search-Ready-Omnibox-flag.patch disable-AdsBlockedInfoBar.patch Bromite-AdBlockUpdaterService.patch -Add-option-to-configure-the-ad-blocker-filters-URL.patch Replace-DoH-probe-domain-with-RIPE-domain.patch Increase-number-of-autocomplete-matches-from-5-to-10.patch Disable-HEAD-requests-for-single-word-Omnibar-searches.patch -Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-scheme.patch Disable-some-signed-exchange-features.patch Add-flag-to-disable-WebGL.patch -Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch +DoH-secure-mode-by-default.patch Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch Revert-flags-remove-disable-pull-to-refresh-effect.patch Use-dummy-DFM-installer.patch -Disable-password-reuse-detection-on-android.patch -Allow-building-without-feed-support.patch +Disable-feeds-support-by-default.patch Disable-autofill-assistant-by-default.patch Show-site-settings-for-cookies-javascript-and-ads.patch Restore-enable-horizontal-tab-switcher-flag.patch Disable-DRM-media-origin-IDs-preprovisioning.patch Disable-smart-selection-by-default.patch Enable-user-agent-freeze-by-default.patch -show-download-prompt-again-by-default.patch disable-browser-autologin-by-default.patch -Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch -Revert-Remove-flags-to-enable-disable-AImageReader.patch -Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch -Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch +AImageReader-CFI-crash-mitigations.patch Update-i18n-zh_CN-support.patch Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch +Add-menu-item-to-view-source.patch +Enable-legacy-TLS-interstitital-warning.patch +Block-gateway-attacks-via-websockets.patch +Enable-prefetch-privacy-changes-by-default.patch +Disable-support-for-RAR-files-inspection.patch +Add-history-support-in-incognito-mode.patch +Enable-darken-websites-checkbox-in-themes.patch +Remove-blocklisted-URLs-upon-bookmark-creation.patch +Disable-the-DIAL-repeating-discovery.patch +Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-scheme.patch +Hardening-against-incognito-mode-detection.patch +Remove-weblayer-dependency-on-Play-Services.patch +Timezone-customization.patch +Move-some-account-settings-back-to-privacy-settings.patch +User-agent-customization.patch +Restore-Simplified-NTP-launch.patch +Revert-the-removal-of-an-option-to-block-autoplay.patch +Disable-text-fragments-by-default.patch +disable-WebView-variations-support.patch +disable-autofill-server-communication-by-default.patch +ask-permission-to-play-protected-media-by-default.patch +Enable-network-isolation-features.patch +Disable-unified-autoplay-feature.patch +Revert-flags-remove-num-raster-threads.patch +webview-Hard-no-to-persistent-histograms.patch +Ignore-enterprise-policies-for-secure-DNS.patch +Enable-app-overflow-menu-icons-by-default.patch +Add-menu-item-to-bookmark-all-tabs.patch +Add-flag-for-save-data-header.patch +Add-option-to-force-tablet-UI.patch +Make-all-favicon-requests-on-demand.patch +Add-Alt-D-hotkey-to-focus-address-bar.patch Automated-domain-substitution.patch diff --git a/build/chromium_patches_list.txt b/build/chromium_patches_list.txt index e3384db0fc448cfb45b40a8e5a3fb59aabbb6a6f..e24c8063bb470c54ede4811513d3047eef7b8b57 100644 --- a/build/chromium_patches_list.txt +++ b/build/chromium_patches_list.txt @@ -1,6 +1,4 @@ -Revert-Remove-pre-unified-consent-code.patch AV1-codec-support.patch Switch-to-fstack-protector-strong.patch Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch -Disable-password-reuse-detection-on-android.patch -Allow-building-without-feed-support.patch +Disable-feeds-support-by-default.patch diff --git a/build/e_patches_list.txt b/build/e_patches_list.txt index 4d1486ca68ee9c06dba61ba8802ddf251fb6b7fa..8890c1c98924647b2f4432df1f35872d393c28b8 100644 --- a/build/e_patches_list.txt +++ b/build/e_patches_list.txt @@ -12,3 +12,4 @@ e-enable-custom-tabs-by-default.patch e-Launcher-icon-updated.patch e-enable-search-suggestion.patch e-replaced-chrome-with-browser-in-strings-file.patch +e-remove-string-google-from-other-services.patch diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch new file mode 100644 index 0000000000000000000000000000000000000000..a290a25ce6522d0ae4dec6cbe9e1563f0037a451 --- /dev/null +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -0,0 +1,226 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 5 May 2020 07:22:20 +0200 +Subject: AImageReader CFI crash mitigations + +Revert "gpu/android: Remove setup for disabling AImageReader." +This reverts commit dcd5a39518246eb999f1cc63bf1ec95d93fd5b2f. + +Revert "Remove flags to enable/disable AImageReader." +This reverts commit 463fa0f2e3b9e418bc26e2c8954463f0b0f76634. + +Disable AImageReader for ARM64/P and ARM64/Q + +Restore GPU bug blacklist for AImageReader on ARM and Qualcomm CPUs + +Restore the AImageReader blacklist for ARM/ARM64/Qualcomm chipsets which causes +crashes on Android 9 and 10 (at different code locations). + +See discussions at: +* https://github.com/bromite/bromite/issues/445 +* https://github.com/bromite/bromite/issues/814 +--- + base/android/android_image_reader_compat.cc | 8 +++++++- + base/android/android_image_reader_compat.h | 4 ++++ + chrome/browser/flag-metadata.json | 2 +- + gpu/config/gpu_finch_features.cc | 5 +++++ + gpu/config/gpu_finch_features.h | 1 + + gpu/config/gpu_util.cc | 8 ++++++++ + gpu/config/gpu_workaround_list.txt | 1 + + gpu/ipc/service/gpu_init.cc | 5 +++++ + gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++- + media/base/media_switches.cc | 4 ++++ + media/base/media_switches.h | 1 + + 11 files changed, 47 insertions(+), 3 deletions(-) + +diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc +--- a/base/android/android_image_reader_compat.cc ++++ b/base/android/android_image_reader_compat.cc +@@ -23,6 +23,8 @@ + namespace base { + namespace android { + ++bool AndroidImageReader::disable_support_ = false; ++ + AndroidImageReader& AndroidImageReader::GetInstance() { + // C++11 static local variable initialization is + // thread-safe. +@@ -30,8 +32,12 @@ AndroidImageReader& AndroidImageReader::GetInstance() { + return *instance; + } + ++void AndroidImageReader::DisableSupport() { ++ disable_support_ = true; ++} ++ + bool AndroidImageReader::IsSupported() { +- return is_supported_; ++ return !disable_support_ && is_supported_; + } + + AndroidImageReader::AndroidImageReader() : is_supported_(LoadFunctions()) {} +diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h +--- a/base/android/android_image_reader_compat.h ++++ b/base/android/android_image_reader_compat.h +@@ -22,6 +22,9 @@ class BASE_EXPORT AndroidImageReader { + // Thread safe GetInstance. + static AndroidImageReader& GetInstance(); + ++ // Disable image reader support. ++ static void DisableSupport(); ++ + // Check if the image reader usage is supported. This function returns TRUE + // if android version is >=OREO, image reader support is not disabled and all + // the required functions are loaded. +@@ -59,6 +62,7 @@ class BASE_EXPORT AndroidImageReader { + jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window); + + private: ++ static bool disable_support_; + friend class base::NoDestructor; + + AndroidImageReader(); +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 +@@ -1772,7 +1772,7 @@ + { + "name": "enable-image-reader", + "owners": [ "vikassoni", "liberato" ], +- "expiry_milestone": 90 ++ "expiry_milestone": -1 + }, + { + "name": "enable-immersive-fullscreen-toolbar", +diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc +--- a/gpu/config/gpu_finch_features.cc ++++ b/gpu/config/gpu_finch_features.cc +@@ -38,6 +38,11 @@ bool FieldIsInBlocklist(const char* current_value, std::string blocklist_str) { + } // namespace + + #if defined(OS_ANDROID) ++ ++// Use android AImageReader when playing videos with MediaPlayer. ++const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + // Used to limit GL version to 2.0 for skia raster on Android. + const base::Feature kUseGles2ForOopR{"UseGles2ForOopR", + base::FEATURE_DISABLED_BY_DEFAULT}; +diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h +--- a/gpu/config/gpu_finch_features.h ++++ b/gpu/config/gpu_finch_features.h +@@ -17,6 +17,7 @@ namespace features { + // All features in alphabetical order. The features should be documented + // alongside the definition of their values in the .cc file. + #if defined(OS_ANDROID) ++GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer; + GPU_EXPORT extern const base::Feature kUseGles2ForOopR; + GPU_EXPORT extern const base::Feature kAndroidSurfaceControl; + GPU_EXPORT extern const base::Feature kAImageReader; +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 +@@ -111,6 +111,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( + #if !defined(OS_ANDROID) + return kGpuFeatureStatusDisabled; + #else ++ if (blocklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL)) ++ return kGpuFeatureStatusBlocklisted; ++ + if (!gpu_preferences.enable_android_surface_control) + return kGpuFeatureStatusDisabled; + +@@ -316,6 +319,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { + gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] = + kGpuFeatureStatusBlocklisted; + } ++ ++ if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { ++ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] = ++ kGpuFeatureStatusBlocklisted; ++ } + } + + // Estimates roughly user total disk space by counting in the drives where +diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt +--- a/gpu/config/gpu_workaround_list.txt ++++ b/gpu/config/gpu_workaround_list.txt +@@ -13,6 +13,7 @@ decode_encode_srgb_for_generatemipmap + depth_stencil_renderbuffer_resize_emulation + disable_2d_canvas_auto_flush + disable_accelerated_av1_decode ++disable_aimagereader + disable_accelerated_av1_decode_d3d11 + disable_accelerated_vp8_decode + disable_accelerated_vp8_encode +diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc +--- a/gpu/ipc/service/gpu_init.cc ++++ b/gpu/ipc/service/gpu_init.cc +@@ -477,6 +477,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, + } + } + ++ // Disable AImageReader if the workaround is enabled. ++ if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { ++ base::android::AndroidImageReader::DisableSupport(); ++ } ++ + 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 +@@ -6,6 +6,7 @@ + + #include + ++#include "base/android/android_image_reader_compat.h" + #include "base/android/scoped_hardware_buffer_fence_sync.h" + #include "base/bind.h" + #include "base/feature_list.h" +@@ -48,7 +49,15 @@ std::unique_ptr MakeCurrent( + } + + TextureOwner::Mode GetTextureOwnerMode() { +- return features::IsAImageReaderEnabled() ++ 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 && features::IsAImageReaderEnabled() && ++ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer) + ? TextureOwner::Mode::kAImageReaderInsecure + : TextureOwner::Mode::kSurfaceTextureInsecure; + } +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 +@@ -604,6 +604,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", + const base::Feature kMediaDrmPreprovisioningAtStartup{ + "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT}; + ++// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) ++const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + // Prevents using SurfaceLayer for videos. This is meant to be used by embedders + // that cannot support SurfaceLayer at the moment. + const base::Feature kDisableSurfaceLayerForVideo{ +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 +@@ -206,6 +206,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture; + MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense; + MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning; + MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup; ++MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput; + MEDIA_EXPORT extern const base::Feature kDisableSurfaceLayerForVideo; + MEDIA_EXPORT extern const base::Feature kCanPlayHls; + MEDIA_EXPORT extern const base::Feature kPictureInPictureAPI; +-- +2.17.1 + diff --git a/build/patches/AV1-codec-support.patch b/build/patches/AV1-codec-support.patch index b1cae974dc48292296a8821e18955275b5f34eba..34295a300576f9ab9e43c62ee4ed44bcffe83cb3 100644 --- a/build/patches/AV1-codec-support.patch +++ b/build/patches/AV1-codec-support.patch @@ -5,7 +5,6 @@ Subject: AV1 codec support libaom build fixes (requires -fPIC) Report AV1 as playable on Android --- - media/base/mime_util_internal.cc | 6 +++++- third_party/libaom/BUILD.gn | 6 ++++-- third_party/libaom/libaom_srcs.gni | 5 +++++ .../config/linux/arm-neon-cpu-detect/config/aom_config.asm | 2 +- @@ -20,32 +19,14 @@ Report AV1 as playable on Android .../libaom/source/config/linux/generic/config/aom_config.h | 2 +- .../libaom/source/config/linux/x64/config/aom_config.asm | 2 +- .../libaom/source/config/linux/x64/config/aom_config.h | 2 +- - 15 files changed, 26 insertions(+), 15 deletions(-) + 14 files changed, 21 insertions(+), 14 deletions(-) -diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc ---- a/media/base/mime_util_internal.cc -+++ b/media/base/mime_util_internal.cc -@@ -562,9 +562,13 @@ bool MimeUtil::IsCodecSupportedOnAndroid( - case THEORA: - return false; - -- // AV1 is not supported on Android yet. -+ // AV1 is supported on Android. - case AV1: -+#if BUILDFLAG(ENABLE_AV1_DECODER) -+ return true; -+#else - return false; -+#endif - - // ---------------------------------------------------------------------- - // The remaining codecs may be supported depending on platform abilities. diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn --- a/third_party/libaom/BUILD.gn +++ b/third_party/libaom/BUILD.gn -@@ -82,7 +82,7 @@ if (enable_libaom) { +@@ -81,7 +81,7 @@ if (enable_libaom) { + sources += aom_dsp_encoder_asm_sse2_x86_64 sources += aom_dsp_encoder_asm_ssse3_x86_64 - sources += aom_dsp_encoder_avx_asm_x86_64 } - defines = [ "CHROMIUM" ] + defines = [ "CHROMIUM", "PIC" ] @@ -73,7 +54,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni --- a/third_party/libaom/libaom_srcs.gni +++ b/third_party/libaom/libaom_srcs.gni -@@ -645,6 +645,11 @@ aom_mem_sources = [ +@@ -616,6 +616,11 @@ aom_mem_sources = [ aom_ports_asm_x86 = [ "//third_party/libaom/source/libaom/aom_ports/emms.asm" ] @@ -88,146 +69,146 @@ diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm -@@ -44,7 +44,7 @@ CONFIG_MULTITHREAD equ 1 - CONFIG_NN_V2 equ 0 +@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0 CONFIG_NORMAL_TILE_MODE equ 1 + CONFIG_OPTICAL_FLOW_API equ 0 CONFIG_OS_SUPPORT equ 1 -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 1 diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm -@@ -44,7 +44,7 @@ CONFIG_MULTITHREAD equ 1 - CONFIG_NN_V2 equ 0 +@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0 CONFIG_NORMAL_TILE_MODE equ 1 + CONFIG_OPTICAL_FLOW_API equ 0 CONFIG_OS_SUPPORT equ 1 -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h +++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/third_party/libaom/source/config/linux/arm/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/arm/config/aom_config.asm -@@ -44,7 +44,7 @@ CONFIG_MULTITHREAD equ 1 - CONFIG_NN_V2 equ 0 +@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0 CONFIG_NORMAL_TILE_MODE equ 1 + CONFIG_OPTICAL_FLOW_API equ 0 CONFIG_OS_SUPPORT equ 1 -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/third_party/libaom/source/config/linux/arm/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm/config/aom_config.h +++ b/third_party/libaom/source/config/linux/arm/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm -@@ -44,7 +44,7 @@ CONFIG_MULTITHREAD equ 1 - CONFIG_NN_V2 equ 0 +@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0 CONFIG_NORMAL_TILE_MODE equ 1 + CONFIG_OPTICAL_FLOW_API equ 0 CONFIG_OS_SUPPORT equ 1 -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/third_party/libaom/source/config/linux/arm64/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.h +++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.asm b/third_party/libaom/source/config/linux/generic/config/aom_config.asm --- a/third_party/libaom/source/config/linux/generic/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/generic/config/aom_config.asm -@@ -44,7 +44,7 @@ CONFIG_MULTITHREAD equ 1 - CONFIG_NN_V2 equ 0 +@@ -45,7 +45,7 @@ CONFIG_NN_V2 equ 0 CONFIG_NORMAL_TILE_MODE equ 1 + CONFIG_OPTICAL_FLOW_API equ 0 CONFIG_OS_SUPPORT equ 1 -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 1 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h b/third_party/libaom/source/config/linux/generic/config/aom_config.h --- a/third_party/libaom/source/config/linux/generic/config/aom_config.h +++ b/third_party/libaom/source/config/linux/generic/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/third_party/libaom/source/config/linux/x64/config/aom_config.asm --- a/third_party/libaom/source/config/linux/x64/config/aom_config.asm +++ b/third_party/libaom/source/config/linux/x64/config/aom_config.asm -@@ -34,7 +34,7 @@ - %define CONFIG_NN_V2 0 +@@ -35,7 +35,7 @@ %define CONFIG_NORMAL_TILE_MODE 1 + %define CONFIG_OPTICAL_FLOW_API 0 %define CONFIG_OS_SUPPORT 1 -%define CONFIG_PIC 0 +%define CONFIG_PIC 1 %define CONFIG_RD_DEBUG 0 - %define CONFIG_REALTIME_ONLY 0 + %define CONFIG_REALTIME_ONLY 1 %define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/third_party/libaom/source/config/linux/x64/config/aom_config.h --- a/third_party/libaom/source/config/linux/x64/config/aom_config.h +++ b/third_party/libaom/source/config/linux/x64/config/aom_config.h -@@ -46,7 +46,7 @@ - #define CONFIG_NN_V2 0 +@@ -47,7 +47,7 @@ #define CONFIG_NORMAL_TILE_MODE 1 + #define CONFIG_OPTICAL_FLOW_API 0 #define CONFIG_OS_SUPPORT 1 -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 -- 2.17.1 diff --git a/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch b/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch new file mode 100644 index 0000000000000000000000000000000000000000..094c880d14b80a2932c6f152974e65ec412e1135 --- /dev/null +++ b/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch @@ -0,0 +1,23 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 9 Mar 2021 19:43:00 +0100 +Subject: Add Alt+D hotkey to focus address bar + +--- + .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java | 2 ++ + 1 file changed, 2 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 +@@ -147,6 +147,8 @@ public class KeyboardShortcuts { + KeyEvent.KEYCODE_F, KeyEvent.META_CTRL_ON); + addShortcut(context, chromeFeatureShortcutGroup, 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); + + KeyboardShortcutGroup webpageShortcutGroup = new KeyboardShortcutGroup( +-- +2.17.1 + diff --git a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch index 113acaf0fa1e06061abf6efbfd856c95fa91060c..7c8426bc3097d808556317b2409aa279f093c3ac 100644 --- a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch +++ b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch @@ -17,9 +17,9 @@ See also: 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 -@@ -4124,6 +4124,12 @@ const FeatureEntry kFeatureEntries[] = { - kOsAll, - FEATURE_VALUE_TYPE(features::kEnableAmbientAuthenticationInIncognito)}, +@@ -3040,6 +3040,12 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(ash::features::kSystemTrayMicGainSetting)}, + #endif // BUILDFLAG(IS_CHROMEOS_ASH) +#if defined(OS_ANDROID) + {switches::kEnableIncognitoSnapshotsInAndroidRecents, flag_descriptions::kEnableIncognitoSnapshotsInAndroidRecentsName, @@ -27,41 +27,41 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc + SINGLE_VALUE_TYPE(switches::kEnableIncognitoSnapshotsInAndroidRecents)}, +#endif + - {"enable-ambient-authentication-in-guest-session", - flag_descriptions::kEnableAmbientAuthenticationInGuestSessionName, - flag_descriptions::kEnableAmbientAuthenticationInGuestSessionDescription, + #if (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) && !defined(OS_ANDROID) + { + "enable-accelerated-video-decode", diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -432,6 +432,11 @@ const char kEnableAmbientAuthenticationInIncognitoDescription[] = - "Enables ambient authentication in Incognito mode. This flag may be " - "overriden by policies."; +@@ -533,6 +533,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] = + "authenticator (if available) to verify card ownership when retrieving " + "credit cards from Google Payments."; +const char kEnableIncognitoSnapshotsInAndroidRecentsName[] = + "Enable Incognito snapshots in Android Recents"; +const char kEnableIncognitoSnapshotsInAndroidRecentsDescription[] = + "Enable the secure flag for Incognito tabs which prevent taking screenshots and seeing snapshots in Android Recents."; + - const char kEnableAmbientAuthenticationInGuestSessionName[] = - "Enable Ambient Authentication in Guest session."; - const char kEnableAmbientAuthenticationInGuestSessionDescription[] = + const char + kEnableAutofillInfoBarAccountIndicationFooterForSingleAccountUsersName[] = + "Display InfoBar footers with account indication information for " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -270,6 +270,9 @@ extern const char kEnableAccessibilityObjectModelDescription[]; - extern const char kEnableAmbientAuthenticationInIncognitoName[]; - extern const char kEnableAmbientAuthenticationInIncognitoDescription[]; +@@ -329,6 +329,9 @@ extern const char kEnableAutofillAccountWalletStorageDescription[]; + extern const char kEnableAutofillCreditCardAblationExperimentDisplayName[]; + extern const char kEnableAutofillCreditCardAblationExperimentDescription[]; +extern const char kEnableIncognitoSnapshotsInAndroidRecentsName[]; +extern const char kEnableIncognitoSnapshotsInAndroidRecentsDescription[]; + - extern const char kEnableAmbientAuthenticationInGuestSessionName[]; - extern const char kEnableAmbientAuthenticationInGuestSessionDescription[]; + extern const char kEnableAutofillCreditCardAuthenticationName[]; + extern const char kEnableAutofillCreditCardAuthenticationDescription[]; diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl --- a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl +++ b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl -@@ -144,10 +144,6 @@ public abstract class ChromeSwitches {{ +@@ -147,10 +147,6 @@ public abstract class ChromeSwitches {{ /** Switch for enabling the Chrome Survey. */ public static final String CHROME_FORCE_ENABLE_SURVEY = "force-enable-chrome-survey"; @@ -75,7 +75,7 @@ diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmp diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc -@@ -343,6 +343,9 @@ const char kHomePage[] = "homepage"; +@@ -334,6 +334,9 @@ const char kHomePage[] = "homepage"; // Causes the browser to launch directly in incognito mode. const char kIncognito[] = "incognito"; @@ -88,14 +88,14 @@ diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h -@@ -108,6 +108,7 @@ extern const char kForceFirstRun[]; +@@ -113,6 +113,7 @@ extern const char kForceFirstRun[]; extern const char kForceStackedTabStripLayout[]; extern const char kHomePage[]; extern const char kIncognito[]; +extern const char kEnableIncognitoSnapshotsInAndroidRecents[]; extern const char kInstallAutogeneratedTheme[]; extern const char kInstallChromeApp[]; - extern const char kInstallSupervisedUserWhitelists[]; + extern const char kInstantProcess[]; -- 2.17.1 diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index f42e6c91b51851aeb0b0b94a2fcb7c2b7b25463a..c008a3672acbad2b5a953953161e0ce100bb1f67 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -6,27 +6,34 @@ Accessible from proxy settings and chrome://proxy Allows to use a PAC script URL, automatic configuration and explicit proxy settings. Offer auto-complete for the proxy page URL. +Store proxy settings in LocalState instead of Profile, so that proxy is used +for SimpleURLLoaders as well. --- chrome/android/java/res/values/values.xml | 3 + .../java/res/xml/privacy_preferences.xml | 4 + + .../privacy/settings/PrivacySettings.java | 5 +- .../chrome_autocomplete_provider_client.cc | 2 + chrome/browser/browser_resources.grd | 6 + + chrome/browser/net/proxy_service_factory.cc | 23 +- + chrome/browser/net/proxy_service_factory.h | 3 + + chrome/browser/prefs/browser_prefs.cc | 4 + .../prefs/chrome_command_line_pref_store.cc | 2 +- chrome/browser/resources/proxy_config.css | 61 +++ - chrome/browser/resources/proxy_config.html | 78 ++++ - chrome/browser/resources/proxy_config.js | 252 +++++++++++ + chrome/browser/resources/proxy_config.html | 80 ++++ + chrome/browser/resources/proxy_config.js | 263 +++++++++++ chrome/browser/ui/BUILD.gn | 2 + .../webui/chrome_web_ui_controller_factory.cc | 3 + - chrome/browser/ui/webui/proxy_config_ui.cc | 395 ++++++++++++++++++ + chrome/browser/ui/webui/proxy_config_ui.cc | 417 ++++++++++++++++++ chrome/browser/ui/webui/proxy_config_ui.h | 33 ++ chrome/common/webui_url_constants.cc | 4 + chrome/common/webui_url_constants.h | 2 + .../core/browser/proxy_policy_handler.cc | 2 +- - .../proxy_config/proxy_config_dictionary.cc | 22 +- - .../proxy_config/proxy_config_dictionary.h | 6 +- - net/proxy_resolution/proxy_config.cc | 45 ++ + .../pref_proxy_config_tracker_impl.cc | 1 + + .../proxy_config/proxy_config_dictionary.cc | 30 +- + .../proxy_config/proxy_config_dictionary.h | 7 +- + net/proxy_resolution/proxy_config.cc | 52 ++- net/proxy_resolution/proxy_config.h | 3 + - 19 files changed, 913 insertions(+), 12 deletions(-) + 24 files changed, 997 insertions(+), 15 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 @@ -36,9 +43,9 @@ Offer auto-complete for the proxy page URL. diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml --- a/chrome/android/java/res/values/values.xml +++ b/chrome/android/java/res/values/values.xml -@@ -72,6 +72,9 @@ - - -1 +@@ -32,6 +32,9 @@ + 0 + 1 + Proxy configuration + chrome://proxy @@ -49,21 +56,41 @@ 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 -@@ -6,6 +6,10 @@ - +@@ -7,6 +7,10 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orderingFromXml="false"> -+ - builtins_to_provide; builtins_to_provide.push_back( base::ASCIIToUTF16(chrome::kChromeUIFlagsURL)); @@ -75,8 +102,8 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd -@@ -110,6 +110,12 @@ - +@@ -136,6 +136,12 @@ + + @@ -88,6 +115,91 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou +diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/proxy_service_factory.cc +--- a/chrome/browser/net/proxy_service_factory.cc ++++ b/chrome/browser/net/proxy_service_factory.cc +@@ -15,6 +15,9 @@ + #include "content/public/browser/browser_thread.h" + #include "net/proxy_resolution/configured_proxy_resolution_service.h" + #include "net/proxy_resolution/proxy_config_service.h" ++#include "components/proxy_config/proxy_config_pref_names.h" ++#include "components/prefs/pref_service.h" ++#include "components/prefs/pref_registry_simple.h" + + #if BUILDFLAG(IS_CHROMEOS_ASH) + #include "chromeos/network/proxy/proxy_config_service_impl.h" +@@ -59,7 +62,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( + return std::make_unique( + profile_prefs, local_state_prefs, nullptr); + #else +- return std::make_unique(profile_prefs, nullptr); ++ // Migrate from profile_prefs to local_state_prefs ++ if (local_state_prefs->GetBoolean("proxy_migrated") == false) { ++ const base::DictionaryValue* dict = ++ profile_prefs->GetDictionary(proxy_config::prefs::kProxy); ++ ++ LOG(INFO) << "CreatePrefProxyConfigTrackerOfProfile: Migration from profile to local state"; ++ ++ const base::Value /*ProxyConfigDictionary*/ proxy_dict(dict->Clone()); ++ local_state_prefs->Set(proxy_config::prefs::kProxy, proxy_dict); ++ ++ local_state_prefs->SetBoolean("proxy_migrated", true); ++ local_state_prefs->CommitPendingWrite(); ++ } ++ return std::make_unique(local_state_prefs, nullptr); + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + } + +@@ -75,3 +91,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( + nullptr); + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + } ++ ++// static ++void ProxyServiceFactory::RegisterPrefs(PrefRegistrySimple* registry) { ++ registry->RegisterBooleanPref("proxy_migrated", false); ++} +diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/proxy_service_factory.h +--- a/chrome/browser/net/proxy_service_factory.h ++++ b/chrome/browser/net/proxy_service_factory.h +@@ -8,6 +8,7 @@ + #include + + #include "base/macros.h" ++#include "components/prefs/pref_registry_simple.h" + + class PrefProxyConfigTracker; + class PrefService; +@@ -37,6 +38,8 @@ class ProxyServiceFactory { + static std::unique_ptr + CreatePrefProxyConfigTrackerOfLocalState(PrefService* local_state_prefs); + ++ static void RegisterPrefs(PrefRegistrySimple* registry); ++ + private: + DISALLOW_IMPLICIT_CONSTRUCTORS(ProxyServiceFactory); + }; +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 +@@ -410,6 +410,8 @@ + #include "chrome/browser/media/feeds/media_feeds_service.h" + #endif + ++#include "chrome/browser/net/proxy_service_factory.h" ++ + namespace { + + #if BUILDFLAG(IS_CHROMEOS_ASH) +@@ -697,6 +699,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { + PluginsResourceService::RegisterPrefs(registry); + #endif + ++ ProxyServiceFactory::RegisterPrefs(registry); ++ + #if defined(OS_ANDROID) + ::android::RegisterPrefs(registry); + 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 @@ -170,7 +282,7 @@ diff --git a/chrome/browser/resources/proxy_config.html b/chrome/browser/resourc new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/proxy_config.html -@@ -0,0 +1,78 @@ +@@ -0,0 +1,80 @@ + + + @@ -184,6 +296,7 @@ new file mode 100644 + + + ++ + + + @@ -217,7 +330,8 @@ new file mode 100644 + Reset will update the displayed configuration to match the one currently in use. + +
-+
++
++
+
+ +

@@ -253,7 +367,7 @@ diff --git a/chrome/browser/resources/proxy_config.js b/chrome/browser/resources new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/proxy_config.js -@@ -0,0 +1,252 @@ +@@ -0,0 +1,263 @@ +/* + This file is part of Bromite. + @@ -296,6 +410,7 @@ new file mode 100644 + var kIdClearButton = 'clear'; + + var kIdModeEmpty = 'empty'; ++ var kIdModeDirect = 'direct'; + var kIdModeAutoDetect = 'auto-detect'; + var kIdModeUsePacURL = 'use-pac-url'; + @@ -381,7 +496,7 @@ new file mode 100644 + "rules": { + "bypass_rules": "", + "reverse_bypass": false, -+ "type": "empty" ++ "type": "none" + } + }; + }, @@ -394,7 +509,14 @@ new file mode 100644 + return { + "auto_detect": false, + "rules": { -+ "type": "empty" ++ "type": "none" ++ } ++ }; ++ } else if ($(kIdModeDirect).checked) { ++ return { ++ "auto_detect": false, ++ "rules": { ++ "type": "direct" + } + }; + } else if ($(kIdModeAutoDetect).checked) { @@ -405,7 +527,8 @@ new file mode 100644 + return { + "auto_detect": false, + "pac_url": $(kIdPacURL).value.trim(), -+ "pac_mandatory": $(kIdPacMandatory).checked ++ "pac_mandatory": $(kIdPacMandatory).checked, ++ "rules": {} + }; + } else if ($(kIdModeUseListPerScheme).checked || $(kIdModeUseSingleList).checked) { + var config = { @@ -438,15 +561,17 @@ new file mode 100644 + * Updates the UI to display the current proxy configuration. + */ + renderConfig_: function() { -+ if (this.currentConfig.auto_detect) ++ if (this.currentConfig.auto_detect) { + $(kIdModeAutoDetect).checked = true; -+ else if (this.currentConfig.hasOwnProperty('pac_url')) { ++ } else if (this.currentConfig.rules.type == "none") { ++ $(kIdModeEmpty).checked = true; ++ } else if (this.currentConfig.rules.type == "direct") { ++ $(kIdModeDirect).checked = true; ++ } else if (this.currentConfig.hasOwnProperty('pac_url')) { + $(kIdPacURL).value = this.currentConfig.pac_url; + $(kIdPacMandatory).checked = this.currentConfig.pac_mandatory; + $(kIdModeUsePacURL).checked = true; -+ } else if (this.currentConfig.rules.type == "empty") -+ $(kIdModeEmpty).checked = true; -+ else { ++ } else { + $(kIdBypassRules).value = this.currentConfig.rules.bypass_rules; + $(kIdReverseBypass).checked = this.currentConfig.rules.reverse_bypass; + @@ -509,7 +634,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 -@@ -267,6 +267,8 @@ jumbo_static_library("ui") { +@@ -254,6 +254,8 @@ static_library("ui") { "webui/metrics_handler.h", "webui/net_export_ui.cc", "webui/net_export_ui.h", @@ -517,19 +642,19 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn + "webui/proxy_config_ui.h", "webui/net_internals/net_internals_ui.cc", "webui/net_internals/net_internals_ui.h", - "webui/notifications_internals/notifications_internals_ui.cc", + "webui/ntp_tiles_internals_ui.cc", diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -@@ -60,6 +60,7 @@ +@@ -62,6 +62,7 @@ #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h" - #include "chrome/browser/ui/webui/policy_ui.h" + #include "chrome/browser/ui/webui/policy/policy_ui.h" #include "chrome/browser/ui/webui/predictors/predictors_ui.h" +#include "chrome/browser/ui/webui/proxy_config_ui.h" #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h" #include "chrome/browser/ui/webui/settings/settings_ui.h" - #include "chrome/browser/ui/webui/settings_utils.h" -@@ -430,6 +431,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, + #include "chrome/browser/ui/webui/settings/settings_utils.h" +@@ -545,6 +546,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUINetExportHost) return &NewWebUI; @@ -537,12 +662,12 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom + return &NewWebUI; if (url.host_piece() == chrome::kChromeUINetInternalsHost) return &NewWebUI; - if (url.host_piece() == chrome::kChromeUINotificationsInternalsHost) + if (url.host_piece() == chrome::kChromeUINTPTilesInternalsHost) diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webui/proxy_config_ui.cc new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/proxy_config_ui.cc -@@ -0,0 +1,395 @@ +@@ -0,0 +1,417 @@ +/* + This file is part of Bromite. + @@ -643,7 +768,7 @@ new file mode 100644 + + private: + // Not owned. -+ Profile *profile_; ++ PrefService *pref_service_; + std::unique_ptr proxy_config_service_; + // Monitors global and Profile prefs related to proxy configuration. + std::unique_ptr pref_proxy_config_tracker_; @@ -663,7 +788,7 @@ new file mode 100644 + weak_ptr_factory_(this) { + + // used to set new configuration preferences -+ profile_ = profile; ++ pref_service_ = g_browser_process->local_state(); + // observer is explicitly added only later in enableNotifyUIWithState + is_observing_ = false; + @@ -700,7 +825,7 @@ new file mode 100644 + encodeConfig(config.value(), state); + break; + case net::ProxyConfigService::CONFIG_UNSET: -+ // nothing will be populated ++ state.SetPath({"config", "rules", "type"}, base::Value("none")); + break; + case net::ProxyConfigService::CONFIG_PENDING: + //NOTE: this can only happen when triggered manually first time @@ -727,16 +852,20 @@ new file mode 100644 + + state.SetPath({"config", "auto_detect"}, base::Value(config.auto_detect())); + ++ auto rules = config.proxy_rules(); + if (config.has_pac_url()) { + state.SetPath({"config", "pac_url"}, base::Value(config.pac_url().spec())); + state.SetPath({"config", "pac_mandatory"}, base::Value(config.pac_mandatory())); ++ state.SetPath({"config", "rules", "type"}, base::Value("none")); ++ state.SetPath({"config", "rules", "bypass_rules"}, base::Value(rules.bypass_rules.ToString())); ++ state.SetPath({"config", "rules", "reverse_bypass"}, base::Value(rules.reverse_bypass)); ++ return; + } + -+ auto rules = config.proxy_rules(); + const char *type; + switch (rules.type) { + case net::ProxyConfig::ProxyRules::Type::EMPTY: -+ type = "empty"; ++ type = "direct"; + break; + case net::ProxyConfig::ProxyRules::Type::PROXY_LIST: + type = "list"; @@ -799,13 +928,25 @@ new file mode 100644 + + net::ProxyConfigWithAnnotation config; + auto availability = proxy_config_service_->GetLatestProxyConfig(&config); ++ ++ const base::DictionaryValue* dict = ++ pref_service_->GetDictionary(proxy_config::prefs::kProxy); ++ ProxyConfigDictionary proxy_dict(dict->Clone()); ++ ProxyPrefs::ProxyMode mode; ++ if (!proxy_dict.GetMode(&mode) || mode == ProxyPrefs::MODE_SYSTEM) { ++ availability = net::ProxyConfigService::CONFIG_UNSET; ++ } ++ + OnProxyConfigChanged(config, availability); +} + +void ProxyConfigMessageHandler::OnClear(const base::ListValue* list) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + -+ profile_->GetPrefs()->ClearPref(proxy_config::prefs::kProxy); ++ const base::Value cfg = ProxyConfigDictionary::CreateSystem(); ++ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ pref_service_->CommitPendingWrite(); ++ OnEnableNotifyUIWithState(nullptr); +} + +void ProxyConfigMessageHandler::OnApply(const base::ListValue* list) { @@ -883,8 +1024,11 @@ new file mode 100644 + proxyConfig.proxy_rules().proxies_for_ftp.SetFromPacString(ftp->GetString()); + proxyConfig.proxy_rules().fallback_proxies.SetFromPacString(fallback->GetString()); + readBypass = true; -+ } else if (t == "empty") { ++ } else if (t == "direct") { + proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::EMPTY; ++ } else if (t == "none") { ++ OnClear(nullptr); ++ return; + } else { + // invalid type + LOG(WARNING) << "invalid proxy configuration type"; @@ -911,21 +1055,24 @@ new file mode 100644 +void ProxyConfigMessageHandler::apply(const net::ProxyConfig& proxyConfig) { + if (proxyConfig.auto_detect()) { + const base::Value cfg = ProxyConfigDictionary::CreateAutoDetect(); -+ profile_->GetPrefs()->Set(proxy_config::prefs::kProxy, cfg); -+ return; ++ pref_service_->Set(proxy_config::prefs::kProxy, cfg); + } else if (proxyConfig.has_pac_url()) { + const base::Value cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory()); -+ profile_->GetPrefs()->Set(proxy_config::prefs::kProxy, cfg); -+ return; -+ } -+ -+ auto proxyRulesAsString = proxyConfig.proxy_rules().ToString(); -+ auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString(); ++ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ } else if (proxyConfig.proxy_rules().type == net::ProxyConfig::ProxyRules::Type::EMPTY) { ++ const base::Value cfg = ProxyConfigDictionary::CreateDirect(); ++ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ } else { ++ auto proxyRulesAsString = proxyConfig.proxy_rules().ToString(); ++ auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString(); + -+ // fixed servers -+ const base::Value cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString, -+ bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass); -+ profile_->GetPrefs()->Set(proxy_config::prefs::kProxy, cfg); ++ // fixed servers ++ const base::Value cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString, ++ bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass); ++ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ } ++ pref_service_->CommitPendingWrite(); ++ OnEnableNotifyUIWithState(nullptr); +} + +} // namespace @@ -979,26 +1126,26 @@ 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 -@@ -189,6 +189,8 @@ const char kChromeUINativePhysicalWebDiagnosticsURL[] = - "chrome-native://physical-web-diagnostics/"; - const char kChromeUIOfflineInternalsHost[] = "offline-internals"; - const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics"; +@@ -33,6 +33,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert"; + const char kChromeUICertificateViewerURL[] = "chrome://view-cert/"; + const char kChromeUIChromeSigninHost[] = "chrome-signin"; + const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/"; +const char kChromeUIProxyConfigHost[] = "proxy"; +const char kChromeUIProxyConfigURL[] = "chrome://proxy/"; - const char kChromeUISnippetsInternalsHost[] = "snippets-internals"; - const char kChromeUIWebApksHost[] = "webapks"; - #endif -@@ -490,6 +492,7 @@ bool IsOSSettingsSubPage(const std::string& sub_page) { - kPowerSubPage, - kSmartLockSettingsSubPage, - kSmbSharesSubPage, + const char kChromeUIChromeURLsHost[] = "chrome-urls"; + const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/"; + const char kChromeUIComponentsHost[] = "components"; +@@ -325,6 +327,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { + kChromeUIMobileSetupHost, + kChromeUIMultiDeviceSetupHost, + kChromeUINetworkHost, + kChromeUIProxyConfigHost, - kStorageSubPage, - kStylusSubPage, - kSwitchAccessSubPage, -@@ -592,6 +595,7 @@ const char* const kChromeHostURLs[] = { + kChromeUIOobeHost, + kChromeUIOSCreditsHost, + kChromeUIOSSettingsHost, +@@ -523,6 +526,7 @@ const char* const kChromeHostURLs[] = { #if !defined(OS_ANDROID) - #if !defined(OS_CHROMEOS) + #if !BUILDFLAG(IS_CHROMEOS_ASH) kChromeUIAppLauncherPageHost, + kChromeUIProxyConfigHost, #endif @@ -1007,7 +1154,7 @@ 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 -@@ -116,6 +116,8 @@ extern const char kChromeUIMemoryInternalsHost[]; +@@ -117,6 +117,8 @@ extern const char kChromeUIMemoryInternalsHost[]; extern const char kChromeUINTPTilesInternalsHost[]; extern const char kChromeUINaClHost[]; extern const char kChromeUINetExportHost[]; @@ -1019,7 +1166,7 @@ diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_const diff --git a/components/policy/core/browser/proxy_policy_handler.cc b/components/policy/core/browser/proxy_policy_handler.cc --- a/components/policy/core/browser/proxy_policy_handler.cc +++ b/components/policy/core/browser/proxy_policy_handler.cc -@@ -199,7 +199,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, +@@ -200,7 +200,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, bypass_list->GetAsString(&bypass_list_string); prefs->SetValue(proxy_config::prefs::kProxy, ProxyConfigDictionary::CreateFixedServers( @@ -1028,6 +1175,17 @@ diff --git a/components/policy/core/browser/proxy_policy_handler.cc b/components } break; } +diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc +--- a/components/proxy_config/pref_proxy_config_tracker_impl.cc ++++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc +@@ -380,6 +380,7 @@ bool PrefProxyConfigTrackerImpl::PrefConfigToNetConfig( + if (proxy_dict.GetBypassList(&proxy_bypass)) { + proxy_config.proxy_rules().bypass_rules.ParseFromString(proxy_bypass); + } ++ proxy_config.proxy_rules().reverse_bypass = proxy_dict.HasReverseBypass(); + *config = net::ProxyConfigWithAnnotation( + proxy_config, kSettingsProxyConfigTrafficAnnotation); + return true; diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/proxy_config/proxy_config_dictionary.cc --- a/components/proxy_config/proxy_config_dictionary.cc +++ b/components/proxy_config/proxy_config_dictionary.cc @@ -1040,7 +1198,22 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro } // namespace -@@ -79,29 +81,30 @@ const base::Value& ProxyConfigDictionary::GetDictionary() const { +@@ -72,6 +74,14 @@ bool ProxyConfigDictionary::HasBypassList() const { + return dict_.FindKey(kProxyBypassList); + } + ++bool ProxyConfigDictionary::HasReverseBypass() const { ++ const base::Value* value = dict_.FindKey(kProxyReverseBypass); ++ if (!value || !value->is_bool()) { ++ return false; ++ } ++ return value->GetBool(); ++} ++ + const base::Value& ProxyConfigDictionary::GetDictionary() const { + return dict_; + } +@@ -79,29 +89,30 @@ const base::Value& ProxyConfigDictionary::GetDictionary() const { // static base::Value ProxyConfigDictionary::CreateDirect() { return CreateDictionary(ProxyPrefs::MODE_DIRECT, std::string(), false, @@ -1076,7 +1249,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro } else { return CreateDirect(); } -@@ -110,7 +113,7 @@ base::Value ProxyConfigDictionary::CreateFixedServers( +@@ -110,7 +121,7 @@ base::Value ProxyConfigDictionary::CreateFixedServers( // static base::Value ProxyConfigDictionary::CreateSystem() { return CreateDictionary(ProxyPrefs::MODE_SYSTEM, std::string(), false, @@ -1085,7 +1258,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro } // static -@@ -119,7 +122,8 @@ base::Value ProxyConfigDictionary::CreateDictionary( +@@ -119,7 +130,8 @@ base::Value ProxyConfigDictionary::CreateDictionary( const std::string& pac_url, bool pac_mandatory, const std::string& proxy_server, @@ -1095,7 +1268,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro base::Value dict(base::Value::Type::DICTIONARY); dict.SetKey(kProxyMode, base::Value(ProxyModeToString(mode))); if (!pac_url.empty()) { -@@ -128,8 +132,10 @@ base::Value ProxyConfigDictionary::CreateDictionary( +@@ -128,8 +140,10 @@ base::Value ProxyConfigDictionary::CreateDictionary( } if (!proxy_server.empty()) dict.SetKey(kProxyServer, base::Value(proxy_server)); @@ -1110,7 +1283,15 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/proxy_config/proxy_config_dictionary.h --- a/components/proxy_config/proxy_config_dictionary.h +++ b/components/proxy_config/proxy_config_dictionary.h -@@ -46,7 +46,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { +@@ -38,6 +38,7 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { + bool GetProxyServer(std::string* out) const; + bool GetBypassList(std::string* out) const; + bool HasBypassList() const; ++ bool HasReverseBypass() const; + + const base::Value& GetDictionary() const; + +@@ -46,7 +47,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { static base::Value CreatePacScript(const std::string& pac_url, bool pac_mandatory); static base::Value CreateFixedServers(const std::string& proxy_server, @@ -1120,7 +1301,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/prox static base::Value CreateSystem(); // Encodes the proxy server as "=://". -@@ -62,7 +63,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { +@@ -62,7 +64,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { const std::string& pac_url, bool pac_mandatory, const std::string& proxy_server, @@ -1133,7 +1314,16 @@ diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/prox 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 -@@ -140,6 +140,51 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules) { +@@ -110,7 +110,7 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules) { + &single_proxies, + ProxyServer::SCHEME_HTTP); + type = Type::PROXY_LIST; +- return; ++ continue; + } + + // Trim whitespace off the url scheme. +@@ -141,6 +141,56 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules) { } } @@ -1142,13 +1332,18 @@ diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_c + return ""; + } + -+ // special case: a single proxy server specified ++ // special case: a single proxy servers list specified + if (type == Type::PROXY_LIST) { -+ if (single_proxies.size() == 1) { -+ return single_proxies.Get().ToURI(); ++ std::string proxy_list; ++ for (const ProxyServer& proxy_server : ++ single_proxies.GetAll()) { ++ proxy_list += proxy_server.ToURI() + ";"; + } -+ // more than 1 proxies or 0 proxies is unexpected -+ return ""; ++ // remove last semicolon ++ if (proxy_list.length() != 0 ) { ++ proxy_list.pop_back(); ++ } ++ return proxy_list; + } + + if (type != Type::PROXY_LIST_PER_SCHEME) { diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 6e65c73cc177002b3e8c7183e39c25dc5025b4aa..75533cf4ebad9dcc61895ec3af61a98268210d35 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -9,18 +9,20 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c --- chrome/android/chrome_java_sources.gni | 1 + .../java/res/xml/privacy_preferences.xml | 5 ++ - .../AlwaysIncognitoLinkInterceptor.java | 74 +++++++++++++++++++ - .../chrome/browser/ChromeActivity.java | 4 + + .../AlwaysIncognitoLinkInterceptor.java | 80 +++++++++++++++++++ .../chrome/browser/ChromeTabbedActivity.java | 6 +- + .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 6 ++ - .../ChromeContextMenuPopulator.java | 8 +- - .../CustomTabIntentDataProvider.java | 6 ++ - .../browser/init/StartupTabPreloader.java | 11 ++- + .../ChromeContextMenuPopulator.java | 9 ++- + .../CustomTabIntentDataProvider.java | 5 +- + .../browser/init/StartupTabPreloader.java | 14 +++- + .../privacy/settings/PrivacySettings.java | 2 + .../browser/tabmodel/ChromeTabCreator.java | 16 +++- - .../browser/tabmodel/TabPersistentStore.java | 9 +++ + .../browser/tabmodel/TabPersistentStore.java | 10 +++ + .../webapps/WebappIntentDataProvider.java | 14 ++++ .../flags/android/chrome_feature_list.cc | 2 +- .../strings/android_chrome_strings.grd | 7 ++ - 13 files changed, 147 insertions(+), 8 deletions(-) + 15 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni @@ -37,11 +39,11 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java 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 -@@ -20,6 +20,11 @@ - android:title="@string/preload_pages_title" +@@ -18,6 +18,11 @@ android:summary="@string/preload_pages_summary" - android:persistent="false" /> -+ ++ - throw new IllegalStateException( - "Attempting to access TabCreator before initialization"); - } -+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { -+ return mIncognitoTabCreator; -+ } - return incognito ? mIncognitoTabCreator : mRegularTabCreator; - } - 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 -@@ -49,6 +49,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; - import org.chromium.base.supplier.Supplier; +@@ -54,6 +54,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.base.task.PostTask; + import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; -@@ -1536,8 +1537,9 @@ public class ChromeTabbedActivity +@@ -1633,8 +1634,9 @@ public class ChromeTabbedActivity extends ChromeActivity + throw new IllegalStateException( + "Attempting to access TabCreator before initialization"); } ++ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { ++ return mIncognitoTabCreator; ++ } + return incognito ? mIncognitoTabCreator : mRegularTabCreator; + } +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 +@@ -539,6 +539,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } + + private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { + if (ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) { + final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); + if (newTabOption != null) @@ -191,8 +199,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu 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 -@@ -18,7 +18,9 @@ import androidx.annotation.VisibleForTesting; - +@@ -29,7 +29,9 @@ import androidx.annotation.VisibleForTesting; + import org.chromium.base.ContextUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.supplier.Supplier; +import org.chromium.base.ContextUtils; @@ -200,26 +208,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; - import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; -@@ -337,7 +339,11 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { - if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(params.getUrl()) - && UrlUtilities.isAcceptedScheme(params.getUrl())) { + import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuUma.Action; +@@ -372,7 +374,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl()) + && UrlUtilities.isAcceptedScheme(mParams.getUrl().getSpec())) { if (mMode == ContextMenuMode.NORMAL) { -- linkTab.add(new ChromeContextMenuItem(Item.OPEN_IN_NEW_TAB)); +- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB)); + if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false) -+ && !mDelegate.isIncognito()) { ++ && !mItemDelegate.isIncognito()) { + // disallow open in new tab + } else -+ linkTab.add(new ChromeContextMenuItem(Item.OPEN_IN_NEW_TAB)); - if (!mDelegate.isIncognito() && mDelegate.isIncognitoSupported()) { - linkTab.add(new ChromeContextMenuItem(Item.OPEN_IN_INCOGNITO_TAB)); ++ linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB)); ++ + if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) { + linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB)); } 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 -@@ -49,6 +49,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable; +@@ -48,6 +48,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable; import org.chromium.components.embedder_support.util.UrlConstants; - import org.chromium.ui.util.ColorUtils; + import org.chromium.device.mojom.ScreenOrientationLockType; +import org.chromium.base.ContextUtils; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; @@ -227,20 +236,19 @@ 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; -@@ -395,6 +398,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid - // TODO(https://crbug.com/1023759): Remove this function and enable - // incognito CCT request for all apps. - private boolean isValidIncognitoIntent(Intent intent) { -+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { -+ return true; -+ } - if (!isIncognitoRequested(intent)) return false; - // Incognito requests for payments flow are supported without - // INCOGNITO_CCT flag as an exceptional case that can use Chrome +@@ -781,7 +784,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid + + @Override + public boolean isIncognito() { +- return false; ++ return ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false); + } + + @Nullable diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java b/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java -@@ -36,6 +36,9 @@ import org.chromium.ui.base.PageTransition; +@@ -38,6 +38,9 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -250,21 +258,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab /** * This class attempts to preload the tab if the url is known from the intent when the profile * is created. This is done to improve startup latency. -@@ -174,9 +177,11 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable +@@ -195,10 +198,15 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable Intent intent = mIntentSupplier.get(); GURL url = UrlFormatter.fixupUrl(getUrlFromIntent(intent)); + boolean isIncognito = ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false); + ++ Profile profile = Profile.getLastUsedRegularProfile(); ChromeTabCreator chromeTabCreator = - (ChromeTabCreator) mTabCreatorManager.getTabCreator(false); -- WebContents webContents = WebContentsFactory.createWebContents(false, false); + (ChromeTabCreator) mTabCreatorManager.getTabCreator(isIncognito); -+ WebContents webContents = WebContentsFactory.createWebContents(isIncognito, false); + WebContents webContents = +- WebContentsFactory.createWebContents(Profile.getLastUsedRegularProfile(), false); ++ WebContentsFactory.createWebContents( ++ isIncognito ? profile.getPrimaryOTRProfile() : profile, ++ false); mLoadUrlParams = new LoadUrlParams(url.getValidSpecOrEmpty()); String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(intent); -@@ -190,7 +195,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable +@@ -212,7 +220,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable // Create a detached tab, but don't add it to the tab model yet. We'll do that // later if the loadUrlParams etc... match. mTab = TabBuilder.createLiveTab(false) @@ -273,10 +285,29 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab .setLaunchType(TabLaunchType.FROM_EXTERNAL_APP) .setWindow(mWindowAndroid) .setWebContents(webContents) +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 +@@ -39,6 +39,7 @@ import org.chromium.ui.text.SpanApplier; + */ + public class PrivacySettings + extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { ++ private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; + private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; + private static final String PREF_NETWORK_PREDICTIONS = "preload_pages"; + private static final String PREF_SECURE_DNS = "secure_dns"; +@@ -46,6 +47,7 @@ public class PrivacySettings + private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; + private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; + private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA, ++ PREF_ALWAYS_INCOGNITO, + PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, + PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX}; + 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 -@@ -37,6 +37,10 @@ import org.chromium.ui.base.PageTransition; +@@ -40,6 +40,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -287,7 +318,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome /** * This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ -@@ -55,6 +59,7 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { +@@ -61,6 +65,7 @@ public class ChromeTabCreator extends TabCreator { private final ChromeActivity mActivity; private final StartupTabPreloader mStartupTabPreloader; private final boolean mIncognito; @@ -295,7 +326,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome private WindowAndroid mNativeWindow; private TabModel mTabModel; -@@ -72,6 +77,10 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { +@@ -79,6 +84,10 @@ public class ChromeTabCreator extends TabCreator { mNativeWindow = nativeWindow; mTabDelegateFactorySupplier = tabDelegateFactory; mIncognito = incognito; @@ -304,9 +335,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome + else + mExtraLogic = null; mOverviewNTPCreator = overviewNTPCreator; + mAsyncTabParamsManager = asyncTabParamsManager; } - -@@ -224,6 +233,8 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { +@@ -232,6 +241,8 @@ public class ChromeTabCreator extends TabCreator { if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) { creationState = TabCreationState.LIVE_IN_BACKGROUND; } @@ -315,7 +346,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome mTabModel.addTab(tab, position, type, creationState); return tab; } finally { -@@ -258,6 +269,8 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { +@@ -266,6 +277,8 @@ public class ChromeTabCreator extends TabCreator { @TabCreationState int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND : TabCreationState.LIVE_IN_BACKGROUND; @@ -324,27 +355,35 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome mTabModel.addTab(tab, position, type, creationState); return true; } -@@ -300,7 +313,6 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { - */ - public Tab launchUrlFromExternalApp(String url, String referer, String headers, - String appId, boolean forceNewTab, Intent intent, long intentTimestamp) { +@@ -309,7 +322,6 @@ public class ChromeTabCreator extends TabCreator { + // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome. + public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId, + boolean forceNewTab, Intent intent, long intentTimestamp) { - assert !mIncognito; boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName()); if (forceNewTab && !isLaunchedFromChrome) { -@@ -383,6 +395,8 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { +@@ -423,6 +435,8 @@ public class ChromeTabCreator extends TabCreator { + .setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData) .build(); } - assert state.isIncognito() == mIncognito; + if (mExtraLogic != null) + tab.addObserver(mExtraLogic); - mTabModel.addTab(tab, index, launchType, creationState); - return tab; - } + + if (isIncognito != mIncognito) { + throw new IllegalStateException("Incognito state mismatch. TabState: " 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 -@@ -45,6 +45,8 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -17,6 +17,7 @@ import androidx.core.util.AtomicFile; + + import org.chromium.base.Callback; + import org.chromium.base.CallbackController; ++import org.chromium.base.ContextUtils; + import org.chromium.base.Log; + import org.chromium.base.ObserverList; + import org.chromium.base.StreamUtil; +@@ -51,6 +52,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.UiThreadTaskTraits; @@ -353,10 +392,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -@@ -593,6 +595,13 @@ public class TabPersistentStore extends TabPersister { +@@ -615,6 +618,13 @@ public class TabPersistentStore extends TabPersister { + } } } - + if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { + if (!isIncognito) { + Log.w(TAG, "Failed to restore tab: not in incognito mode."); @@ -365,24 +404,69 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer + } + TabModel model = mTabModelSelector.getModel(isIncognito); - SparseIntArray restoredTabs = isIncognito ? mIncognitoTabsRestored : mNormalTabsRestored; - int restoredIndex = 0; + + if (model.isIncognito() != isIncognito) { +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java +@@ -19,6 +19,9 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv + import org.chromium.chrome.browser.flags.ActivityType; + import org.chromium.components.browser_ui.widget.TintedDrawable; + ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + /** + * Stores info about a web app. + */ +@@ -32,6 +35,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + private final @ActivityType int mActivityType; + private final Intent mIntent; + ++ private boolean mIsIncognito = false; ++ + /** + * Returns the toolbar color to use if a custom color is not specified by the webapp. + */ +@@ -51,6 +56,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + mWebappExtras = webappExtras; + mWebApkExtras = webApkExtras; + mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP; ++ ++ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { ++ mIsIncognito = true; ++ } + } + + @Override +@@ -138,6 +147,11 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + return mWebApkExtras; + } + ++ @Override ++ public boolean isIncognito() { ++ return mIsIncognito; ++ } ++ + @Override + public int getDefaultOrientation() { + return mWebappExtras.orientation; 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 -@@ -318,7 +318,7 @@ const base::Feature kCCTExternalLinkHandling{"CCTExternalLinkHandling", - base::FEATURE_ENABLED_BY_DEFAULT}; +@@ -395,7 +395,7 @@ const base::Feature kCCTIncognito{"CCTIncognito", + base::FEATURE_ENABLED_BY_DEFAULT}; - const base::Feature kCCTIncognito{"CCTIncognito", -- base::FEATURE_DISABLED_BY_DEFAULT}; -+ base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kCCTIncognitoAvailableToThirdParty{ +- "CCTIncognitoAvailableToThirdParty", base::FEATURE_DISABLED_BY_DEFAULT}; ++ "CCTIncognitoAvailableToThirdParty", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kCCTPostMessageAPI{"CCTPostMessageAPI", base::FEATURE_ENABLED_BY_DEFAULT}; 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 -@@ -699,6 +699,13 @@ Your Google account may have other forms of browsing history like searches and a +@@ -856,6 +856,13 @@ Your Google account may have other forms of browsing history like searches and a Clears history and autocompletions in the address bar. diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index c23d67b7f4fbe27dd522724d60f2d0f54abedc43..db500175bc9544c347f0ce2355b14a9bb6570951 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -6,34 +6,132 @@ Add bookmark import/export actions in bookmarks activity and page Reduce permissions needed for bookmarks import/export Completely remove contacts picker permission from the file dialog --- + base/android/content_uri_utils.cc | 10 + + base/android/content_uri_utils.h | 4 + + .../org/chromium/base/ContentUriUtils.java | 32 ++ chrome/android/java/AndroidManifest.xml | 1 - - .../res/menu/bookmark_action_bar_menu.xml | 14 ++ + .../res/menu/bookmark_action_bar_menu.xml | 14 + .../browser/bookmarks/BookmarkActionBar.java | 12 + - .../browser/bookmarks/BookmarkActivity.java | 15 ++ - .../browser/bookmarks/BookmarkBridge.java | 47 ++++ + .../browser/bookmarks/BookmarkActivity.java | 28 ++ + .../browser/bookmarks/BookmarkBridge.java | 277 +++++++++++++++++ .../browser/bookmarks/BookmarkDelegate.java | 10 + - .../browser/bookmarks/BookmarkManager.java | 20 ++ - .../browser/bookmarks/BookmarkPage.java | 1 + - chrome/browser/BUILD.gn | 8 +- - .../android/bookmarks/bookmark_bridge.cc | 217 ++++++++++++++++++ - .../android/bookmarks/bookmark_bridge.h | 20 +- + .../browser/bookmarks/BookmarkManager.java | 22 ++ + .../browser/bookmarks/BookmarkPage.java | 9 +- + .../native_page/NativePageFactory.java | 3 +- + chrome/browser/BUILD.gn | 6 +- + chrome/browser/about_flags.cc | 6 + + .../android/bookmarks/bookmark_bridge.cc | 284 ++++++++++++++++++ + .../android/bookmarks/bookmark_bridge.h | 28 +- + .../browser/bookmarks/bookmark_html_writer.cc | 7 +- + .../dialogs/DownloadLocationCustomView.java | 7 +- + .../DownloadLocationDialogCoordinator.java | 10 +- + chrome/browser/flag_descriptions.cc | 5 + + chrome/browser/flag_descriptions.h | 3 + + .../flags/android/chrome_feature_list.cc | 4 + + .../flags/android/chrome_feature_list.h | 1 + + .../browser/flags/ChromeFeatureList.java | 1 + chrome/browser/importer/profile_writer.cc | 12 + chrome/browser/importer/profile_writer.h | 6 + - .../strings/android_chrome_strings.grd | 6 + + .../preferences/ChromePreferenceKeys.java | 3 + + .../strings/android_chrome_strings.grd | 18 ++ chrome/common/BUILD.gn | 3 + chrome/utility/BUILD.gn | 7 +- - .../utility/importer/bookmark_html_reader.cc | 27 ++- + .../utility/importer/bookmark_html_reader.cc | 27 +- .../utility/importer/bookmark_html_reader.h | 8 + .../chromium/ui/base/SelectFileDialog.java | 18 +- + .../java/strings/android_ui_strings.grd | 3 + ui/shell_dialogs/select_file_dialog.h | 2 + .../select_file_dialog_android.cc | 6 + ui/shell_dialogs/select_file_dialog_android.h | 2 + - 22 files changed, 448 insertions(+), 14 deletions(-) + 37 files changed, 876 insertions(+), 23 deletions(-) +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 +@@ -30,6 +30,16 @@ File OpenContentUriForRead(const FilePath& content_uri) { + return File(fd); + } + ++File OpenContentUriForWrite(const FilePath& content_uri) { ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ ScopedJavaLocalRef j_uri = ++ ConvertUTF8ToJavaString(env, content_uri.value()); ++ jint fd = Java_ContentUriUtils_openContentUriForWrite(env, j_uri); ++ if (fd < 0) ++ return File(); ++ return File(fd); ++} ++ + std::string GetContentUriMimeType(const FilePath& content_uri) { + JNIEnv* env = base::android::AttachCurrentThread(); + ScopedJavaLocalRef j_uri = +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 +@@ -17,6 +17,10 @@ namespace base { + // Returns -1 if the URI is invalid. + BASE_EXPORT File OpenContentUriForRead(const FilePath& content_uri); + ++// Opens a content URI for write and returns the file descriptor to the caller. ++// Returns -1 if the URI is invalid. ++BASE_EXPORT File OpenContentUriForWrite(const FilePath& content_uri); ++ + // Check whether a content URI exists. + BASE_EXPORT bool ContentUriExists(const FilePath& content_uri); + +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 +@@ -23,6 +23,9 @@ import org.chromium.base.annotations.CalledByNative; + import java.io.File; + import java.io.IOException; + ++import android.system.Os; ++import android.content.ContentProviderClient; ++ + /** + * This class provides methods to access content URI schemes. + */ +@@ -89,6 +92,35 @@ public abstract class ContentUriUtils { + return -1; + } + ++ @CalledByNative ++ public static int openContentUriForWrite(String uriString) { ++ try { ++ Uri uri = Uri.parse(uriString); ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ ContentProviderClient client = resolver.acquireContentProviderClient( ++ uri.getAuthority()); ++ ParcelFileDescriptor pfd = client.openFile(uri, "rw"); ++ int fd = pfd.detachFd(); ++ client.close(); ++ return fd; ++ } catch (Exception e) { ++ Log.e(TAG, "Cannot open intermediate Uri.", e); ++ } ++ return -1; ++ } ++ ++ public static String getFilePathFromContentUri(Uri uri) { ++ String path = null; ++ try { ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ ParcelFileDescriptor pfd = resolver.openFileDescriptor(uri, "r"); ++ path = Os.readlink("/proc/self/fd/" + pfd.getFd()); ++ pfd.close(); ++ } catch (Throwable t) { ++ } ++ return path; ++ } ++ + /** + * Check whether a content URI exists. + * diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -34,7 +34,6 @@ by a child template that "extends" this file. +@@ -39,7 +39,6 @@ by a child template that "extends" this file. {% endif %} @@ -111,15 +209,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java -@@ -13,6 +13,7 @@ import androidx.annotation.VisibleForTesting; +@@ -15,6 +15,10 @@ import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.SnackbarActivity; import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.embedder_support.util.UrlConstants; +import org.chromium.ui.base.ActivityWindowAndroid; ++ ++import org.chromium.ui.modaldialog.ModalDialogManager; ++import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; /** * The activity that displays the bookmark UI on the phone. It keeps a {@link BookmarkManager} -@@ -22,6 +23,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -24,6 +28,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; public class BookmarkActivity extends SnackbarActivity { private BookmarkManager mBookmarkManager; @@ -127,7 +228,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm static final int EDIT_BOOKMARK_REQUEST_CODE = 14; public static final String INTENT_VISIT_BOOKMARK_ID = "BookmarkEditActivity.VisitBookmarkId"; -@@ -33,6 +35,18 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -38,6 +43,20 @@ public class BookmarkActivity extends SnackbarActivity { if (TextUtils.isEmpty(url)) url = UrlConstants.BOOKMARKS_URL; mBookmarkManager.updateForUrl(url); setContentView(mBookmarkManager.getView()); @@ -135,7 +236,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm + final boolean listenToActivityState = true; + mWindowAndroid = new ActivityWindowAndroid(this, listenToActivityState); + mWindowAndroid.restoreInstanceState(savedInstanceState); -+ mBookmarkManager.setWindow(mWindowAndroid); ++ mBookmarkManager.setWindow(mWindowAndroid, ++ new ModalDialogManager( ++ new AppModalPresenter(this), ModalDialogManager.ModalDialogType.APP)); + } + + @Override @@ -146,7 +249,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm } @Override -@@ -49,6 +63,7 @@ public class BookmarkActivity extends SnackbarActivity { +@@ -54,6 +73,7 @@ public class BookmarkActivity extends SnackbarActivity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -154,34 +257,79 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString(data.getStringExtra( INTENT_VISIT_BOOKMARK_ID)); +@@ -61,6 +81,14 @@ public class BookmarkActivity extends SnackbarActivity { + } + } + ++ @Override ++ public void onRequestPermissionsResult( ++ int requestCode, String[] permissions, int[] grantResults) { ++ if (mWindowAndroid.handlePermissionResult(requestCode, permissions, grantResults)) ++ return; ++ super.onRequestPermissionsResult(requestCode, permissions, grantResults); ++ } ++ + /** + * @return The {@link BookmarkManager} for testing purposes. + */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java -@@ -4,7 +4,11 @@ +@@ -4,7 +4,19 @@ package org.chromium.chrome.browser.bookmarks; +import android.content.Intent; +import android.content.Context; ++import android.content.pm.PackageManager; ++import android.content.DialogInterface; ++import android.content.Intent; +import android.net.Uri; - import android.os.SystemClock; ++import android.content.ContentResolver; +import android.provider.Browser; ++import android.provider.DocumentsContract; ++import android.Manifest.permission; ++import androidx.appcompat.app.AlertDialog; + import android.os.SystemClock; ++import android.os.Build; import android.text.TextUtils; import android.util.Pair; -@@ -26,6 +30,11 @@ import org.chromium.components.url_formatter.SchemeDisplay; - import org.chromium.components.url_formatter.UrlFormatter; +@@ -27,8 +39,33 @@ import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.WebContents; + import org.chromium.url.GURL; ++import org.chromium.base.ContentUriUtils; ++import org.chromium.chrome.R; +import org.chromium.chrome.browser.document.ChromeLauncherActivity; +import org.chromium.chrome.browser.IntentHandler; ++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; ++import org.chromium.chrome.browser.preferences.SharedPreferencesManager; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.ui.base.PageTransition; +import org.chromium.ui.base.WindowAndroid; ++import org.chromium.ui.modaldialog.ModalDialogManager; ++ ++import android.view.View; ++import android.view.LayoutInflater; ++import org.chromium.ui.modelutil.PropertyModel; ++import org.chromium.ui.modaldialog.ModalDialogProperties; ++import org.chromium.ui.modaldialog.DialogDismissalCause; ++import org.chromium.chrome.browser.download.DownloadLocationDialogType; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogController; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogCoordinator; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationCustomView; ++import org.chromium.chrome.browser.download.DirectoryOption; ++import android.content.res.Resources; ++import org.chromium.base.task.AsyncTask; + import java.util.ArrayList; import java.util.List; ++import java.io.File; -@@ -562,6 +571,24 @@ public class BookmarkBridge { + /** + * Provides the communication channel for Android to fetch and manipulate the +@@ -585,6 +622,210 @@ public class BookmarkBridge { mNativeBookmarkBridge, BookmarkBridge.this, id.getId(), id.getType()); } @@ -198,45 +346,247 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm + * Export bookmarks to a path selected by the user. + * @param window The current window of the bookmarks activity or page. + */ -+ public void exportBookmarks() { ++ public void exportBookmarks(WindowAndroid window, ModalDialogManager modalDialogManager) { + assert mIsNativeBookmarkModelLoaded; -+ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, BookmarkBridge.this); ++ if (ChromeFeatureList.isEnabled(ChromeFeatureList.BOOKMARKS_EXPORT_USESAF) || ++ Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) ++ exportBookmarksImplUseSaf(window); ++ else ++ exportBookmarksImplUseFile(window, modalDialogManager); ++ } ++ ++ private void exportBookmarksImplUseSaf(WindowAndroid window) { ++ Context context = window.getContext().get(); ++ ++ // standard name for boorkmark file ++ final String standardBoorkmarkName = "bookmarks.html"; ++ ++ // use the fileSelector and saf asking user for the file ++ Intent fileSelector = new Intent(Intent.ACTION_CREATE_DOCUMENT); ++ fileSelector.addCategory(Intent.CATEGORY_OPENABLE); ++ fileSelector.setType("text/html"); ++ fileSelector.putExtra(Intent.EXTRA_TITLE, standardBoorkmarkName); ++ fileSelector.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | ++ Intent.FLAG_GRANT_READ_URI_PERMISSION | ++ Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); ++ ++ // get last exported uri path, if any ++ SharedPreferencesManager sharedPrefs = SharedPreferencesManager.getInstance(); ++ String bookmarksPath = sharedPrefs.readString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, standardBoorkmarkName); ++ Uri lastSelectedUri = Uri.parse(bookmarksPath); ++ ++ // prepare delegate for file selector ++ DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { ++ @Override ++ public void onClick(DialogInterface dialog, int button) { ++ if (button == AlertDialog.BUTTON_NEGATIVE) { ++ window.showIntent(fileSelector, ++ new WindowAndroid.IntentCallback() { ++ @Override ++ public void onIntentCompleted(WindowAndroid window, int resultCode, Intent data) { ++ if (data == null) return; ++ Uri filePath = data.getData(); ++ doExportBookmarksImpl(window, filePath); ++ } ++ }, ++ null); ++ } else { ++ if (dialog!=null) dialog.dismiss(); ++ doExportBookmarksImpl(window, lastSelectedUri); ++ } ++ } ++ }; ++ ++ // as a workaround for https://issuetracker.google.com/issues/37136466 ++ // ask to overwrite if is a valid uri and the file is present ++ if (DocumentsContract.isDocumentUri(context, lastSelectedUri)) { ++ AsyncTask checkUriTask = new AsyncTask() { ++ boolean uriExists = false; ++ String actualFilePath = null; ++ ++ @Override ++ protected Void doInBackground() { ++ uriExists = ContentUriUtils.contentUriExists(lastSelectedUri.toString()); ++ if (uriExists) { ++ actualFilePath = ContentUriUtils.getFilePathFromContentUri(lastSelectedUri); ++ // get real actual file name on disk ++ if (actualFilePath==null) actualFilePath = lastSelectedUri.toString(); ++ // set file name to last exported file name ++ fileSelector.putExtra(Intent.EXTRA_TITLE, ++ ContentUriUtils.getDisplayName(lastSelectedUri, context, ++ DocumentsContract.Document.COLUMN_DISPLAY_NAME)); ++ } ++ return null; ++ } ++ ++ @Override ++ protected void onPostExecute(Void result) { ++ // check for permissions ++ if (uriExists) { ++ AlertDialog.Builder alert = ++ new AlertDialog.Builder(context, R.style.Theme_Chromium_AlertDialog); ++ AlertDialog alertDialog = ++ alert.setTitle(R.string.export_bookmarks_alert_title) ++ .setMessage(context.getString(R.string.export_bookmarks_alert_message, actualFilePath)) ++ .setPositiveButton( ++ R.string.export_bookmarks_alert_message_yes, onClickListener) ++ .setNegativeButton(R.string.export_bookmarks_alert_message_no, onClickListener) ++ .create(); ++ alertDialog.getDelegate().setHandleNativeActionModesEnabled(false); ++ ++ // show dialog asking for overwrite ++ alertDialog.show(); ++ return; ++ } else { ++ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE); ++ } ++ } ++ }; ++ checkUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); ++ return; ++ } ++ ++ // actually open the file selector ++ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE); ++ } ++ ++ private void doExportBookmarksImpl(WindowAndroid window, Uri filePath) { ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ // since we want to persist the uri in settings, ask for persistable permissions ++ resolver.takePersistableUriPermission(filePath, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | ++ Intent.FLAG_GRANT_READ_URI_PERMISSION); ++ ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, BookmarkBridge.this, ++ window, filePath.toString()); ++ } ++ ++ private void exportBookmarksImplUseFile(WindowAndroid window, ModalDialogManager modalDialogManager) { ++ Context context = window.getContext().get(); ++ ++ // standard name for boorkmark file ++ final String standardBoorkmarkName = "bookmarks.html"; ++ ++ // use the download ui and standard file saving ++ DownloadLocationDialogController controller = new DownloadLocationDialogController() { ++ @Override ++ public void onDownloadLocationDialogComplete(String returnedPath) {} ++ ++ @Override ++ public void onDownloadLocationDialogCanceled() {} ++ }; ++ ++ DownloadLocationDialogCoordinator dialog = new DownloadLocationDialogCoordinator() { ++ @Override ++ protected void onDirectoryOptionsRetrieved(ArrayList dirs) { ++ if (mDialogModel != null) return; ++ ++ // Actually show the dialog. ++ mCustomView = (DownloadLocationCustomView) LayoutInflater.from(mContext).inflate( ++ R.layout.download_location_dialog, null); ++ mCustomView.initialize( ++ DownloadLocationDialogType.DEFAULT, new File(standardBoorkmarkName), ++ /*totalBytes*/ 0, context.getString(R.string.export_bookmarks_alert_title)); ++ mCustomView.mDontShowAgain.setVisibility(View.GONE); ++ ++ Resources resources = mContext.getResources(); ++ mDialogModel = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) ++ .with(ModalDialogProperties.CONTROLLER, this) ++ .with(ModalDialogProperties.CUSTOM_VIEW, mCustomView) ++ .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources, ++ R.string.export_bookmarks) ++ .with(ModalDialogProperties.PRIMARY_BUTTON_FILLED, true) ++ .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, ++ R.string.cancel) ++ .build(); ++ ++ mModalDialogManager.showDialog(mDialogModel, ModalDialogManager.ModalDialogType.APP); ++ } ++ ++ @Override ++ public void onDismiss(PropertyModel model, int dismissalCause) { ++ switch (dismissalCause) { ++ case DialogDismissalCause.POSITIVE_BUTTON_CLICKED: ++ { ++ String fileName = mCustomView.getFileName(); ++ String directory = mCustomView.getDirectoryOption().location; ++ if (fileName != null && directory != null) { ++ File file = new File(directory, fileName); ++ ++ if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) { ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, ++ BookmarkBridge.this, window, file.getPath()); ++ } else { ++ String[] requestPermissions = new String[] {permission.WRITE_EXTERNAL_STORAGE}; ++ window.requestPermissions(requestPermissions, (permissions, grantResults) -> { ++ if (grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, ++ BookmarkBridge.this, window, file.getPath()); ++ } ++ }); ++ }; ++ } ++ } ++ break; ++ } ++ mDialogModel = null; ++ mCustomView = null; ++ } ++ }; ++ dialog.initialize(controller); ++ dialog.showDialog(context, modalDialogManager, /*totalBytes*/ 0, ++ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ ""); + } + /** * Synchronously gets a list of bookmarks that match the specified search query. * @param query Keyword used for searching bookmarks. -@@ -942,6 +969,24 @@ public class BookmarkBridge { +@@ -1016,6 +1257,39 @@ public class BookmarkBridge { depthList.add(depth); } + @CalledByNative -+ public void bookmarksExported(String bookmarksPath) { -+ Context context = ContextUtils.getApplicationContext(); -+ -+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("file://" + bookmarksPath)); -+ intent.putExtra(Browser.EXTRA_APPLICATION_ID, -+ context.getPackageName()); -+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -+ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK); -+ -+ // If the bookmark manager is shown in a tab on a phone (rather than in a separate -+ // activity) the component name may be null. Send the intent through -+ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012. -+ intent.setClass(context, ChromeLauncherActivity.class); -+ -+ IntentHandler.startActivityForTrustedIntent(intent); ++ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) { ++ Uri uri = Uri.parse(bookmarksPath); ++ ++ if (success == false) { ++ ((Activity)window.getContext().get()).runOnUiThread(new Runnable() { ++ public void run() { ++ window.showError(R.string.saving_file_error); ++ } ++ }); ++ } else { ++ SharedPreferencesManager sharedPrefs = SharedPreferencesManager.getInstance(); ++ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath); ++ ++ Context context = ContextUtils.getApplicationContext(); ++ ++ Intent intent = new Intent(Intent.ACTION_VIEW, ++ ContentUriUtils.isContentUri(bookmarksPath) ? ++ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath)); ++ intent.putExtra(Browser.EXTRA_APPLICATION_ID, ++ context.getPackageName()); ++ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ++ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK); ++ ++ // If the bookmark manager is shown in a tab on a phone (rather than in a separate ++ // activity) the component name may be null. Send the intent through ++ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012. ++ intent.setClass(context, ChromeLauncherActivity.class); ++ ++ IntentHandler.startActivityForTrustedIntent(intent); ++ } + } + private static List> createPairsList(int[] left, int[] right) { List> pairList = new ArrayList>(); for (int i = 0; i < left.length; i++) { -@@ -1008,6 +1053,8 @@ public class BookmarkBridge { +@@ -1083,6 +1357,9 @@ public class BookmarkBridge { int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type); void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, - boolean getFolders, boolean getBookmarks, List bookmarksList); + List bookmarksList); + void importBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window); -+ void exportBookmarks(long nativeBookmarkBridge, BookmarkBridge caller); ++ void exportBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window, ++ String export_path); BookmarkId getChildAt( long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, int index); int getTotalBookmarkCount( @@ -263,40 +613,40 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java -@@ -35,8 +35,10 @@ import org.chromium.components.bookmarks.BookmarkId; +@@ -33,6 +33,8 @@ import org.chromium.components.browser_ui.util.ConversionUtils; import org.chromium.components.browser_ui.widget.dragreorder.DragStateDelegate; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListLayout; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar.SearchDelegate; +import org.chromium.ui.base.ActivityWindowAndroid; ++import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate; + import org.chromium.components.favicon.LargeIconBridge; import org.chromium.url.GURL; -+import org.chromium.chrome.browser.ChromeActivity; - - import java.util.Stack; - -@@ -55,6 +57,7 @@ public class BookmarkManager - private Activity mActivity; +@@ -55,6 +57,8 @@ public class BookmarkManager + private ComponentName mOpenBookmarkComponentName; private ViewGroup mMainView; private BookmarkModel mBookmarkModel; + private ActivityWindowAndroid mWindowAndroid; ++ private ModalDialogManager mModalDialogManager; private BookmarkUndoController mUndoController; private final ObserverList mUIObservers = new ObserverList<>(); private BasicNativePage mNativePage; -@@ -357,6 +360,13 @@ public class BookmarkManager +@@ -328,6 +332,14 @@ public class BookmarkManager mNativePage = nativePage; } + /** + * Sets the Android window that is used by further intents created by the bookmark activity. + */ -+ public void setWindow(ActivityWindowAndroid window) { ++ public void setWindow(ActivityWindowAndroid window, ModalDialogManager modalDialogManager) { + mWindowAndroid = window; ++ mModalDialogManager = modalDialogManager; + } + /** * @return Current URL representing the UI state of bookmark manager. If no state has been shown * yet in this session, on phone return last used state stored in preference; on tablet -@@ -529,6 +539,16 @@ public class BookmarkManager +@@ -506,6 +518,16 @@ public class BookmarkManager } } @@ -307,7 +657,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm + + @Override + public void exportBookmarks() { -+ mBookmarkModel.exportBookmarks(); ++ mBookmarkModel.exportBookmarks(mWindowAndroid, mModalDialogManager); + } + @Override @@ -316,50 +666,96 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java -@@ -29,6 +29,7 @@ public class BookmarkPage extends BasicNativePage { +@@ -13,6 +13,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; ++import org.chromium.chrome.browser.app.ChromeActivity; ++import org.chromium.ui.modaldialog.ModalDialogManager; ++import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; - mManager = new BookmarkManager(activity, false, activity.getSnackbarManager()); + /** + * A native page holding a {@link BookmarkManager} on _tablet_. +@@ -29,11 +32,15 @@ public class BookmarkPage extends BasicNativePage { + * @param host A NativePageHost to load urls. + */ + public BookmarkPage( +- ComponentName componentName, SnackbarManager snackbarManager, NativePageHost host) { ++ ComponentName componentName, SnackbarManager snackbarManager, NativePageHost host, ++ ChromeActivity activity) { + super(host); + + mManager = new BookmarkManager(host.getContext(), componentName, false, snackbarManager); mManager.setBasicNativePage(this); -+ mManager.setWindow(activity.getWindowAndroid()); ++ mManager.setWindow(activity.getWindowAndroid(), ++ new ModalDialogManager( ++ new AppModalPresenter(activity), ModalDialogManager.ModalDialogType.APP)); mTitle = host.getContext().getResources().getString(R.string.bookmarks); initWithView(mManager.getView()); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +@@ -95,7 +95,8 @@ public class NativePageFactory { + + protected NativePage buildBookmarksPage(Tab tab) { + return new BookmarkPage(mActivity.getComponentName(), mActivity.getSnackbarManager(), +- new TabShim(tab, mActivity)); ++ new TabShim(tab, mActivity), ++ mActivity); + } + + protected NativePage buildDownloadsPage(Tab tab) { diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -171,6 +171,10 @@ jumbo_static_library("browser") { +@@ -203,6 +203,8 @@ static_library("browser") { "bitmap_fetcher/bitmap_fetcher_service.h", "bitmap_fetcher/bitmap_fetcher_service_factory.cc", "bitmap_fetcher/bitmap_fetcher_service_factory.h", -+ "importer/profile_writer.cc", -+ "importer/profile_writer.h", + "bookmarks/bookmark_html_writer.cc", + "bookmarks/bookmark_html_writer.h", "bluetooth/bluetooth_chooser_context.cc", "bluetooth/bluetooth_chooser_context.h", "bluetooth/bluetooth_chooser_context_factory.cc", -@@ -3139,8 +3143,6 @@ jumbo_static_library("browser") { +@@ -1895,6 +1897,8 @@ static_library("browser") { + "webapps/chrome_webapps_client.h", + "window_placement/window_placement_permission_context.cc", + "window_placement/window_placement_permission_context.h", ++ "importer/profile_writer.cc", ++ "importer/profile_writer.h", + ] + + configs += [ +@@ -3439,8 +3443,6 @@ static_library("browser") { "badging/badge_manager_factory.h", "banners/app_banner_manager_desktop.cc", "banners/app_banner_manager_desktop.h", - "bookmarks/bookmark_html_writer.cc", - "bookmarks/bookmark_html_writer.h", - "certificate_viewer.h", - "chrome_browser_field_trials_desktop.cc", - "chrome_browser_field_trials_desktop.h", -@@ -3267,8 +3269,6 @@ jumbo_static_library("browser") { - "importer/importer_uma.h", - "importer/in_process_importer_bridge.cc", - "importer/in_process_importer_bridge.h", -- "importer/profile_writer.cc", -- "importer/profile_writer.h", - "lifetime/browser_close_manager.cc", - "lifetime/browser_close_manager.h", - "lifetime/termination_notification.cc", + "browsing_data/access_context_audit_database.cc", + "browsing_data/access_context_audit_database.h", + "browsing_data/access_context_audit_service.cc", +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 +@@ -7115,6 +7115,12 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE( + password_manager::features::kSyncingCompromisedCredentials)}, + ++ {"export-bookmarks-use-saf", ++ flag_descriptions::kBookmarksExportUseSafName, ++ flag_descriptions::kBookmarksExportUseSafDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE( ++ chrome::android::kBookmarksExportUseSaf)}, ++ + // NOTE: Adding a new flag requires adding a corresponding entry to enum + // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag + // Histograms" in tools/metrics/histograms/README.md (run the diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc -@@ -37,6 +37,7 @@ +@@ -39,6 +39,7 @@ #include "components/bookmarks/common/android/bookmark_type.h" #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/bookmarks/managed/managed_bookmark_service.h" @@ -367,7 +763,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse #include "components/dom_distiller/core/url_utils.h" #include "components/prefs/pref_service.h" #include "components/query_parser/query_parser.h" -@@ -46,6 +47,21 @@ +@@ -48,6 +49,24 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" @@ -385,11 +781,14 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse +#include "components/search_engines/template_url.h" +#include "components/url_formatter/url_fixer.h" +#include "ui/android/window_android.h" ++#include "base/task/task_traits.h" ++#include "base/task/thread_pool.h" ++#include "content/public/browser/browser_task_traits.h" + using base::android::AttachCurrentThread; using base::android::ConvertUTF8ToJavaString; using base::android::ConvertUTF16ToJavaString; -@@ -63,6 +79,56 @@ using bookmarks::BookmarkPermanentNode; +@@ -64,8 +83,93 @@ using bookmarks::BookmarkNode; using bookmarks::BookmarkType; using content::BrowserThread; @@ -445,11 +844,48 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse + namespace { ++class FileBookmarksExportObserver: public BookmarksExportObserver { ++ public: ++ FileBookmarksExportObserver( ++ const JavaParamRef& obj, ++ ui::WindowAndroid* window, ++ const std::string& export_path) : ++ obj_(ScopedJavaGlobalRef(obj)), ++ window_(window), ++ export_path_(export_path) {} ++ ++ void OnExportFinished(Result result) override { ++ if (result == Result::kSuccess) { ++ LOG(INFO) << "Bookmarks exported successfully to " << export_path_; ++ } else if (result == Result::kCouldNotCreateFile) { ++ LOG(ERROR) << "Bookmarks export: could not create file " << export_path_; ++ } else if (result == Result::kCouldNotWriteHeader) { ++ LOG(ERROR) << "Bookmarks export: could not write header"; ++ } else if (result == Result::kCouldNotWriteNodes) { ++ LOG(ERROR) << "Bookmarks export: could not write nodes"; ++ } ++ ++ JNIEnv* env = AttachCurrentThread(); ++ Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), ++ ConvertUTF8ToJavaString(env, export_path_), ++ result == Result::kSuccess); ++ delete this; ++ } ++ ++ private: ++ const ScopedJavaGlobalRef obj_; ++ ui::WindowAndroid* window_; ++ const std::string export_path_; ++}; ++ ++ const int kInvalidId = -1; -@@ -141,6 +207,10 @@ BookmarkBridge::~BookmarkBridge() { - bookmark_model_->RemoveObserver(this); + + class BookmarkTitleComparer { +@@ -150,6 +254,10 @@ BookmarkBridge::~BookmarkBridge() { if (partner_bookmarks_shim_) partner_bookmarks_shim_->RemoveObserver(this); + reading_list_manager_->RemoveObserver(this); + // There may be pending file dialogs, we need to tell them that we've gone + // away so they don't try and call back to us. + if (select_file_dialog_) @@ -457,7 +893,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef&) { -@@ -516,6 +586,153 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -540,6 +648,182 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -496,10 +932,21 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse +} + +void BookmarkBridge::ExportBookmarks(JNIEnv* env, -+ const JavaParamRef& obj) { ++ const JavaParamRef& obj, ++ const JavaParamRef& java_window, ++ const JavaParamRef& j_export_path) { + DCHECK(IsLoaded()); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + ++ ui::WindowAndroid* window = ++ ui::WindowAndroid::FromJavaWindowAndroid(java_window); ++ CHECK(window); ++ ++ base::string16 export_path = ++ base::android::ConvertJavaStringToUTF16(env, j_export_path); ++ ++ export_path_ = base::FilePath::FromUTF16Unsafe(export_path); ++ + if (export_path_.empty()) { + if (!base::android::GetDownloadsDirectory(&export_path_)) { + LOG(ERROR) << "Could not retrieve downloads directory for bookmarks export"; @@ -508,12 +955,8 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse + export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html")); + } + -+ bookmark_html_writer::WriteBookmarks(profile_, export_path_, NULL); -+ -+ Java_BookmarkBridge_bookmarksExported(env, obj, ConvertUTF8ToJavaString(env, export_path_.MaybeAsASCII())); -+ -+ //NOTE: nothing will be written if write permission has not been granted before -+ LOG(INFO) << "Bookmarks exported successfully to " << export_path_; ++ observer_ = new FileBookmarksExportObserver(obj, window, export_path_.MaybeAsASCII()); ++ bookmark_html_writer::WriteBookmarks(profile_, export_path_, observer_); +} + +// Attempts to create a TemplateURL from the provided data. |title| is optional. @@ -534,6 +977,17 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse + +void BookmarkBridge::FileSelected(const base::FilePath& path, int index, + void* params) { ++ base::ThreadPool::PostTaskAndReplyWithResult( ++ FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()}, ++ base::BindOnce(&BookmarkBridge::FileSelectedImpl, ++ base::Unretained(this), ++ path), ++ base::BindOnce(&BookmarkBridge::FileSelectedImplOnUIThread, ++ base::Unretained(this), ++ path)); ++} ++ ++const std::string BookmarkBridge::FileSelectedImpl(const base::FilePath& path) { + base::File file; + if (path.IsContentUri()) { + file = base::OpenContentUriForRead(path); @@ -542,32 +996,39 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse + } + if (!file.IsValid()) { + select_file_dialog_->ShowToast("Cannot open bookmarks file for import"); -+ return; ++ return ""; + } + + auto fileLength = file.GetLength(); + if (-1 == fileLength) { + select_file_dialog_->ShowToast("Cannot read bookmarks file length"); -+ return; ++ return ""; + } + + if (fileLength > 10 * 1024 * 1024) { + select_file_dialog_->ShowToast("Bookmark file is bigger than 10MB"); -+ return; ++ return ""; + } + + std::vector buffer(fileLength); + if (-1 == file.ReadAtCurrentPos(buffer.data(), fileLength)) { + select_file_dialog_->ShowToast("Could not read bookmarks file"); -+ return; ++ return ""; + } + + if (buffer.empty()) { + select_file_dialog_->ShowToast("Empty bookmarks file"); -+ return; ++ return ""; + } + + std::string contents(buffer.begin(), buffer.end()); ++ return contents; ++} ++ ++void BookmarkBridge::FileSelectedImplOnUIThread(const base::FilePath& path, ++ const std::string& contents) { ++ if (contents.empty()) ++ return; + + // the following import logic comes from BookmarksFileImporter class + std::vector bookmarks; @@ -599,10 +1060,14 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse + writer->AddKeywords(std::move(owned_template_urls), false); + } + -+ select_file_dialog_->ShowToast("Bookmarks import complete"); -+ -+ LOG(INFO) << "Imported " << bookmarks.size() << " bookmarks and " << ++ std::stringstream message; ++ message << "Imported " << bookmarks.size() << " bookmarks and " << + search_engines.size() << " search engines from " << path.MaybeAsASCII(); ++ auto result = message.str(); ++ ++ select_file_dialog_->ShowToast(result); ++ ++ LOG(INFO) << result; +} + +void BookmarkBridge::FileSelectionCanceled(void* params) { @@ -614,26 +1079,35 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h --- a/chrome/browser/android/bookmarks/bookmark_bridge.h +++ b/chrome/browser/android/bookmarks/bookmark_bridge.h -@@ -19,6 +19,8 @@ - #include "components/bookmarks/browser/base_bookmark_model_observer.h" - #include "components/bookmarks/common/android/bookmark_id.h" +@@ -17,6 +17,7 @@ + #include "base/strings/string16.h" + #include "base/strings/utf_string_conversions.h" + #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" ++#include "chrome/browser/bookmarks/bookmark_html_writer.h" + #include "chrome/browser/profiles/profile.h" + #include "chrome/browser/profiles/profile_observer.h" + #include "chrome/browser/reading_list/android/reading_list_manager.h" +@@ -25,6 +26,9 @@ #include "components/prefs/pref_change_registrar.h" + #include "url/android/gurl_android.h" + +#include "components/search_engines/template_url.h" +#include "ui/shell_dialogs/select_file_dialog.h" - ++ namespace bookmarks { class BookmarkModel; -@@ -32,7 +34,8 @@ class Profile; - // bookmark page. This fetches the bookmarks, title, urls, folder - // hierarchy. + class ManagedBookmarkService; +@@ -39,7 +43,8 @@ class Profile; class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, -- public PartnerBookmarksShim::Observer { -+ public PartnerBookmarksShim::Observer, -+ public ui::SelectFileDialog::Listener { + public PartnerBookmarksShim::Observer, + public ReadingListManager::Observer, +- public ProfileObserver { ++ public ProfileObserver, ++ public ui::SelectFileDialog::Listener { public: BookmarkBridge(JNIEnv* env, const base::android::JavaRef& obj, -@@ -42,6 +45,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -55,6 +60,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, bool IsDoingExtensiveChanges(JNIEnv* env, const base::android::JavaParamRef& obj); @@ -646,7 +1120,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting( -@@ -131,6 +140,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -142,6 +153,15 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, jlong id, jint type); @@ -655,16 +1129,19 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser + const base::android::JavaParamRef& java_window); + + void ExportBookmarks(JNIEnv* env, -+ const base::android::JavaParamRef& obj); ++ const base::android::JavaParamRef& obj, ++ const base::android::JavaParamRef& java_window, ++ const base::android::JavaParamRef& j_export_path); + void SetBookmarkTitle(JNIEnv* env, const base::android::JavaParamRef& obj, jlong id, -@@ -276,12 +292,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, - void ShimBeingDeleted(PartnerBookmarksShim* shim) override; +@@ -315,12 +335,15 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + void DestroyJavaObject(); Profile* profile_; + base::FilePath export_path_; ++ BookmarksExportObserver* observer_; // weak JavaObjectWeakGlobalRef weak_java_ref_; bookmarks::BookmarkModel* bookmark_model_; // weak bookmarks::ManagedBookmarkService* managed_bookmark_service_; // weak @@ -675,10 +1152,183 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. +@@ -332,6 +355,9 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + // Observes the profile destruction and creation. + ScopedObserver profile_observer_{this}; + ++ const std::string FileSelectedImpl(const base::FilePath& path); ++ void FileSelectedImplOnUIThread(const base::FilePath& path, ++ const std::string& contents); + DISALLOW_COPY_AND_ASSIGN(BookmarkBridge); + }; + +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 +@@ -27,6 +27,7 @@ + #include "base/task/thread_pool.h" + #include "base/time/time.h" + #include "base/values.h" ++#include "base/android/content_uri_utils.h" + #include "chrome/browser/bookmarks/bookmark_model_factory.h" + #include "chrome/browser/favicon/favicon_service_factory.h" + #include "chrome/browser/profiles/profile.h" +@@ -240,7 +241,11 @@ class Writer : public base::RefCountedThreadSafe { + // Opens the file, returning true on success. + bool OpenFile() { + int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE; +- file_.reset(new base::File(path_, flags)); ++ if (path_.IsContentUri()) { ++ file_ = std::make_unique(base::OpenContentUriForWrite(path_)); ++ } else { ++ file_.reset(new base::File(path_, flags)); ++ } + if (!file_->IsValid()) { + PLOG(ERROR) << "Could not create " << path_; + return false; +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 +@@ -49,7 +49,7 @@ public class DownloadLocationCustomView + private TextView mFileSize; + private Spinner mFileLocation; + private TextView mLocationAvailableSpace; +- private CheckBox mDontShowAgain; ++ public CheckBox mDontShowAgain; + private @DownloadLocationDialogType int mDialogType; + private long mTotalBytes; + +@@ -71,6 +71,7 @@ public class DownloadLocationCustomView + mDontShowAgain = findViewById(R.id.show_again_checkbox); + } + ++ public + void initialize(@DownloadLocationDialogType int dialogType, File suggestedPath, long totalBytes, + CharSequence title) { + mDialogType = dialogType; +@@ -131,7 +132,7 @@ public class DownloadLocationCustomView + * @return The text that the user inputted as the name of the file. + */ + @Nullable +- String getFileName() { ++ public String getFileName() { + if (mFileName == null || mFileName.getText() == null) return null; + return mFileName.getText().toString(); + } +@@ -140,7 +141,7 @@ public class DownloadLocationCustomView + * @return The file path based on what the user selected as the location of the file. + */ + @Nullable +- DirectoryOption getDirectoryOption() { ++ 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 +@@ -34,13 +34,13 @@ import java.util.ArrayList; + public class DownloadLocationDialogCoordinator implements ModalDialogProperties.Controller { + @NonNull + private DownloadLocationDialogController mController; +- private PropertyModel mDialogModel; +- private DownloadLocationCustomView mCustomView; +- private ModalDialogManager mModalDialogManager; ++ protected PropertyModel mDialogModel; ++ protected DownloadLocationCustomView mCustomView; ++ protected ModalDialogManager mModalDialogManager; + private long mTotalBytes; + private @DownloadLocationDialogType int mDialogType; + private String mSuggestedPath; +- private Context mContext; ++ protected Context mContext; + + /** + * Initializes the download location dialog. +@@ -119,7 +119,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; + +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -4988,6 +4988,11 @@ const char kWebrtcPipeWireCapturerDescription[] = + "capturing the desktop content on the Wayland display server."; + #endif // #if defined(WEBRTC_USE_PIPEWIRE) + ++const char kBookmarksExportUseSafName[] = "Use saf for bookmarks export"; ++const char kBookmarksExportUseSafDescription[] = ++ "When enabled user can choose where save the exported bookmarks " ++ "file."; ++ + // ============================================================================ + // Don't just add flags to the end, put them in the right section in + // alphabetical order just like the header file. +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -2928,6 +2928,9 @@ extern const char kWebrtcPipeWireCapturerName[]; + extern const char kWebrtcPipeWireCapturerDescription[]; + #endif // #if defined(WEBRTC_USE_PIPEWIRE) + ++extern const char kBookmarksExportUseSafName[]; ++extern const char kBookmarksExportUseSafDescription[]; ++ + // ============================================================================ + // Don't just add flags to the end, put them in the right section in + // alphabetical order. See top instructions for more. +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 +@@ -138,6 +138,7 @@ const base::Feature* kFeaturesExposedToJava[] = { + &kAssistantIntentPageUrl, + &kAssistantIntentTranslateInfo, + &kBentoOffline, ++ &kBookmarksExportUseSaf, + &kCastDeviceFilter, + &kCloseTabSuggestions, + &kCriticalPersistedTabData, +@@ -724,6 +725,9 @@ const base::Feature kVoiceButtonInTopToolbar{"VoiceButtonInTopToolbar", + const base::Feature kVrBrowsingFeedback{"VrBrowsingFeedback", + base::FEATURE_ENABLED_BY_DEFAULT}; + ++const base::Feature kBookmarksExportUseSaf{"BookmarksExportUseSaf", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + static jboolean JNI_ChromeFeatureList_IsEnabled( + JNIEnv* env, + const JavaParamRef& jfeature_name) { +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 +@@ -151,6 +151,7 @@ extern const base::Feature kVoiceSearchAudioCapturePolicy; + extern const base::Feature kVoiceButtonInTopToolbar; + extern const base::Feature kVrBrowsingFeedback; + extern const base::Feature kPrefetchNotificationSchedulingIntegration; ++extern const base::Feature kBookmarksExportUseSaf; + + } // namespace android + } // namespace chrome +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 +@@ -481,6 +481,7 @@ public abstract class ChromeFeatureList { + public static final String WEB_AUTH_PHONE_SUPPORT = "WebAuthenticationPhoneSupport"; + public static final String WEB_FEED = "WebFeed"; + public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting"; ++ public static final String BOOKMARKS_EXPORT_USESAF = "BookmarksExportUseSaf"; + + @NativeMethods + interface Natives { 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 -@@ -96,12 +96,14 @@ void ProfileWriter::AddHistoryPage(const history::URLRows& page, +@@ -105,12 +105,14 @@ void ProfileWriter::AddHistoryPage(const history::URLRows& page, HistoryServiceFactory::GetForProfile(profile_, ServiceAccessType::EXPLICIT_ACCESS) ->AddPagesWithDetails(page, visit_source); @@ -693,7 +1343,7 @@ diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer } void ProfileWriter::AddHomepage(const GURL& home_page) { -@@ -122,6 +124,16 @@ void ProfileWriter::AddBookmarks( +@@ -131,6 +133,16 @@ void ProfileWriter::AddBookmarks( return; BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_); @@ -721,7 +1371,7 @@ 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" -@@ -67,6 +68,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { +@@ -70,6 +71,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { const std::vector& bookmarks, const base::string16& top_level_folder_name); @@ -733,10 +1383,30 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ virtual void AddFavicons(const favicon_base::FaviconUsageDataList& favicons); // Adds the TemplateURLs in |template_urls| to the local store. +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 +@@ -90,6 +90,8 @@ public final class ChromePreferenceKeys { + public static final String BOOKMARKS_LAST_USED_URL = "enhanced_bookmark_last_used_url"; + public static final String BOOKMARKS_LAST_USED_PARENT = + "enhanced_bookmark_last_used_parent_folder"; ++ public static final String BOOKMARKS_LAST_EXPORT_URI = ++ "Chrome.Bookmarks.Last_Export_Uri"; + + /** + * Whether Chrome is set as the default browser. +@@ -845,6 +847,7 @@ public final class ChromePreferenceKeys { + AUTOFILL_ASSISTANT_NUMBER_OF_LITE_SCRIPTS_CANCELED, + AUTOFILL_ASSISTANT_PROACTIVE_HELP, + APPLICATION_OVERRIDE_LANGUAGE, ++ BOOKMARKS_LAST_EXPORT_URI, + CLIPBOARD_SHARED_URI, + CONDITIONAL_TAB_STRIP_CONTINUOUS_DISMISS_COUNTER, + CONDITIONAL_TAB_STRIP_FEATURE_STATUS, 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 -@@ -245,6 +245,12 @@ CHAR-LIMIT guidelines: +@@ -242,6 +242,24 @@ CHAR-LIMIT guidelines: Sites @@ -745,6 +1415,18 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro + + + Export ++ ++ ++ Export bookmarks to file ++ ++ ++ Do you want to overwrite %s? ++ ++ ++ Yes ++ ++ ++ Choose another file + Virtual Reality @@ -752,7 +1434,7 @@ 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 -@@ -423,6 +423,9 @@ static_library("common") { +@@ -402,6 +402,9 @@ static_library("common") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -765,7 +1447,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn -@@ -70,8 +70,6 @@ static_library("utility") { +@@ -73,8 +73,6 @@ static_library("utility") { if (!is_android) { sources += [ @@ -773,8 +1455,8 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn - "importer/bookmark_html_reader.h", "importer/bookmarks_file_importer.cc", "importer/bookmarks_file_importer.h", - "importer/edge_database_reader_win.cc", -@@ -169,6 +167,11 @@ static_library("utility") { + "importer/external_process_importer_bridge.cc", +@@ -191,6 +189,11 @@ static_library("utility") { } } @@ -889,23 +1571,23 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/imp diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java --- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java +++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java -@@ -36,6 +36,7 @@ import org.chromium.base.task.PostTask; +@@ -35,6 +35,7 @@ import org.chromium.base.task.AsyncTask; + import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; - import org.chromium.ui.PhotoPickerListener; import org.chromium.ui.R; +import org.chromium.ui.widget.Toast; import org.chromium.ui.UiUtils; import java.io.File; -@@ -55,6 +56,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick - private static final String IMAGE_TYPE = "image/"; - private static final String VIDEO_TYPE = "video/"; - private static final String AUDIO_TYPE = "audio/"; -+ private static final String HTML_TYPE = "text/html"; - private static final String ALL_IMAGE_TYPES = IMAGE_TYPE + "*"; - private static final String ALL_VIDEO_TYPES = VIDEO_TYPE + "*"; - private static final String ALL_AUDIO_TYPES = AUDIO_TYPE + "*"; -@@ -133,6 +135,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -53,6 +54,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + private static final String TAG = "SelectFileDialog"; + private static final String IMAGE_TYPE = "image"; + private static final String VIDEO_TYPE = "video"; ++ private static final String HTML_TYPE = "html"; + private static final String AUDIO_TYPE = "audio"; + private static final String ALL_TYPES = "*/*"; + +@@ -143,6 +145,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick mFileTypes = fileTypes; } @@ -917,7 +1599,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui /** * Creates and starts an intent based on the passed fileTypes and capture value. * @param fileTypes MIME types requested (i.e. "image/*") -@@ -160,7 +167,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -170,7 +177,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick List missingPermissions = new ArrayList<>(); String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE; boolean shouldUsePhotoPicker = shouldUsePhotoPicker(); @@ -926,7 +1608,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui if (!window.hasPermission(storagePermission)) missingPermissions.add(storagePermission); } else { if (((mSupportsImageCapture && shouldShowImageTypes()) -@@ -188,7 +195,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -198,7 +205,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick } // TODO(finnur): Remove once we figure out the cause of crbug.com/950024. @@ -935,7 +1617,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("Permissions arrays misaligned: %d != %d", -@@ -202,7 +209,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -212,7 +219,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick } } @@ -944,7 +1626,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui onFileNotSelected(); return; } -@@ -351,6 +358,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick +@@ -358,6 +365,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick } if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType); } @@ -952,21 +1634,34 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui return mimeTypes; } -@@ -631,6 +639,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick - return countAcceptTypesFor(specificType) > 0; +@@ -659,6 +667,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + return countAcceptTypesFor(superType) == mFileTypes.size(); } + private boolean shouldShowHtmlTypes() { + return countAcceptTypesFor(HTML_TYPE) > 0; + } + - private boolean shouldShowImageTypes() { - return shouldShowTypes(ALL_IMAGE_TYPES, IMAGE_TYPE); - } + /** + * Checks whether the list of accepted types effectively describes only a single + * type, which might be wildcard. For example: +diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/strings/android_ui_strings.grd +--- a/ui/android/java/strings/android_ui_strings.grd ++++ b/ui/android/java/strings/android_ui_strings.grd +@@ -174,6 +174,9 @@ + + Failed to open selected file + ++ ++ Failed to save selected file ++ + + + diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_file_dialog.h --- a/ui/shell_dialogs/select_file_dialog.h +++ b/ui/shell_dialogs/select_file_dialog.h -@@ -191,6 +191,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog +@@ -204,6 +204,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog void* params); bool HasMultipleFileTypeChoices(); @@ -978,7 +1673,7 @@ diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_fil diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc --- a/ui/shell_dialogs/select_file_dialog_android.cc +++ b/ui/shell_dialogs/select_file_dialog_android.cc -@@ -139,6 +139,12 @@ void SelectFileDialogImpl::SelectFileImpl( +@@ -140,6 +140,12 @@ void SelectFileDialogImpl::SelectFileImpl( owning_window->GetJavaObject()); } diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index 6ce9aa7fe9d6326f058682556f1e5cf1e00512be..29d54bfde9962c41eaededa4279fa30c5085a509 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -3,54 +3,40 @@ Date: Wed, 29 Aug 2018 11:03:44 +0200 Subject: Add custom tab intents privacy option --- - chrome/android/java/res/values/values.xml | 3 +++ - chrome/android/java/res/xml/privacy_preferences.xml | 5 +++++ - .../chrome/browser/LaunchIntentDispatcher.java | 4 ++++ - .../browser/privacy/settings/PrivacySettings.java | 11 +++++++++++ - .../ui/android/strings/android_chrome_strings.grd | 7 +++++++ - 5 files changed, 30 insertions(+) + chrome/android/java/res/xml/privacy_preferences.xml | 5 +++++ + .../chrome/browser/LaunchIntentDispatcher.java | 4 ++++ + .../browser/privacy/settings/PrivacySettings.java | 13 ++++++++++++- + .../ui/android/strings/android_chrome_strings.grd | 7 +++++++ + 4 files changed, 28 insertions(+), 1 deletion(-) -diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml ---- a/chrome/android/java/res/values/values.xml -+++ b/chrome/android/java/res/values/values.xml -@@ -14,6 +14,9 @@ - 0.5 - 0.5 - -+ Allow custom tab intents from applications -+ When disabled, all custom tab intents will be processed as regular navigation instead -+ - - 5 - 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 -@@ -29,6 +29,11 @@ - android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" +@@ -28,6 +28,11 @@ android:key="do_not_track" - android:title="@string/do_not_track_title" /> -+ ++ - Show original @@ -110,7 +101,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro + - + -- 2.17.1 diff --git a/build/patches/Add-exit-menu-item.patch b/build/patches/Add-exit-menu-item.patch index 7197886b79646acc4ad20b5ecc5a0980f9b0f1a2..9ca9be862f2c145b5843b55baf68cb1722c95dcf 100644 --- a/build/patches/Add-exit-menu-item.patch +++ b/build/patches/Add-exit-menu-item.patch @@ -4,36 +4,93 @@ Subject: Add exit menu item Corrected Exit functionality --- - chrome/android/java/res/menu/main_menu.xml | 2 ++ - .../src/org/chromium/chrome/browser/ChromeActivity.java | 2 ++ + chrome/android/java/res/menu/main_menu.xml | 6 ++++++ + chrome/android/java/res/menu/main_menu_regroup.xml | 3 +++ + .../org/chromium/chrome/browser/ChromeTabbedActivity.java | 3 +++ + .../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++ .../chrome/browser/init/ChromeLifetimeController.java | 6 +++++- .../browser/ui/android/strings/android_chrome_strings.grd | 3 +++ - 4 files changed, 12 insertions(+), 1 deletion(-) + 6 files changed, 26 insertions(+), 1 deletion(-) 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 -@@ -87,6 +87,8 @@ - android:title="@string/menu_help" /> - +@@ -119,6 +119,9 @@ + android:icon="@drawable/vr_headset" /> + + ++ android:title="@string/menu_exit" ++ android:icon="@drawable/ic_exit_to_app_white_24dp" /> -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java -@@ -1961,6 +1961,8 @@ public abstract class ChromeActivity - AddToHomescreenCoordinator.showForAppMenu( - this, getWindowAndroid(), getModalDialogManager(), currentTab.getWebContents()); - RecordUserAction.record("MobileMenuAddToHomescreen"); +@@ -145,6 +148,9 @@ + ++ + + + +diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml +--- a/chrome/android/java/res/menu/main_menu_regroup.xml ++++ b/chrome/android/java/res/menu/main_menu_regroup.xml +@@ -181,6 +181,9 @@ + android:icon="@drawable/vr_headset" /> + ++ + + + +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 +@@ -58,6 +58,7 @@ import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; + import org.chromium.chrome.browser.IntentHandler.TabOpenType; + import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; + import org.chromium.chrome.browser.app.ChromeActivity; ++import org.chromium.chrome.browser.ApplicationLifetime; + import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton; + import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier; + import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; +@@ -1821,6 +1822,8 @@ public class ChromeTabbedActivity extends ChromeActivity + RecordUserAction.record("MobileMenuSettings"); + } + ++ if (id == R.id.exit_id) { ++ ApplicationLifetime.terminate(false); ++ return true; ++ } ++ + if (id == R.id.update_menu_id) { + UpdateMenuItemHelper.getInstance().onMenuItemClicked(this); + return true; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java @@ -53,7 +110,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 -@@ -2843,6 +2843,9 @@ To change this setting, <resetlink>reset sync

Settings diff --git a/build/patches/Add-flag-for-save-data-header.patch b/build/patches/Add-flag-for-save-data-header.patch new file mode 100644 index 0000000000000000000000000000000000000000..c1804eac03410f836ab9b6f8fdad006f601d2c65 --- /dev/null +++ b/build/patches/Add-flag-for-save-data-header.patch @@ -0,0 +1,98 @@ +From: Wengling Chen +Date: Mon, 1 Feb 2021 19:18:55 +0200 +Subject: Add flag for save-data-header + +--- + chrome/browser/about_flags.cc | 3 +++ + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + content/browser/loader/browser_initiated_resource_request.cc | 5 +++-- + services/network/public/cpp/features.cc | 4 ++++ + services/network/public/cpp/features.h | 2 ++ + 6 files changed, 19 insertions(+), 2 deletions(-) + +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 +@@ -4332,6 +4332,9 @@ const FeatureEntry kFeatureEntries[] = { + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + + #if defined(OS_ANDROID) ++ {"enable-save-data-header", flag_descriptions::kEnableSaveDataHeaderName, ++ flag_descriptions::kEnableSaveDataHeaderDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)}, + {"enable-command-line-on-non-rooted-devices", + flag_descriptions::kEnableCommandLineOnNonRootedName, + flag_descriptions::kEnableCommandLineOnNoRootedDescription, kOsAndroid, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -913,6 +913,10 @@ const char kDisableKeepaliveFetchDescription[] = + "Disable fetch with keepalive set " + "(https://fetch.spec.whatwg.org/#request-keepalive-flag)."; + ++const char kEnableSaveDataHeaderName[] = "Enable save-data header"; ++const char kEnableSaveDataHeaderDescription[] = ++ "Enable save-data header without enabling Data Saver."; ++ + const char kExperimentalAccessibilityLanguageDetectionName[] = + "Experimental accessibility language detection"; + const char kExperimentalAccessibilityLanguageDetectionDescription[] = +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -518,6 +518,9 @@ extern const char kDiagnosticsAppDescription[]; + extern const char kDisableKeepaliveFetchName[]; + extern const char kDisableKeepaliveFetchDescription[]; + ++extern const char kEnableSaveDataHeaderName[]; ++extern const char kEnableSaveDataHeaderDescription[]; ++ + extern const char kMemlogName[]; + extern const char kMemlogDescription[]; + extern const char kMemlogModeMinimal[]; +diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc +--- a/content/browser/loader/browser_initiated_resource_request.cc ++++ b/content/browser/loader/browser_initiated_resource_request.cc +@@ -40,9 +40,10 @@ void UpdateAdditionalHeadersForBrowserInitiatedRequest( + + // Set the Save-Data header if appropriate. + // https://tools.ietf.org/html/draft-grigorik-http-client-hints-03#section-7 +- if (GetContentClient()->browser()->IsDataSaverEnabled(browser_context) && ++ if ((GetContentClient()->browser()->IsDataSaverEnabled(browser_context) && + !base::GetFieldTrialParamByFeatureAsBool(features::kDataSaverHoldback, +- "holdback_web", false)) { ++ "holdback_web", false)) || ++ base::FeatureList::IsEnabled(network::features::kEnableSaveDataHeader)) { + if (should_update_existing_headers) { + headers->RemoveHeader("Save-Data"); + } +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 +@@ -150,6 +150,10 @@ const base::FeatureParam + const base::Feature kDisableKeepaliveFetch{"DisableKeepaliveFetch", + base::FEATURE_DISABLED_BY_DEFAULT}; + ++// Enable save-data header seprately, without enabled data reduction service ++const base::Feature kEnableSaveDataHeader{"EnableSaveDataHeader", ++ base::FEATURE_DISABLED_BY_DEFAULT}; ++ + // Controls whether a |request_initiator| that mismatches + // |request_initiator_origin_lock| leads to 1) failing the HTTP request and 2) + // calling mojo::ReportBadMessage (on desktop platforms, where NetworkService +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 +@@ -58,6 +58,8 @@ extern const base::FeatureParam + COMPONENT_EXPORT(NETWORK_CPP) + extern const base::Feature kDisableKeepaliveFetch; + COMPONENT_EXPORT(NETWORK_CPP) ++extern const base::Feature kEnableSaveDataHeader; ++COMPONENT_EXPORT(NETWORK_CPP) + extern const base::Feature kRequestInitiatorSiteLockEnfocement; + COMPONENT_EXPORT(NETWORK_CPP) + extern const base::Feature kCertVerifierService; +-- +2.17.1 + diff --git a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch index 64657248df003bba8c123c686485fc7622a74134..6ef762f2297cccdf282cd775c1e9bca902863624 100644 --- a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch +++ b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch @@ -19,7 +19,7 @@ with limited CPU/memory resources and it is disabled by default. 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 -@@ -734,6 +734,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = { +@@ -816,6 +816,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = { net::kEffectiveConnectionType4G}, }; @@ -31,22 +31,22 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // Ensure that all effective connection types returned by Network Quality // Estimator (NQE) are also exposed via flags. static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 == -@@ -2930,6 +2935,9 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kPassiveDocumentEventListenersName, - flag_descriptions::kPassiveDocumentEventListenersDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kPassiveDocumentEventListeners)}, +@@ -3656,6 +3661,9 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kAndroidPictureInPictureAPIName, + flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid, + FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)}, + {"max-connections-per-host", flag_descriptions::kMaxConnectionsPerHostName, + flag_descriptions::kMaxConnectionsPerHostDescription, kOsAll, + MULTI_VALUE_TYPE(kMaxConnectionsPerHostChoices)}, - {"document-passive-wheel-event-listeners", - flag_descriptions::kPassiveDocumentWheelEventListenersName, - flag_descriptions::kPassiveDocumentWheelEventListenersDescription, kOsAll, + {"reengagement-notification", + flag_descriptions::kReengagementNotificationName, + flag_descriptions::kReengagementNotificationDescription, kOsAndroid, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1150,6 +1150,10 @@ const char kMediaInspectorLoggingDescription[] = - "Move media logging from chrome://media-internals into the developer tools " - "project."; +@@ -1404,6 +1404,10 @@ const char kMediaHistoryDescription[] = + "Enables Media History which records data around media playbacks on " + "websites."; +const char kMaxConnectionsPerHostName[] = "Maximum connections per host"; +const char kMaxConnectionsPerHostDescription[] = @@ -58,9 +58,9 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -687,6 +687,9 @@ extern const char kMediaHistoryDescription[]; - extern const char kMediaInspectorLoggingName[]; - extern const char kMediaInspectorLoggingDescription[]; +@@ -832,6 +832,9 @@ extern const char kLogJsConsoleMessagesDescription[]; + extern const char kMediaHistoryName[]; + extern const char kMediaHistoryDescription[]; +extern const char kMaxConnectionsPerHostName[]; +extern const char kMaxConnectionsPerHostDescription[]; @@ -111,13 +111,13 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon --- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn +++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn @@ -73,6 +73,7 @@ executable("make_top_domain_list_variables") { - "//base", "//base:i18n", + "//components/url_formatter/spoof_checks/common_words:common", "//third_party/icu", + "//components/network_session_configurator/common" ] if (is_ios) { - libs = [ "UIKit.framework" ] + frameworks = [ "UIKit.framework" ] diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc diff --git a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch index 020c0eb4f8c793572f669676b04507b50a404013..7602077d0c0edcd0c1b001a4b8f5dd2ec113c49a 100644 --- a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch +++ b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch @@ -13,23 +13,23 @@ Disable it by default on Android as it is everywhere else 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 -@@ -1939,6 +1939,10 @@ const FeatureEntry kFeatureEntries[] = { - kOsAura, - FEATURE_VALUE_TYPE(features::kOverlayScrollbarFlashWhenMouseEnter)}, - #endif // USE_AURA +@@ -2635,6 +2635,10 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kWebRtcRemoteEventLogName, + flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)}, + {"resume-background-video", + flag_descriptions::kResumeBackgroundVideoName, + flag_descriptions::kResumeBackgroundVideoDescription, kOsAll, + FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)}, - {"enable-quic", flag_descriptions::kQuicName, - flag_descriptions::kQuicDescription, kOsAll, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableQuic, switches::kDisableQuic)}, + #endif + {"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName, + flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -778,6 +778,11 @@ const char kMemlogStackModeNative[] = "Native"; - const char kMemlogStackModeNativeWithThreadNames[] = "Native with thread names"; - const char kMemlogStackModePseudo[] = "Trace events"; +@@ -972,6 +972,11 @@ const char kEnableLoginDetectionName[] = "Enable login detection"; + const char kEnableLoginDetectionDescription[] = + "Allow user sign-in to be detected based on heuristics."; +const char kResumeBackgroundVideoName[] = "Resume background video."; +const char kResumeBackgroundVideoDescription[] = @@ -42,7 +42,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -447,6 +447,9 @@ extern const char kEnablePortalsDescription[]; +@@ -558,6 +558,9 @@ extern const char kEnablePortalsDescription[]; extern const char kEnablePortalsCrossOriginName[]; extern const char kEnablePortalsCrossOriginDescription[]; @@ -55,7 +55,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio 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 -@@ -235,11 +235,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad", +@@ -246,11 +246,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad", // when in background. const base::Feature kResumeBackgroundVideo { "resume-background-video", @@ -67,7 +67,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc + base::FEATURE_DISABLED_BY_DEFAULT }; - // Enable Media Capabilities with finch-parameters. + // When enabled, MediaCapabilities will check with GPU Video Accelerator -- 2.17.1 diff --git a/build/patches/Add-flag-to-disable-IPv6-probes.patch b/build/patches/Add-flag-to-disable-IPv6-probes.patch index ccd750fba5d6df742c926d0a6a51431fb9930884..d50d47b2bf75e1ca26d7da49cd5b2108d480ff5d 100644 --- a/build/patches/Add-flag-to-disable-IPv6-probes.patch +++ b/build/patches/Add-flag-to-disable-IPv6-probes.patch @@ -16,9 +16,9 @@ Subject: Add flag to disable IPv6 probes 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 -@@ -3455,6 +3455,11 @@ const FeatureEntry kFeatureEntries[] = { - FEATURE_VALUE_TYPE(features::kDirectManipulationStylus)}, - #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) +@@ -4604,6 +4604,11 @@ const FeatureEntry kFeatureEntries[] = { + #endif // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || + // defined(OS_CHROMEOS) + {"ipv6-probing", + flag_descriptions::kIPv6ProbingName, @@ -26,12 +26,12 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc + FEATURE_VALUE_TYPE(network::features::kIPv6Probing)}, + #if !defined(OS_ANDROID) - {"ntp-confirm-suggestion-removals", - flag_descriptions::kNtpConfirmSuggestionRemovalsName, + {"ntp-cache-one-google-bar", flag_descriptions::kNtpCacheOneGoogleBarName, + flag_descriptions::kNtpCacheOneGoogleBarDescription, kOsDesktop, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2350,6 +2350,10 @@ const char kContextualSearchRankerQueryDescription[] = +@@ -2805,6 +2805,10 @@ const char kContextualSearchRankerQueryDescription[] = const char kContextualSearchSecondTapName[] = "Contextual Search second tap triggering"; @@ -45,7 +45,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -513,6 +513,9 @@ extern const char kEnableWasmThreadsName[]; +@@ -625,6 +625,9 @@ extern const char kEnableWasmThreadsName[]; extern const char kEnableWasmThreadsDescription[]; extern const char kEnableWasmTieringName[]; @@ -89,19 +89,19 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon --- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn +++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn @@ -73,7 +73,8 @@ executable("make_top_domain_list_variables") { - "//base", "//base:i18n", + "//components/url_formatter/spoof_checks/common_words:common", "//third_party/icu", - "//components/network_session_configurator/common" + "//components/network_session_configurator/common", + "//services/network/public/cpp", ] if (is_ios) { - libs = [ "UIKit.framework" ] + frameworks = [ "UIKit.framework" ] 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 -@@ -92,6 +92,7 @@ +@@ -94,6 +94,7 @@ #include "net/log/net_log_event_type.h" #include "net/log/net_log_source.h" #include "net/log/net_log_source_type.h" @@ -109,7 +109,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/socket/datagram_client_socket.h" -@@ -3564,8 +3565,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) { +@@ -3369,8 +3370,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) { if (last_ipv6_probe_time_.is_null() || (tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() > kIPv6ProbePeriodMs) { @@ -128,7 +128,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc 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 -@@ -52,6 +52,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT}; +@@ -40,6 +40,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kThrottleDelayable{"ThrottleDelayable", base::FEATURE_ENABLED_BY_DEFAULT}; @@ -142,15 +142,15 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c 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 -@@ -21,6 +21,8 @@ extern const base::Feature kNetworkErrorLogging; +@@ -19,6 +19,8 @@ extern const base::Feature kNetworkErrorLogging; COMPONENT_EXPORT(NETWORK_CPP) extern const base::Feature kNetworkService; COMPONENT_EXPORT(NETWORK_CPP) +extern const base::Feature kIPv6Probing; +COMPONENT_EXPORT(NETWORK_CPP) - extern const base::Feature kOutOfBlinkCors; - COMPONENT_EXPORT(NETWORK_CPP) extern const base::Feature kReporting; + COMPONENT_EXPORT(NETWORK_CPP) + extern const base::Feature kThrottleDelayable; -- 2.17.1 diff --git a/build/patches/Add-flag-to-disable-WebGL.patch b/build/patches/Add-flag-to-disable-WebGL.patch index 3ff8309ca98d430126c4307121b4b55b58e96dcb..82bd3ea34ce1f3a29416ac807ff2aa91d2878a47 100644 --- a/build/patches/Add-flag-to-disable-WebGL.patch +++ b/build/patches/Add-flag-to-disable-WebGL.patch @@ -11,7 +11,7 @@ Subject: Add flag to disable WebGL 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 -@@ -1765,6 +1765,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -2588,6 +2588,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAccelerated2dCanvasName, flag_descriptions::kAccelerated2dCanvasDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)}, @@ -24,30 +24,30 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -401,6 +401,10 @@ const char kDeviceDiscoveryNotificationsName[] = - const char kDeviceDiscoveryNotificationsDescription[] = - "Device discovery notifications on local network."; - -+const char kDisableWebGLName[] = "Disable all versions of WebGL"; +@@ -511,6 +511,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement"; + const char kEnableAudioFocusEnforcementDescription[] = + "Enables enforcement of a single media session having audio focus at " + "any one time. Requires #enable-media-session-service to be enabled too."; ++const char kDisableWebGLName[] = "WebGL"; + -+const char kDisableWebGLDescription[] = "Disable all versions of WebGL"; ++const char kDisableWebGLDescription[] = "Enable or disable all versions of WebGL"; + - const char kDisableBestEffortTasksName[] = "Skip best effort tasks"; - const char kDisableBestEffortTasksDescription[] = - "With this flag on, tasks of the lowest priority will not be executed " + + const char kEnableAutofillAccountWalletStorageName[] = + "Enable the account data storage for autofill"; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -255,6 +255,9 @@ extern const char kDebugShortcutsDescription[]; - extern const char kDeviceDiscoveryNotificationsName[]; - extern const char kDeviceDiscoveryNotificationsDescription[]; +@@ -317,6 +317,9 @@ extern const char kDisallowDocWrittenScriptsUiDescription[]; + extern const char kEnableAccessibilityObjectModelName[]; + extern const char kEnableAccessibilityObjectModelDescription[]; +extern const char kDisableWebGLName[]; +extern const char kDisableWebGLDescription[]; + - extern const char kDisableBestEffortTasksName[]; - extern const char kDisableBestEffortTasksDescription[]; + extern const char kEnableAudioFocusEnforcementName[]; + extern const char kEnableAudioFocusEnforcementDescription[]; -- 2.17.1 diff --git a/build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch b/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch similarity index 84% rename from build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch rename to build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch index 5f921573b1008581dc51c0d9d8c2a3dec2dba64d..46e0adc629644b7e2d3f5f90367514e89fc973dd 100644 --- a/build/patches/Add-flags-to-disable-device-motion-and-orientation-APIs.patch +++ b/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch @@ -1,6 +1,6 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 22 Oct 2018 21:29:53 +0200 -Subject: Add flags to disable device motion and orientation APIs +Subject: Add flags to disable device motion/orientation APIs Both flags will be disabled by default and prevent usage of gyroscope and legacy acceleration events. @@ -12,15 +12,15 @@ legacy acceleration events. content/public/common/content_features.cc | 10 ++++++++++ content/public/common/content_features.h | 2 ++ .../blink/public/platform/web_runtime_features.h | 2 ++ - .../blink/renderer/modules/modules_initializer.cc | 9 ++++++--- + .../blink/renderer/modules/modules_initializer.cc | 10 +++++++--- .../renderer/platform/exported/web_runtime_features.cc | 8 ++++++++ .../renderer/platform/runtime_enabled_features.json5 | 8 ++++++++ - 10 files changed, 59 insertions(+), 3 deletions(-) + 10 files changed, 60 insertions(+), 3 deletions(-) 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 -@@ -1992,6 +1992,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -2799,6 +2799,12 @@ const FeatureEntry kFeatureEntries[] = { {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName, flag_descriptions::kGpuRasterizationDescription, kOsAll, MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, @@ -36,7 +36,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -596,6 +596,14 @@ const char kWinrtSensorsImplementationDescription[] = +@@ -755,6 +755,14 @@ const char kWinrtSensorsImplementationDescription[] = "Enables usage of the Windows.Devices.Sensors WinRT APIs on Windows for " "sensors"; @@ -54,7 +54,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -362,6 +362,12 @@ extern const char kWinrtGeolocationImplementationDescription[]; +@@ -455,6 +455,12 @@ extern const char kWinrtGeolocationImplementationDescription[]; extern const char kWinrtSensorsImplementationName[]; extern const char kWinrtSensorsImplementationDescription[]; @@ -70,9 +70,9 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -87,6 +87,9 @@ void SetRuntimeFeatureDefaultsForPlatform( +@@ -89,6 +89,9 @@ void SetRuntimeFeatureDefaultsForPlatform( command_line.HasSwitch( - switches::kEnableGpuMemoryBufferCompositorResources) && + blink::switches::kEnableGpuMemoryBufferCompositorResources) && !command_line.HasSwitch(switches::kDisableWebGLImageChromium) && + WebRuntimeFeatures::EnableDeviceMotion(base::FeatureList::IsEnabled(features::kDeviceMotion)); + WebRuntimeFeatures::EnableDeviceOrientation(base::FeatureList::IsEnabled(features::kDeviceOrientation)); @@ -83,8 +83,8 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. 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 -@@ -785,6 +785,16 @@ const base::Feature kWebOtpBackend{"kWebOtpBackend", - // TODO(rouslan): Remove this. +@@ -837,6 +837,16 @@ const base::Feature kWebOtpBackendAuto{"WebOtpBackendAuto", + // The JavaScript API for payments on the web. const base::Feature kWebPayments{"WebPayments", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables the device motion API used to track device acceleration; @@ -103,9 +103,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 -@@ -172,6 +172,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrHitTest; +@@ -197,6 +197,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrArModule; + CONTENT_EXPORT extern const base::Feature kWebXrHitTest; CONTENT_EXPORT extern const base::Feature kWebXrIncubations; - CONTENT_EXPORT extern const base::Feature kWebXrPermissionsApi; +CONTENT_EXPORT extern const base::Feature kDeviceMotion, kDeviceOrientation; + @@ -115,7 +115,7 @@ diff --git a/content/public/common/content_features.h b/content/public/common/co diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h -@@ -100,6 +100,8 @@ class WebRuntimeFeatures { +@@ -97,6 +97,8 @@ class WebRuntimeFeatures { BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool); BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool); BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(bool); @@ -127,26 +127,27 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc --- a/third_party/blink/renderer/modules/modules_initializer.cc +++ b/third_party/blink/renderer/modules/modules_initializer.cc -@@ -244,9 +244,12 @@ void ModulesInitializer::InitInspectorAgentSession( - void ModulesInitializer::OnClearWindowObjectInMainWorld( +@@ -222,9 +222,13 @@ void ModulesInitializer::OnClearWindowObjectInMainWorld( Document& document, const Settings& settings) const { -- DeviceMotionController::From(document); -- DeviceOrientationController::From(document); -- DeviceOrientationAbsoluteController::From(document); + LocalDOMWindow& window = *document.domWindow(); +- DeviceMotionController::From(window); +- DeviceOrientationController::From(window); +- DeviceOrientationAbsoluteController::From(window); + if (RuntimeEnabledFeatures::DeviceMotionEnabled()) -+ DeviceMotionController::From(document); ++ DeviceMotionController::From(window); + if (RuntimeEnabledFeatures::DeviceOrientationEnabled()) { -+ DeviceOrientationController::From(document); -+ DeviceOrientationAbsoluteController::From(document); ++ DeviceOrientationController::From(window); ++ DeviceOrientationAbsoluteController::From(window); + } - NavigatorGamepad::From(document); - NavigatorServiceWorker::From(document); - DOMWindowStorageController::From(document); ++ + NavigatorGamepad::From(*window.navigator()); + + // TODO(nhiroki): Figure out why ServiceWorkerContainer needs to be eagerly diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc -@@ -183,6 +183,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { +@@ -175,6 +175,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable); } @@ -164,7 +165,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 -@@ -1202,6 +1202,14 @@ +@@ -1385,6 +1385,14 @@ name: "OffscreenCanvasCommit", status: "experimental", }, diff --git a/build/patches/Add-history-support-in-incognito-mode.patch b/build/patches/Add-history-support-in-incognito-mode.patch new file mode 100644 index 0000000000000000000000000000000000000000..ea9f54526e148e6cb96cc1cca74650b32cc2a10f --- /dev/null +++ b/build/patches/Add-history-support-in-incognito-mode.patch @@ -0,0 +1,222 @@ +From: uazo +Date: Fri, 7 Aug 2020 16:33:47 +0000 +Subject: Add history support in incognito mode + +--- + .../java/res/xml/privacy_preferences.xml | 5 +++++ + .../privacy/settings/PrivacySettings.java | 19 +++++++++++++++++++ + chrome/browser/history/history_tab_helper.cc | 16 ++++++++++++++++ + chrome/browser/history/history_tab_helper.h | 4 ++++ + chrome/browser/prefs/browser_prefs.cc | 3 +++ + .../strings/android_chrome_strings.grd | 6 ++++++ + chrome/common/pref_names.cc | 5 +++++ + chrome/common/pref_names.h | 4 ++++ + 8 files changed, 62 insertions(+) + +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 +@@ -32,6 +32,11 @@ + android:title="@string/close_tabs_on_exit_title" + android:summary="@string/close_tabs_on_exit_summary" + android:defaultValue="false" /> ++ + GetBrowserContext()); ++ ++#if defined(OS_ANDROID) ++ if(profile->GetOriginalProfile()->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) { ++ return HistoryServiceFactory::GetForProfile(profile, ServiceAccessType::IMPLICIT_ACCESS); ++ } ++#endif ++ + if (profile->IsOffTheRecord()) + return NULL; + +@@ -265,6 +275,12 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { + profile, ServiceAccessType::IMPLICIT_ACCESS); + } + ++// static ++void HistoryTabHelper::RegisterProfilePrefs(PrefRegistrySimple* registry) { ++ registry->RegisterBooleanPref(prefs::kIncognitoTabHistoryEnabled, ++ /*default_value=*/false); ++} ++ + void HistoryTabHelper::WebContentsDestroyed() { + // We update the history for this URL. + WebContents* tab = web_contents(); +diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/history/history_tab_helper.h +--- a/chrome/browser/history/history_tab_helper.h ++++ b/chrome/browser/history/history_tab_helper.h +@@ -10,6 +10,8 @@ + #include "base/time/time.h" + #include "content/public/browser/web_contents_observer.h" + #include "content/public/browser/web_contents_user_data.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" + + namespace history { + struct HistoryAddPageArgs; +@@ -46,6 +48,8 @@ class HistoryTabHelper : public content::WebContentsObserver, + int nav_entry_id, + content::NavigationHandle* navigation_handle); + ++ static void RegisterProfilePrefs(PrefRegistrySimple* registry); ++ + private: + explicit HistoryTabHelper(content::WebContents* web_contents); + friend class content::WebContentsUserData; +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 +@@ -208,6 +208,8 @@ + #endif + + #if defined(OS_ANDROID) ++#include "chrome/browser/history/history_tab_helper.h" ++ + #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" + #include "chrome/browser/android/explore_sites/history_statistics_reporter.h" + #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" +@@ -968,6 +970,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + variations::VariationsService::RegisterProfilePrefs(registry); + video_tutorials::RegisterPrefs(registry); + feed::prefs::RegisterFeedSharedProfilePrefs(registry); ++ HistoryTabHelper::RegisterProfilePrefs(registry); + feed::RegisterProfilePrefs(registry); + #else // defined(OS_ANDROID) + AppShortcutManager::RegisterProfilePrefs(registry); +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 +@@ -880,6 +880,12 @@ Your Google account may have other forms of browsing history like searches and a + + Opens links in incognito tabs when you click on new tab or on a link + ++ ++ Enable history in incognito tabs ++ ++ ++ Record history even in incognito mode ++ + + Clears history and autocompletions in the address bar. Your Google Account may have other forms of browsing history at <link>myactivity.google.com</link>. + +diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc +--- a/chrome/common/pref_names.cc ++++ b/chrome/common/pref_names.cc +@@ -3155,6 +3155,11 @@ const char kShowCaretBrowsingDialog[] = + const char kLacrosAllowed[] = "lacros_allowed"; + #endif + ++#if defined(OS_ANDROID) ++const char kIncognitoTabHistoryEnabled[] = ++ "incognito_tab_history_enabled"; ++#endif ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + // String enum pref determining what should happen when a user who authenticates + // via a security token is removing this token. "IGNORE" - nothing happens +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 +@@ -1116,6 +1116,10 @@ extern const char kCartModuleRemoved[]; + extern const char kCartModuleWelcomeSurfaceShownTimes[]; + #endif + ++#if defined(OS_ANDROID) ++extern const char kIncognitoTabHistoryEnabled[]; ++#endif ++ + } // namespace prefs + + #endif // CHROME_COMMON_PREF_NAMES_H_ +-- +2.17.1 + diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch new file mode 100644 index 0000000000000000000000000000000000000000..9d1632a0f5b4bf800da394ca13138ff26bc7b4ff --- /dev/null +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -0,0 +1,488 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 18 Feb 2021 21:22:52 +0100 +Subject: Add menu item to bookmark all tabs + +--- + chrome/android/java/res/menu/main_menu.xml | 7 +++ + .../java/res/menu/main_menu_regroup.xml | 4 ++ + .../chrome/browser/ChromeTabbedActivity.java | 26 ++++++++ + .../browser/bookmarks/BookmarkBridge.java | 62 +++++++++++++++++++ + .../browser/bookmarks/BookmarkUtils.java | 4 ++ + .../android/bookmarks/bookmark_bridge.cc | 17 +++++ + .../android/bookmarks/bookmark_bridge.h | 4 ++ + .../bookmarks/chrome_bookmark_client.cc | 2 + + .../strings/android_chrome_strings.grd | 3 + + components/bookmark_bar_strings.grdp | 6 ++ + .../browser/bookmark_load_details.cc | 4 ++ + .../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 | 13 ++++ + components/bookmarks/browser/bookmark_node.h | 5 ++ + 16 files changed, 168 insertions(+), 1 deletion(-) + +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 +@@ -57,6 +57,10 @@ + ++ + +@@ -133,6 +137,9 @@ + ++ + +diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml +--- a/chrome/android/java/res/menu/main_menu_regroup.xml ++++ b/chrome/android/java/res/menu/main_menu_regroup.xml +@@ -32,6 +32,10 @@ + android:title="@string/accessibility_menu_bookmark" + android:titleCondensed="@string/menu_bookmark" + android:icon="@drawable/btn_star"/> ++ + { ++ for (int i = 0; i < tabModel.getCount(); i++) { ++ Tab tab = tabModel.getTabAt(i); ++ if (tab.isNativePage()) { ++ continue; ++ } ++ bridge.addToTabsCollection(this, tab); ++ } ++ bridge.finishedAddingToTabsCollection(this, getSnackbarManager()); ++ }); ++ } ++ + private void recordLauncherShortcutAction(boolean isIncognito) { + if (isIncognito) { + RecordUserAction.record("Android.LauncherShortcut.NewIncognitoTab"); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +@@ -4,6 +4,7 @@ + + package org.chromium.chrome.browser.bookmarks; + ++import android.app.Activity; + import android.content.Intent; + import android.content.Context; + import android.content.pm.PackageManager; +@@ -24,6 +25,7 @@ import androidx.annotation.Nullable; + import androidx.annotation.VisibleForTesting; + + import org.chromium.base.ContextUtils; ++import org.chromium.base.Log; + import org.chromium.base.ObserverList; + import org.chromium.base.ThreadUtils; + import org.chromium.base.annotations.CalledByNative; +@@ -32,6 +34,10 @@ import org.chromium.base.metrics.RecordHistogram; + import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; + import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; ++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.R; + import org.chromium.components.bookmarks.BookmarkId; + import org.chromium.components.bookmarks.BookmarkType; + import org.chromium.components.url_formatter.SchemeDisplay; +@@ -72,6 +78,7 @@ import java.io.File; + * bookmark model stored in native. + */ + public class BookmarkBridge { ++ private static final String TAG = "BookmarkBridge"; + private final Profile mProfile; + private boolean mIsDoingExtensiveChanges; + private long mNativeBookmarkBridge; +@@ -553,6 +560,16 @@ public class BookmarkBridge { + mNativeBookmarkBridge, BookmarkBridge.this); + } + ++ /** ++ * @return The BookmarkId for the Tabs collecction folder node ++ */ ++ public BookmarkId getTabsCollectionFolderId() { ++ ThreadUtils.assertOnUiThread(); ++ assert mIsNativeBookmarkModelLoaded; ++ return BookmarkBridgeJni.get().getTabsCollectionFolderId( ++ mNativeBookmarkBridge, BookmarkBridge.this); ++ } ++ + /** + * @return Id representing the special "other" folder from bookmark model. + */ +@@ -1094,6 +1111,50 @@ public class BookmarkBridge { + mNativeBookmarkBridge, BookmarkBridge.this, title, url); + } + ++ // Used to bookmark all tabs in a specific folder, created if not existing ++ public BookmarkId addToTabsCollection(Context context, Tab tab) { ++ BookmarkId parent = getTabsCollectionFolderId(); ++ long existingId = getUserBookmarkIdForTab(tab); ++ if (existingId != BookmarkId.INVALID_ID) { ++ BookmarkId existingBookmarkId = new BookmarkId(existingId, BookmarkType.NORMAL); ++ BookmarkItem existingBookmark = getBookmarkById(existingBookmarkId); ++ if (parent.equals(existingBookmark.getParentId())) { ++ // bookmark already exists in the tabs collection folder ++ return existingBookmarkId; ++ } ++ } ++ BookmarkId bookmarkId = ++ addBookmark(parent, getChildCount(parent), tab.getTitle(), tab.getUrl().getSpec()); ++ ++ if (bookmarkId == null) { ++ Log.e(TAG, ++ "Failed to add bookmarks: parentTypeAndId %s", parent); ++ } ++ return bookmarkId; ++ } ++ ++ public void finishedAddingToTabsCollection(Activity activity, SnackbarManager snackbarManager) { ++ BookmarkId parent = getTabsCollectionFolderId(); ++ ++ BookmarkItem bookmarkItem = getBookmarkById(parent); ++ String folderName; ++ if (bookmarkItem != null) { ++ folderName = bookmarkItem.getTitle(); ++ } else { ++ folderName = ""; ++ } ++ SnackbarController snackbarController = new SnackbarController() { ++ @Override ++ public void onAction(Object actionData) { ++ } ++ }; ++ Snackbar snackbar = Snackbar.make(folderName, snackbarController, Snackbar.TYPE_ACTION, ++ Snackbar.UMA_BOOKMARK_ADDED) ++ .setTemplateText(activity.getString(R.string.bookmark_page_saved_folder)); ++// snackbar.setSingleLine(false).setAction(activity.getString(R.string.bookmark_item_edit), null); ++ snackbarManager.showSnackbar(snackbar); ++ } ++ + /** + * @param url The URL of the reading list item. + * @return The reading list item with the URL, or null if no such reading list item. +@@ -1350,6 +1411,7 @@ public class BookmarkBridge { + void getAllFoldersWithDepths(long nativeBookmarkBridge, BookmarkBridge caller, + List folderList, List depthList); + BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller); ++ BookmarkId getTabsCollectionFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getMobileFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getOtherFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getDesktopFolderId(long nativeBookmarkBridge, BookmarkBridge caller); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +@@ -472,6 +472,7 @@ public class BookmarkUtils { + List topLevelFolders = new ArrayList<>(); + BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId(); + BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId(); ++ BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId(); + BookmarkId othersNodeId = bookmarkModel.getOtherFolderId(); + + List specialFoldersIds = +@@ -497,6 +498,9 @@ public class BookmarkUtils { + if (bookmarkModel.isFolderVisible(mobileNodeId)) { + topLevelFolders.add(mobileNodeId); + } ++ if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) { ++ topLevelFolders.add(tabsCollectionNodeId); ++ } + if (bookmarkModel.isFolderVisible(desktopNodeId)) { + topLevelFolders.add(desktopNodeId); + } +diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc +--- a/chrome/browser/android/bookmarks/bookmark_bridge.cc ++++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc +@@ -422,6 +422,11 @@ void BookmarkBridge::GetTopLevelFolderIDs( + top_level_folders.push_back(node.get()); + } + ++ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) { ++ if (node->is_folder()) ++ top_level_folders.push_back(node.get()); ++ } ++ + for (const auto& node : bookmark_model_->bookmark_bar_node()->children()) { + if (node->is_folder()) + top_level_folders.push_back(node.get()); +@@ -460,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( + // Vector to temporarily contain all child bookmarks at same level for sorting + std::vector bookmarks = { + bookmark_model_->mobile_node(), ++ bookmark_model_->tabs_collection_node(), + bookmark_model_->bookmark_bar_node(), + bookmark_model_->other_node(), + }; +@@ -514,6 +520,17 @@ ScopedJavaLocalRef BookmarkBridge::GetMobileFolderId( + return folder_id_obj; + } + ++ScopedJavaLocalRef BookmarkBridge::GetTabsCollectionFolderId( ++ JNIEnv* env, ++ const JavaParamRef& obj) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ const BookmarkNode* tabs_collection_node = bookmark_model_->tabs_collection_node(); ++ ScopedJavaLocalRef folder_id_obj = ++ JavaBookmarkIdCreateBookmarkId( ++ env, tabs_collection_node->id(), GetBookmarkType(tabs_collection_node)); ++ return folder_id_obj; ++} ++ + ScopedJavaLocalRef BookmarkBridge::GetOtherFolderId( + JNIEnv* env, + const JavaParamRef& obj) { +diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h +--- a/chrome/browser/android/bookmarks/bookmark_bridge.h ++++ b/chrome/browser/android/bookmarks/bookmark_bridge.h +@@ -110,6 +110,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + JNIEnv* env, + const base::android::JavaParamRef& obj); + ++ base::android::ScopedJavaLocalRef GetTabsCollectionFolderId( ++ JNIEnv* env, ++ const base::android::JavaParamRef& obj); ++ + base::android::ScopedJavaLocalRef GetOtherFolderId( + JNIEnv* env, + const base::android::JavaParamRef& obj); +diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser/bookmarks/chrome_bookmark_client.cc +--- a/chrome/browser/bookmarks/chrome_bookmark_client.cc ++++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc +@@ -105,6 +105,8 @@ bool ChromeBookmarkClient::IsPermanentNodeVisibleWhenEmpty( + return !is_mobile; + case bookmarks::BookmarkNode::MOBILE: + return is_mobile; ++ case bookmarks::BookmarkNode::TABS_COLLECTION: ++ return is_mobile; + } + + return false; +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 +@@ -3014,6 +3014,9 @@ Data from your Incognito session will only be cleared from Chrome when you + Track prices + ++ ++ Bookmark all tabs ++ + + Get image descriptions + +diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_strings.grdp +--- a/components/bookmark_bar_strings.grdp ++++ b/components/bookmark_bar_strings.grdp +@@ -20,6 +20,9 @@ + + Mobile bookmarks + ++ ++ Tabs collection ++ + + Other bookmarks + +@@ -34,6 +37,9 @@ + + Mobile Bookmarks + ++ ++ Tabs Collection ++ + + Other Bookmarks + +diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/bookmarks/browser/bookmark_load_details.cc +--- a/components/bookmarks/browser/bookmark_load_details.cc ++++ b/components/bookmarks/browser/bookmark_load_details.cc +@@ -36,6 +36,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(BookmarkClient* client) + root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks( + max_id_++, + client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::MOBILE)))); ++ tabs_collection_folder_node_ = static_cast( ++ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks( ++ max_id_++, ++ client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::TABS_COLLECTION)))); + } + + BookmarkLoadDetails::~BookmarkLoadDetails() = default; +diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/bookmarks/browser/bookmark_load_details.h +--- a/components/bookmarks/browser/bookmark_load_details.h ++++ b/components/bookmarks/browser/bookmark_load_details.h +@@ -42,6 +42,7 @@ class BookmarkLoadDetails { + BookmarkPermanentNode* bb_node() { return bb_node_; } + BookmarkPermanentNode* mobile_folder_node() { return mobile_folder_node_; } + BookmarkPermanentNode* other_folder_node() { return other_folder_node_; } ++ BookmarkPermanentNode* tabs_collection_folder_node() { return tabs_collection_folder_node_; } + + TitledUrlIndex* index() { return index_.get(); } + std::unique_ptr owned_index() { return std::move(index_); } +@@ -96,6 +97,7 @@ class BookmarkLoadDetails { + BookmarkPermanentNode* bb_node_ = nullptr; + BookmarkPermanentNode* other_folder_node_ = nullptr; + BookmarkPermanentNode* mobile_folder_node_ = nullptr; ++ BookmarkPermanentNode* tabs_collection_folder_node_ = nullptr; + LoadManagedNodeCallback load_managed_node_callback_; + std::unique_ptr index_; + BookmarkNode::MetaInfoMap model_meta_info_map_; +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 +@@ -560,7 +560,7 @@ bool BookmarkModel::HasBookmarks() { + bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() { + 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(); + } + + bool BookmarkModel::IsBookmarked(const GURL& url) { +@@ -795,6 +795,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(); ++ tabs_collection_node_ = details->tabs_collection_folder_node(); + + titled_url_index_->SetNodeSorter( + std::make_unique(client_.get())); +diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h +--- a/components/bookmarks/browser/bookmark_model.h ++++ b/components/bookmarks/browser/bookmark_model.h +@@ -117,6 +117,12 @@ class BookmarkModel : public BookmarkUndoProvider, + return mobile_node_; + } + ++ // Returns the 'mobile' node. This is NULL until loaded. ++ const BookmarkNode* tabs_collection_node() const { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ return tabs_collection_node_; ++ } ++ + bool is_root_node(const BookmarkNode* node) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return node == root_; +@@ -390,6 +396,7 @@ class BookmarkModel : public BookmarkUndoProvider, + BookmarkPermanentNode* bookmark_bar_node_ = nullptr; + BookmarkPermanentNode* other_node_ = nullptr; + BookmarkPermanentNode* mobile_node_ = nullptr; ++ BookmarkPermanentNode* tabs_collection_node_ = nullptr; + + // The maximum ID assigned to the bookmark nodes in the model. + int64_t next_node_id_ = 1; +diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmarks/browser/bookmark_node.cc +--- a/components/bookmarks/browser/bookmark_node.cc ++++ b/components/bookmarks/browser/bookmark_node.cc +@@ -42,6 +42,8 @@ const char BookmarkNode::kOtherBookmarksNodeGuid[] = + "00000000-0000-4000-a000-000000000003"; + const char BookmarkNode::kMobileBookmarksNodeGuid[] = + "00000000-0000-4000-a000-000000000004"; ++const char BookmarkNode::kTabsCollectionBookmarksNodeGuid[] = ++ "00000000-0000-4000-a000-000000000006"; + const char BookmarkNode::kManagedNodeGuid[] = + "00000000-0000-4000-a000-000000000005"; + +@@ -201,6 +203,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, + visible_when_empty)); + } + ++// static ++std::unique_ptr ++BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id, ++ bool visible_when_empty) { ++ // base::WrapUnique() used because the constructor is private. ++ return base::WrapUnique(new BookmarkPermanentNode( ++ id, TABS_COLLECTION, base::GUID::ParseLowercase(kTabsCollectionBookmarksNodeGuid), ++ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME), ++ visible_when_empty)); ++} ++ + BookmarkPermanentNode::BookmarkPermanentNode(int64_t id, + Type type, + const base::GUID& guid, +diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks/browser/bookmark_node.h +--- a/components/bookmarks/browser/bookmark_node.h ++++ b/components/bookmarks/browser/bookmark_node.h +@@ -36,6 +36,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { + FOLDER, + BOOKMARK_BAR, + OTHER_NODE, ++ TABS_COLLECTION, + MOBILE + }; + +@@ -53,6 +54,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { + static const char kBookmarkBarNodeGuid[]; + static const char kOtherBookmarksNodeGuid[]; + static const char kMobileBookmarksNodeGuid[]; ++ static const char kTabsCollectionBookmarksNodeGuid[]; + static const char kManagedNodeGuid[]; + + // Creates a new node with |id|, |guid| and |url|. +@@ -244,6 +246,9 @@ class BookmarkPermanentNode : public BookmarkNode { + static std::unique_ptr CreateMobileBookmarks( + int64_t id, + bool visible_when_empty); ++ static std::unique_ptr CreateTabsCollectionBookmarks( ++ int64_t id, ++ bool visible_when_empty); + + // Constructor is private to disallow the construction of permanent nodes + // other than the well-known ones, see factory methods. +-- +2.17.1 + diff --git a/build/patches/Add-menu-item-to-view-source.patch b/build/patches/Add-menu-item-to-view-source.patch new file mode 100644 index 0000000000000000000000000000000000000000..00a4b1c8d110be8ec3b272615828b029c00c7a97 --- /dev/null +++ b/build/patches/Add-menu-item-to-view-source.patch @@ -0,0 +1,136 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Mon, 13 Jul 2020 00:37:06 +0200 +Subject: Add menu item to view source + +--- + chrome/android/java/res/menu/custom_tabs_menu.xml | 3 +++ + chrome/android/java/res/menu/main_menu.xml | 3 +++ + chrome/android/java/res/menu/main_menu_regroup.xml | 3 +++ + .../chrome/browser/ChromeTabbedActivity.java | 2 ++ + .../chrome/browser/app/ChromeActivity.java | 2 ++ + .../app/appmenu/AppMenuPropertiesDelegateImpl.java | 14 ++++++++++++++ + .../CustomTabAppMenuPropertiesDelegate.java | 1 + + .../ui/android/strings/android_chrome_strings.grd | 3 +++ + 8 files changed, 31 insertions(+) + +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 +@@ -46,6 +46,9 @@ + ++ + +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 +@@ -91,6 +91,9 @@ + ++ + +diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml +--- a/chrome/android/java/res/menu/main_menu_regroup.xml ++++ b/chrome/android/java/res/menu/main_menu_regroup.xml +@@ -142,6 +142,9 @@ + ++ + +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 +@@ -1850,6 +1850,8 @@ public class ChromeTabbedActivity extends ChromeActivity + } catch (ActivityNotFoundException e) { + Toast.makeText(context, R.string.open_webapk_failed, Toast.LENGTH_SHORT).show(); + } ++ } else if (id == R.id.view_source_id) { ++ currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrlString())); + } else if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) { + final boolean reloadOnChange = !currentTab.isNativePage(); + final boolean usingDesktopUserAgent = +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 +@@ -519,6 +519,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } + + updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */); ++ updateViewSourceMenuItem(menu, currentTab); + + // Only display reader mode settings menu option if the current page is in reader mode. + menu.findItem(R.id.reader_mode_prefs_id).setVisible(shouldShowReaderModePrefs(currentTab)); +@@ -932,6 +933,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } + } + ++ /** ++ * Updates the view source menu item's state. ++ * ++ * @param menu {@link Menu} for view source. ++ * @param currentTab Current tab being displayed. ++ */ ++ protected void updateViewSourceMenuItem( ++ Menu menu, Tab currentTab) { ++ MenuItem viewSourceMenuItem = menu.findItem(R.id.view_source_id); ++ String url = currentTab.getUrlString(); ++ viewSourceMenuItem.setVisible(!url.isEmpty() && !url.startsWith("view-source:")); ++ } ++ + /** + * Updates the request desktop site item's state. + * +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 +@@ -225,6 +225,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible); + MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id); + MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id); ++ updateViewSourceMenuItem(menu, currentTab); + prepareAddToHomescreenMenuItem( + homescreenItem, null, openWebApkItem, menu, currentTab, addToHomeScreenVisible); + } +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 +@@ -344,6 +344,9 @@ CHAR-LIMIT guidelines: + + Other Google services + ++ ++ View source ++ + + Google services + +-- +2.17.1 + diff --git a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch b/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch deleted file mode 100644 index 3145536c0c0509b0f4f831482b23736c8153812d..0000000000000000000000000000000000000000 --- a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch +++ /dev/null @@ -1,526 +0,0 @@ -From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Thu, 5 Dec 2019 22:41:25 +0100 -Subject: Add option to configure the ad blocker filters URL - ---- - chrome/android/chrome_java_resources.gni | 2 + - chrome/android/chrome_java_sources.gni | 2 + - .../java/res/layout/adblock_editor.xml | 65 +++++++++++++ - chrome/android/java/res/values/values.xml | 2 + - .../java/res/xml/adblock_preferences.xml | 25 +++++ - .../android/java/res/xml/main_preferences.xml | 5 + - .../browser/settings/AdBlockEditor.java | 92 +++++++++++++++++++ - .../browser/settings/AdBlockPreferences.java | 56 +++++++++++ - chrome/app/generated_resources.grd | 10 ++ - chrome/browser/browser_process_impl.cc | 3 +- - .../flags/android/cached_feature_flags.cc | 8 ++ - .../browser/flags/CachedFeatureFlags.java | 10 ++ - .../net/system_network_context_manager.cc | 4 + - .../strings/android_chrome_strings.grd | 14 +++ - chrome/common/pref_names.cc | 3 + - chrome/common/pref_names.h | 1 + - .../adblock_updater_service.cc | 6 +- - .../adblock_updater_service.h | 3 +- - 18 files changed, 306 insertions(+), 5 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 - create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java - -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 -@@ -1034,6 +1034,7 @@ chrome_java_resources = [ - "java/res/layout/account_picker_new_account_row_legacy.xml", - "java/res/layout/account_picker_row.xml", - "java/res/layout/account_picker_row_legacy.xml", -+ "java/res/layout/adblock_editor.xml", - "java/res/layout/add_languages_main.xml", - "java/res/layout/add_site_dialog.xml", - "java/res/layout/add_to_homescreen_dialog.xml", -@@ -1336,6 +1337,7 @@ chrome_java_resources = [ - "java/res/xml/about_chrome_preferences.xml", - "java/res/xml/accessibility_preferences.xml", - "java/res/xml/account_management_preferences.xml", -+ "java/res/xml/adblock_preferences.xml", - "java/res/xml/autofill_server_profile_preferences.xml", - "java/res/xml/bookmark_widget_info.xml", - "java/res/xml/clear_browsing_data_button.xml", -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 -@@ -1352,6 +1352,8 @@ chrome_java_sources = [ - "java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java", - "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", - "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java", -+ "java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java", -+ "java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java", - "java/src/org/chromium/chrome/browser/photo_picker/FileEnumWorkerTask.java", - "java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialog.java", - "java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerToolbar.java", -diff --git a/chrome/android/java/res/layout/adblock_editor.xml b/chrome/android/java/res/layout/adblock_editor.xml -new file mode 100644 ---- /dev/null -+++ b/chrome/android/java/res/layout/adblock_editor.xml -@@ -0,0 +1,65 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml ---- a/chrome/android/java/res/values/values.xml -+++ b/chrome/android/java/res/values/values.xml -@@ -69,6 +69,8 @@ - - - -+ https://www.bromite.org/custom-filters -+ - - -1 - -diff --git a/chrome/android/java/res/xml/adblock_preferences.xml b/chrome/android/java/res/xml/adblock_preferences.xml -new file mode 100644 ---- /dev/null -+++ b/chrome/android/java/res/xml/adblock_preferences.xml -@@ -0,0 +1,25 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml ---- a/chrome/android/java/res/xml/main_preferences.xml -+++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -55,6 +55,11 @@ - android:key="privacy" - android:order="12" - android:title="@string/prefs_privacy"/> -+ - { -+ WebsitePreferenceBridge.setCategoryEnabled(ContentSettingsType.ADS, !(boolean) newValue); -+ return true; -+ }); -+ -+ mAdBlockEdit = findPreference(PREF_ADBLOCK_EDIT); -+ updateCurrentAdBlockUrl(); -+ } -+ -+ private void updateCurrentAdBlockUrl() { -+ mAdBlockEdit.setSummary(CachedFeatureFlags.getAdBlockFiltersURL()); -+ } -+ -+ @Override -+ public void onResume() { -+ super.onResume(); -+ updateCurrentAdBlockUrl(); -+ } -+} -diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd ---- a/chrome/app/generated_resources.grd -+++ b/chrome/app/generated_resources.grd -@@ -9780,6 +9780,16 @@ Please help our engineers fix this problem. Tell us what happened right before y - Never show this again. - - -+ -+ -+ -+ Ad Blocking -+ -+ -+ Configure Ad Blocking and filters URL -+ -+ -+ - - - Always allow ads on this site -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 -@@ -1066,7 +1066,8 @@ BrowserProcessImpl::adblock_updater() { - adblock_updater_ = std::make_unique( - g_browser_process->system_network_context_manager()->GetSharedURLLoaderFactory(), - std::move(scheduler), -- g_browser_process->subresource_filter_ruleset_service()); -+ g_browser_process->subresource_filter_ruleset_service(), -+ local_state()->GetString(prefs::kAdBlockFiltersURL)); - - return adblock_updater_.get(); - } -diff --git a/chrome/browser/flags/android/cached_feature_flags.cc b/chrome/browser/flags/android/cached_feature_flags.cc ---- a/chrome/browser/flags/android/cached_feature_flags.cc -+++ b/chrome/browser/flags/android/cached_feature_flags.cc -@@ -36,6 +36,14 @@ std::string GetReachedCodeProfilerTrialGroup() { - } // namespace android - } // namespace chrome - -+static ScopedJavaLocalRef JNI_CachedFeatureFlags_GetAdBlockFiltersURL(JNIEnv* env) { -+ return base::android::ConvertUTF8ToJavaString(env, g_browser_process->local_state()->GetString(prefs::kAdBlockFiltersURL)); -+} -+ -+static void JNI_CachedFeatureFlags_SetAdBlockFiltersURL(JNIEnv* env, const JavaParamRef& url) { -+ g_browser_process->local_state()->SetString(prefs::kAdBlockFiltersURL, base::android::ConvertJavaStringToUTF8(env, url)); -+} -+ - static jboolean JNI_CachedFeatureFlags_IsNetworkServiceWarmUpEnabled( - JNIEnv* env) { - return content::IsOutOfProcessNetworkService() && -diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java ---- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -@@ -242,6 +242,14 @@ public class CachedFeatureFlags { - ChromeFeatureList.isEnabled(ChromeFeatureList.REACHED_CODE_PROFILER)); - } - -+ public static void setAdBlockFiltersURL(String url) { -+ CachedFeatureFlagsJni.get().setAdBlockFiltersURL(url); -+ } -+ -+ public static String getAdBlockFiltersURL() { -+ return CachedFeatureFlagsJni.get().getAdBlockFiltersURL(); -+ } -+ - /** - * Caches flags that must take effect on startup but are set via native code. - */ -@@ -394,5 +402,7 @@ public class CachedFeatureFlags { - @NativeMethods - interface Natives { - boolean isNetworkServiceWarmUpEnabled(); -+ void setAdBlockFiltersURL(String url); -+ String getAdBlockFiltersURL(); - } - } -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 -@@ -325,6 +325,8 @@ SystemNetworkContextManager::SystemNetworkContextManager( - SSLConfigServiceManager::CreateDefaultManager(local_state_)), - proxy_config_monitor_(local_state_), - stub_resolver_config_reader_(local_state_) { -+ local_state_->SetDefaultPrefValue(prefs::kAdBlockFiltersURL, -+ base::Value("https://www.bromite.org/filters/filters.dat")); - #if !defined(OS_ANDROID) - // QuicAllowed was not part of Android policy. - const base::Value* value = -@@ -384,6 +386,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { - void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { - StubResolverConfigReader::RegisterPrefs(registry); - -+ registry->RegisterStringPref(prefs::kAdBlockFiltersURL, std::string()); -+ - // Static auth params - registry->RegisterStringPref(prefs::kAuthSchemes, - "basic,digest,ntlm,negotiate"); -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 -@@ -802,6 +802,20 @@ Your Google account may have other forms of browsing history like searches and a - Captions - - -+ -+ -+ AdBlock settings -+ -+ -+ Edit filters URL -+ -+ -+ Filters URL -+ -+ -+ Visit help page -+ -+ - - - Site settings -diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc ---- a/chrome/common/pref_names.cc -+++ b/chrome/common/pref_names.cc -@@ -2054,6 +2054,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; - // capture devices without prompt. - const char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls"; - -+// Holds the URL to an indexed subresource filters file. -+const char kAdBlockFiltersURL[] = "adblock.filters_url"; -+ - // A pref holding the value of the policy used to explicitly allow or deny - // access to video capture devices. When enabled or not set, the user is - // prompted for device access. When disabled, access to video capture devices -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 -@@ -30,6 +30,7 @@ extern const char kDownloadRestrictions[]; - extern const char kForceEphemeralProfiles[]; - extern const char kHomePageIsNewTabPage[]; - extern const char kHomePage[]; -+extern const char kAdBlockFiltersURL[]; - extern const char kImportantSitesDialogHistory[]; - extern const char kProfileCreationTime[]; - #if defined(OS_WIN) -diff --git a/components/component_updater/adblock_updater_service.cc b/components/component_updater/adblock_updater_service.cc ---- a/components/component_updater/adblock_updater_service.cc -+++ b/components/component_updater/adblock_updater_service.cc -@@ -46,12 +46,12 @@ const int initial_check_delay = 5, - next_check_delay = 60*60*24*7, // 1 week - on_demand_check_delay = 60; // minimum 1 minute between each on-demand check - --AdBlockUpdaterService::AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, subresource_filter::RulesetService* ruleset_service) -+AdBlockUpdaterService::AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, -+ subresource_filter::RulesetService* ruleset_service, std::string filters_url) - : ruleset_service_(ruleset_service), shared_url_network_factory_(shared_url_network_factory), scheduler_(std::move(scheduler)) { - DCHECK(ruleset_service); - -- //TODO: retrieve filters URL from config/prefs -- filters_url_ = "https://www.bromite.org/filters/filters.dat"; -+ filters_url_ = filters_url; - } - - AdBlockUpdaterService::~AdBlockUpdaterService() { -diff --git a/components/component_updater/adblock_updater_service.h b/components/component_updater/adblock_updater_service.h ---- a/components/component_updater/adblock_updater_service.h -+++ b/components/component_updater/adblock_updater_service.h -@@ -54,7 +54,8 @@ class Observer { - // All methods are safe to call ONLY from the browser's main thread. - class AdBlockUpdaterService { - public: -- AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, subresource_filter::RulesetService* ruleset_service); -+ AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, -+ subresource_filter::RulesetService* ruleset_service, std::string filters_url); - ~AdBlockUpdaterService(); - - // Adds an observer for this class. An observer should not be added more --- -2.17.1 - diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch new file mode 100644 index 0000000000000000000000000000000000000000..7beea0ae3aba24e271b00bd336b138cf40ceaf98 --- /dev/null +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -0,0 +1,172 @@ +From: Wengling Chen +Date: Mon, 1 Feb 2021 19:18:55 +0200 +Subject: Add option to force tablet UI + +--- + .../android/java/res/xml/accessibility_preferences.xml | 5 +++++ + .../accessibility/settings/AccessibilitySettings.java | 10 ++++++++++ + .../browser/toolbar/top/ToolbarControlContainer.java | 2 +- + .../browser/preferences/ChromePreferenceKeys.java | 1 + + .../preferences/GrandfatheredChromePreferenceKeys.java | 1 + + .../ui/android/strings/android_chrome_strings.grd | 6 ++++++ + components/BUILD.gn | 4 ++-- + ui/android/BUILD.gn | 1 + + .../src/org/chromium/ui/base/DeviceFormFactor.java | 5 +++++ + 9 files changed, 32 insertions(+), 3 deletions(-) + +diff --git a/chrome/android/java/res/xml/accessibility_preferences.xml b/chrome/android/java/res/xml/accessibility_preferences.xml +--- a/chrome/android/java/res/xml/accessibility_preferences.xml ++++ b/chrome/android/java/res/xml/accessibility_preferences.xml +@@ -29,6 +29,11 @@ + android:key="captions" + android:title="@string/accessibility_captions_title"/> + ++ ++ + + Turn off + ++ ++ Open chromium in Tablet Mode ++ ++ ++ Force Tablet Mode ++ + + + +diff --git a/components/BUILD.gn b/components/BUILD.gn +--- a/components/BUILD.gn ++++ b/components/BUILD.gn +@@ -488,7 +488,7 @@ test("components_unittests") { + + # On LaCrOS, tests use ash-chrome as a window manager, thus the dependency. + # On other platforms, no components should depend on Chrome. +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { + assert_no_deps = [ "//chrome/*" ] + } + +@@ -730,7 +730,7 @@ if (!is_ios && !is_fuchsia) { + + # On LaCrOS, tests use ash-chrome as a window manager, thus the dependency. + # On other platforms, no components should depend on Chrome. +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { + assert_no_deps = [ "//chrome/*" ] + } + } +diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn +--- a/ui/android/BUILD.gn ++++ b/ui/android/BUILD.gn +@@ -362,6 +362,7 @@ android_library("ui_no_recycler_view_java") { + ":ui_utils_java", + "//base:base_java", + "//base:jni_java", ++ "//chrome/browser/preferences:java", + "//third_party/android_deps:androidx_annotation_annotation_java", + "//third_party/android_deps:androidx_appcompat_appcompat_java", + "//third_party/android_deps:androidx_appcompat_appcompat_resources_java", +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 +@@ -11,6 +11,8 @@ import androidx.annotation.UiThread; + import org.chromium.base.ContextUtils; + import org.chromium.base.ThreadUtils; + import org.chromium.base.annotations.CalledByNative; ++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; ++import org.chromium.chrome.browser.preferences.SharedPreferencesManager; + import org.chromium.ui.R; + import org.chromium.ui.display.DisplayAndroid; + import org.chromium.ui.display.DisplayUtil; +@@ -60,6 +62,9 @@ public class DeviceFormFactor { + * E.g. http://developer.samsung.com/samsung-dex/testing + */ + public static boolean isNonMultiDisplayContextOnTablet(Context context) { ++ if (SharedPreferencesManager.getInstance().readBoolean( ++ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) ++ return true; + return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; + } + +-- +2.17.1 + diff --git a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch index feea8c98ea298f3600f0e2410f4a4bc955195678..df0be688ea0cb41fcf646909971a6e33d6708183 100644 --- a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch +++ b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch @@ -3,45 +3,31 @@ Date: Sat, 7 Sep 2019 15:07:42 +0200 Subject: Add option to not persist tabs across sessions --- - chrome/android/java/res/values/values.xml | 3 +++ - chrome/android/java/res/xml/privacy_preferences.xml | 5 +++++ - .../chrome/browser/ChromeTabbedActivity.java | 4 +++- - .../browser/privacy/settings/PrivacySettings.java | 12 ++++++++++++ - .../ui/android/strings/android_chrome_strings.grd | 6 ++++++ - 5 files changed, 29 insertions(+), 1 deletion(-) + .../android/java/res/xml/privacy_preferences.xml | 5 +++++ + .../chrome/browser/ChromeTabbedActivity.java | 4 +++- + .../privacy/settings/PrivacySettings.java | 16 +++++++++++++++- + .../android/strings/android_chrome_strings.grd | 6 ++++++ + 4 files changed, 29 insertions(+), 2 deletions(-) -diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml ---- a/chrome/android/java/res/values/values.xml -+++ b/chrome/android/java/res/values/values.xml -@@ -63,6 +63,9 @@ - - - -+ Close tabs on exit -+ Don\'t persist tabs between browsing sessions -+ - - - 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 -@@ -34,6 +34,11 @@ - android:title="@string/allow_custom_tab_intents_title" - android:summary="@string/allow_custom_tab_intents_summary" +@@ -23,6 +23,11 @@ + android:title="@string/always_incognito_title" + android:summary="@string/always_incognito_summary" android:defaultValue="false" /> -+ IMAGE diff --git a/build/patches/Add-site-settings-option-for-session-only-cookies.patch b/build/patches/Add-site-settings-option-for-session-only-cookies.patch deleted file mode 100644 index 54bbe49d1ccd4342b88ac89b9f23e9c8e4c2a82f..0000000000000000000000000000000000000000 --- a/build/patches/Add-site-settings-option-for-session-only-cookies.patch +++ /dev/null @@ -1,221 +0,0 @@ -From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Tue, 28 Aug 2018 23:27:23 +0200 -Subject: Add site settings option for session-only cookies - ---- - chrome/android/java/res/values/values.xml | 3 ++ - .../java/res/xml/website_preferences.xml | 7 +++++ - .../site_settings/SingleCategorySettings.java | 21 ++++++++++++- - .../preferences/pref_service_bridge.cc | 31 +++++++++++++++++++ - .../preferences/PrefServiceBridge.java | 11 +++++++ - .../strings/android_chrome_strings.grd | 6 ++++ - 6 files changed, 78 insertions(+), 1 deletion(-) - -diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml ---- a/chrome/android/java/res/values/values.xml -+++ b/chrome/android/java/res/values/values.xml -@@ -32,6 +32,9 @@ - 0 - 1 - -+ Keep cookies only until you quit your browser -+ When enabled, all cookies will be erased when the browsing session is over -+ - -diff --git a/chrome/android/java/res/xml/website_preferences.xml b/chrome/android/java/res/xml/website_preferences.xml ---- a/chrome/android/java/res/xml/website_preferences.xml -+++ b/chrome/android/java/res/xml/website_preferences.xml -@@ -40,6 +40,13 @@ - android:title="@string/website_settings_category_notifications_quiet" - android:defaultValue="false" - android:persistent="false" /> -+ -+ - - GetOriginalProfile(); -+} -+ - PrefService* GetPrefService() { - return ProfileManager::GetActiveUserProfile() - ->GetOriginalProfile() -@@ -90,3 +97,27 @@ static jboolean JNI_PrefServiceBridge_IsManagedPreference( - return GetPrefService()->IsManagedPreference( - PrefServiceBridge::GetPrefNameExposedToJava(j_pref_index)); - } -+static jboolean JNI_PrefServiceBridge_GetCookiesSessionOnlyEnabled( -+ JNIEnv* env, -+ const base::android::JavaParamRef& obj) { -+ HostContentSettingsMap* host_content_settings_map = -+ HostContentSettingsMapFactory::GetForProfile(GetOriginalProfile()); -+ auto value = host_content_settings_map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr); -+ auto enabled = CONTENT_SETTING_SESSION_ONLY == value; -+ LOG(INFO) << "GetCookiesSessionOnly := " << enabled << " (raw_value = " << value << ")"; -+ return enabled; -+} -+ -+static void JNI_PrefServiceBridge_SetCookiesSessionOnlyEnabled( -+ JNIEnv* env, -+ const base::android::JavaParamRef& obj, -+ jboolean enabled) { -+ HostContentSettingsMap* host_content_settings_map = -+ HostContentSettingsMapFactory::GetForProfile(GetOriginalProfile()); -+ LOG(INFO) << "SetCookiesSessionOnly -> " << (enabled ? "true" : "false") << -+ "; false -> setting_allow: " << CONTENT_SETTING_ALLOW << -+ "; true -> session_only: " << CONTENT_SETTING_SESSION_ONLY; -+ host_content_settings_map->SetDefaultContentSetting( -+ ContentSettingsType::COOKIES, -+ enabled ? CONTENT_SETTING_SESSION_ONLY : CONTENT_SETTING_ALLOW); -+} -diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java ---- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java -+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java -@@ -89,6 +89,13 @@ public class PrefServiceBridge { - PrefServiceBridgeJni.get().setString(preference, value); - } - -+ public boolean isCookiesSessionOnlyEnabled() { -+ return PrefServiceBridgeJni.get().getCookiesSessionOnlyEnabled(PrefServiceBridge.this); -+ } -+ public void setCookiesSessionOnlyEnabled(boolean enabled) { -+ PrefServiceBridgeJni.get().setCookiesSessionOnlyEnabled(PrefServiceBridge.this, enabled); -+ } -+ - /** - * @param preference The name of the preference. - * @return Whether the specified preference is managed. -@@ -104,6 +111,9 @@ public class PrefServiceBridge { - - @NativeMethods - interface Natives { -+ boolean getCookiesSessionOnlyEnabled(PrefServiceBridge caller); -+ void setCookiesSessionOnlyEnabled(PrefServiceBridge caller, boolean enabled); -+ - void clearPref(int preference); - boolean getBoolean(int preference); - void setBoolean(int preference, boolean value); -@@ -114,3 +124,4 @@ public class PrefServiceBridge { - boolean isManagedPreference(int preference); - } - } -+ -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 -@@ -814,6 +814,12 @@ Your Google account may have other forms of browsing history like searches and a - - Prevent third-party websites from saving and reading cookie data - -+ -+ Keep cookies only until you quit your browser -+ -+ -+ When enabled, all cookies will be erased when the browsing session is over -+ - - JavaScript - --- -2.17.1 - diff --git a/build/patches/Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch b/build/patches/Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch deleted file mode 100644 index 022f277a2efb6160d3cab55c8fc34d25f85f07f4..0000000000000000000000000000000000000000 --- a/build/patches/Add-user-setting-for-DNS-over-HTTPS-DoH-custom-URL.patch +++ /dev/null @@ -1,538 +0,0 @@ -From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Sat, 23 Nov 2019 10:55:16 +0100 -Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL - ---- - chrome/android/chrome_java_resources.gni | 2 + - chrome/android/chrome_java_sources.gni | 2 + - chrome/android/java/res/layout/doh_editor.xml | 65 +++++++++++++ - chrome/android/java/res/values/values.xml | 2 + - .../android/java/res/xml/doh_preferences.xml | 25 +++++ - .../java/res/xml/privacy_preferences.xml | 5 + - .../chrome/browser/settings/DoHEditor.java | 92 +++++++++++++++++++ - .../browser/settings/DoHPreferences.java | 54 +++++++++++ - chrome/app/generated_resources.grd | 6 ++ - .../flags/android/cached_feature_flags.cc | 24 +++++ - .../browser/flags/CachedFeatureFlags.java | 24 +++++ - .../net/stub_resolver_config_reader.cc | 40 ++------ - .../strings/android_chrome_strings.grd | 11 +++ - chrome/common/chrome_features.cc | 4 +- - 14 files changed, 322 insertions(+), 34 deletions(-) - create mode 100644 chrome/android/java/res/layout/doh_editor.xml - create mode 100644 chrome/android/java/res/xml/doh_preferences.xml - create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java - create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java - -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 -@@ -1108,6 +1108,7 @@ chrome_java_resources = [ - "java/res/layout/device_item_list.xml", - "java/res/layout/distilled_page_font_family_spinner.xml", - "java/res/layout/distilled_page_prefs_view.xml", -+ "java/res/layout/doh_editor.xml", - "java/res/layout/edit_url_suggestion_layout.xml", - "java/res/layout/editable_option_editor_footer.xml", - "java/res/layout/editable_option_editor_icons.xml", -@@ -1347,6 +1348,7 @@ chrome_java_resources = [ - "java/res/xml/data_reduction_preferences.xml", - "java/res/xml/data_reduction_preferences_off_lite_mode.xml", - "java/res/xml/developer_preferences.xml", -+ "java/res/xml/doh_preferences.xml", - "java/res/xml/do_not_track_preferences.xml", - "java/res/xml/download_preferences.xml", - "java/res/xml/homepage_preferences.xml", -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 -@@ -1402,6 +1402,8 @@ chrome_java_sources = [ - "java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java", - "java/src/org/chromium/chrome/browser/send_tab_to_self/DevicePickerBottomSheetAdapter.java", - "java/src/org/chromium/chrome/browser/send_tab_to_self/DevicePickerBottomSheetContent.java", -+ "java/src/org/chromium/chrome/browser/settings/DoHEditor.java", -+ "java/src/org/chromium/chrome/browser/settings/DoHPreferences.java", - "java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationManager.java", - "java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationSharedPrefManager.java", - "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfAndroidBridge.java", -diff --git a/chrome/android/java/res/layout/doh_editor.xml b/chrome/android/java/res/layout/doh_editor.xml -new file mode 100644 ---- /dev/null -+++ b/chrome/android/java/res/layout/doh_editor.xml -@@ -0,0 +1,65 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml ---- a/chrome/android/java/res/values/values.xml -+++ b/chrome/android/java/res/values/values.xml -@@ -86,6 +86,8 @@ - 400 - 200 - -+ https://www.bromite.org/doh -+ - - true - -diff --git a/chrome/android/java/res/xml/doh_preferences.xml b/chrome/android/java/res/xml/doh_preferences.xml -new file mode 100644 ---- /dev/null -+++ b/chrome/android/java/res/xml/doh_preferences.xml -@@ -0,0 +1,25 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 -@@ -19,6 +19,11 @@ - android:key="can_make_payment" - android:title="@string/can_make_payment_title" - android:summary="@string/settings_can_make_payment_toggle_label" /> -+ - { -+ CachedFeatureFlags.setDoHEnabled((boolean) newValue); -+ return true; -+ }); -+ -+ mDoHEdit = findPreference(PREF_DOH_EDIT); -+ updateCurrentDoHUrl(); -+ } -+ -+ private void updateCurrentDoHUrl() { -+ mDoHEdit.setSummary(CachedFeatureFlags.getDoHTemplates()); -+ } -+ -+ @Override -+ public void onResume() { -+ super.onResume(); -+ updateCurrentDoHUrl(); -+ } -+} -diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd ---- a/chrome/app/generated_resources.grd -+++ b/chrome/app/generated_resources.grd -@@ -6864,6 +6864,12 @@ the Bookmarks menu."> - - - -+ -+ Secure DNS -+ -+ -+ Configure DNS-over-HTTPS (DoH) secure DNS -+ - - Homepage - -diff --git a/chrome/browser/flags/android/cached_feature_flags.cc b/chrome/browser/flags/android/cached_feature_flags.cc ---- a/chrome/browser/flags/android/cached_feature_flags.cc -+++ b/chrome/browser/flags/android/cached_feature_flags.cc -@@ -11,6 +11,10 @@ - #include "content/public/common/content_features.h" - #include "content/public/common/network_service_util.h" - -+#include "chrome/browser/browser_process.h" -+#include "components/prefs/pref_service.h" -+#include "chrome/common/pref_names.h" -+ - using base::android::ConvertJavaStringToUTF8; - using base::android::ConvertUTF8ToJavaString; - using base::android::JavaParamRef; -@@ -49,3 +53,23 @@ static jboolean JNI_CachedFeatureFlags_IsNetworkServiceWarmUpEnabled( - return content::IsOutOfProcessNetworkService() && - base::FeatureList::IsEnabled(features::kWarmUpNetworkProcess); - } -+ -+static jboolean JNI_CachedFeatureFlags_GetDoHEnabled(JNIEnv* env) { -+ std::string doh_mode = g_browser_process->local_state()->GetString(prefs::kDnsOverHttpsMode); -+ return ((doh_mode == "secure") || (doh_mode == "auto")); -+} -+ -+static void JNI_CachedFeatureFlags_SetDoHEnabled(JNIEnv* env, jboolean enabled) { -+ if (enabled) -+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsMode, "secure"); -+ else -+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsMode, "off"); -+} -+ -+static ScopedJavaLocalRef JNI_CachedFeatureFlags_GetDoHTemplates(JNIEnv* env) { -+ return base::android::ConvertUTF8ToJavaString(env, g_browser_process->local_state()->GetString(prefs::kDnsOverHttpsTemplates)); -+} -+ -+static void JNI_CachedFeatureFlags_SetDoHTemplates(JNIEnv* env, const JavaParamRef& templates) { -+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsTemplates, base::android::ConvertJavaStringToUTF8(env, templates)); -+} -diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java ---- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -@@ -124,6 +124,26 @@ public class CachedFeatureFlags { - private static Map sOverridesTestFeatures; - private static String sReachedCodeProfilerTrialGroup; - -+ /** -+ * Records whether custom URL for DoH is enabled with native-side feature utilities. -+ * @param url Whether custom URL is enabled or not. -+ */ -+ public static void setDoHEnabled(boolean enabled) { -+ CachedFeatureFlagsJni.get().setDoHEnabled(enabled); -+ } -+ -+ public static boolean getDoHEnabled() { -+ return CachedFeatureFlagsJni.get().getDoHEnabled(); -+ } -+ -+ public static void setDoHTemplates(String t) { -+ CachedFeatureFlagsJni.get().setDoHTemplates(t); -+ } -+ -+ public static String getDoHTemplates() { -+ return CachedFeatureFlagsJni.get().getDoHTemplates(); -+ } -+ - /** - * Checks if a cached feature flag is enabled. - * -@@ -401,6 +421,10 @@ public class CachedFeatureFlags { - - @NativeMethods - interface Natives { -+ void setDoHEnabled(boolean enabled); -+ boolean getDoHEnabled(); -+ void setDoHTemplates(String templates); -+ String getDoHTemplates(); - boolean isNetworkServiceWarmUpEnabled(); - void setAdBlockFiltersURL(String url); - String getAdBlockFiltersURL(); -diff --git a/chrome/browser/net/stub_resolver_config_reader.cc b/chrome/browser/net/stub_resolver_config_reader.cc ---- a/chrome/browser/net/stub_resolver_config_reader.cc -+++ b/chrome/browser/net/stub_resolver_config_reader.cc -@@ -122,41 +122,12 @@ StubResolverConfigReader::StubResolverConfigReader(PrefService* local_state, - local_state_->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled, - base::Value(ShouldEnableAsyncDns())); - std::string default_doh_mode = chrome_browser_net::kDnsOverHttpsModeOff; -- std::string default_doh_templates; -- if (base::FeatureList::IsEnabled(features::kDnsOverHttps)) { -- if (features::kDnsOverHttpsFallbackParam.Get()) { -- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeAutomatic; -- } else { -- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeSecure; -- } -- default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); -- } -+ std::string default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); - local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsMode, - base::Value(default_doh_mode)); - local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsTemplates, - base::Value(default_doh_templates)); - -- // If the user has explicitly enabled or disabled the DoH experiment in -- // chrome://flags and the DoH UI setting is not visible, store that choice -- // in the user prefs so that it can be persisted after the experiment ends. -- // Also make sure to remove the stored prefs value if the user has changed -- // their chrome://flags selection to the default. -- if (!features::kDnsOverHttpsShowUiParam.Get()) { -- flags_ui::PrefServiceFlagsStorage flags_storage(local_state_); -- std::set entries = flags_storage.GetFlags(); -- if (entries.count("dns-over-https@1")) { -- // The user has "Enabled" selected. -- local_state_->SetString(prefs::kDnsOverHttpsMode, -- chrome_browser_net::kDnsOverHttpsModeAutomatic); -- } else if (entries.count("dns-over-https@2")) { -- // The user has "Disabled" selected. -- local_state_->SetString(prefs::kDnsOverHttpsMode, -- chrome_browser_net::kDnsOverHttpsModeOff); -- } else { -- // The user has "Default" selected. -- local_state_->ClearPref(prefs::kDnsOverHttpsMode); -- } -- } - } - - pref_change_registrar_.Add(prefs::kBuiltInDnsClientEnabled, pref_callback); -@@ -346,8 +317,13 @@ void StubResolverConfigReader::GetAndUpdateConfiguration( - std::vector dns_over_https_servers; - base::Optional> - servers_mojo; -- if (!doh_templates.empty() && -- secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { -+ if (doh_templates.empty()) { -+ secure_dns_mode = net::DnsConfig::SecureDnsMode::OFF; -+ doh_mode = chrome_browser_net::kDnsOverHttpsModeOff; -+ } -+ LOG(INFO) << "DoH templates: '" << doh_templates << "' with mode " << doh_mode; -+ if (secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { -+ std::string server_method; - for (base::StringPiece server_template : - chrome_browser_net::SplitDohTemplateGroup(doh_templates)) { - if (!net::dns_util::IsValidDohTemplate(server_template, &server_method)) { -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 -@@ -576,6 +576,17 @@ CHAR-LIMIT guidelines: - Chrome Passwords - - -+ -+ -+ Edit DoH template URLs -+ -+ -+ DoH template URLs -+ -+ -+ Visit help page -+ -+ - - - Enter custom web address -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 -@@ -265,12 +265,12 @@ const base::Feature kDnsHttpssvc{"DnsHttpssvc", - - // Enable DNS over HTTPS (DoH). - const base::Feature kDnsOverHttps{"DnsOverHttps", -- base::FEATURE_DISABLED_BY_DEFAULT}; -+ base::FEATURE_ENABLED_BY_DEFAULT}; - - // Set whether fallback to insecure DNS is allowed by default. This setting may - // be overridden for individual transactions. - const base::FeatureParam kDnsOverHttpsFallbackParam{&kDnsOverHttps, -- "Fallback", true}; -+ "Fallback", false}; - - // Supply one or more space-separated DoH server URI templates to use when this - // feature is enabled. If no templates are specified, then a hardcoded mapping --- -2.17.1 - diff --git a/build/patches/Allow-building-without-feed-support.patch b/build/patches/Allow-building-without-feed-support.patch deleted file mode 100644 index 604cc7b1e1e7c5471cc99745cb3ddf00bddddffc..0000000000000000000000000000000000000000 --- a/build/patches/Allow-building-without-feed-support.patch +++ /dev/null @@ -1,119 +0,0 @@ -From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Thu, 19 Dec 2019 22:52:53 +0100 -Subject: Allow building without feed support - ---- - .../start_surface/StartSurfaceCoordinator.java | 5 ----- - .../start_surface/StartSurfaceMediator.java | 17 ----------------- - chrome/android/feed/feed_java_sources.gni | 2 -- - .../browser/native_page/NativePageFactory.java | 7 ------- - components/feed/feed_feature_list.cc | 2 +- - 5 files changed, 1 insertion(+), 32 deletions(-) - -diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java ---- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java -+++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java -@@ -232,11 +232,6 @@ public class StartSurfaceCoordinator implements StartSurface { - mBottomBarCoordinator = new BottomBarCoordinator( - mActivity, mActivity.getCompositorViewHolder(), mPropertyModel); - } -- -- mExploreSurfaceCoordinator = new ExploreSurfaceCoordinator(mActivity, -- mSurfaceMode == SurfaceMode.SINGLE_PANE ? mTasksSurface.getBodyViewContainer() -- : mActivity.getCompositorViewHolder(), -- mPropertyModel, mSurfaceMode == SurfaceMode.SINGLE_PANE); - } - - private TabSwitcher.Controller initializeSecondaryTasksSurface() { -diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java ---- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -+++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -@@ -432,15 +432,6 @@ class StartSurfaceMediator - assert (isShownState(shownState)); - setOverviewState(shownState); - -- // Make sure FeedSurfaceCoordinator is built before the explore surface is showing by -- // default. -- if (mPropertyModel.get(IS_EXPLORE_SURFACE_VISIBLE) -- && mPropertyModel.get(FEED_SURFACE_COORDINATOR) == null -- && !mActivityStateChecker.isFinishingOrDestroyed()) { -- mPropertyModel.set(FEED_SURFACE_COORDINATOR, -- mFeedSurfaceCreator.createFeedSurfaceCoordinator( -- mNightModeStateProvider.isInNightMode())); -- } - mTabModelSelector.addObserver(mTabModelSelectorObserver); - - if (mFullScreenListener != null) { -@@ -555,14 +546,6 @@ class StartSurfaceMediator - private void setExploreSurfaceVisibility(boolean isVisible) { - if (isVisible == mPropertyModel.get(IS_EXPLORE_SURFACE_VISIBLE)) return; - -- if (isVisible && mPropertyModel.get(IS_SHOWING_OVERVIEW) -- && mPropertyModel.get(FEED_SURFACE_COORDINATOR) == null -- && !mActivityStateChecker.isFinishingOrDestroyed()) { -- mPropertyModel.set(FEED_SURFACE_COORDINATOR, -- mFeedSurfaceCreator.createFeedSurfaceCoordinator( -- mNightModeStateProvider.isInNightMode())); -- } -- - mPropertyModel.set(IS_EXPLORE_SURFACE_VISIBLE, isVisible); - - if (mOverviewModeState == OverviewModeState.SHOWN_TABSWITCHER_TWO_PANES) { -diff --git a/chrome/android/feed/feed_java_sources.gni b/chrome/android/feed/feed_java_sources.gni ---- a/chrome/android/feed/feed_java_sources.gni -+++ b/chrome/android/feed/feed_java_sources.gni -@@ -35,7 +35,6 @@ if (enable_feed_in_chrome) { - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedLifecycleBridge.java", - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedLoggingBridge.java", - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNetworkBridge.java", -- "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java", - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedOfflineBridge.java", - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedOfflineIndicator.java", - "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java", -@@ -681,7 +680,6 @@ if (enable_feed_in_chrome) { - feed_deps = [] - feed_java_sources = [ - "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedAppLifecycle.java", -- "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java", - "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java", - "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedRefreshTask.java", - "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java", -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.ChromeActivity; - import org.chromium.chrome.browser.bookmarks.BookmarkPage; - import org.chromium.chrome.browser.download.DownloadPage; - import org.chromium.chrome.browser.explore_sites.ExploreSitesPage; --import org.chromium.chrome.browser.feed.FeedNewTabPage; - import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; - import org.chromium.chrome.browser.history.HistoryManagerUtils; -@@ -58,12 +57,6 @@ public class NativePageFactory { - activity, new TabShim(tab, activity.getFullscreenManager())); - } - -- if (ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS)) { -- return new FeedNewTabPage(activity, -- new TabShim(tab, activity.getFullscreenManager()), tabModelSelector, -- activityTabProvider, activityLifecycleDispatcher, tab); -- } -- - return new NewTabPage(activity, new TabShim(tab, activity.getFullscreenManager()), - tabModelSelector, activityTabProvider, activityLifecycleDispatcher, tab); - } -diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc ---- a/components/feed/feed_feature_list.cc -+++ b/components/feed/feed_feature_list.cc -@@ -7,7 +7,7 @@ - namespace feed { - - const base::Feature kInterestFeedContentSuggestions{ -- "InterestFeedContentSuggestions", base::FEATURE_ENABLED_BY_DEFAULT}; -+ "InterestFeedContentSuggestions", base::FEATURE_DISABLED_BY_DEFAULT}; - - const base::FeatureParam kDisableTriggerTypes{ - &kInterestFeedContentSuggestions, "disable_trigger_types", ""}; --- -2.17.1 - diff --git a/build/patches/Allow-playing-audio-in-background.patch b/build/patches/Allow-playing-audio-in-background.patch index 474dedf1b263d5c0ecaddbeab834d35e09899123..8241e5ada14e6a73a4b10916a2e9f8aee2231162 100644 --- a/build/patches/Allow-playing-audio-in-background.patch +++ b/build/patches/Allow-playing-audio-in-background.patch @@ -10,7 +10,7 @@ Subject: Allow playing audio in background diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc -@@ -1010,6 +1010,12 @@ bool WebMediaPlayerImpl::HasAudio() const { +@@ -1105,6 +1105,12 @@ bool WebMediaPlayerImpl::HasAudio() const { return pipeline_metadata_.has_audio; } @@ -23,7 +23,7 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp void WebMediaPlayerImpl::EnabledAudioTracksChanged( const blink::WebVector& enabledTrackIds) { DCHECK(main_task_runner_->BelongsToCurrentThread()); -@@ -3409,7 +3415,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { +@@ -3528,7 +3534,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { // Audio only stream is allowed to play when in background. // TODO: We should check IsBackgroundOptimizationCandidate here. But we need // to move the logic of checking video frames out of that function. @@ -35,11 +35,11 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp + if (!HasVideoNonEmptySize()) return false; - if (!is_background_video_playback_enabled_) + if (using_media_player_renderer_ && diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h -@@ -150,6 +150,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl +@@ -157,6 +157,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl // True if the loaded media has a playable video/audio track. bool HasVideo() const override; bool HasAudio() const override; diff --git a/build/patches/Allow-website-sign-in-without-account-sign-in.patch b/build/patches/Allow-website-sign-in-without-account-sign-in.patch index 8e6d7cdb8f98daf150669b234819ef5e22e16fe6..b31a74536b11d27c8086f9aec512c9007c84d56f 100644 --- a/build/patches/Allow-website-sign-in-without-account-sign-in.patch +++ b/build/patches/Allow-website-sign-in-without-account-sign-in.patch @@ -10,9 +10,9 @@ Disable prefs::kSigninAllowedOnNextStartup by default. The setting can be found diff --git a/chrome/browser/signin/account_consistency_mode_manager.cc b/chrome/browser/signin/account_consistency_mode_manager.cc --- a/chrome/browser/signin/account_consistency_mode_manager.cc +++ b/chrome/browser/signin/account_consistency_mode_manager.cc -@@ -101,7 +101,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs( - registry->RegisterBooleanPref(prefs::kAccountConsistencyMirrorRequired, - false); +@@ -119,7 +119,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs( + #if BUILDFLAG(ENABLE_DICE_SUPPORT) + registry->RegisterBooleanPref(kDiceMigrationCompletePref, false); #endif - registry->RegisterBooleanPref(prefs::kSigninAllowedOnNextStartup, true); + registry->RegisterBooleanPref(prefs::kSigninAllowedOnNextStartup, false); diff --git a/build/patches/Always-allow-partner-customisation.patch b/build/patches/Always-allow-partner-customisation.patch index 5549e6ae1bfa8f08ac174df2f61b15bf7c9367a4..39d8154463afabc0f4cf801d9b6526409590b148 100644 --- a/build/patches/Always-allow-partner-customisation.patch +++ b/build/patches/Always-allow-partner-customisation.patch @@ -9,7 +9,7 @@ Subject: Always allow partner customisation diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java -@@ -305,14 +305,14 @@ public class PartnerBrowserCustomizations { +@@ -324,14 +324,14 @@ public class PartnerBrowserCustomizations { @Override protected Void doInBackground() { try { @@ -30,8 +30,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomiz + // return null; + //} - if (isCancelled()) { - return null; + if (isCancelled()) return null; + Provider provider = AppHooks.get().getCustomizationProvider(); -- 2.17.1 diff --git a/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch b/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch index 329e23a7ac2a03fd78da8f0127912b8cb65eb3ec..526a23efcd3f0c09baa681d29767392750878307 100644 --- a/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch +++ b/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch @@ -11,7 +11,7 @@ Do not read experiment value for cronet async DNS configuration 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 -@@ -147,7 +147,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams( +@@ -156,7 +156,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams( local_state->GetBoolean(prefs::kNtlmV2Enabled); #endif // defined(OS_POSIX) @@ -23,7 +23,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc --- a/components/cronet/url_request_context_config.cc +++ b/components/cronet/url_request_context_config.cc -@@ -540,7 +540,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions( +@@ -561,7 +561,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions( effective_experimental_options->Remove(it.key(), nullptr); continue; } diff --git a/build/patches/Always-use-new-tab-page-for-default-home-page.patch b/build/patches/Always-use-new-tab-page-for-default-home-page.patch index 310670b345b1de2449987d54288c07d11838ab73..5261b08938abe13c654ad9d388062512bc07881e 100644 --- a/build/patches/Always-use-new-tab-page-for-default-home-page.patch +++ b/build/patches/Always-use-new-tab-page-for-default-home-page.patch @@ -10,7 +10,7 @@ Ignore any partner-provided home page. 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 -@@ -135,9 +135,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat +@@ -146,9 +146,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat * if the homepage button is force enabled via flag. */ public static String getDefaultHomepageUri() { diff --git a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index a9a7cbaa9398b32eee5d5eee0036aaad8fc8f941..4fc33446f28b66c13d8d40862e06ea434fe2a024 100644 --- a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -5,9 +5,9 @@ Subject: AudioBuffer, AnalyserNode: fp mitigations Truncate base latency precision to two digits --- .../blink/renderer/modules/webaudio/analyser_node.idl | 8 ++++---- - .../blink/renderer/modules/webaudio/audio_buffer.idl | 4 ++-- + .../blink/renderer/modules/webaudio/audio_buffer.idl | 6 ------ .../blink/renderer/modules/webaudio/audio_context.cc | 4 +++- - 3 files changed, 9 insertions(+), 7 deletions(-) + 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/third_party/blink/renderer/modules/webaudio/analyser_node.idl --- a/third_party/blink/renderer/modules/webaudio/analyser_node.idl @@ -30,25 +30,23 @@ diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/thi diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl --- a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl +++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl -@@ -37,12 +37,12 @@ +@@ -37,12 +37,6 @@ // Channel access readonly attribute unsigned long numberOfChannels; -- [HighEntropy, Measure, RaisesException] Float32Array getChannelData( -+ /*[HighEntropy, Measure, RaisesException] Float32Array getChannelData( - unsigned long channelIndex); - [HighEntropy, Measure, RaisesException] void copyFromChannel( - Float32Array destination, - unsigned long channelNumber, +- [HighEntropy=Direct, Measure, RaisesException] Float32Array getChannelData( +- unsigned long channelIndex); +- [HighEntropy, Measure, RaisesException] void copyFromChannel( +- Float32Array destination, +- unsigned long channelNumber, - optional unsigned long bufferOffset = 0); -+ optional unsigned long bufferOffset = 0); */ [RaisesException] void copyToChannel( Float32Array source, unsigned long channelNumber, diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc --- a/third_party/blink/renderer/modules/webaudio/audio_context.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc -@@ -397,7 +397,9 @@ double AudioContext::baseLatency() const { +@@ -406,7 +406,9 @@ double AudioContext::baseLatency() const { DCHECK(IsMainThread()); DCHECK(destination()); diff --git a/build/patches/Automated-domain-substitution.patch b/build/patches/Automated-domain-substitution.patch index efe576390729a4ee869e69e7ba06ea70ed443493..27d61ca4d479497be652fd63b525daaff874975e 100644 --- a/build/patches/Automated-domain-substitution.patch +++ b/build/patches/Automated-domain-substitution.patch @@ -1,28 +1,24 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Wed, 13 May 2020 19:22:18 +0200 +Date: Fri, 21 Aug 2020 13:41:07 +0200 Subject: Automated domain substitution --- - .gn | 2 +- - PRESUBMIT.py | 52 +- - .../devui/WebViewPackageError.java | 2 +- + PRESUBMIT.py | 56 +- .../cts_config/webview_cts_gcs_path.json | 24 +- + android_webview/tools/generate_flag_labels.py | 2 +- android_webview/tools/record_netlog.py | 4 +- .../tools/remove_preinstalled_webview.py | 2 +- android_webview/tools/update_cts.py | 4 +- ash/app_list/PRESUBMIT.py | 2 +- - .../views/assistant/privacy_info_view.cc | 2 +- - ash/ash_strings.grd | 8 +- - .../assistant_interaction_controller.cc | 4 +- + ash/ash_strings.grd | 10 +- ash/assistant/assistant_setup_controller.cc | 2 +- ash/assistant/util/deep_link_util.cc | 16 +- ash/login/ui/login_user_menu_view.cc | 2 +- - ash/public/cpp/app_list/app_list_features.cc | 2 +- + .../quick_answers_controller_impl.cc | 2 +- ash/resources/PRESUBMIT.py | 4 +- - .../client/shell_browser_main_parts.cc | 2 +- - .../client/shell_new_window_delegate.cc | 4 +- base/PRESUBMIT.py | 4 +- base/android/jni_generator/PRESUBMIT.py | 2 +- + base/android/resource_exclusions.gni | 2 +- base/debug/debugger_posix.cc | 4 +- base/debug/stack_trace_posix.cc | 2 +- base/ios/device_util.mm | 2 +- @@ -30,13 +26,12 @@ Subject: Automated domain substitution build/android/PRESUBMIT.py | 2 +- build/android/gradle/generate_gradle.py | 2 +- .../android/gyp/assert_static_initializers.py | 2 +- - build/android/gyp/compile_resources.py | 2 +- build/android/gyp/lint.py | 2 +- - build/android/gyp/proguard.py | 4 +- - build/android/gyp/util/diff_utils.py | 2 +- + build/android/gyp/proguard.py | 2 +- + build/android/gyp/util/diff_utils.py | 4 +- + build/android/gyp/util/protoresources.py | 2 +- .../android/incremental_install/installer.py | 2 +- build/android/pylib/constants/__init__.py | 2 +- - .../android/commands/unzip/Unzip.java | 2 +- build/android/pylib/device_settings.py | 8 +- build/android/pylib/dex/dex_parser.py | 6 +- .../instrumentation/render_test.html.jinja | 2 +- @@ -46,26 +41,25 @@ Subject: Automated domain substitution .../pylib/utils/google_storage_helper.py | 4 +- build/android/pylib/utils/maven_downloader.py | 2 +- build/android/pylib/utils/simpleperf.py | 2 +- + build/android/resource_sizes.py | 2 +- build/android/test_runner.py | 2 +- build/android/test_wrapper/logdog_wrapper.py | 2 +- + build/apple/tweak_info_plist.py | 6 +- build/chromeos/PRESUBMIT.py | 2 +- build/chromeos/test_runner.py | 2 +- build/config/android/rules.gni | 2 +- - build/config/chrome_build.gni | 2 +- build/config/chromeos/args.gni | 4 +- build/config/chromeos/rules.gni | 2 +- - build/config/compiler/compiler.gni | 2 +- - build/config/fuchsia/elfinfo.py | 2 +- + build/config/compiler/compiler.gni | 4 +- build/config/nacl/rules.gni | 2 +- build/config/sanitizers/sanitizers.gni | 2 +- - build/find_isolated_tests.py | 2 +- + build/config/win/control_flow_guard.gni | 2 +- + build/fuchsia/binary_sizes.py | 2 +- build/linux/install-chromeos-fonts.py | 2 +- .../linux/sysroot_scripts/install-sysroot.py | 2 +- - build/mac/tweak_info_plist.py | 6 +- build/mac_toolchain.py | 2 +- build/nocompile.gni | 2 +- - build/package_mac_toolchain.py | 2 +- - build/run_swarming_xcode_install.py | 4 +- + build/skia_gold_common/PRESUBMIT.py | 2 +- build/toolchain/cros_toolchain.gni | 2 +- .../lib/common/perf_tests_results_helper.py | 2 +- build/whitespace_file.txt | 2 +- @@ -74,45 +68,29 @@ Subject: Automated domain substitution buildtools/ensure_gn_version.py | 2 +- cc/PRESUBMIT.py | 2 +- chrome/PRESUBMIT.py | 2 +- - ...rBrowserCustomizationsProviderExample.java | 2 +- - .../AutofillAssistantClient.java | 2 +- ...roid_chrome_autofill_assistant_strings.grd | 2 +- - .../browser/feed/FeedConfiguration.java | 4 +- - .../feedactionparser/FeedActionParser.java | 2 +- chrome/android/java/src/PRESUBMIT.py | 2 +- - .../chrome/browser/ChromeStringConstants.java | 6 +- - .../chrome/browser/ChromeTabbedActivity.java | 2 +- - .../chrome/browser/IntentHandler.java | 6 +- - .../customtabs/CustomButtonParams.java | 2 +- - .../browser/feedback/ConnectivityChecker.java | 4 +- - .../chrome/browser/help/HelpAndFeedback.java | 2 +- - .../indicator/ConnectivityDetector.java | 4 +- - .../browser/omaha/RequestGenerator.java | 2 +- - .../geo/partner_location_descriptor.proto | 2 +- - .../page_info/ConnectionInfoPopup.java | 2 +- - .../suggestions/SuggestionsConfig.java | 2 +- - .../SuggestionsNavigationDelegate.java | 2 +- chrome/android/webapk/PRESUBMIT.py | 2 +- - .../webapk/lib/client/WebApkValidator.java | 2 +- + .../manifest/bound_manifest_config.json | 12 +- + .../javatest_manifest_config_delta.json | 2 +- .../manifest/maps_go_manifest_config.json | 10 +- chrome/app/PRESUBMIT.py | 8 +- - chrome/app/chromium_strings.grd | 8 +- - chrome/app/generated_resources.grd | 218 +- - chrome/app/google_chrome_strings.grd | 8 +- + chrome/app/chromium_strings.grd | 12 +- + chrome/app/generated_resources.grd | 244 ++-- + chrome/app/google_chrome_strings.grd | 12 +- chrome/app/resources/locale_settings.grd | 10 +- chrome/app/theme/PRESUBMIT.py | 4 +- chrome/browser/about_flags.cc | 12 +- - .../autofill_assistant/client_android.cc | 2 +- .../browser/android/explore_sites/url_util.cc | 2 +- .../explore_sites/url_util_experimental.cc | 2 +- - .../android/usage_stats/website_event.proto | 2 +- chrome/browser/android/vr/PRESUBMIT.py | 2 +- + .../digital_goods_factory_impl.cc | 2 +- .../apps/platform_apps/install_chrome_app.cc | 2 +- .../autofill/autofill_gstatic_reader.cc | 4 +- .../autofill/captured_sites_test_utils.cc | 2 +- .../browser_switcher_service.cc | 2 +- + chrome/browser/cart/cart_service.cc | 8 +- .../browser/chrome_browser_application_mac.mm | 2 +- - .../browser/chrome_content_browser_client.cc | 2 +- .../chromeos/android_sms/android_sms_urls.cc | 16 +- chrome/browser/chromeos/app_mode/fake_cws.cc | 2 +- .../auth/arc_background_auth_code_fetcher.cc | 2 +- @@ -120,22 +98,30 @@ Subject: Automated domain substitution .../chromeos/assistant/assistant_util.cc | 4 +- .../attestation/attestation_ca_client.cc | 8 +- .../backdrop_wallpaper_handlers.cc | 6 +- + .../cert_provisioning_test_helpers.cc | 2 +- + .../child_accounts/child_user_service.cc | 2 +- .../resources/web_time_limit_error_page.html | 2 +- - .../browser/chromeos/crostini/crostini_util.h | 2 +- + .../chromeos/crostini/crostini_util.cc | 2 +- .../customization/customization_document.cc | 2 +- .../chromeos/drive/drivefs_test_support.cc | 2 +- .../file_manager/private_api_drive.cc | 2 +- .../file_manager/private_api_misc.cc | 2 +- - .../file_manager/file_manager_string_util.cc | 10 +- + .../file_manager/file_manager_string_util.cc | 12 +- .../first_run/drive_first_run_controller.cc | 4 +- - .../chromeos/first_run/goodies_displayer.cc | 2 +- chrome/browser/chromeos/hats/hats_dialog.cc | 2 +- + .../input_method/assistive_suggester.cc | 12 +- .../easy_unlock/easy_unlock_key_names.cc | 2 +- .../login/marketing_backend_connector.cc | 4 +- - .../recommend_apps/device_configuration.proto | 18 +- + .../login/saml/password_sync_token_fetcher.cc | 2 +- .../recommend_apps_fetcher_impl.cc | 2 +- .../login/session/user_session_manager.cc | 2 +- - .../chromeos/plugin_vm/plugin_vm_util.cc | 2 +- + .../dns_latency_routine.cc | 2 +- + .../dns_resolution_routine.cc | 2 +- + .../http_firewall_routine.cc | 6 +- + .../network_diagnostics_util.cc | 14 +- + .../video_conferencing_routine.cc | 4 +- + .../plugin_vm/plugin_vm_license_checker.cc | 4 +- + .../chromeos/plugin_vm/plugin_vm_util.cc | 6 +- .../chromeos/policy/heartbeat_scheduler.cc | 4 +- .../policy/powerwash_requirements_checker.cc | 2 +- .../remote_commands/crd_host_delegate.cc | 10 +- @@ -144,42 +130,51 @@ Subject: Automated domain substitution .../data_reduction_proxy_chrome_settings.cc | 4 +- chrome/browser/devtools/url_constants.cc | 4 +- .../mixed_content_download_blocking.cc | 2 +- + .../connectors/connectors_service.cc | 4 +- .../extension_request_notification.cc | 4 +- - chrome/browser/extensions/api/README.txt | 4 +- - .../autofill_assistant_private_api.cc | 2 +- + .../chrome_js_error_report_processor.cc | 4 +- .../cryptotoken_private_api.cc | 6 +- - .../enterprise_platform_keys_apitest_nss.cc | 2 +- .../identity_launch_web_auth_flow_function.cc | 2 +- .../chrome_management_api_delegate.cc | 2 +- .../tab_capture_performance_test_base.cc | 2 +- .../chrome_extension_browser_constants.cc | 2 +- .../extensions/external_pref_loader.cc | 2 +- + .../force_installed_test_base.cc | 2 +- chrome/browser/extensions/install_signer.cc | 2 +- .../chrome_extension_downloader_factory.cc | 2 +- .../updater/chrome_update_client_config.cc | 2 +- + .../floc_remote_permission_service.cc | 2 +- .../feedback/feedback_uploader_chrome.cc | 2 +- - chrome/browser/flag-metadata.json | 424 +-- + chrome/browser/flag_descriptions.cc | 4 +- .../importer/edge_importer_browsertest_win.cc | 8 +- .../importer/ie_importer_browsertest_win.cc | 30 +- + .../browser/installable/quality_enforcer.cc | 4 +- + .../lacros/cert_db_initializer_impl.cc | 40 +- .../service_discovery_client_mac.mm | 4 +- - .../cast/cast_media_route_provider.cc | 2 +- + .../cast/cast_media_route_provider.cc | 4 +- .../dial/dial_media_route_provider.cc | 12 +- .../media/webrtc/webrtc_browsertest_common.cc | 2 +- .../media/webrtc/webrtc_event_log_uploader.cc | 2 +- .../media/webrtc/webrtc_log_uploader.cc | 2 +- .../testing/sync_metrics_test_utils.cc | 2 +- .../nacl_host/nacl_infobar_delegate.cc | 2 +- + .../client/nearby_share_client_impl.cc | 4 +- + .../instantmessaging/constants.h | 4 +- chrome/browser/net/dns_probe_runner.cc | 2 +- .../notification_platform_bridge_mac.mm | 2 +- .../ads_page_load_metrics_observer.cc | 2 +- ...uction_proxy_metrics_observer_test_utils.h | 2 +- ...page_load_metrics_observer_test_harness.cc | 2 +- - ...rvice_worker_page_load_metrics_observer.cc | 4 +- + ...rvice_worker_page_load_metrics_observer.cc | 2 +- + ...rd_manager_signin_intercept_test_helper.cc | 2 +- .../browser/pepper_broker_infobar_delegate.cc | 2 +- - chrome/browser/platform_util_chromeos.cc | 2 +- + .../performance_hints_features.cc | 2 +- + ...ped_permission_infobar_delegate_android.cc | 2 +- + .../policy/extension_force_install_mixin.cc | 2 +- chrome/browser/policy/policy_test_utils.cc | 2 +- chrome/browser/policy/policy_test_utils.h | 2 +- .../tools/prerender_test_server/index.html | 2 +- + .../prefetch_proxy/prefetch_proxy_params.cc | 6 +- chrome/browser/profiles/profile_window.cc | 2 +- .../push_messaging_constants.cc | 2 +- .../push_messaging_service_impl.cc | 2 +- @@ -187,41 +182,35 @@ Subject: Automated domain substitution chrome/browser/resources/PRESUBMIT.py | 2 +- .../resources/chromeos/about_os_credits.html | 6 +- .../annotation/user_annotation_handler.js | 2 +- - .../chromevox/background/command_handler.js | 2 +- - .../chromevox/background/prefs.js | 6 +- + .../chromevox/background/command_handler.js | 6 +- + .../i_tutorial/components/i_tutorial.js | 6 +- .../chromevox/options/options.css | 2 +- - .../chromevox/options/options.js | 2 +- .../accessibility/chromevox/panel/panel.html | 2 +- - .../accessibility/chromevox/panel/panel.js | 2 +- - .../accessibility/chromevox/panel/tutorial.js | 6 +- .../tools/webstore_extension_util.py | 10 +- .../chromevox_manifest.json.jinja2 | 8 +- .../accessibility/select_to_speak/options.css | 2 +- .../select_to_speak/select_to_speak.js | 8 +- - .../select_to_speak/test_support.js | 2 +- .../select_to_speak_manifest.json.jinja2 | 8 +- .../switch_access/switch_access.js | 2 +- - .../add_supervision/add_supervision.js | 14 +- + .../switch_access_manifest.json.jinja2 | 4 +- + .../add_supervision/add_supervision_ui.js | 16 +- .../chromeos/arc_support/background.js | 12 +- .../chromeos/arc_support/playstore.js | 6 +- .../assistant_optin/assistant_value_prop.js | 2 +- - .../src/js/lib/google-analytics-bundle.js | 2 +- - .../resources/chromeos/camera/src/js/util.js | 2 +- - .../chromeos/camera/src/manifest.json | 2 +- .../connectivity_diagnostics/manifest.json | 4 +- - .../resources/chromeos/echo/manifest.json | 8 +- + .../resources/chromeos/echo/manifest.json | 122 +- + .../edu_coexistence/edu_coexistence_ui.js | 2 +- + .../chromeos/emoji_picker/icons.html | 2 +- .../resources/chromeos/emulator/icons.html | 2 +- - .../chromeos/genius_app/manifest.json | 32 +- .../input_method/google_xkb_manifest.json | 10 +- - .../modules/discover_module_redeem_offers.js | 2 +- - .../modules/discover_module_sync_files.js | 2 +- - .../chromeos/login/offline_gaia.html | 2 +- - .../resources/chromeos/login/offline_gaia.js | 2 +- - .../login/screen_arc_terms_of_service.js | 2 +- + .../chromeos/login/arc_terms_of_service.js | 4 +- + .../chromeos/login/marketing_opt_in.html | 2 +- + .../chromeos/login/offline_login.html | 2 +- + .../resources/chromeos/login/offline_login.js | 2 +- + .../browser_tabs_metadata_form.js | 2 +- .../chromeos/wallpaper_manager/manifest.json | 2 +- .../zip_archiver/unpacker-test/README.txt | 2 +- .../zip_archiver/unpacker-test/cpp/Makefile | 2 +- - .../resources/cloud_print_app/manifest.json | 4 +- .../browser/resources/cryptotoken/enroller.js | 2 +- .../default_apps/external_extensions.json | 6 +- .../discards/graph_doc_template.html | 2 +- @@ -234,20 +223,24 @@ Subject: Automated domain substitution .../manifest.json | 2 +- .../scope_approval_dialog.js | 6 +- chrome/browser/resources/inspect/inspect.html | 4 +- + .../query_tiles/query_tiles_internals.html | 2 +- + .../query_tiles/query_tiles_internals.js | 4 +- .../browser/resources/local_ntp/customize.js | 2 +- chrome/browser/resources/local_ntp/doodles.js | 4 +- chrome/browser/resources/local_ntp/voice.js | 2 +- .../resources/media/mei_preload/manifest.json | 2 +- chrome/browser/resources/media/webrtc_logs.js | 2 +- - .../media_router/extension/manifest.yaml | 8 +- + .../shared/nearby_contact_visibility.js | 2 +- + .../shared/nearby_shared_icons.html | 4 +- + .../nearby_shared_share_type_icons.html | 2 +- .../domain_security_policy_view.html | 4 +- .../resources/net_internals/events_view.html | 2 +- .../network_speech_synthesis/manifest.json | 2 +- .../network_speech_synthesis/tts_extension.js | 2 +- - .../new_tab_page/customize_themes.js | 2 +- + .../new_tab_page/doodle_share_dialog.js | 2 +- .../new_tab_page/voice_search_overlay.js | 2 +- chrome/browser/resources/omnibox/omnibox.html | 2 +- - .../resources/omnibox/omnibox_output.js | 2 +- + .../resources/omnibox/omnibox_output.js | 4 +- .../browser/resources/pdf/elements/icons.html | 2 +- .../plugin_metadata/plugins_chromeos.json | 2 +- .../plugin_metadata/plugins_linux.json | 4 +- @@ -258,8 +251,9 @@ Subject: Automated domain substitution .../resources/settings/a11y_page/a11y_page.js | 2 +- .../settings/about_page/about_page.html | 4 +- .../appearance_page/appearance_page.js | 2 +- + .../autofill_page/passwords_list_handler.js | 2 +- .../resources/settings/chromeos/PRESUBMIT.py | 4 +- - .../crostini_page/crostini_subpage.html | 2 +- + .../crostini_disk_resize_dialog.html | 2 +- .../settings/chromeos/device_page/stylus.js | 2 +- .../os_a11y_page/manage_a11y_page.html | 2 +- .../channel_switcher_dialog.html | 2 +- @@ -272,8 +266,8 @@ Subject: Automated domain substitution .../resources/webstore_app/manifest.json | 4 +- .../certificate_reporting_service.cc | 2 +- .../chrome_cleaner/srt_field_trial_win.cc | 6 +- + .../chrome_enterprise_url_lookup_service.cc | 4 +- .../chrome_password_protection_service.cc | 4 +- - .../client_side_detection_service.cc | 2 +- .../binary_upload_service.cc | 4 +- .../check_client_download_request_base.cc | 4 +- .../download_protection/download_feedback.cc | 2 +- @@ -286,59 +280,78 @@ Subject: Automated domain substitution chrome/browser/search/local_ntp_source.cc | 6 +- chrome/browser/search/ntp_icon_source.cc | 2 +- .../template_url_service_test_util.cc | 2 +- + .../sharing/shared_clipboard/feature_flags.cc | 2 +- .../sharing/web_push/web_push_sender.cc | 4 +- .../sharing/webrtc/ice_config_fetcher.cc | 12 +- chrome/browser/signin/signin_ui_util.cc | 2 +- .../browser/ssl/connection_help_tab_helper.cc | 2 +- + chrome/browser/ssl/sct_reporting_service.cc | 2 +- + .../subresource_redirect_util.cc | 2 +- .../child_accounts/family_info_fetcher.cc | 2 +- .../child_accounts/kids_management_api.cc | 2 +- .../permission_request_creator_apiary.cc | 2 +- .../kids_chrome_management_client.cc | 4 +- .../supervised_user_block_interstitial.html | 2 +- .../supervised_user_service.cc | 2 +- - .../supervised_user_url_filter.cc | 10 +- + .../supervised_user_test_util.cc | 4 +- + .../supervised_user_url_filter.cc | 12 +- .../browser/tracing/crash_service_uploader.cc | 2 +- - .../strings/android_chrome_strings.grd | 52 +- + .../strings/android_chrome_strings.grd | 40 +- .../arc/arc_app_reinstall_app_result.cc | 2 +- - .../ash/ambient/backdrop/photo_client_impl.cc | 2 +- + .../search/files/item_suggest_cache.cc | 2 +- + .../search/files/item_suggest_cache.h | 2 +- + .../ui/app_list/search/omnibox_provider.cc | 2 +- + .../ui/ash/ambient/ambient_client_impl.cc | 8 +- .../ui/ash/assistant/assistant_test_mixin.cc | 2 +- .../conversation_starters_client_impl.cc | 2 +- - .../assistant/proactive_suggestions_loader.cc | 2 +- .../browser/ui/ash/chrome_shell_delegate.cc | 2 +- - .../safe_browsing_triggered_popup_blocker.h | 4 +- + .../ui/ash/in_session_auth_dialog_client.cc | 2 +- + .../quick_answers_browser_client_impl.cc | 2 +- .../tab_under_navigation_throttle.h | 2 +- - ...r_content_setting_bubble_model_delegate.cc | 2 +- + ...r_content_setting_bubble_model_delegate.cc | 4 +- .../browser_navigator_browsertest_chromeos.cc | 2 +- + .../rosetta_required_infobar_delegate.mm | 2 +- .../browser/ui/cocoa/share_menu_controller.mm | 2 +- .../installation_error_infobar_delegate.cc | 2 +- .../ui/hats/hats_survey_status_checker.cc | 4 +- - chrome/browser/ui/signin_view_controller.cc | 4 +- + chrome/browser/ui/signin_view_controller.cc | 2 +- ...al_provider_signin_dialog_win_test_data.cc | 2 +- .../toolbar/media_router_contextual_menu.cc | 6 +- - .../views/accessibility/invert_bubble_view.cc | 6 +- .../app_dialog/app_uninstall_dialog_view.cc | 2 +- - ...menu_model_builder_browsertest_chromeos.cc | 4 +- + .../ui/views/hats/hats_next_web_dialog.cc | 2 +- .../browser/ui/views/hats/hats_web_dialog.cc | 6 +- + ...picker_bubble_view_browsertest_chromeos.cc | 12 +- + .../media_router/cast_dialog_sink_button.cc | 2 +- .../ui/views/network_profile_bubble_view.cc | 2 +- .../ui/views/outdated_upgrade_bubble_view.cc | 2 +- + .../plugin_vm/plugin_vm_installer_view.cc | 2 +- .../ui/views/session_crashed_bubble_view.cc | 2 +- ...rofile_signin_confirmation_dialog_views.cc | 2 +- chrome/browser/ui/webui/PRESUBMIT.py | 2 +- + .../internals_ui_handler.cc | 2 +- .../add_supervision/add_supervision_ui.cc | 4 +- .../assistant_optin/assistant_optin_utils.cc | 2 +- - .../chromeos/login/gaia_screen_handler.cc | 2 +- + .../edu_coexistence_login_handler_chromeos.cc | 2 +- .../ui/webui/interstitials/interstitial_ui.cc | 2 +- - .../browser/ui/webui/management_ui_handler.cc | 2 +- + .../webui/management/management_ui_handler.cc | 2 +- + .../ui/webui/new_tab_page/foo/foo_handler.cc | 12 +- + .../ui/webui/new_tab_page/new_tab_page_ui.cc | 4 +- chrome/browser/ui/webui/ntp/new_tab_ui.cc | 2 +- - .../ui/webui/ntp/ntp_resource_cache.cc | 8 +- - .../chromeos/parental_controls_handler.cc | 4 +- + .../ui/webui/ntp/ntp_resource_cache.cc | 10 +- + .../chromeos/parental_controls_handler.cc | 2 +- .../webui/settings/reset_settings_handler.cc | 2 +- .../settings_localized_strings_provider.cc | 2 +- - .../settings/settings_secure_dns_handler.cc | 2 +- .../ui/webui/welcome/google_apps_handler.cc | 12 +- .../webui/welcome/ntp_background_handler.cc | 2 +- - .../upboarding/query_tiles/internal/config.cc | 2 +- + .../video_tutorials/internal/config.cc | 2 +- chrome/browser/vr/PRESUBMIT.py | 2 +- + .../preinstalled_web_apps/gmail.cc | 6 +- + .../preinstalled_web_apps/google_calendar.cc | 6 +- + .../preinstalled_web_apps/google_docs.cc | 6 +- + .../preinstalled_web_apps/google_drive.cc | 6 +- + .../preinstalled_web_apps/google_sheets.cc | 6 +- + .../preinstalled_web_apps/google_slides.cc | 6 +- + .../preinstalled_web_apps/youtube.cc | 6 +- .../web_applications/web_app_install_task.cc | 2 +- .../chrome_authenticator_request_delegate.cc | 6 +- chrome/chrome_cleaner/PRESUBMIT.py | 2 +- @@ -348,7 +361,7 @@ Subject: Automated domain substitution .../logging/cleaner_logging_service.cc | 6 +- .../chrome_cleaner/logging/dummy_api_keys.cc | 4 +- .../logging/reporter_logging_service.cc | 6 +- - .../mojom/engine_requests.mojom | 2 +- + .../apps/platform_apps/api/PRESUBMIT.py | 2 +- .../cloud_print/cloud_print_constants.cc | 2 +- chrome/common/extensions/PRESUBMIT.py | 2 +- chrome/common/extensions/api/PRESUBMIT.py | 2 +- @@ -356,6 +369,7 @@ Subject: Automated domain substitution chrome/common/extensions/api/cookies.json | 2 +- chrome/common/extensions/api/debugger.json | 8 +- .../extensions/api/declarative_content.json | 4 +- + chrome/common/extensions/api/dom.json | 2 +- .../api/enterprise_device_attributes.idl | 2 +- chrome/common/extensions/api/gcm.json | 4 +- chrome/common/extensions/api/i18n.json | 2 +- @@ -363,254 +377,26 @@ Subject: Automated domain substitution .../extensions/api/image_writer_private.idl | 2 +- chrome/common/extensions/api/instance_id.json | 2 +- chrome/common/extensions/api/printing.idl | 6 +- + chrome/common/extensions/api/scripting.idl | 4 +- chrome/common/extensions/api/tabs.json | 4 +- chrome/common/extensions/api/tts.json | 2 +- .../extensions/api/webrtc_audio_private.idl | 2 +- chrome/common/extensions/api/webview_tag.json | 4 +- chrome/common/extensions/api/windows.json | 2 +- .../extensions/chrome_extensions_client.cc | 4 +- - .../api/bookmarks/basic/manifest.json | 2 +- - .../examples/api/bookmarks/basic/popup.html | 2 +- - .../docs/examples/api/commands/background.js | 2 +- - .../default_command_override/background.js | 2 +- - .../api/deviceInfo/basic/manifest.json | 2 +- - .../examples/api/deviceInfo/basic/popup.html | 2 +- - .../download_filename_controller/options.html | 4 +- - .../api/downloads/download_manager/popup.html | 2 +- - .../api/eventPage/basic/background.js | 8 +- - .../api/eventPage/basic/manifest.json | 2 +- - .../examples/api/notifications/options.html | 2 +- - .../api/omnibox/newtab_search/background.js | 2 +- - .../override/override_igoogle/redirect.html | 2 +- - .../docs/examples/api/tabs/pin/background.js | 2 +- - .../api/water_alarm_notification/popup.html | 2 +- - .../webview/capturevisibleregion/test2.html | 2 +- - .../apps/background-simple/index.html | 10 +- - .../apps/hello-java/HelloLicenseServlet.java | 4 +- - .../apps/hello-php/lib/oauth/CHANGELOG.txt | 6 +- - .../apps/hello-python/httplib2/__init__.py | 2 +- - .../docs/examples/apps/hello-python/main.py | 6 +- - .../examples/extensions/app_launcher/popup.js | 2 +- - .../docs/examples/extensions/buildbot/bg.js | 16 +- - .../extensions/buildbot/manifest.json | 6 +- - .../examples/extensions/buildbot/popup.js | 6 +- - .../extensions/calendar/javascript/options.js | 2 +- - .../extensions/calendar/views/options.html | 2 +- - .../extensions/chrome_search/background.js | 6 +- - .../extensions/chrome_search/manifest.json | 2 +- - .../extensions/constant_context/background.js | 2 +- - .../extensions/constant_context/manifest.json | 4 +- - .../extensions/download_images/background.js | 2 +- - .../extensions/email_this_page/options.js | 2 +- - .../docs/examples/extensions/fx/bg.js | 10 +- - .../examples/extensions/gdocs/background.html | 10 +- - .../extensions/gdocs/chrome_ex_oauth.html | 2 +- - .../examples/extensions/gdocs/manifest.json | 8 +- - .../examples/extensions/gdocs/options.html | 2 +- - .../docs/examples/extensions/gdocs/popup.html | 18 +- - .../examples/extensions/gmail/background.js | 2 +- - .../examples/extensions/gmail/manifest.json | 2 +- - .../extensions/irc/servlet/index.html | 2 +- - .../examples/extensions/mappy/manifest.json | 6 +- - .../docs/examples/extensions/mappy/popup.js | 4 +- - .../extensions/maps_app/manifest.json | 4 +- - .../examples/extensions/news/css/feed.css | 2 +- - .../examples/extensions/news/css/options.css | 2 +- - .../extensions/news/javascript/feed.js | 2 +- - .../extensions/news/javascript/util.js | 4 +- - .../examples/extensions/news/manifest.json | 2 +- - .../examples/extensions/news/views/feed.html | 6 +- - .../extensions/news/views/options.html | 2 +- - .../examples/extensions/news_a11y/feed.js | 4 +- - .../extensions/news_a11y/manifest.json | 4 +- - .../news_i18n/_locales/en/messages.json | 2 +- - .../extensions/news_i18n/manifest.json | 2 +- - .../extensions/oauth_contacts/background.js | 10 +- - .../extensions/oauth_contacts/contacts.html | 2 +- - .../extensions/oauth_contacts/manifest.json | 8 +- - .../plugin_settings/js/plugin_list_test.html | 2 +- - .../js/plugin_settings_test.html | 20 +- - .../plugin_settings/js/rule_list_test.html | 2 +- - .../extensions/talking_alarm_clock/popup.html | 4 +- - .../examples/extensions/ttsdemo/ttsdemo.html | 2 +- - .../howto/tab_shortcuts/tab_shortcuts.js | 2 +- - .../tutorials/analytics/manifest.json | 2 +- - .../examples/tutorials/analytics/popup.js | 2 +- - .../broken_background_color/background.js | 2 +- - .../get_started_complete/background.js | 2 +- - .../examples/tutorials/getstarted/popup.html | 2 +- - .../oauth_tutorial_complete/manifest.json | 2 +- - .../oauth_tutorial_complete/oauth.js | 4 +- - .../extensions/docs/server2/PRESUBMIT.py | 2 +- - .../extensions/docs/server2/admin_servlets.py | 2 +- - .../docs/server2/gcs_file_system.py | 2 +- - .../extensions/docs/server2/patch_servlet.py | 6 +- - .../extensions/docs/server2/redirector.py | 8 +- - .../docs/server2/rietveld_patcher.py | 10 +- - .../common/extensions/docs/server2/servlet.py | 2 +- - .../github_file_system/expected_read.txt | 4 +- - .../extensions/docs/server2/update_cache.py | 2 +- - .../extensions/docs/server2/url_constants.py | 12 +- - .../extensions/docs/static/js/search.js | 2 +- - .../common/extensions/docs/static/js/site.js | 2 +- - .../docs/templates/articles/a11y.html | 10 +- - .../docs/templates/articles/about_apps.html | 12 +- - .../docs/templates/articles/activeTab.html | 2 +- - .../docs/templates/articles/analytics.html | 6 +- - .../templates/articles/angular_framework.html | 26 +- - .../docs/templates/articles/api_index.html | 2 +- - .../docs/templates/articles/api_other.html | 2 +- - .../templates/articles/app_architecture.html | 4 +- - .../templates/articles/app_bluetooth.html | 4 +- - .../articles/app_codelab_basics.html | 2 +- - .../articles/app_codelab_filesystem.html | 4 +- - .../articles/app_codelab_images.html | 6 +- - .../articles/app_codelab_import_todomvc.html | 2 +- - .../templates/articles/app_codelab_intro.html | 4 +- - .../articles/app_codelab_publish.html | 2 +- - .../docs/templates/articles/app_external.html | 8 +- - .../templates/articles/app_frameworks.html | 2 +- - .../docs/templates/articles/app_identity.html | 16 +- - .../docs/templates/articles/app_network.html | 2 +- - .../docs/templates/articles/apps.html | 12 +- - .../articles/arc_in_app_payments.html | 14 +- - .../templates/articles/arc_playservices.html | 14 +- - .../docs/templates/articles/autoupdate.html | 10 +- - .../templates/articles/background_pages.html | 2 +- - .../articles/chrome_apps_on_mobile.html | 14 +- - .../articles/contentSecurityPolicy.html | 2 +- - .../templates/articles/content_scripts.html | 4 +- - .../articles/declare_permissions.html | 2 +- - .../articles/desktop_notifications.html | 8 +- - .../docs/templates/articles/develop_apps.html | 4 +- - .../docs/templates/articles/devguide.html | 2 +- - .../docs/templates/articles/devtools.html | 20 +- - .../docs/templates/articles/experimental.html | 8 +- - .../templates/articles/extensions_index.html | 14 +- - .../articles/external_extensions.html | 14 +- - .../docs/templates/articles/faq.html | 20 +- - .../docs/templates/articles/game_engines.html | 4 +- - .../docs/templates/articles/getstarted.html | 8 +- - .../templates/articles/getstarted_arc.html | 20 +- - .../docs/templates/articles/hosting.html | 8 +- - .../templates/articles/hosting_changes.html | 34 +- - .../docs/templates/articles/inform_users.html | 2 +- - .../docs/templates/articles/inline_faq.html | 4 +- - .../templates/articles/linux_hosting.html | 12 +- - .../docs/templates/articles/manifest/app.html | 4 +- - .../articles/manifest/default_locale.html | 2 +- - .../articles/manifest/description.html | 4 +- - .../manifest/externally_connectable.html | 4 +- - .../articles/manifest/homepage_url.html | 4 +- - .../templates/articles/manifest/icons.html | 4 +- - .../docs/templates/articles/manifest/key.html | 10 +- - .../articles/manifest/kiosk_enabled.html | 28 +- - .../articles/manifest/manifest_version.html | 2 +- - .../manifest/minimum_chrome_version.html | 2 +- - .../articles/manifest/nacl_modules.html | 2 +- - .../templates/articles/manifest/name.html | 4 +- - .../articles/manifest/requirements.html | 6 +- - .../templates/articles/manifest/sandbox.html | 10 +- - .../templates/articles/manifest/storage.html | 6 +- - .../articles/manifest/url_handlers.html | 2 +- - .../templates/articles/manifest/version.html | 2 +- - .../manifest/web_accessible_resources.html | 6 +- - .../templates/articles/match_patterns.html | 30 +- - .../docs/templates/articles/messaging.html | 4 +- - .../articles/migrating_to_manifest_v3.html | 12 +- - .../migrating_to_service_workers.html | 14 +- - .../docs/templates/articles/migration.html | 362 +-- - .../templates/articles/nativeMessaging.html | 12 +- - .../docs/templates/articles/npapi.html | 6 +- - .../docs/templates/articles/offline_apps.html | 2 +- - .../templates/articles/offline_storage.html | 10 +- - .../docs/templates/articles/overview.html | 4 +- - .../docs/templates/articles/packaging.html | 6 +- - .../docs/templates/articles/performance.html | 6 +- - .../articles/permission_warnings.html | 6 +- - .../docs/templates/articles/publish_app.html | 6 +- - .../templates/articles/richNotifications.html | 4 +- - .../templates/articles/sandboxingEval.html | 4 +- - .../docs/templates/articles/security.html | 20 +- - .../templates/articles/sencha_framework.html | 2 +- - .../templates/articles/settings_override.html | 8 +- - .../templates/articles/single_purpose.html | 28 +- - .../docs/templates/articles/themes.html | 10 +- - .../templates/articles/tut_analytics.html | 16 +- - .../templates/articles/tut_debugging.html | 10 +- - .../tut_migration_to_manifest_v2.html | 2 +- - .../docs/templates/articles/tut_oauth.html | 22 +- - .../docs/templates/articles/tutorials.html | 2 +- - .../templates/articles/user_interface.html | 12 +- - .../docs/templates/articles/user_privacy.html | 6 +- - .../docs/templates/articles/webstore.html | 2 +- - .../docs/templates/articles/xhr.html | 16 +- - .../intros/bluetooth_low_energy.html | 2 +- - .../docs/templates/intros/bookmarks.html | 4 +- - .../docs/templates/intros/browserAction.html | 2 +- - .../docs/templates/intros/browsingData.html | 2 +- - .../templates/intros/certificateProvider.html | 4 +- - .../docs/templates/intros/commands.html | 2 +- - .../templates/intros/contentSettings.html | 2 +- - .../docs/templates/intros/cookies.html | 4 +- - .../templates/intros/declarativeContent.html | 6 +- - .../intros/declarativeNetRequest.html | 18 +- - .../intros/declarativeWebRequest.html | 10 +- - .../intros/devtools_inspectedWindow.html | 2 +- - .../docs/templates/intros/downloads.html | 2 +- - .../intros/enterprise_deviceAttributes.html | 2 +- - .../intros/enterprise_platformKeys.html | 2 +- - .../docs/templates/intros/events.html | 8 +- - .../docs/templates/intros/fontSettings.html | 2 +- - .../docs/templates/intros/history.html | 4 +- - .../docs/templates/intros/i18n.html | 10 +- - .../docs/templates/intros/input_ime.html | 2 +- - .../templates/intros/networkingPrivate.html | 2 +- - .../docs/templates/intros/pageAction.html | 2 +- - .../docs/templates/intros/permissions.html | 14 +- - .../docs/templates/intros/privacy.html | 2 +- - .../docs/templates/intros/storage.html | 2 +- - .../docs/templates/intros/tabs.html | 2 +- - .../docs/templates/intros/webNavigation.html | 6 +- - .../docs/templates/intros/webRequest.html | 8 +- - .../docs/templates/intros/webview_tag.html | 12 +- - .../docs/templates/intros/windows.html | 6 +- - .../docs/templates/json/apps_sidenav.json | 2 +- - .../docs/templates/json/chrome_sidenav.json | 2 +- - .../templates/json/content_providers.json | 2 +- - .../templates/json/extensions_sidenav.json | 4 +- - .../docs/templates/json/intro_tables.json | 22 +- - .../docs/templates/json/strings.json | 40 +- - .../docs/templates/private/api_reference.html | 2 +- - .../docs/templates/private/article.html | 6 +- - .../docs/templates/private/fatnav.html | 2 +- - .../private/intro_tables/master_message.html | 2 +- - .../private/permissions/background.html | 2 +- - .../private/permissions/favicon.html | 2 +- - .../private/permissions/notifications.html | 4 +- - .../private/permissions/pointer_lock.html | 2 +- - .../docs/templates/private/site.html | 10 +- - .../docs/templates/private/warning_beta.html | 4 +- - .../docs/templates/private/warning_dev.html | 2 +- - .../templates/private/warning_master.html | 2 +- - .../docs/templates/public/apps/redirects.json | 18 +- - .../public/extensions/redirects.json | 10 +- - .../docs/templates/public/owners.html | 2 +- chrome/common/google_url_loader_throttle.cc | 4 +- - chrome/common/media_router/media_source.h | 2 +- - .../common/safe_browsing/client_model.proto | 4 +- - chrome/common/search.mojom | 2 +- - chrome/common/service_process.mojom | 2 +- - chrome/common/url_constants.cc | 222 +- + chrome/common/url_constants.cc | 230 ++-- + .../extension/task_manager_unittests.cc | 6 +- .../gaiacp/associated_user_validator.cc | 2 +- .../associated_user_validator_unittests.cc | 4 +- .../gaiacp/gaia_credential_base.cc | 8 +- .../gaiacp/gaia_credential_base_unittests.cc | 14 +- .../gaia_credential_provider_unittests.cc | 14 +- .../gaiacp/gaia_credential_unittests.cc | 2 +- + .../credential_provider/gaiacp/gcp_utils.cc | 4 +- .../gaiacp/gcp_utils_unittests.cc | 4 +- .../gaiacp/gcpw_strings.cc | 2 +- - .../credential_provider/gaiacp/mdm_utils.cc | 4 +- + .../credential_provider/gaiacp/mdm_utils.cc | 2 +- .../gaiacp/reauth_credential_unittests.cc | 2 +- .../gaiacp/win_http_url_fetcher_unittests.cc | 2 +- chrome/docs/devtools-pillar.html | 2 +- @@ -662,52 +448,69 @@ Subject: Automated domain substitution chrome/renderer/media/flash_embed_rewrite.cc | 2 +- .../extensions/identity_custom_bindings.js | 2 +- .../subresource_redirect_params.cc | 2 +- - .../public/mojom/app_service.mojom | 2 +- - .../app_service/public/mojom/types.mojom | 4 +- + .../speech/cloud_speech_recognition_client.cc | 2 +- chrome/tools/build/PRESUBMIT.py | 2 +- chrome/tools/webforms_aggregator_tests.py | 4 +- chrome/tools/weburl_links.txt | 6 +- - chrome/updater/constants.cc | 6 +- - chrome/updater/win/install_app.cc | 2 +- + chrome/updater/branding.gni | 8 +- + chrome/updater/tools/PRESUBMIT.py | 2 +- + chrome/updater/win/app_install_controller.cc | 2 +- + chrome/updater/win/signing/PRESUBMIT.py | 2 +- chrome/utility/importer/ie_importer_win.cc | 2 +- .../shell_devtools_discovery_page.html | 2 +- - .../chromecast/shell/CastCrashUploader.java | 6 +- .../browser/service/cast_service_simple.cc | 2 +- + chromecast/browser/webui/cast_webui.cc | 4 +- chromecast/common/extensions_api/i18n.json | 2 +- chromecast/common/extensions_api/tabs.json | 4 +- chromecast/common/extensions_api/windows.json | 2 +- chromecast/crash/linux/minidump_uploader.cc | 2 +- chromecast/net/connectivity_checker_impl.cc | 4 +- + .../components/camera_app_ui/camera_app_ui.cc | 2 +- + .../resources/js/lib/analytics.js | 14 +- + .../camera_app_ui/resources/js/util.js | 2 +- + .../camera_app_ui/resources/manifest.json | 2 +- + .../resources/strings/camera_strings.grd | 2 +- + .../resources/routine_section.js | 2 +- chromeos/components/drivefs/drivefs_auth.cc | 2 +- .../multidevice/remote_device_test_util.cc | 2 +- - .../quick_answers/search_result_loader.cc | 2 +- + .../multidevice/stub_multidevice_util.cc | 2 +- + chromeos/components/phonehub/url_constants.cc | 2 +- + .../translation_result_loader.cc | 2 +- + .../scanning/resources/scanner_select.html | 2 +- + .../scanning/resources/scanning_app.html | 2 +- + .../scanning/resources/scanning_app.js | 2 +- .../trial_group/trial_group_checker.cc | 2 +- .../simple_geolocation_provider.cc | 2 +- chromeos/printing/ppd_provider.h | 2 +- chromeos/printing/printer_config_cache.cc | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri1.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri10.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri11.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri12.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri13.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri14.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri15.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri18.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri19.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri2.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri24.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri3.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri4.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri49.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri5.txt | 2 +- .../assistant_manager_service_impl.cc | 2 +- - .../assistant/public/mojom/assistant.mojom | 4 +- - .../public/proto/email_opt_in_ui.proto | 2 +- - chromeos/services/assistant/service.cc | 6 +- + chromeos/services/assistant/service.cc | 4 +- .../device_sync/cryptauth_client_impl.cc | 8 +- - .../proto/cryptauth_client_app_metadata.proto | 2 +- - .../proto/cryptauth_enrollment.proto | 2 +- chromeos/services/ime/constants.cc | 2 +- chromeos/timezone/timezone_request.cc | 2 +- .../virtual_driver/win/install/setup.cc | 2 +- .../virtual_driver_setup_resources.grd | 2 +- .../win/port_monitor/port_monitor.cc | 2 +- .../error_page_populator.cc | 2 +- - .../arc/mojom/accessibility_helper.mojom | 12 +- - components/arc/mojom/app_permissions.mojom | 2 +- - components/arc/mojom/bluetooth.mojom | 10 +- - components/arc/mojom/file_system.mojom | 6 +- - components/arc/mojom/intent_helper.mojom | 2 +- - components/arc/mojom/print.mojom | 2 +- .../predictor_config_definitions.cc | 2 +- components/autofill/PRESUBMIT.py | 2 +- .../autofill/content/renderer/PRESUBMIT.py | 2 +- - .../autofill/content/renderer/form_cache.cc | 4 +- + .../autofill/content/renderer/form_cache.cc | 2 +- .../renderer/page_passwords_analyser.cc | 2 +- .../password_form_conversion_utils.cc | 2 +- .../core/browser/autofill_download_manager.cc | 2 +- @@ -716,77 +519,49 @@ Subject: Automated domain substitution .../credit_card_fido_authenticator.cc | 2 +- .../core/browser/payments/payments_client.cc | 2 +- .../browser/payments/payments_service_url.cc | 8 +- - .../autofill/core/browser/proto/api_v1.proto | 2 +- + .../autofill_assistant_onboarding_fetcher.cc | 2 +- + .../browser/service/server_url_fetcher.cc | 2 +- + .../safe_browsing_triggered_popup_blocker.h | 4 +- components/browser_sync/PRESUBMIT.py | 2 +- + .../strings/android/browser_ui_strings.grd | 6 +- .../core/counters/history_counter.cc | 2 +- .../core/history_notice_utils.cc | 4 +- .../core/captive_portal_detector.cc | 2 +- .../data/log_list.json | 28 +- - .../common/cloud_devices_urls.cc | 8 +- + .../common/cloud_devices_urls.cc | 4 +- .../components_google_chrome_strings.grd | 2 +- - components/crash/core/app/breakpad_linux.cc | 2 +- - components/crash/core/app/crashpad_linux.cc | 2 +- - components/crash/core/app/crashpad_mac.mm | 2 +- - components/crash/core/app/crashpad_win.cc | 2 +- + .../crash/core/app/crash_reporter_client.cc | 2 +- .../crash/core/browser/resources/crashes.js | 4 +- components/cronet/PRESUBMIT.py | 2 +- .../cronet_consumer_app_delegate.mm | 4 +- - .../cronet_consumer_view_controller.m | 4 +- components/cronet/native/cronet.idl | 14 +- components/cronet/tools/generate_javadoc.py | 2 +- .../core/common/chrome_proxy_header.txt | 4 +- - .../common/data_reduction_proxy_params.cc | 8 +- - .../proto/data_store.proto | 4 +- + .../common/data_reduction_proxy_params.cc | 2 +- .../core/html/dom_distiller_viewer.html | 2 +- .../core/javascript/dom_distiller_viewer.js | 2 +- - .../domain_reliability/bake_in_configs.py | 286 +- - .../baked_in_configs/c_2mdn_net.json | 14 +- - .../c_android_clients_google_com.json | 16 +- - .../c_bigcache_googleapis_com.json | 16 +- - ...c_doc-0-0-sj_sj_googleusercontent_com.json | 16 +- - .../baked_in_configs/c_docs_google_com.json | 16 +- - .../baked_in_configs/c_drive_google_com.json | 16 +- - .../c_googlesyndication_com.json | 16 +- - .../baked_in_configs/c_pack_google_com.json | 16 +- - .../baked_in_configs/c_play_google_com.json | 16 +- - .../baked_in_configs/c_youtube_com.json | 16 +- - .../baked_in_configs/clients2_google_com.json | 16 +- - .../baked_in_configs/docs_google_com.json | 16 +- - .../baked_in_configs/gcp_gvt2_com.json | 14 +- - .../baked_in_configs/gcp_gvt6_com.json | 14 +- - .../google-analytics_com.json | 16 +- - .../baked_in_configs/googlevideo_com.json | 16 +- - .../baked_in_configs/gvt1_com.json | 14 +- - .../baked_in_configs/gvt2_com.json | 14 +- - .../baked_in_configs/gvt6_com.json | 14 +- - .../baked_in_configs/ssl_gstatic_com.json | 16 +- - .../baked_in_configs/www_google_com.json | 16 +- - components/drive/drive.proto | 4 +- + components/dom_distiller/core/viewer.cc | 6 +- + .../domain_reliability/bake_in_configs.py | 286 ++--- components/drive/service/drive_api_service.cc | 6 +- .../error_page/common/localized_error.cc | 2 +- .../favicon/core/large_icon_service_impl.cc | 2 +- components/feed/core/feed_networking_host.cc | 2 +- - .../feed/core/proto/ui/piet/images.proto | 2 +- - .../core/proto/ui/piet/media_queries.proto | 2 +- - .../feed/core/proto/ui/piet/shadows.proto | 4 +- - .../feed/core/proto/wire/display_info.proto | 2 +- components/feed/core/v2/feed_network_impl.cc | 10 +- + components/feed/feed_feature_list.cc | 2 +- components/feedback/feedback_uploader.cc | 2 +- - components/feedback/proto/web.proto | 2 +- components/flags_ui/resources/flags.html | 4 +- components/gcm_driver/gcm_account_mapper.cc | 2 +- components/gcm_driver/gcm_account_tracker.cc | 4 +- components/gcm_driver/gcm_client_impl.cc | 2 +- - components/google/core/common/google_util.cc | 2 +- .../core/browser/browsing_history_service.cc | 4 +- .../history/core/browser/history_service.cc | 4 +- .../core/browser/web_history_service.cc | 12 +- - .../per_user_topic_subscription_manager.cc | 4 +- + .../per_user_topic_subscription_manager.cc | 2 +- .../tab_modal_dialog_manager.cc | 2 +- .../core/keyed_service_base_factory.cc | 2 +- + components/media_router/common/media_source.h | 2 +- .../metrics/net/net_metrics_log_uploader.cc | 2 +- components/metrics/url_constants.cc | 6 +- - .../minidump_uploader/MinidumpUploader.java | 2 +- components/nacl/docs/dev/index.html | 4 +- components/net_log/resources/net_export.html | 6 +- .../network_time/network_time_tracker.cc | 2 +- @@ -794,17 +569,17 @@ Subject: Automated domain substitution .../ntp_snippets/ntp_snippets_constants.cc | 16 +- components/ntp_snippets/remote/fetch.py | 8 +- components/ntp_tiles/popular_sites_impl.cc | 2 +- - .../resources/default_popular_sites.json | 16 +- .../core/prefetch/prefetch_proto_utils.cc | 2 +- .../core/prefetch/prefetch_server_urls.cc | 2 +- .../omnibox/browser/document_provider.cc | 10 +- .../browser/document_suggestions_service.cc | 4 +- .../omnibox/browser/zero_suggest_provider.cc | 2 +- - .../optimization_guide_constants.cc | 4 +- - .../proto/performance_hints_metadata.proto | 4 +- + .../core/optimization_guide_constants.cc | 4 +- + .../core/uma_page_load_metrics_observer.cc | 2 +- ...d_metrics_observer_content_test_harness.cc | 2 +- .../use_counter_page_load_metrics_observer.cc | 4 +- .../affiliation_fetcher.cc | 2 +- + .../change_password_url_service_impl.h | 2 +- ...password_requirements_spec_fetcher_impl.cc | 2 +- .../core/browser/hash_password_manager.cc | 2 +- .../leak_detection/leak_detection_request.h | 2 +- @@ -815,20 +590,25 @@ Subject: Automated domain substitution .../browser/password_manager_constants.cc | 4 +- .../browser/password_manager_test_utils.cc | 4 +- .../core/browser/password_reuse_detector.cc | 2 +- + .../browser/password_scripts_fetcher_impl.cc | 2 +- + ...password_scripts_fetcher_impl_unittests.cc | 2 +- .../core/browser/password_store.cc | 8 +- .../core/browser/password_sync_util.cc | 4 +- .../core/browser/password_ui_utils.cc | 2 +- .../core/browser/psl_matching_helper.cc | 6 +- + .../hash_affiliation_fetcher.cc | 2 +- .../core/browser/sync_username_test_base.cc | 2 +- + .../password_manager/ios/test_helpers.cc | 4 +- .../payment_method_manifest_parser_fuzzer.cc | 2 +- + components/payments/core/error_strings.cc | 2 +- components/payments/core/method_strings.cc | 6 +- .../permissions/permission_context_base.cc | 10 +- - .../core/browser/browser_policy_connector.cc | 8 +- + .../permissions/permission_request_manager.cc | 8 +- + .../prediction_service_common.h | 2 +- + .../core/browser/browser_policy_connector.cc | 10 +- components/policy/core/browser/url_util.cc | 4 +- - .../policy/core/common/policy_loader_win.cc | 2 +- - .../policy/proto/chrome_device_policy.proto | 4 +- - .../proto/device_management_backend.proto | 2 +- - .../policy/resources/policy_templates.json | 862 ++--- + .../core/common/policy_loader_common.cc | 2 +- + .../policy/resources/policy_templates.json | 1126 ++++++++--------- .../policy/resources/webui/policy_base.js | 2 +- .../policy/test_support/policy_testserver.py | 14 +- .../policy/tools/generate_extension_admx.py | 2 +- @@ -836,16 +616,16 @@ Subject: Automated domain substitution .../tools/template_writers/PRESUBMIT.py | 2 +- .../template_writers/writers/adm_writer.py | 4 +- .../writers/doc_atomic_groups_writer.py | 2 +- - .../template_writers/writers/doc_writer.py | 2 +- + .../template_writers/writers/doc_writer.py | 10 +- + .../writers/ios_app_config_writer.py | 2 +- .../writers/template_writer.py | 2 +- - .../previews/core/previews_experiments.cc | 4 +- + .../query_tiles/internal/tile_config.cc | 2 +- components/quirks/quirks_client.cc | 2 +- - components/rappor/proto/rappor_metric.proto | 4 +- components/rappor/rappor_service_impl.cc | 2 +- - components/resources/terms/terms_am.html | 14 +- + components/resources/terms/terms_am.html | 4 +- components/resources/terms/terms_ar.html | 4 +- components/resources/terms/terms_bg.html | 4 +- - components/resources/terms/terms_bn.html | 14 +- + components/resources/terms/terms_bn.html | 4 +- components/resources/terms/terms_ca.html | 4 +- components/resources/terms/terms_cs.html | 4 +- components/resources/terms/terms_da.html | 4 +- @@ -860,7 +640,7 @@ Subject: Automated domain substitution components/resources/terms/terms_fi.html | 4 +- components/resources/terms/terms_fil.html | 4 +- components/resources/terms/terms_fr.html | 4 +- - components/resources/terms/terms_gu.html | 14 +- + components/resources/terms/terms_gu.html | 4 +- components/resources/terms/terms_he.html | 4 +- components/resources/terms/terms_hi.html | 4 +- components/resources/terms/terms_hr.html | 4 +- @@ -868,12 +648,12 @@ Subject: Automated domain substitution components/resources/terms/terms_id.html | 4 +- components/resources/terms/terms_it.html | 4 +- components/resources/terms/terms_ja.html | 4 +- - components/resources/terms/terms_kn.html | 14 +- + components/resources/terms/terms_kn.html | 4 +- components/resources/terms/terms_ko.html | 4 +- components/resources/terms/terms_lt.html | 4 +- components/resources/terms/terms_lv.html | 4 +- - components/resources/terms/terms_ml.html | 14 +- - components/resources/terms/terms_mr.html | 14 +- + components/resources/terms/terms_ml.html | 4 +- + components/resources/terms/terms_mr.html | 4 +- components/resources/terms/terms_nb.html | 4 +- components/resources/terms/terms_nl.html | 4 +- components/resources/terms/terms_pl.html | 4 +- @@ -885,45 +665,42 @@ Subject: Automated domain substitution components/resources/terms/terms_sl.html | 4 +- components/resources/terms/terms_sr.html | 4 +- components/resources/terms/terms_sv.html | 4 +- - components/resources/terms/terms_sw.html | 14 +- - components/resources/terms/terms_ta.html | 14 +- - components/resources/terms/terms_te.html | 14 +- + components/resources/terms/terms_sw.html | 4 +- + components/resources/terms/terms_ta.html | 4 +- + components/resources/terms/terms_te.html | 4 +- components/resources/terms/terms_th.html | 4 +- components/resources/terms/terms_tr.html | 4 +- components/resources/terms/terms_uk.html | 4 +- components/resources/terms/terms_vi.html | 4 +- components/resources/terms/terms_zh-CN.html | 4 +- components/resources/terms/terms_zh-TW.html | 4 +- + .../browser/client_side_detection_service.cc | 2 +- .../password_protection_service.cc | 6 +- .../content/triggers/trigger_util.cc | 2 +- - .../browser/safe_browsing_token_fetcher.cc | 2 +- + .../browser/safe_browsing_token_fetcher.h | 2 +- .../core/common/safebrowsing_constants.cc | 2 +- - .../safe_browsing/core/db/metadata.proto | 2 +- .../core/db/v4_protocol_manager_util.cc | 4 +- - components/safe_browsing/core/proto/csd.proto | 10 +- - .../core/proto/realtimeapi.proto | 2 +- .../core/realtime/url_lookup_service.cc | 2 +- .../safe_search_url_checker_client.cc | 2 +- .../safe_search_api/stub_url_checker.cc | 2 +- - .../CaptivePortalHelper.java | 2 +- - .../content/cert_logger.proto | 4 +- + components/safety_check/url_constants.cc | 2 +- .../content/ssl_blocking_page.h | 2 +- + .../browser/resources/interstitial_large.js | 2 +- .../core/controller_client.cc | 2 +- .../core/safe_browsing_loud_error_ui.cc | 4 +- .../security_interstitials/core/urls.cc | 4 +- .../services/quarantine/quarantine_mac.mm | 2 +- - .../browser/chrome_connected_header_helper.cc | 6 +- - .../browser/account_consistency_service.mm | 6 +- + .../core/common/disabled_sites.cc | 6 +- + .../browser/chrome_connected_header_helper.cc | 4 +- + .../browser/account_consistency_service.mm | 14 +- .../signin/public/base/test_signin_client.cc | 2 +- .../browser/spelling_service_client.cc | 2 +- .../browser/subresource_filter_constants.h | 8 +- .../core/common/PRESUBMIT.py | 2 +- .../suggestions/suggestions_service_impl.cc | 4 +- components/sync/PRESUBMIT.py | 2 +- - .../components/sync/SyncConstants.java | 2 +- - components/sync/driver/sync_util.cc | 4 +- - .../history_delete_directive_specifics.proto | 2 +- - components/sync/protocol/sync.proto | 4 +- + components/sync/base/sync_util.cc | 4 +- + ...ted_vault_access_token_fetcher_frontend.cc | 2 +- components/sync_bookmarks/PRESUBMIT.py | 2 +- components/sync_sessions/PRESUBMIT.py | 2 +- .../core/browser/translate_manager.cc | 2 +- @@ -934,34 +711,32 @@ Subject: Automated domain substitution components/ukm/ukm_reporting_service.cc | 2 +- .../top_domains/make_alexa_top_list.py | 2 +- components/url_pattern_index/PRESUBMIT.py | 2 +- - .../firstrun/VariationsSeedFetcher.java | 2 +- - components/variations/proto/study.proto | 2 +- + components/variations/proto/PRESUBMIT.py | 2 +- .../variations/variations_url_constants.cc | 4 +- + .../installable/installable_logging.cc | 2 +- components/wifi/wifi_service_win.cc | 2 +- content/app/resources/README.txt | 4 +- .../render_widget_host_view_cocoa.mm | 2 +- - .../browser/frame_host/navigation_request.cc | 6 +- - .../frame_host/render_frame_host_impl.cc | 8 +- - .../indexed_db/indexed_db_backing_store.cc | 2 +- + content/browser/conversions/PRESUBMIT.py | 2 +- + .../indexed_db/indexed_db_backing_store.cc | 4 +- .../indexed_db/indexed_db_reporting.cc | 2 +- .../portal/portal_navigation_throttle.cc | 2 +- + .../renderer_host/navigation_request.cc | 6 +- content/browser/resources/PRESUBMIT.py | 2 +- content/browser/resources/gpu/info_view.js | 2 +- + .../resources/media/media_internals.html | 2 +- .../service_worker/service_worker_metrics.cc | 8 +- .../speech/speech_recognition_engine.cc | 2 +- content/browser/speech/tts_mac.mm | 2 +- .../browser/web_contents/web_contents_impl.cc | 2 +- .../browser/webauth/authenticator_common.cc | 6 +- - content/common/fetch/fetch_api_request.proto | 2 +- - content/common/input/input_handler.mojom | 2 +- - content/common/net/record_load_histograms.cc | 2 +- - content/common/renderer.mojom | 2 +- + .../zygote_host/zygote_host_impl_linux.cc | 2 +- content/public/PRESUBMIT.py | 4 +- content/renderer/PRESUBMIT.py | 2 +- .../pepper/pepper_media_device_manager.cc | 2 +- content/renderer/render_thread_impl.cc | 14 +- - .../chromium/content_shell/ShellManager.java | 2 +- .../shell/browser/shell_browser_main_parts.cc | 2 +- + content/zygote/zygote_main_linux.cc | 2 +- device/bluetooth/bluetooth_adapter_mac.mm | 2 +- .../bluetooth/bluetooth_classic_device_mac.mm | 4 +- device/fido/client_data.cc | 2 +- @@ -971,7 +746,6 @@ Subject: Automated domain substitution docs/enterprise/extension_query.py | 4 +- docs/enterprise/extension_query_py2.py | 4 +- extensions/browser/PRESUBMIT.py | 2 +- - .../crash_report_private_api.cc | 2 +- .../web_request/web_request_permissions.cc | 4 +- extensions/browser/suggest_permission_util.cc | 4 +- .../browser/updater/extension_downloader.cc | 4 +- @@ -998,13 +772,12 @@ Subject: Automated domain substitution google_apis/drive/drive_api_url_generator.cc | 4 +- google_apis/gaia/gaia_auth_fetcher.cc | 4 +- google_apis/gaia/gaia_auth_util.cc | 6 +- - google_apis/gaia/gaia_constants.cc | 30 +- + google_apis/gaia/gaia_constants.cc | 36 +- google_apis/gaia/gaia_oauth_client.cc | 6 +- google_apis/gaia/gaia_urls.cc | 8 +- google_apis/gcm/base/mcs_util.cc | 2 +- google_apis/gcm/engine/gservices_settings.cc | 6 +- google_apis/gcm/engine/mcs_client.cc | 2 +- - google_apis/gcm/protocol/mcs.proto | 2 +- google_apis/gcm/tools/mcs_probe.cc | 2 +- google_apis/google_api_keys.cc | 2 +- google_update/google_update_idl.idl | 2 +- @@ -1016,43 +789,46 @@ Subject: Automated domain substitution gpu/command_buffer/PRESUBMIT.py | 2 +- .../shared_image_backing_factory_iosurface.mm | 2 +- gpu/config/PRESUBMIT.py | 2 +- + gpu/config/gpu_control_list_format.txt | 2 +- gpu/ipc/common/PRESUBMIT.py | 2 +- gpu/vulkan/PRESUBMIT.py | 2 +- .../lib/browser/protocol/headless_handler.cc | 2 +- - .../dom_tree_extraction_expected_nodes.txt | 2 +- .../resources/devtools_discovery_page.html | 2 +- - infra/config/PRESUBMIT.py | 2 +- + infra/config/PRESUBMIT.py | 4 +- + infra/config/scripts/PRESUBMIT.py | 2 +- ios/PRESUBMIT.py | 2 +- ios/README.txt | 2 +- ios/build/bots/scripts/PRESUBMIT.py | 2 +- + ios/build/bots/scripts/result_sink_util.py | 4 +- ios/build/bots/scripts/run.py | 2 +- ios/build/bots/scripts/standard_json_util.py | 2 +- + ios/build/bots/scripts/xcode_util.py | 2 +- ios/build/chrome_build.gni | 2 +- .../app/strings/ios_chromium_strings.grd | 6 +- .../app/strings/ios_google_chrome_strings.grd | 6 +- - ios/chrome/app/strings/ios_strings.grd | 26 +- + ios/chrome/app/strings/ios_strings.grd | 28 +- ios/chrome/browser/autofill/BUILD.gn | 4 +- .../autofill/automation/automation_action.mm | 2 +- ...chrome_browser_state_removal_controller.mm | 2 +- ios/chrome/browser/chrome_url_constants.cc | 26 +- - ios/chrome/browser/flags/about_flags.mm | 2 +- + .../breadcrumb_manager_tab_helper.mm | 4 +- + ios/chrome/browser/flags/about_flags.mm | 4 +- .../omnibox_geolocation_controller.mm | 2 +- ios/chrome/browser/omaha/omaha_service.mm | 2 +- .../search_engine_tab_helper.mm | 10 +- - ios/chrome/browser/signin/feature_flags.mm | 2 +- ios/chrome/browser/u2f/u2f_controller.mm | 4 +- .../activity_services/activity_type_util.mm | 2 +- - .../signed_in_accounts_view_controller.mm | 2 +- - .../authentication/signin_earlgrey_utils.mm | 4 +- - .../signin_earlgrey_utils_app_interface.mm | 4 +- + .../signin_earl_grey_app_interface.mm | 6 +- .../ui/bookmarks/bookmark_earl_grey.mm | 2 +- - .../bookmark_earl_grey_app_interface.mm | 2 +- .../content_suggestions_app_interface.mm | 4 +- - .../content_suggestions/ntp_home_mediator.mm | 2 +- + .../content_suggestions/ntp_home_mediator.mm | 8 +- ios/chrome/browser/ui/ntp/incognito_view.mm | 2 +- .../ui/ntp/notification_promo_whats_new.mm | 2 +- + .../ui/qr_scanner/qr_scanner_app_interface.mm | 2 +- + .../ui/settings/settings_app_interface.mm | 2 +- .../table_cell_catalog_view_controller.mm | 8 +- .../translate_table_view_controller.mm | 2 +- + .../interstitials/interstitial_ui_util.mm | 2 +- ios/net/cookies/cookie_store_ios_test_util.mm | 2 +- .../system_cookie_store_unittest_template.h | 2 +- ios/net/crn_http_protocol_handler.mm | 2 +- @@ -1063,19 +839,13 @@ Subject: Automated domain substitution .../sc_infobar_modal_save_card_coordinator.mm | 2 +- .../fake_autocomplete_suggestion.mm | 4 +- .../data/http_server_files/window_open.html | 2 +- - ios/third_party/firebase/cipd.yaml | 4 +- ios/web/navigation/navigation_manager_impl.mm | 6 +- ios/web_view/PRESUBMIT.py | 2 +- ios/web_view/internal/cwv_flags.mm | 2 +- ios/web_view/internal/cwv_web_view.mm | 2 +- - ios/web_view/shell/shell_view_controller.m | 6 +- .../notifier/base/gaia_token_pre_xmpp_auth.cc | 2 +- jingle/notifier/base/notifier_options_util.cc | 4 +- media/PRESUBMIT.py | 4 +- - .../video/chromeos/mojom/camera3.mojom | 6 +- - .../video/chromeos/mojom/camera_common.mojom | 6 +- - .../chromeos/mojom/camera_metadata.mojom | 4 +- - media/mojo/mojom/provision_fetcher.mojom | 2 +- mojo/PRESUBMIT.py | 2 +- native_client_sdk/PRESUBMIT.py | 2 +- .../src/build_tools/build_paths.py | 2 +- @@ -1092,10 +862,10 @@ Subject: Automated domain substitution .../src/build_tools/update_nacl_manifest.py | 6 +- .../src/build_tools/update_sdktools.py | 2 +- native_client_sdk/src/doc/Makefile | 2 +- - native_client_sdk/src/doc/_book.yaml | 2 +- .../security-contest/contest-warning.txt | 4 +- native_client_sdk/src/doc/conf.py | 2 +- .../src/doc/doxygen/generate_docs.py | 2 +- + native_client_sdk/src/doc/migration/apps.html | 8 +- .../src/doc/migration/public.html | 2 +- .../src/examples/api/socket/index.html | 2 +- .../src/examples/demo/drive/drive.cc | 4 +- @@ -1122,6 +892,7 @@ Subject: Automated domain substitution .../static/voronoi/index.html | 2 +- native_client_sdk/src/tools/fix_manifest.py | 2 +- native_client_sdk/src/web/manifest.html | 6 +- + net/base/network_change_notifier_mac.mm | 2 +- net/base/url_util.cc | 4 +- net/cookies/cookie_store_unittest.h | 4 +- net/data/filter_unittests/google.txt | 2 +- @@ -1129,17 +900,15 @@ Subject: Automated domain substitution .../v3_certificate_template.txt | 2 +- net/dns/dns_test_util.h | 12 +- net/dns/dns_transaction.cc | 2 +- - net/dns/public/doh_provider_list.cc | 4 +- + net/dns/public/doh_provider_entry.cc | 4 +- net/http/http_server_properties.cc | 4 +- net/http/http_transaction_test_util.cc | 6 +- - net/http/transport_security_state_static.json | 506 +-- net/http/webfonts_histogram.cc | 6 +- net/log/file_net_log_observer.cc | 2 +- net/quic/crypto/proof_verifier_chromium.cc | 2 +- net/quic/quic_stream_factory.cc | 8 +- net/spdy/spdy_session.cc | 2 +- net/tools/print_certificates.py | 2 +- - net/tools/testserver/echo_message.py | 2 +- .../transport_security_state_generator.cc | 2 +- pdf/pdfium/pdfium_test_base.cc | 2 +- ppapi/api/pp_macros.idl | 2 +- @@ -1149,23 +918,29 @@ Subject: Automated domain substitution ppapi/api/ppb_network_proxy.idl | 2 +- ppapi/api/ppb_tcp_socket.idl | 2 +- ppapi/api/ppb_udp_socket.idl | 2 +- - .../private/ppp_flash_browser_operations.idl | 4 +- + .../breakpad_crash_test/crash_in_syscall.html | 4 +- + .../trusted_crash_in_startup.html | 4 +- + .../breakpad_crash_test/untrusted_crash.html | 4 +- + .../inbrowser_test_runner/test_runner.html | 4 +- + ppapi/tests/test_network_proxy.cc | 2 +- + .../test_tcp_socket_private_disallowed.cc | 2 +- + ppapi/tests/test_url_loader.cc | 2 +- + ppapi/tests/test_url_request.cc | 4 +- + ppapi/tests/test_url_util.cc | 18 +- + ppapi/tests/test_websocket.cc | 6 +- + ppapi/tests/test_x509_certificate_private.cc | 2 +- + printing/backend/PRESUBMIT.py | 2 +- printing/backend/win_helper.cc | 4 +- printing/print_settings_initializer_win.cc | 2 +- - .../org/chromium/chromoting/Chromoting.java | 6 +- - .../chromoting/PrivacyPolicyActivity.java | 2 +- - .../chromoting/TermsOfServiceActivity.java | 2 +- - .../chromoting/help/HelpAndFeedbackBasic.java | 6 +- - .../chromoting/jni/JniOAuthTokenGetter.java | 6 +- remoting/base/breakpad_mac.mm | 2 +- remoting/base/chromium_url_request.cc | 2 +- - remoting/base/oauth_token_exchanger.cc | 2 +- remoting/base/service_urls.cc | 8 +- .../notification/gstatic_json_fetcher.cc | 2 +- ...rome.remote_assistance-firefox.json.jinja2 | 2 +- .../host/it2me/it2me_native_messaging_host.cc | 2 +- - remoting/host/linux/linux_me2me_host.py | 2 +- + remoting/host/linux/linux_me2me_host.py | 4 +- remoting/host/linux/remoting_user_session.cc | 2 +- + remoting/host/remoting_me2me_host.cc | 2 +- ....chrome.remote_desktop-firefox.json.jinja2 | 2 +- remoting/host/setup/start_host_main.cc | 2 +- remoting/ios/app/app_delegate.mm | 4 +- @@ -1183,46 +958,21 @@ Subject: Automated domain substitution sandbox/linux/services/libc_interceptor.cc | 2 +- .../linux/suid/client/setuid_sandbox_host.cc | 2 +- sandbox/linux/suid/sandbox.c | 2 +- + sandbox/policy/win/sandbox_win.cc | 2 +- .../geolocation/network_location_request.cc | 2 +- - .../device/public/mojom/geoposition.mojom | 2 +- - .../image_annotation_service.h | 2 +- - .../network/public/mojom/cookie_manager.mojom | 4 +- - .../public/mojom/network_context.mojom | 4 +- - .../public/mojom/network_service.mojom | 2 +- - .../network/public/mojom/udp_socket.mojom | 2 +- - .../memory_instrumentation.mojom | 4 +- - .../sandbox/win/sandbox_win.cc | 2 +- - .../zygote/host/zygote_host_impl_linux.cc | 2 +- - .../zygote/zygote_main_linux.cc | 2 +- - services/tracing/public/mojom/constants.mojom | 2 +- - .../public/mojom/perfetto_service.mojom | 4 +- - styleguide/c++/c++11.html | 20 +- + .../image_annotation_service.h | 4 +- + styleguide/c++/c++11.html | 36 +- styleguide/c++/chromium-cpp/main.py | 2 +- testing/PRESUBMIT.py | 2 +- - testing/buildbot/PRESUBMIT.py | 2 +- - testing/buildbot/chrome.ci.json | 30 +- - testing/buildbot/chromium.android.fyi.json | 166 +- - testing/buildbot/chromium.android.json | 1838 +++++------ - testing/buildbot/chromium.ci.json | 2868 ++++++++--------- - testing/buildbot/chromium.clang.json | 264 +- - testing/buildbot/chromium.dev.json | 30 +- - testing/buildbot/chromium.fyi.json | 254 +- - testing/buildbot/chromium.gpu.fyi.json | 96 +- - testing/buildbot/chromium.memory.json | 250 +- - testing/buildbot/chromium.try.json | 6 +- - testing/buildbot/chromium.webrtc.fyi.json | 4 +- - testing/buildbot/chromium.webrtc.json | 4 +- - testing/buildbot/filters/PRESUBMIT.py | 4 +- - testing/buildbot/generate_buildbot_json.py | 2 +- - testing/buildbot/gn_isolate_map.pyl | 2 +- - .../scripts/upload_test_result_artifacts.py | 2 +- - .../buildbot/tryserver.chromium.android.json | 6 +- + .../java/AndroidManifest.xml.jinja2 | 4 +- .../browser_test_commands_linux.txt | 2 +- .../chromoting_test_driver_commands_linux.txt | 4 +- testing/libfuzzer/unittest_main.cc | 2 +- testing/merge_scripts/PRESUBMIT.py | 2 +- + .../merge_scripts/code_coverage/PRESUBMIT.py | 2 +- .../code_coverage/merge_results.py | 2 +- testing/merge_scripts/results_merger.py | 2 +- + testing/scripts/PRESUBMIT.py | 2 +- testing/scripts/common.py | 2 +- testing/scripts/run_chromedriver_tests.py | 2 +- testing/scripts/run_performance_tests.py | 4 +- @@ -1230,10 +980,12 @@ Subject: Automated domain substitution testing/trigger_scripts/PRESUBMIT.py | 2 +- .../trigger_scripts/base_test_triggerer.py | 2 +- testing/variations/PRESUBMIT.py | 2 +- - .../variations/fieldtrial_testing_config.json | 12 +- + .../variations/fieldtrial_testing_config.json | 26 +- .../markdown/extensions/smarty.py | 2 +- - third_party/abseil-cpp/absl.gni | 12 +- .../abseil-cpp/absl/abseil.podspec.gen.py | 2 +- + third_party/abseil-cpp/conanfile.py | 2 +- + third_party/abseil-cpp/generate_def_files.py | 2 +- + third_party/abseil-cpp/roll_abseil.py | 4 +- third_party/afl/src/Makefile | 4 +- third_party/afl/src/afl-analyze.c | 2 +- third_party/afl/src/afl-as.c | 2 +- @@ -1254,12 +1006,9 @@ Subject: Automated domain substitution .../Android_SDK_License-December_9_2016.txt | 4 +- .../development/scripts/PRESUBMIT.py | 2 +- third_party/blink/PRESUBMIT.py | 4 +- + .../common/loader/record_load_histograms.cc | 2 +- .../public/common/scheduler/PRESUBMIT.py | 2 +- .../public/mojom/feature_policy/PRESUBMIT.py | 2 +- - .../mojom/payments/payment_handler_host.mojom | 2 +- - .../mojom/payments/payment_request.mojom | 2 +- - .../peer_connection_tracker.mojom | 2 +- - .../mojom/remote_objects/remote_objects.mojom | 2 +- .../public/mojom/use_counter/PRESUBMIT.py | 2 +- .../public/mojom/web_feature/PRESUBMIT.py | 2 +- .../blink/public/strings/blink_strings.grd | 8 +- @@ -1285,17 +1034,16 @@ Subject: Automated domain substitution .../renderer/bindings/scripts/v8_methods.py | 2 +- .../renderer/bindings/scripts/v8_types.py | 2 +- .../renderer/bindings/scripts/v8_utilities.py | 2 +- + .../bindings/tests/idls/core/test_node.idl | 2 +- .../build/scripts/update_css_ranking.py | 4 +- .../renderer/core/css/css_font_face_rule.idl | 2 +- .../renderer/core/css/css_import_rule.idl | 2 +- .../renderer/core/css/css_media_rule.idl | 2 +- .../blink/renderer/core/css/css_page_rule.idl | 2 +- - .../core/css/css_properties_ranking.json5 | 2 +- .../blink/renderer/core/css/css_rule.idl | 2 +- .../core/css/css_style_declaration.idl | 2 +- .../renderer/core/css/css_style_rule.idl | 2 +- .../renderer/core/css/css_style_sheet.idl | 2 +- - .../blink/renderer/core/css/parser/css.proto | 8 +- .../core/css/remote_font_face_source.cc | 2 +- .../blink/renderer/core/css/style_sheet.idl | 2 +- .../renderer/core/css/style_sheet_list.idl | 2 +- @@ -1323,9 +1071,8 @@ Subject: Automated domain substitution .../blink/renderer/core/events/touch_event.cc | 2 +- .../blink/renderer/core/events/wheel_event.cc | 2 +- .../renderer/core/events/wheel_event.idl | 2 +- - .../blink/renderer/core/frame/deprecation.cc | 46 +- + .../blink/renderer/core/frame/deprecation.cc | 48 +- .../blink/renderer/core/frame/local_frame.cc | 4 +- - .../blink/renderer/core/frame/settings.json5 | 4 +- .../core/html/custom/element_internals.idl | 2 +- .../core/html/custom/validity_state_flags.idl | 2 +- .../core/html/forms/html_button_element.idl | 2 +- @@ -1365,18 +1112,14 @@ Subject: Automated domain substitution .../core/html/html_table_section_element.idl | 2 +- .../core/html/media/autoplay_policy.cc | 4 +- .../core/html/media/html_media_element.cc | 4 +- - .../activate_invisible_event.idl | 2 +- + .../core/html/portal/html_portal_element.cc | 4 +- .../renderer/core/loader/document_loader.cc | 2 +- .../renderer/core/loader/frame_loader.cc | 4 +- .../core/loader/mixed_content_checker.cc | 2 +- - .../loader/previews_resource_loading_hints.cc | 2 +- .../core/loader/subresource_filter.cc | 2 +- - .../renderer/core/loader/threadable_loader.cc | 2 +- .../core/page/scrolling/scroll_state.idl | 2 +- .../core/page/scrolling/scroll_state_init.idl | 2 +- - .../renderer/core/paint/theme_painter_mac.mm | 2 +- .../script/document_write_intervention.cc | 6 +- - .../blink/renderer/core/streams/PRESUBMIT.py | 4 +- .../blink/renderer/core/svg/svg_angle.idl | 2 +- .../renderer/core/svg/svg_animated_number.idl | 2 +- .../renderer/core/svg/svg_circle_element.idl | 2 +- @@ -1417,10 +1160,9 @@ Subject: Automated domain substitution .../gamepad/gamepad_button_event_init.idl | 2 +- .../gamepad/gamepad_effect_parameters.idl | 2 +- .../modules/geolocation/geolocation.cc | 2 +- - .../modules/indexeddb/indexed_db_names.json5 | 2 +- .../play_app_url_manifest.json | 2 +- .../payments/android_pay_method_data.idl | 2 +- - .../modules/payments/payment_request.cc | 4 +- + .../modules/payments/payment_request.cc | 6 +- .../modules/payments/skip_to_gpay_utils.cc | 6 +- .../peerconnection/rtc_peer_connection.idl | 2 +- .../renderer/modules/scheduler/scheduler.idl | 2 +- @@ -1428,60 +1170,152 @@ Subject: Automated domain substitution .../modules/scheduler/task_controller.idl | 2 +- .../modules/scheduler/task_signal.idl | 2 +- .../modules/scheduler/window_scheduler.idl | 2 +- - .../modules/vibration/navigator_vibration.cc | 4 +- .../modules/vibration/navigator_vibration.idl | 2 +- + .../modules/vibration/vibration_controller.cc | 4 +- .../modules/webaudio/audio_context.cc | 4 +- + .../modules/webcodecs/video_color_space.idl | 2 +- .../modules/webmidi/navigator_web_midi.cc | 2 +- .../blink/renderer/platform/PRESUBMIT.py | 2 +- .../platform/fonts/mac/font_cache_mac.mm | 4 +- .../platform/loader/fetch/resource_error.cc | 2 +- .../loader/fetch/resource_load_scheduler.cc | 2 +- - .../platform/runtime_enabled_features.json5 | 2 +- .../main_thread/page_scheduler_impl.cc | 2 +- .../platform/weborigin/security_origin.cc | 2 +- third_party/blink/tools/blinkpy/PRESUBMIT.py | 2 +- .../blink/tools/blinkpy/common/net/git_cl.py | 6 +- - .../blinkpy/common/net/results_fetcher.py | 4 +- + .../blinkpy/common/net/results_fetcher.py | 8 +- .../blink/tools/blinkpy/common/pretty_diff.py | 2 +- .../tools/blinkpy/common/system/filesystem.py | 2 +- .../tools/blinkpy/common/system/profiler.py | 2 +- .../blink/tools/blinkpy/style/filter.py | 2 +- + .../third_party/wpt/wpt/tools/lint/rules.py | 4 +- + .../tools/third_party/pywebsocket3/setup.py | 4 +- .../wpt/tools/webdriver/webdriver/client.py | 2 +- .../third_party/wpt/wpt/tools/wpt/android.py | 2 +- - .../third_party/wpt/wpt/tools/wpt/browser.py | 26 +- + .../third_party/wpt/wpt/tools/wpt/browser.py | 28 +- .../third_party/wpt/wpt/tools/wpt/run.py | 4 +- + .../wpt/wpt/tools/wptrunner/requirements.txt | 2 +- + .../wpt/wpt/tools/wptrunner/setup.py | 2 +- + .../wptrunner/executors/executormarionette.py | 14 +- + .../wptrunner/formatters/chromium.py | 2 +- .../blinkpy/tool/commands/flaky_tests.py | 6 +- .../tools/blinkpy/w3c/chromium_commit.py | 2 +- .../tools/blinkpy/w3c/chromium_commit_mock.py | 2 +- third_party/blink/tools/blinkpy/w3c/common.py | 4 +- - .../tools/blinkpy/w3c/export_notifier.py | 2 +- + .../blinkpy/w3c/directory_owners_extractor.py | 2 +- + .../tools/blinkpy/w3c/export_notifier.py | 4 +- third_party/blink/tools/blinkpy/w3c/gerrit.py | 6 +- - .../tools/blinkpy/w3c/import_notifier.py | 2 +- + .../tools/blinkpy/w3c/import_notifier.py | 4 +- .../blink/tools/blinkpy/w3c/monorail.py | 2 +- .../tools/blinkpy/w3c/pr_cleanup_tool.py | 2 +- .../blink/tools/blinkpy/w3c/test_exporter.py | 4 +- - .../blink/tools/blinkpy/w3c/test_importer.py | 10 +- + .../blink/tools/blinkpy/w3c/test_importer.py | 12 +- third_party/blink/tools/move_blink_source.py | 2 +- .../print_stale_test_expectations_entries.py | 2 +- third_party/boringssl/roll_boringssl.py | 2 +- - .../cacheinvalidation/channel_common.proto | 2 +- - .../channel/AndroidChannelConstants.java | 2 +- - .../channel/GcmUpstreamSenderService.java | 2 +- .../closure/bin/build/depstree.py | 2 +- .../closure/bin/build/source.py | 2 +- .../closure/bin/build/treescan.py | 2 +- .../externs/chrome_extensions.js | 6 +- .../externs/command_line_private.js | 4 +- .../crashpad/build/install_linux_sysroot.py | 2 +- - .../crashpad/build/run_fuchsia_qemu.py | 2 +- - .../crashpad/crashpad/doc/appengine/main.go | 4 +- third_party/crashpad/crashpad/package.h | 4 +- - .../util/misc/capture_context_win.asm | 4 +- - .../util/misc/capture_context_win_arm64.asm | 2 +- third_party/crashpad/update.py | 2 +- third_party/dav1d/generate_source.py | 2 +- .../protoc_plugins/util/plugin_protos.py | 4 +- - third_party/google-truth/cipd.yaml | 2 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure/css/inlay/g-base.css | 4 +- + .../closure/css/inlay/g-fixed.css | 4 +- + .../closure/css/inlay/g-ratio.css | 4 +- + .../closure/goog/css/bubble.css | 18 +- + .../closure/goog/css/charpicker.css | 4 +- + .../closure/goog/css/checkbox.css | 6 +- + .../closure/goog/css/colorpalette.css | 2 +- + .../goog/css/colorpicker-simplegrid.css | 2 +- + .../closure/goog/css/combobox.css | 2 +- + .../closure/goog/css/css3button.css | 4 +- + .../closure/goog/css/css3menubutton.css | 2 +- + .../closure/goog/css/custombutton.css | 2 +- + .../closure/goog/css/dialog.css | 2 +- + .../closure/goog/css/dimensionpicker.css | 4 +- + .../closure/goog/css/dragdropdetector.css | 4 +- + .../closure/goog/css/editor/bubble.css | 2 +- + .../goog/css/editor/equationeditor.css | 6 +- + .../closure/goog/css/editortoolbar.css | 2 +- + .../closure/goog/css/filteredmenu.css | 2 +- + .../goog/css/filterobservingmenuitem.css | 2 +- + .../closure/goog/css/flatmenubutton.css | 2 +- + .../closure/goog/css/hovercard.css | 2 +- + .../closure/goog/css/hsvapalette.css | 8 +- + .../closure/goog/css/hsvpalette.css | 8 +- + .../closure/goog/css/imagelessmenubutton.css | 2 +- + .../closure/goog/css/inputdatepicker.css | 2 +- + .../closure/goog/css/menubutton.css | 4 +- + .../closure/goog/css/menuitem.css | 2 +- + .../closure/goog/css/multitestrunner.css | 2 +- + .../closure/goog/css/roundedtab.css | 2 +- + .../closure/goog/css/tablesorter.css | 2 +- + .../closure/goog/css/toolbar.css | 4 +- + .../closure/goog/css/tree.css | 10 +- + .../closure/goog/css/tristatemenuitem.css | 6 +- + .../goog/demos/autocompleterichremotedata.js | 16 +- + .../closure/goog/demos/css/demo.css | 2 +- + .../closure/goog/demos/css/emojipicker.css | 2 +- + .../closure/goog/demos/dialog.html | 4 +- + .../demos/graphics/advancedcoordinates.html | 2 +- + .../demos/graphics/advancedcoordinates2.html | 2 +- + .../goog/demos/graphics/basicelements.html | 4 +- + .../closure/goog/demos/history1.html | 2 +- + .../closure/goog/demos/history2.html | 2 +- + .../closure/goog/demos/history3.html | 2 +- + .../closure/goog/demos/hovercard.html | 18 +- + .../closure/goog/demos/splitpane.html | 2 +- + .../closure/goog/dom/controlrange_test.html | 4 +- + .../goog/dom/controlrange_test_dom.html | 4 +- + .../closure/goog/dom/range_test.html | 2 +- + .../closure/goog/dom/range_test_dom.html | 2 +- + .../closure/goog/dom/textrange_test.html | 8 +- + .../closure/goog/dom/textrange_test_dom.html | 8 +- + .../goog/editor/clicktoeditwrapper_test.html | 2 +- + .../editor/clicktoeditwrapper_test_dom.html | 2 +- + .../plugins/basictextformatter_test.html | 2 +- + .../plugins/basictextformatter_test_dom.html | 2 +- + .../goog/editor/plugins/linkbubble_test.html | 2 +- + .../editor/plugins/linkbubble_test_dom.html | 2 +- + .../plugins/linkshortcutplugin_test.html | 2 +- + .../plugins/linkshortcutplugin_test_dom.html | 2 +- + .../closure/goog/html/safeurl_test_vectors.js | 8 +- + .../goog/html/sanitizer/html_test_vectors.js | 2 +- + .../goog/labs/net/webchannel/netutils.js | 2 +- + .../labs/net/webchannel/webchannelbase.js | 4 +- + .../closure/goog/net/browserchannel.js | 4 +- + .../closure/goog/net/iframeio_test.html | 2 +- + .../closure/goog/net/iframeio_test_dom.html | 2 +- + .../closure/goog/net/networktester.js | 2 +- + .../closure/goog/net/tmpnetwork.js | 2 +- + .../closure/goog/soy/soy_testhelper.js | 4 +- + .../closure/goog/testing/performancetable.css | 4 +- + .../closure/goog/transpile.js | 158 +-- + .../closure/goog/ui/editor/linkdialog.js | 2 +- + .../closure/goog/ui/editor/messages.js | 2 +- + .../closure/goog/ui/hovercard_test.html | 6 +- + .../closure/goog/ui/hovercard_test_dom.html | 6 +- + .../goog/ui/keyboardshortcuthandler_test.html | 4 +- + .../ui/keyboardshortcuthandler_test_dom.html | 4 +- + .../closure/goog/ui/media/googlevideo.js | 6 +- + .../closure/goog/ui/media/mp3.js | 2 +- + .../closure/goog/ui/media/picasa.js | 8 +- + .../closure/goog/ui/media/youtube.js | 6 +- + .../goog/ui/menubutton_test_frame.html | 2 +- + .../closure/goog/ui/serverchart.js | 6 +- + .../closure/goog/window/window_test.html | 14 +- + .../closure/goog/window/window_test_dom.html | 14 +- + .../doc/_layouts/article.html | 2 +- + .../google-closure-library/doc/js/article.js | 2 +- .../cloudstorage/cloudstorage_api.py | 2 +- .../cloudstorage/errors.py | 2 +- .../cloudstorage/storage_api.py | 10 +- @@ -1530,6 +1364,9 @@ Subject: Automated domain substitution .../hunspell/src/parsers/textparser.hxx | 2 +- .../hunspell/src/parsers/xmlparser.cxx | 2 +- .../hunspell/src/parsers/xmlparser.hxx | 2 +- + .../src/be/hyph-be.lic.txt | 6 +- + .../src/hu/hyph-hu.lic.txt | 4 +- + .../src/hy/hyph-hy.lic.txt | 2 +- third_party/iaccessible2/ia2_api_all.idl | 8 +- third_party/inspector_protocol/roll.py | 4 +- .../scripts/unpack_binaries.py | 2 +- @@ -1544,17 +1381,10 @@ Subject: Automated domain substitution third_party/libjingle_xmpp/xmpp/constants.cc | 24 +- .../libpng/contrib/oss-fuzz/README.txt | 2 +- .../libusb/src/libusb/os/windows_usb.c | 4 +- - third_party/libxml/src/aclocal.m4 | 2 +- third_party/libxslt/chromium/roll.py | 2 +- third_party/metrics_proto/PRESUBMIT.py | 2 +- - .../chrome_user_metrics_extension.proto | 2 +- - third_party/metrics_proto/omnibox_event.proto | 2 +- - .../metrics_proto/translate_event.proto | 2 +- - third_party/metrics_proto/ukm/source.proto | 4 +- third_party/mozilla/NSPasteboard+Utils.mm | 2 +- third_party/mozilla/NSString+Utils.mm | 2 +- - third_party/mozilla/NSURL+Utils.m | 2 +- - third_party/mozilla/NSWorkspace+Utils.m | 4 +- third_party/opus/src/doc/opus_in_isobmff.html | 2 +- third_party/opus/src/doc/release.txt | 6 +- third_party/polymer/v1_0/PRESUBMIT.py | 2 +- @@ -1565,77 +1395,29 @@ Subject: Automated domain substitution .../paper-progress/paper-progress.html | 2 +- .../paper-ripple/paper-ripple.html | 2 +- .../paper-spinner/paper-spinner-lite.html | 2 +- - .../paper-styles/default-theme.html | 2 +- - .../element-styles/paper-material-styles.html | 2 +- - .../paper-styles/typography.html | 2 +- .../paper-tooltip/paper-tooltip.html | 2 +- third_party/protobuf/CHANGES.txt | 12 +- third_party/protobuf/CONTRIBUTORS.txt | 68 +- - .../protobuf/benchmarks/benchmarks.proto | 2 +- third_party/protobuf/cmake/CMakeLists.txt | 2 +- third_party/protobuf/composer.json | 2 +- - third_party/protobuf/configure.ac | 2 +- .../binary_json_conformance_suite.cc | 46 +- - .../protobuf/conformance/conformance.proto | 4 +- .../protobuf/conformance/conformance_cpp.cc | 2 +- - .../protobuf/conformance/conformance_objc.m | 2 +- - .../protobuf/conformance/conformance_ruby.rb | 2 +- .../text_format_conformance_suite.cc | 6 +- - .../csharp/protos/map_unittest_proto3.proto | 2 +- - .../unittest_custom_options_proto3.proto | 4 +- - .../protos/unittest_import_proto3.proto | 4 +- - .../unittest_import_public_proto3.proto | 4 +- - .../csharp/protos/unittest_issues.proto | 6 +- - .../csharp/protos/unittest_proto3.proto | 4 +- - .../protobuf/examples/addressbook.proto | 2 +- - third_party/protobuf/js/data.proto | 4 +- - .../protobuf/m4/ax_cxx_compile_stdcxx.m4 | 4 +- - third_party/protobuf/objectivec/GPBArray.m | 2 +- - .../protobuf/objectivec/GPBCodedInputStream.m | 4 +- - .../objectivec/GPBCodedOutputStream.m | 2 +- - .../protobuf/objectivec/GPBDescriptor.m | 2 +- - .../protobuf/objectivec/GPBDictionary.m | 2 +- - .../objectivec/GPBExtensionInternals.m | 2 +- - .../objectivec/GPBExtensionRegistry.m | 2 +- - third_party/protobuf/objectivec/GPBMessage.m | 2 +- - .../protobuf/objectivec/GPBProtocolBuffers.m | 2 +- - .../protobuf/objectivec/GPBRootObject.m | 2 +- - .../protobuf/objectivec/GPBUnknownField.m | 2 +- - .../protobuf/objectivec/GPBUnknownFieldSet.m | 2 +- - .../protobuf/objectivec/GPBUtilities.m | 2 +- - .../protobuf/objectivec/GPBWellKnownTypes.m | 4 +- - .../protobuf/objectivec/GPBWireFormat.m | 2 +- .../Tests/GPBObjectiveCPlusPlusTest.mm | 2 +- third_party/protobuf/php/composer.json | 2 +- - .../php/ext/google/protobuf/encode_decode.c | 2 +- - .../php/ext/google/protobuf/message.c | 4 +- - .../protobuf/php/ext/google/protobuf/upb.c | 2 +- + .../php/ext/google/protobuf/convert.c | 2 +- + .../protobuf/python/.repo-metadata.json | 4 +- + .../protobuf/python/docs/generate_docs.py | 2 +- .../python/google/protobuf/descriptor.py | 2 +- .../google/protobuf/descriptor_database.py | 2 +- .../python/google/protobuf/descriptor_pool.py | 2 +- .../protobuf/internal/_parameterized.py | 2 +- - .../google/protobuf/internal/any_test.proto | 4 +- .../google/protobuf/internal/containers.py | 2 +- .../google/protobuf/internal/decoder.py | 2 +- - .../internal/descriptor_pool_test1.proto | 2 +- - .../internal/descriptor_pool_test2.proto | 2 +- .../google/protobuf/internal/encoder.py | 2 +- .../protobuf/internal/enum_type_wrapper.py | 2 +- - .../protobuf/internal/factory_test1.proto | 4 +- - .../protobuf/internal/factory_test2.proto | 4 +- - .../protobuf/internal/file_options_test.proto | 2 +- - .../internal/import_test_package/inner.proto | 2 +- - .../internal/import_test_package/outer.proto | 2 +- .../protobuf/internal/message_listener.py | 2 +- - .../internal/message_set_extensions.proto | 2 +- - .../internal/missing_enum_values.proto | 2 +- - .../protobuf/internal/more_extensions.proto | 4 +- - .../internal/more_extensions_dynamic.proto | 4 +- - .../protobuf/internal/more_messages.proto | 4 +- - .../google/protobuf/internal/no_package.proto | 2 +- - .../protobuf/internal/packed_field_test.proto | 2 +- .../protobuf/internal/python_message.py | 2 +- - .../internal/test_bad_identifiers.proto | 4 +- .../google/protobuf/internal/test_util.py | 2 +- .../google/protobuf/internal/type_checkers.py | 2 +- .../protobuf/internal/well_known_types.py | 4 +- @@ -1644,51 +1426,25 @@ Subject: Automated domain substitution .../python/google/protobuf/message.py | 2 +- .../python/google/protobuf/message_factory.py | 2 +- .../google/protobuf/pyext/cpp_message.py | 2 +- - .../protobuf/pyext/proto2_api_test.proto | 2 +- - .../python/google/protobuf/pyext/python.proto | 4 +- .../python/google/protobuf/reflection.py | 2 +- .../python/google/protobuf/service.py | 2 +- .../google/protobuf/service_reflection.py | 2 +- .../python/google/protobuf/text_format.py | 2 +- + .../generate_py_protobufs.py | 2 +- + .../python/protobuf_distutils/setup.py | 6 +- third_party/protobuf/python/setup.py | 6 +- .../ext/google/protobuf_c/encode_decode.c | 2 +- .../protobuf/ruby/ext/google/protobuf_c/upb.c | 2 +- - .../protobuf/ruby/lib/google/protobuf.rb | 2 +- - .../ruby/lib/google/protobuf/message_exts.rb | 2 +- - .../lib/google/protobuf/repeated_field.rb | 2 +- - .../lib/google/protobuf/well_known_types.rb | 6 +- - .../protobuf/src/google/protobuf/any.proto | 10 +- .../protobuf/src/google/protobuf/any_lite.cc | 4 +- - .../src/google/protobuf/any_test.proto | 2 +- - .../protobuf/src/google/protobuf/api.proto | 4 +- - .../cpp/cpp_test_bad_identifiers.proto | 4 +- - .../cpp/cpp_test_large_enum_value.proto | 2 +- .../protobuf/compiler/java/java_message.cc | 2 +- .../compiler/js/well_known_types_embed.cc | 2 +- .../src/google/protobuf/compiler/parser.cc | 8 +- - .../src/google/protobuf/compiler/plugin.proto | 4 +- - .../src/google/protobuf/descriptor.proto | 8 +- - .../src/google/protobuf/duration.proto | 2 +- - .../protobuf/src/google/protobuf/empty.proto | 2 +- - .../src/google/protobuf/field_mask.proto | 2 +- - .../google/protobuf/map_lite_unittest.proto | 2 +- - .../google/protobuf/map_proto2_unittest.proto | 2 +- - .../src/google/protobuf/map_unittest.proto | 2 +- - .../src/google/protobuf/source_context.proto | 2 +- - .../protobuf/src/google/protobuf/struct.proto | 2 +- - .../protobuf/test_messages_proto2.proto | 2 +- - .../protobuf/test_messages_proto3.proto | 2 +- - .../src/google/protobuf/timestamp.proto | 6 +- - .../protobuf/src/google/protobuf/type.proto | 4 +- .../google/protobuf/util/internal/constants.h | 6 +- .../util/internal/protostream_objectwriter.cc | 44 +- - .../google/protobuf/util/json_format.proto | 4 +- - .../protobuf/util/json_format_proto3.proto | 2 +- .../src/google/protobuf/util/json_util.cc | 2 +- - .../src/google/protobuf/wrappers.proto | 2 +- third_party/protobuf/update_version.py | 4 +- .../pycoverage/coverage/htmlfiles/pyfile.html | 2 +- - .../src/benchmarks/chromium.linux.json | 152 +- + .../src/benchmarks/chromium.linux.json | 152 +-- third_party/pyjson5/src/setup.py | 2 +- .../tcmalloc/chromium/src/config_linux.h | 2 +- .../tcmalloc/chromium/src/debugallocation.cc | 2 +- @@ -1696,36 +1452,40 @@ Subject: Automated domain substitution .../tcmalloc/chromium/src/windows/config.h | 2 +- .../tcmalloc/chromium/src/windows/nm-pdb.c | 2 +- .../tcmalloc/vendor/README_windows.txt | 8 +- - third_party/tcmalloc/vendor/configure.ac | 4 +- .../tcmalloc/vendor/src/debugallocation.cc | 2 +- .../vendor/src/windows/addr2line-pdb.c | 2 +- .../tcmalloc/vendor/src/windows/config.h | 2 +- .../tcmalloc/vendor/src/windows/nm-pdb.c | 2 +- tools/accessibility/nvda/README.txt | 2 +- tools/android/checkxmlstyle/PRESUBMIT.py | 2 +- - tools/android/checkxmlstyle/checkxmlstyle.py | 4 +- + tools/android/checkxmlstyle/checkxmlstyle.py | 6 +- .../customtabs_benchmark/scripts/PRESUBMIT.py | 2 +- .../scripts/customtabs_benchmark.py | 2 +- .../scripts/run_benchmark.py | 2 +- .../scripts/sample_config.json | 4 +- - .../plugin/NoAndroidAsyncTaskCheck.java | 2 +- - .../NoContextGetApplicationContext.java | 2 +- - .../plugin/NoRedundantFieldInitCheck.java | 2 +- + .../android/dependency_analysis/PRESUBMIT.py | 2 +- + .../js/src/class_view.html | 2 +- + .../dependency_analysis/js/src/load_graph.js | 2 +- + .../js/src/package_view.html | 2 +- + .../dependency_analysis/upload_html_viewer.py | 2 +- tools/android/native_lib_memory/PRESUBMIT.py | 2 +- tools/android/sdk_updater/update_sdk.py | 2 +- tools/binary_size/PRESUBMIT.py | 2 +- - tools/binary_size/diagnose_bloat.py | 2 +- - tools/binary_size/libsupersize/console.py | 4 +- + tools/binary_size/diagnose_bloat.py | 4 +- + tools/binary_size/libsupersize/console.py | 2 +- + tools/binary_size/libsupersize/html_report.py | 2 +- .../libsupersize/static/auth-consts.js | 8 +- .../libsupersize/static/index.html | 2 +- .../binary_size/libsupersize/static/index.js | 2 +- .../libsupersize/static/tree-worker-wasm.js | 4 +- - .../libsupersize/static/viewer.html | 6 +- + .../libsupersize/static/viewer.html | 8 +- .../libsupersize/upload_html_viewer.py | 2 +- + tools/binary_size/libsupersize/zip_util.py | 2 +- .../binary_size/trybot_commit_size_checker.py | 2 +- - tools/bisect-builds.py | 24 +- + tools/bisect-builds.py | 28 +- tools/bisect_repackage/bisect_repackage.py | 4 +- .../bisect_repackage_utils.py | 4 +- + tools/boilerplate.py | 2 +- tools/check_git_config.py | 24 +- tools/checklicenses/checklicenses.py | 2 +- tools/checkperms/PRESUBMIT.py | 2 +- @@ -1734,10 +1494,6 @@ Subject: Automated domain substitution tools/checkteamtags/extract_components.py | 2 +- .../open_my_editor/ext/background.js | 26 +- .../open_my_editor/ext/manifest.json | 6 +- - tools/chrome_proxy/testserver/server.go | 4 +- - tools/chrome_proxy/webdriver/decorators.py | 2 +- - .../chrome_proxy/webdriver/https_previews.py | 24 +- - .../webdriver/subresource_redirect.py | 12 +- tools/clang/scripts/build.py | 4 +- tools/clang/scripts/package.py | 2 +- tools/clang/scripts/update.py | 2 +- @@ -1747,10 +1503,9 @@ Subject: Automated domain substitution tools/cr/main.py | 2 +- tools/cygprofile/PRESUBMIT.py | 2 +- .../cygprofile/orderfile_generator_backend.py | 4 +- - tools/download_cros_provided_profile.py | 2 +- + tools/download_optimization_profile.py | 2 +- .../dromaeo_benchmark_runner.py | 10 +- - tools/emacs/gn.el | 6 +- - tools/emacs/trybot-mac.txt | 232 +- + tools/emacs/trybot-mac.txt | 232 ++-- tools/find_runtime_symbols/PRESUBMIT.py | 2 +- tools/flags/list_flags.py | 4 +- tools/generate_stubs/generate_stubs.py | 2 +- @@ -1766,15 +1521,16 @@ Subject: Automated domain substitution tools/grit/setup.py | 4 +- tools/infra/PRESUBMIT.py | 2 +- tools/infra/clobber_cache_utils.py | 4 +- + tools/infra/find_bad_builds.py | 2 +- tools/infra/reproduce.py | 10 +- tools/json_schema_compiler/PRESUBMIT.py | 2 +- .../js_externs_generator.py | 4 +- tools/json_schema_compiler/js_util.py | 2 +- tools/json_schema_compiler/preview.py | 2 +- tools/json_to_struct/PRESUBMIT.py | 2 +- - tools/licenses.py | 34 +- + tools/licenses.py | 38 +- tools/linux/PRESUBMIT.py | 2 +- - tools/mb/mb.py | 8 +- + tools/mb/mb.py | 4 +- tools/mb/mb_config.pyl | 6 +- tools/md_browser/base.css | 4 +- tools/md_browser/footer.html | 2 +- @@ -1788,8 +1544,10 @@ Subject: Automated domain substitution tools/metrics/actions/PRESUBMIT.py | 2 +- tools/metrics/common/models.py | 2 +- tools/metrics/histograms/PRESUBMIT.py | 2 +- - tools/metrics/histograms/expand_owners.py | 8 +- + tools/metrics/histograms/expand_owners.py | 12 +- .../metrics/histograms/extract_histograms.py | 8 +- + ...ram_configuration_model_test_histograms.py | 68 +- + tools/metrics/histograms/split_xml.py | 4 +- tools/metrics/md2xml.py | 4 +- tools/metrics/rappor/PRESUBMIT.py | 2 +- tools/metrics/structured/PRESUBMIT.py | 2 +- @@ -1798,129 +1556,11 @@ Subject: Automated domain substitution tools/metrics/ukm/xml_validations.py | 4 +- tools/nocompile_driver.py | 2 +- tools/omahaproxy.py | 2 +- - tools/perf/PRESUBMIT.py | 2 +- - tools/perf/benchmarks/blink_perf.py | 36 +- - tools/perf/benchmarks/dromaeo.py | 6 +- - tools/perf/benchmarks/dummy_benchmark.py | 6 +- - tools/perf/benchmarks/jetstream.py | 2 +- - tools/perf/benchmarks/jetstream2.py | 2 +- - tools/perf/benchmarks/kraken.py | 4 +- - tools/perf/benchmarks/loading.py | 4 +- - tools/perf/benchmarks/media.py | 8 +- - tools/perf/benchmarks/memory.py | 2 +- - tools/perf/benchmarks/octane.py | 2 +- - tools/perf/benchmarks/power.py | 2 +- - .../benchmarks/rasterize_and_record_micro.py | 8 +- - tools/perf/benchmarks/rendering.py | 4 +- - tools/perf/benchmarks/speedometer.py | 4 +- - tools/perf/benchmarks/speedometer2.py | 4 +- - tools/perf/benchmarks/startup_mobile.py | 4 +- - tools/perf/benchmarks/system_health.py | 24 +- - tools/perf/benchmarks/tab_switching.py | 2 +- - tools/perf/benchmarks/tracing.py | 2 +- - tools/perf/benchmarks/v8.py | 2 +- - tools/perf/benchmarks/v8_browsing.py | 8 +- - tools/perf/benchmarks/webrtc.py | 6 +- - tools/perf/cli_tools/flakiness_cli/api.py | 2 +- - .../perf/cli_tools/pinboard/job_configs.json | 4 +- - tools/perf/cli_tools/update_wpr/update_wpr.py | 2 +- - .../blink_layoutng_perf.py | 6 +- - .../blink_layoutng_perf/loading_layout_ng.py | 4 +- - .../cluster_telemetry/ad_tagging_ct.py | 2 +- - .../cluster_telemetry/ct_benchmarks_util.py | 2 +- - .../cluster_telemetry/generic_trace.py | 4 +- - .../cluster_telemetry/skpicture_printer.py | 2 +- - .../cros_benchmarks/tab_switching_bench.py | 2 +- - .../cros_benchmarks/ui_smoothness_bench.py | 2 +- - .../leak_detection/data/leak_detection.json | 20 +- - .../contrib/leak_detection/leak_detection.py | 2 +- - .../perf/contrib/leak_detection/page_sets.py | 18 +- - .../media_router_benchmarks.py | 4 +- - .../test_site/basic_test.html | 2 +- - .../contrib/memory_extras/memory_extras.py | 6 +- - tools/perf/contrib/orderfile/orderfile.py | 16 +- - .../privacy_budget_perf.py | 2 +- - .../system_health_infinite_scroll.py | 2 +- - .../contrib/vr_benchmarks/vr_benchmarks.py | 8 +- - .../vr_benchmarks/vr_browsing_mode_pages.py | 4 +- - tools/perf/core/bot_platforms.py | 2 +- - tools/perf/core/perf_benchmark.py | 2 +- - tools/perf/core/perf_data_generator.py | 32 +- - tools/perf/core/results_dashboard.py | 12 +- - tools/perf/core/results_merger.py | 2 +- - .../formatters/json3_output.py | 2 +- - tools/perf/core/retrieve_story_timing.py | 2 +- - .../perf/core/services/buildbucket_service.py | 2 +- - tools/perf/core/services/dashboard_service.py | 4 +- - tools/perf/core/services/isolate_service.py | 2 +- - tools/perf/core/services/pinpoint_service.py | 2 +- - .../android-pixel2-perf_timing.json | 8 +- - .../android-pixel2_webview-perf_timing.json | 8 +- - .../android_nexus5x_webview_perf_timing.json | 8 +- - .../timing_data/linux-perf_timing.json | 8 +- - .../mac-10_12_laptop_low_end-perf_timing.json | 8 +- - ...mac-10_13_laptop_high_end-perf_timing.json | 8 +- - .../timing_data/win-10-perf_timing.json | 8 +- - .../win-10_laptop_low_end-perf_timing.json | 38 +- - .../core/test_data/benchmarks_to_shard.json | 44 +- - .../perf/core/test_data/test_timing_data.json | 52 +- - .../test_data/test_timing_data_1_build.json | 22 +- - tools/perf/examples/pinpoint_cli/try_job.json | 2 +- - .../adjust_upper_limits.py | 4 +- - .../generate_legacy_perf_dashboard_json.py | 2 +- - tools/perf/generate_perf_sharding.py | 2 +- - tools/perf/page_sets/alexa1-10000-urls.json | 124 +- - tools/perf/page_sets/cros_ui_cases.py | 2 +- - tools/perf/page_sets/data/intl_ar_fa_he.json | 4 +- - tools/perf/page_sets/data/intl_ja_zh.json | 4 +- - tools/perf/page_sets/data/kraken.json | 2 +- - .../data/long_running_idle_gmail_page.json | 2 +- - tools/perf/page_sets/data/top_10.json | 10 +- - tools/perf/page_sets/data/top_25.json | 18 +- - tools/perf/page_sets/data/v8_top_25.json | 30 +- - tools/perf/page_sets/desktop_power.py | 2 +- - tools/perf/page_sets/google_pages.py | 4 +- - tools/perf/page_sets/intl_ar_fa_he.py | 2 +- - tools/perf/page_sets/intl_ja_zh.py | 2 +- - .../perf/page_sets/key_mobile_sites_smooth.py | 8 +- - .../page_sets/key_silk_cases/font_wipe.html | 2 +- - .../page_sets/key_silk_cases/inbox_app.html | 2 +- - tools/perf/page_sets/kraken_pages.py | 2 +- - tools/perf/page_sets/loading_mobile.py | 12 +- - .../page_sets/login_helpers/chrome_login.py | 2 +- - .../page_sets/login_helpers/facebook_login.py | 6 +- - .../page_sets/login_helpers/google_login.py | 4 +- - .../page_sets/login_helpers/linkedin_login.py | 4 +- - .../login_helpers/pinterest_login.py | 2 +- - .../page_sets/maps_perf_test/performance.html | 2 +- - .../perf/page_sets/maps_perf_test/tracked.js | 4 +- - .../rendering/key_desktop_move_cases.py | 2 +- - .../page_sets/rendering/key_silk_cases.py | 12 +- - .../rendering/top_real_world_desktop.py | 16 +- - .../rendering/top_real_world_mobile.py | 10 +- - .../rendering/tough_animation_cases.py | 2 +- - .../page_sets/rendering/tough_canvas_cases.py | 18 +- - .../rendering/tough_filters_cases.py | 2 +- - .../rendering/tough_pinch_zoom_cases.py | 12 +- - .../tough_pinch_zoom_mobile_cases.py | 2 +- - .../system_health/accessibility_stories.py | 6 +- - .../system_health/background_stories.py | 2 +- - .../system_health/browsing_stories.py | 42 +- - .../system_health/loading_stories.py | 20 +- - .../system_health/long_running_stories.py | 4 +- - .../page_sets/system_health/media_stories.py | 4 +- - .../system_health/system_health_stories.py | 2 +- - tools/perf/page_sets/top_10.py | 10 +- - tools/perf/page_sets/top_pages.py | 16 +- - .../mix_blend_mode_propagating_isolation.html | 2 +- - tools/perf/page_sets/v8_top_25.py | 28 +- - .../webrtc_cases/codec_constraints.html | 2 +- - tools/perf/process_perf_results.py | 2 +- tools/polymer/PRESUBMIT.py | 2 +- tools/python/google/gethash_timer.py | 2 +- tools/resources/find_unused_resources.py | 2 +- tools/roll_webgl_conformance.py | 2 +- - tools/run-swarmed.py | 12 +- + tools/run-swarmed.py | 10 +- tools/site_compare/commands/measure.py | 2 +- tools/site_compare/commands/scrape.py | 2 +- .../scrapers/chrome/chromebase.py | 4 +- @@ -1929,10 +1569,11 @@ Subject: Automated domain substitution tools/site_compare/utils/browser_iterate.py | 2 +- tools/style_variable_generator/PRESUBMIT.py | 2 +- tools/symsrc/source_index.py | 8 +- + .../good_partial_annotation.txt | 2 +- .../auditor/traffic_annotation_auditor_ui.cc | 2 +- .../sample_traffic_annotation.cc | 2 +- + .../scripts/update_annotations_doc.py | 4 +- .../scripts/update_annotations_sheet.py | 6 +- - .../traffic_annotation.proto | 2 +- tools/usb_gadget/gadget.py | 2 +- tools/usb_gadget/msos20_descriptors.py | 2 +- tools/variations/bisect_variations.py | 2 +- @@ -1944,7 +1585,6 @@ Subject: Automated domain substitution tools/win/RetrieveSymbols/RetrieveSymbols.cpp | 2 +- tools/win/ShowThreadNames/ReadMe.txt | 2 +- tools/win/sizeviewer/template.html | 2 +- - ui/PRESUBMIT.py | 2 +- ui/accessibility/extensions/alt/background.js | 2 +- .../chromevox/background/background.js | 2 +- .../chromevox/background/prefs.js | 4 +- @@ -1963,10 +1603,11 @@ Subject: Automated domain substitution ui/base/ime/character_composer_sequences.txt | 2 +- .../keycodes/keyboard_code_conversion_mac.mm | 2 +- ui/file_manager/audio_player/manifest.json | 2 +- - ui/file_manager/base/js/mock_chrome.js | 6 +- + ui/file_manager/base/js/mock_chrome.js | 4 +- + ui/file_manager/base/tools/PRESUBMIT.py | 2 +- + .../js/volume_manager_unittest.m.js | 28 +- .../cws_widget/cws_widget_container.js | 4 +- .../foreground/elements/icons.html | 2 +- - .../foreground/js/file_manager_commands.js | 2 +- .../foreground/js/web_store_utils.js | 4 +- ui/file_manager/file_manager/manifest.json | 10 +- ui/file_manager/gallery/manifest.json | 2 +- @@ -1975,32 +1616,23 @@ Subject: Automated domain substitution ui/gl/gl_image_io_surface_egl.mm | 2 +- .../chromeos_user_pod_template.html | 2 +- .../account_picker/user_pod_template.html | 2 +- + ui/ozone/ozone.gni | 2 +- ui/resources/PRESUBMIT.py | 4 +- ui/resources/resource_check/ico_files.py | 4 +- .../resource_check/resource_scale_factors.py | 4 +- - ui/strings/ui_strings.grd | 6 +- + ui/strings/ui_strings.grd | 4 +- ui/views/PRESUBMIT.py | 2 +- ui/views/examples/webview_example.cc | 2 +- - .../chromeos/quick_unlock/pin_keyboard.html | 2 +- + .../quick_unlock/pin_keyboard_icon.html | 2 +- + .../customize_themes/customize_themes.js | 2 +- ui/webui/resources/cr_elements/icons.html | 4 +- + url/android/gurl_java_test_helper.cc | 32 +- url/third_party/mozilla/LICENSE.txt | 4 +- + weblayer/browser/default_search_engine.cc | 2 +- ...weblayer_security_blocking_page_factory.cc | 2 +- - .../weblayer/shell/WebLayerShellActivity.java | 2 +- weblayer/shell/app/shell_main_params.cc | 2 +- - 1984 files changed, 8780 insertions(+), 8780 deletions(-) + 1628 files changed, 4297 insertions(+), 4297 deletions(-) -diff --git a/.gn b/.gn ---- a/.gn -+++ b/.gn -@@ -570,7 +570,7 @@ check_targets = [ - "//ui/*", - "//url/*", - -- #"//v8/*", # Errors: https://bugs.chromium.org/p/v8/issues/detail?id=7330 -+ #"//v8/*", # Errors: https://bugs.ch40m1um.qjz9zk/p/v8/issues/detail?id=7330 - - "//weblayer/*", - ] diff --git a/PRESUBMIT.py b/PRESUBMIT.py --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -2012,8 +1644,8 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py +See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts for more details about the presubmit API built into depot_tools. """ - -@@ -130,7 +130,7 @@ _BANNED_OBJC_FUNCTIONS = ( + PRESUBMIT_VERSION = '2.0.0' +@@ -180,7 +180,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView addTrackingRect:owner:userData:assumeInside:] is' 'prohibited. Please use CrTrackingArea instead.', @@ -2022,7 +1654,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), False, ), -@@ -139,7 +139,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -189,7 +189,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of NSTrackingAreas is prohibited. Please use CrTrackingArea', 'instead.', @@ -2031,7 +1663,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), False, ), -@@ -148,7 +148,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -198,7 +198,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertPointFromBase:] is almost certainly wrong.', 'Please use |convertPoint:(point) fromView:nil| instead.', @@ -2040,7 +1672,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -157,7 +157,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -207,7 +207,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertPointToBase:] is almost certainly wrong.', 'Please use |convertPoint:(point) toView:nil| instead.', @@ -2049,7 +1681,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -166,7 +166,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -216,7 +216,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertRectFromBase:] is almost certainly wrong.', 'Please use |convertRect:(point) fromView:nil| instead.', @@ -2058,7 +1690,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -175,7 +175,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -225,7 +225,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertRectToBase:] is almost certainly wrong.', 'Please use |convertRect:(point) toView:nil| instead.', @@ -2067,7 +1699,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -184,7 +184,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -234,7 +234,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertSizeFromBase:] is almost certainly wrong.', 'Please use |convertSize:(point) fromView:nil| instead.', @@ -2076,7 +1708,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -193,7 +193,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -243,7 +243,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertSizeToBase:] is almost certainly wrong.', 'Please use |convertSize:(point) toView:nil| instead.', @@ -2085,16 +1717,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -598,7 +598,7 @@ _BANNED_CPP_FUNCTIONS = ( +@@ -547,7 +547,7 @@ _BANNED_CPP_FUNCTIONS = ( ( "Don't use CallJavascriptFunctionUnsafe() in new code. Instead, use", 'AllowJavascript(), OnJavascriptAllowed()/OnJavascriptDisallowed(),', - 'and CallJavascriptFunction(). See https://goo.gl/qivavq.', -+ 'and CallJavascriptFunction(). See https://goo.gl.qjz9zk.qjz9zk/qivavq.', ++ 'and CallJavascriptFunction(). See https://goo.gl.qjz9zk/qivavq.', ), False, ( -@@ -1244,7 +1244,7 @@ _DEPRECATED_MOJO_TYPES = ( +@@ -1202,7 +1202,7 @@ _DEPRECATED_MOJO_TYPES = ( _IPC_ENUM_TRAITS_DEPRECATED = ( 'You are using IPC_ENUM_TRAITS() in your code. It has been deprecated.\n' @@ -2103,8 +1735,8 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'security-tips-for-ipc') _LONG_PATH_ERROR = ( -@@ -1381,7 +1381,7 @@ _KNOWN_ROBOTS = set( - 'wpt-autoroller',) +@@ -1355,7 +1355,7 @@ _KNOWN_ROBOTS = set( + 'wpt-autoroller', 'chrome-weblayer-builder') ) | set('%s@skia-public.iam.gserviceaccount.com' % s for s in ('chromium-autoroll', 'chromium-release-autoroll') - ) | set('%s@skia-corp.google.com.iam.gserviceaccount.com' % s @@ -2112,7 +1744,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py for s in ('chromium-internal-autoroll',)) -@@ -1788,7 +1788,7 @@ def _CheckNoDEPSGIT(input_api, output_api): +@@ -1711,7 +1711,7 @@ def CheckNoDEPSGIT(input_api, output_api): 'Never commit changes to .DEPS.git. This file is maintained by an\n' 'automated system based on what\'s in DEPS and your changes will be\n' 'overwritten.\n' @@ -2121,7 +1753,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'get-the-code#Rolling_DEPS\n' 'for more information')] return [] -@@ -1993,7 +1993,7 @@ def _CheckNoPragmaOnce(input_api, output_api): +@@ -1922,7 +1922,7 @@ def CheckNoPragmaOnce(input_api, output_api): if files: return [output_api.PresubmitError( 'Do not use #pragma once in header files.\n' @@ -2130,16 +1762,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py files)] return [] -@@ -2199,7 +2199,7 @@ def _CheckForVersionControlConflicts(input_api, output_api): +@@ -2107,7 +2107,7 @@ def CheckForVersionControlConflicts(input_api, output_api): - def _CheckGoogleSupportAnswerUrl(input_api, output_api): + def CheckGoogleSupportAnswerUrlOnUpload(input_api, output_api): - pattern = input_api.re.compile('support\.google\.com\/chrome.*/answer') + pattern = input_api.re.compile('support\.9oo91e\.qjz9zk\/chrome.*/answer') errors = [] for f in input_api.AffectedFiles(): for line_num, line in f.ChangedContents(): -@@ -2308,7 +2308,7 @@ def _CheckNoAbbreviationInPngFileName(input_api, output_api): +@@ -2216,7 +2216,7 @@ def CheckNoAbbreviationInPngFileName(input_api, output_api): results.append(output_api.PresubmitError( 'The name of PNG files should not have abbreviations. \n' 'Use _hover.png, _center.png, instead of _h.png, _c.png.\n' @@ -2148,7 +1780,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -3014,7 +3014,7 @@ def _CheckIpcOwners(input_api, output_api): +@@ -2967,7 +2967,7 @@ def CheckSecurityOwners(input_api, output_api): if to_check: # If there are any OWNERS files to check, there are IPC-related changes in # this CL. Auto-CC the review list. @@ -2157,7 +1789,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py # Go through the OWNERS files to check, filtering out rules that are already # present in that OWNERS file. -@@ -3238,7 +3238,7 @@ def _CheckAndroidToastUsage(input_api, output_api): +@@ -3265,7 +3265,7 @@ def _CheckAndroidToastUsage(input_api, output_api): 'android.widget.Toast usage is detected. Android toasts use hardware' ' acceleration, and can be\ncostly on low-end devices. Please use' ' org.chromium.ui.widget.Toast instead.\n' @@ -2166,7 +1798,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py errors)) return results -@@ -3371,7 +3371,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): +@@ -3399,7 +3399,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): if errors: results.append(output_api.PresubmitError( 'APIs from junit.framework.* are deprecated, please use JUnit4 framework' @@ -2175,7 +1807,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' if you have any question.', errors)) return results -@@ -3402,7 +3402,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): +@@ -3430,7 +3430,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): results.append(output_api.PresubmitPromptWarning( 'The newly created files include Test classes that inherits from base' ' class. Please do not use inheritance in JUnit4 tests or add new' @@ -2184,7 +1816,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' questions.', errors)) return results -@@ -3426,7 +3426,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): +@@ -3454,7 +3454,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): 'Annotations in android.test.suitebuilder.annotation have been' ' deprecated since API level 24. Please use android.support.test.filters' ' from //third_party/android_support_test_runner:runner_java instead.' @@ -2193,7 +1825,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -3446,7 +3446,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): +@@ -3474,7 +3474,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): 'MDPI assets should be placed in /res/drawable-mdpi/ or ' '/res/drawable-ldrtl-mdpi/\ninstead of /res/drawable/ and' '/res/drawable-ldrtl/.\n' @@ -2202,7 +1834,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -4123,7 +4123,7 @@ def _CheckFuzzTargets(input_api, output_api): +@@ -4009,7 +4009,7 @@ def CheckGnGlobForward(input_api, output_api): + long_text=('The variables "visibilty" and "test_only" should be ' + 'explicitly listed in forward_variables_from(). For more ' + 'details, see:\n' +- 'https://chromium.googlesource.com/chromium/src/+/HEAD/' ++ 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/' + 'build/docs/writing_gn_templates.md' + '#Using-forward_variables_from'))] + return [] +@@ -4212,7 +4212,7 @@ def CheckFuzzTargetsOnUpload(input_api, output_api): 'LLVMFuzzerInitialize should not be used, unless your fuzz target needs ' 'to access command line arguments passed to the fuzzer. Instead, prefer ' 'static initialization and shared resources as documented in ' @@ -2211,7 +1852,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'libfuzzer/efficient_fuzzing.md#simplifying-initialization_cleanup.\n' % ( ', '.join(EXPORTED_SYMBOLS), REQUIRED_HEADER) ) -@@ -4158,7 +4158,7 @@ def _CheckNewImagesWarning(input_api, output_api): +@@ -4247,7 +4247,7 @@ def _CheckNewImagesWarning(input_api, output_api): errors.append(output_api.PresubmitPromptWarning( 'It looks like you are trying to commit some images. If these are ' 'non-test-only images, please make sure to read and apply the tips in ' @@ -2220,16 +1861,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'binary_size/optimization_advice.md#optimizing-images\nThis check is ' 'FYI only and will not block your CL on the CQ.', image_paths)) return errors -@@ -4433,7 +4433,7 @@ def _CheckForInvalidIfDefinedMacros(input_api, output_api): +@@ -4531,7 +4531,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api): - def _CheckForIPCRules(input_api, output_api): + def CheckForIPCRules(input_api, output_api): """Check for same IPC rules described in - http://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc + http://www.ch40m1um.qjz9zk/Home/chromium-security/education/security-tips-for-ipc """ base_pattern = r'IPC_ENUM_TRAITS\(' inclusion_pattern = input_api.re.compile(r'(%s)' % base_pattern) -@@ -4679,7 +4679,7 @@ def CheckChangeOnCommit(input_api, output_api): +@@ -4775,7 +4775,7 @@ def CheckChangeOnCommit(input_api, output_api): results.extend(input_api.canned_checks.CheckTreeIsOpen( input_api, output_api, @@ -2238,18 +1879,15 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py results.extend( input_api.canned_checks.CheckPatchFormatted(input_api, output_api)) -diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java ---- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java -+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java -@@ -123,7 +123,7 @@ public class WebViewPackageError { - builder.setTitle("No Valid WebView") - .setMessage("Cannot find a valid WebView provider installed. " - + "Please install a valid WebView package. Contact " -- + "android-webview-dev@chromium.org for help."); -+ + "android-webview-dev@ch40m1um.qjz9zk for help."); - - return builder.create(); - } +@@ -5107,7 +5107,7 @@ def CheckStrings(input_api, output_api): + if icu_syntax_errors: + results.append(output_api.PresubmitPromptWarning( + 'ICU syntax errors were found in the following strings (problems or ' +- 'feedback? Contact rainhard@chromium.org):', items=icu_syntax_errors)) ++ 'feedback? Contact rainhard@ch40m1um.qjz9zk):', items=icu_syntax_errors)) + + return results + diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/android_webview/tools/cts_config/webview_cts_gcs_path.json --- a/android_webview/tools/cts_config/webview_cts_gcs_path.json +++ b/android_webview/tools/cts_config/webview_cts_gcs_path.json @@ -2298,51 +1936,63 @@ diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/androi "unzip_dir": "x86/N/7.0_r33/" } }, -@@ -206,12 +206,12 @@ +@@ -200,12 +200,12 @@ "arch": { "arm64": { - "filename": "arm64/O/android-cts-arm64-8.0_r21.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_r21-linux_x86-arm.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_r21-linux_x86-arm.zip", - "unzip_dir": "arm64/O/8.0_r21" + "filename": "arm64/O/android-cts-arm64-8.0_r24.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_r24-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_r24-linux_x86-arm.zip", + "unzip_dir": "arm64/O/8.0_r24" }, "x86": { - "filename": "x86/O/android-cts-x86-8.0_r21.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_r21-linux_x86-x86.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_r21-linux_x86-x86.zip", - "unzip_dir": "x86/O/8.0_r21/" + "filename": "x86/O/android-cts-x86-8.0_r24.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_r24-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_r24-linux_x86-x86.zip", + "unzip_dir": "x86/O/8.0_r24/" } }, -@@ -234,12 +234,12 @@ +@@ -222,12 +222,12 @@ "arch": { "arm64": { - "filename": "arm64/P/android-cts-arm64-9.0_r10.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r10-linux_x86-arm.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r10-linux_x86-arm.zip", - "unzip_dir": "arm64/P/9.0_r10/" + "filename": "arm64/P/android-cts-arm64-9.0_r13.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r13-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r13-linux_x86-arm.zip", + "unzip_dir": "arm64/P/9.0_r13/" }, "x86": { - "filename": "x86/P/android-cts-x86-9.0_r10.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r10-linux_x86-x86.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r10-linux_x86-x86.zip", - "unzip_dir": "x86/P/9.0_r10/" + "filename": "x86/P/android-cts-x86-9.0_r13.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r13-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r13-linux_x86-x86.zip", + "unzip_dir": "x86/P/9.0_r13/" } }, -@@ -256,12 +256,12 @@ +@@ -250,12 +250,12 @@ "arch": { "arm64": { - "filename": "arm64/Q/android-cts-arm64-10_r2.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r2-linux_x86-arm.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r2-linux_x86-arm.zip", - "unzip_dir": "arm64/Q/10_r2/" + "filename": "arm64/Q/android-cts-arm64-10_r5.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r5-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r5-linux_x86-arm.zip", + "unzip_dir": "arm64/Q/10_r5/" }, "x86": { - "filename": "x86/Q/android-cts-x86-10_r2.zip", -- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r2-linux_x86-x86.zip", -+ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r2-linux_x86-x86.zip", - "unzip_dir": "x86/Q/10_r2/" + "filename": "x86/Q/android-cts-x86-10_r5.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r5-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r5-linux_x86-x86.zip", + "unzip_dir": "x86/Q/10_r5/" } }, +diff --git a/android_webview/tools/generate_flag_labels.py b/android_webview/tools/generate_flag_labels.py +--- a/android_webview/tools/generate_flag_labels.py ++++ b/android_webview/tools/generate_flag_labels.py +@@ -244,7 +244,7 @@ double-check this picked the correct labels for your new features (labels are + case-sensitive!), add these to enums.xml, run `git-cl format`, and then follow + these steps as a final check: + +-https://chromium.googlesource.com/chromium/src/+/master/tools/metrics/histograms/README.md#flag-histograms ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/tools/metrics/histograms/README.md#flag-histograms + + If any labels were generated incorrectly, please edit this script and change + KNOWN_MISTAKES. diff --git a/android_webview/tools/record_netlog.py b/android_webview/tools/record_netlog.py --- a/android_webview/tools/record_netlog.py +++ b/android_webview/tools/record_netlog.py @@ -2409,22 +2059,10 @@ diff --git a/ash/app_list/PRESUBMIT.py b/ash/app_list/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -diff --git a/ash/app_list/views/assistant/privacy_info_view.cc b/ash/app_list/views/assistant/privacy_info_view.cc ---- a/ash/app_list/views/assistant/privacy_info_view.cc -+++ b/ash/app_list/views/assistant/privacy_info_view.cc -@@ -102,7 +102,7 @@ void PrivacyInfoView::ButtonPressed(views::Button* sender, - void PrivacyInfoView::StyledLabelLinkClicked(views::StyledLabel* label, - const gfx::Range& range, - int event_flags) { -- constexpr char url[] = "https://support.google.com/chromebook?p=assistant"; -+ constexpr char url[] = "https://support.9oo91e.qjz9zk/chromebook?p=assistant"; - view_delegate_->GetAssistantViewDelegate()->OpenUrlFromView( - assistant::util::CreateLocalizedGURL(url)); - } diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd -@@ -513,7 +513,7 @@ This file contains the strings for ash. +@@ -620,7 +620,7 @@ This file contains the strings for ash. @@ -2433,7 +2071,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd -@@ -773,7 +773,7 @@ This file contains the strings for ash. +@@ -994,7 +994,7 @@ This file contains the strings for ash. Supervised user @@ -2442,7 +2080,16 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Account managed by $1user@example.com -@@ -2050,7 +2050,7 @@ This file contains the strings for ash. +@@ -1212,7 +1212,7 @@ This file contains the strings for ash. + Tap to configure + + +- Browser tab $11 of $22. $3Google, $4https://google.com ++ Browser tab $11 of $22. $3Google, $4https://9oo91e.qjz9zk + + + Connected devices settings +@@ -2688,7 +2688,7 @@ This file contains the strings for ash. Multiple sign-in has been disabled @@ -2451,7 +2098,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Sign out -@@ -2262,7 +2262,7 @@ This file contains the strings for ash. +@@ -3014,7 +3014,7 @@ Here are some things you can try to get started. Unlock device to perform the notification action @@ -2460,24 +2107,10 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd To see notifications on your lock screen, unlock to change the setting -diff --git a/ash/assistant/assistant_interaction_controller.cc b/ash/assistant/assistant_interaction_controller.cc ---- a/ash/assistant/assistant_interaction_controller.cc -+++ b/ash/assistant/assistant_interaction_controller.cc -@@ -58,8 +58,8 @@ constexpr char kAndroidIntentPrefix[] = "#Intent"; - chromeos::assistant::mojom::AssistantSuggestionPtr CreateSearchSuggestion( - const std::string& query) { - constexpr char kIconUrl[] = -- "https://www.gstatic.com/images/branding/product/2x/googleg_48dp.png"; -- constexpr char kSearchUrl[] = "https://www.google.com/search"; -+ "https://www.95tat1c.qjz9zk/images/branding/product/2x/googleg_48dp.png"; -+ constexpr char kSearchUrl[] = "https://www.9oo91e.qjz9zk/search"; - constexpr char kQueryParamKey[] = "q"; - - chromeos::assistant::mojom::AssistantSuggestionPtr suggestion = diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assistant_setup_controller.cc --- a/ash/assistant/assistant_setup_controller.cc +++ b/ash/assistant/assistant_setup_controller.cc -@@ -17,7 +17,7 @@ +@@ -16,7 +16,7 @@ namespace { constexpr char kGSuiteAdministratorInstructionsUrl[] = @@ -2489,7 +2122,7 @@ diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assista diff --git a/ash/assistant/util/deep_link_util.cc b/ash/assistant/util/deep_link_util.cc --- a/ash/assistant/util/deep_link_util.cc +++ b/ash/assistant/util/deep_link_util.cc -@@ -324,21 +324,21 @@ base::Optional GetAssistantUrl( +@@ -421,21 +421,21 @@ base::Optional GetAssistantUrl( case DeepLinkType::kLists: { const auto& type = GetDeepLinkParam(params, DeepLinkParam::kType); top_level_url = @@ -2518,7 +2151,7 @@ diff --git a/ash/assistant/util/deep_link_util.cc b/ash/assistant/util/deep_link break; default: NOTREACHED(); -@@ -384,7 +384,7 @@ base::Optional GetWebUrl( +@@ -486,7 +486,7 @@ base::Optional GetWebUrl( DeepLinkType type, const std::map& params) { static constexpr char kAssistantSettingsWebUrl[] = @@ -2530,8 +2163,8 @@ diff --git a/ash/assistant/util/deep_link_util.cc b/ash/assistant/util/deep_link diff --git a/ash/login/ui/login_user_menu_view.cc b/ash/login/ui/login_user_menu_view.cc --- a/ash/login/ui/login_user_menu_view.cc +++ b/ash/login/ui/login_user_menu_view.cc -@@ -19,7 +19,7 @@ - +@@ -23,7 +23,7 @@ + namespace ash { namespace { constexpr char kLegacySupervisedUserManagementDisplayURL[] = - "www.chrome.com/manage"; @@ -2539,18 +2172,18 @@ diff --git a/ash/login/ui/login_user_menu_view.cc b/ash/login/ui/login_user_menu // Vertical margin between username and mail. constexpr int kUserMenuVerticalMarginUsernameMailDp = 8; -diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc ---- a/ash/public/cpp/app_list/app_list_features.cc -+++ b/ash/public/cpp/app_list/app_list_features.cc -@@ -148,7 +148,7 @@ std::string AnswerServerUrl() { - base::GetFieldTrialParamValueByFeature(kEnableAnswerCard, "ServerUrl"); - if (!experiment_url.empty()) - return experiment_url; -- return "https://www.google.com/coac"; -+ return "https://www.9oo91e.qjz9zk/coac"; - } - - std::string AnswerServerQuerySuffix() { +diff --git a/ash/quick_answers/quick_answers_controller_impl.cc b/ash/quick_answers/quick_answers_controller_impl.cc +--- a/ash/quick_answers/quick_answers_controller_impl.cc ++++ b/ash/quick_answers/quick_answers_controller_impl.cc +@@ -25,7 +25,7 @@ using chromeos::quick_answers::ResultType; + constexpr char kAssistantRelatedInfoUrl[] = + "chrome://os-settings/googleAssistant"; + constexpr char kDogfoodUrl[] = +- "https://goto.google.com/quick-answers-dogfood-bugs"; ++ "https://goto.9oo91e.qjz9zk/quick-answers-dogfood-bugs"; + + // TODO(yanxiao): move the string to grd source file. + constexpr char kNoResult[] = "See result in Assistant"; diff --git a/ash/resources/PRESUBMIT.py b/ash/resources/PRESUBMIT.py --- a/ash/resources/PRESUBMIT.py +++ b/ash/resources/PRESUBMIT.py @@ -2561,44 +2194,11 @@ diff --git a/ash/resources/PRESUBMIT.py b/ash/resources/PRESUBMIT.py -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts for more details about the presubmit API built into depot_tools, and see --https://chromium.googlesource.com/chromium/src/+/master/styleguide/web/web.md -+https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/styleguide/web/web.md +-https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/web/web.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/styleguide/web/web.md for the rules we're checking against here. """ -diff --git a/ash/shell/content/client/shell_browser_main_parts.cc b/ash/shell/content/client/shell_browser_main_parts.cc ---- a/ash/shell/content/client/shell_browser_main_parts.cc -+++ b/ash/shell/content/client/shell_browser_main_parts.cc -@@ -127,7 +127,7 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() { - base::Unretained(browser_context_.get()), nullptr), - base::BindRepeating(base::IgnoreResult(&EmbeddedBrowser::Create), - base::Unretained(browser_context_.get()), -- GURL("https://www.google.com"), base::nullopt)); -+ GURL("https://www.9oo91e.qjz9zk"), base::nullopt)); - } - } - -diff --git a/ash/shell/content/client/shell_new_window_delegate.cc b/ash/shell/content/client/shell_new_window_delegate.cc ---- a/ash/shell/content/client/shell_new_window_delegate.cc -+++ b/ash/shell/content/client/shell_new_window_delegate.cc -@@ -17,7 +17,7 @@ ShellNewWindowDelegate::~ShellNewWindowDelegate() = default; - void ShellNewWindowDelegate::NewTab() { - EmbeddedBrowser::Create( - ash::shell::ShellBrowserMainParts::GetBrowserContext(), -- GURL("https://www.google.com")); -+ GURL("https://www.9oo91e.qjz9zk")); - } - - void ShellNewWindowDelegate::NewTabWithUrl(const GURL& url, -@@ -29,7 +29,7 @@ void ShellNewWindowDelegate::NewTabWithUrl(const GURL& url, - void ShellNewWindowDelegate::NewWindow(bool incognito) { - EmbeddedBrowser::Create( - ash::shell::ShellBrowserMainParts::GetBrowserContext(), -- GURL("https://www.google.com")); -+ GURL("https://www.9oo91e.qjz9zk")); - } - - void ShellNewWindowDelegate::OpenFileManager() {} diff --git a/base/PRESUBMIT.py b/base/PRESUBMIT.py --- a/base/PRESUBMIT.py +++ b/base/PRESUBMIT.py @@ -2632,10 +2232,22 @@ diff --git a/base/android/jni_generator/PRESUBMIT.py b/base/android/jni_generato details on the presubmit API built into depot_tools. """ +diff --git a/base/android/resource_exclusions.gni b/base/android/resource_exclusions.gni +--- a/base/android/resource_exclusions.gni ++++ b/base/android/resource_exclusions.gni +@@ -16,7 +16,7 @@ common_resource_exclusion_exceptions = [ + common_resource_exclusion_regex += "|-watch\b" + + # As of May 2020, 0.2% of devices are ldpi: +-# https://developer.android.com/about/dashboards/index.html ++# https://developer.8n6r01d.qjz9zk/about/dashboards/index.html + # Only a single resources is defined in this config: + # ic_arrow_down_24dp + # It saves XXkb to omit the config. diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc --- a/base/debug/debugger_posix.cc +++ b/base/debug/debugger_posix.cc -@@ -143,7 +143,7 @@ void VerifyDebugger() { +@@ -146,7 +146,7 @@ void VerifyDebugger() { << "Detected lldb without sourcing //tools/lldb/lldbinit.py. lldb may " "not be able to find debug symbols. Please see debug instructions for " "using //tools/lldb/lldbinit.py:\n" @@ -2644,7 +2256,7 @@ diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc "lldbinit.md\n" "To continue anyway, type 'continue' in lldb. To always skip this " "check, define an environment variable CHROMIUM_LLDBINIT_SOURCED=1"; -@@ -225,7 +225,7 @@ void VerifyDebugger() { +@@ -229,7 +229,7 @@ void VerifyDebugger() { << "Detected gdb without sourcing //tools/gdb/gdbinit. gdb may not be " "able to find debug symbols, and pretty-printing of STL types may not " "work. Please see debug instructions for using //tools/gdb/gdbinit:\n" @@ -2704,7 +2316,7 @@ diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py --- a/build/android/gradle/generate_gradle.py +++ b/build/android/gradle/generate_gradle.py -@@ -947,7 +947,7 @@ def main(): +@@ -924,7 +924,7 @@ def main(): logging.warning('Generated files will only appear once you\'ve built them.') logging.warning('Generated projects for Android Studio %s', channel) @@ -2716,7 +2328,7 @@ diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/gene diff --git a/build/android/gyp/assert_static_initializers.py b/build/android/gyp/assert_static_initializers.py --- a/build/android/gyp/assert_static_initializers.py +++ b/build/android/gyp/assert_static_initializers.py -@@ -162,7 +162,7 @@ def main(): +@@ -174,7 +174,7 @@ def main(): print(' //tools/binary_size/diagnose_bloat.py') print() print('For more information:') @@ -2725,79 +2337,74 @@ diff --git a/build/android/gyp/assert_static_initializers.py b/build/android/gyp 'static_initializers.md') sys.exit(1) -diff --git a/build/android/gyp/compile_resources.py b/build/android/gyp/compile_resources.py ---- a/build/android/gyp/compile_resources.py -+++ b/build/android/gyp/compile_resources.py -@@ -490,7 +490,7 @@ def _VerifyManifest(actual_manifest, expected_manifest, normalized_manifest, - - msg_header = """\ - AndroidManifest.xml expectations file needs updating. For details see: --https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/android/java/README.md -+https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/chrome/android/java/README.md - """ - sys.stderr.write(msg_header) - sys.stderr.write(msg) diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py --- a/build/android/gyp/lint.py +++ b/build/android/gyp/lint.py -@@ -21,7 +21,7 @@ from util import build_utils +@@ -22,7 +22,7 @@ from xml.etree import ElementTree + from util import build_utils from util import manifest_utils - from util import md5_check --_LINT_MD_URL = 'https://chromium.googlesource.com/chromium/src/+/master/build/android/docs/lint.md' # pylint: disable=line-too-long -+_LINT_MD_URL = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/build/android/docs/lint.md' # pylint: disable=line-too-long +-_LINT_MD_URL = 'https://chromium.googlesource.com/chromium/src/+/master/build/android/docs/lint.md' # pylint: disable=line-too-long ++_LINT_MD_URL = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/build/android/docs/lint.md' # pylint: disable=line-too-long - - def _RunLint(lint_path, + # These checks are not useful for chromium. + _DISABLED_ALWAYS = [ diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py --- a/build/android/gyp/proguard.py +++ b/build/android/gyp/proguard.py -@@ -196,7 +196,7 @@ def _VerifyExpectedConfigs(expected_path, actual_path, failure_file_path): - - msg_header = """\ - ProGuard flag expectations file needs updating. For details see: --https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/android/java/README.md -+https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/chrome/android/java/README.md - """ - sys.stderr.write(msg_header) - sys.stderr.write(msg) -@@ -270,7 +270,7 @@ def _OptimizeWithR8(options, - cmd, env=env, print_stdout=print_stdout, stderr_filter=stderr_filter) +@@ -327,7 +327,7 @@ def _OptimizeWithR8(options, + fail_on_output=options.warnings_as_errors) except build_utils.CalledProcessError as err: - debugging_link = ('R8 failed. Please see {}.'.format( + debugging_link = ('\n\nR8 failed. Please see {}.'.format( - 'https://chromium.googlesource.com/chromium/src/+/HEAD/build/' + 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/build/' 'android/docs/java_optimization.md#Debugging-common-failures\n')) - raise ProguardProcessError(err, debugging_link) - + raise build_utils.CalledProcessError(err.cwd, err.args, + err.output + debugging_link) diff --git a/build/android/gyp/util/diff_utils.py b/build/android/gyp/util/diff_utils.py --- a/build/android/gyp/util/diff_utils.py +++ b/build/android/gyp/util/diff_utils.py -@@ -49,7 +49,7 @@ Files Compared: - * {} +@@ -101,10 +101,10 @@ def CheckExpectations(actual_data, options): + else: + fail_msg = """ + Expectations need updating: +-https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/android/expectations/README.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/chrome/android/expectations/README.md - If you are looking at this through LogDog, click "Raw log" before copying. --See https://bugs.chromium.org/p/chromium/issues/detail?id=984616. -+See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=984616. + LogDog tip: Use "Raw log" or "Switch to lite mode" before copying: +-https://bugs.chromium.org/p/chromium/issues/detail?id=984616 ++https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=984616 - To update the file, run: + To update expectations, run: ########### START ########### +diff --git a/build/android/gyp/util/protoresources.py b/build/android/gyp/util/protoresources.py +--- a/build/android/gyp/util/protoresources.py ++++ b/build/android/gyp/util/protoresources.py +@@ -4,7 +4,7 @@ + """Functions that modify resources in protobuf format. + + Format reference: +-https://cs.android.com/android/platform/superproject/+/master:frameworks/base/tools/aapt2/Resources.proto ++https://cs.8n6r01d.qjz9zk/android/platform/superproject/+/master:frameworks/base/tools/aapt2/Resources.proto + """ + + import logging diff --git a/build/android/incremental_install/installer.py b/build/android/incremental_install/installer.py --- a/build/android/incremental_install/installer.py +++ b/build/android/incremental_install/installer.py -@@ -240,7 +240,7 @@ def Install(device, install_json, apk=None, enable_device_cache=False, +@@ -245,7 +245,7 @@ def Install(device, install_json, apk=None, enable_device_cache=False, if apis_allowed.strip() not in '01': msg = """\ - Cannot use incremental installs on Android Q+ without first enabling access to + Cannot use incremental installs on Android P+ without first enabling access to -non-SDK interfaces (https://developer.android.com/preview/non-sdk-q). +non-SDK interfaces (https://developer.8n6r01d.qjz9zk/preview/non-sdk-q). To enable access: - adb -s {0} shell settings put global hidden_api_policy 0 + adb -s {0} shell settings put global {1} 0 diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/constants/__init__.py --- a/build/android/pylib/constants/__init__.py +++ b/build/android/pylib/constants/__init__.py -@@ -127,7 +127,7 @@ BAD_DEVICES_JSON = os.path.join(DIR_SOURCE_ROOT, +@@ -126,7 +126,7 @@ BAD_DEVICES_JSON = os.path.join(DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUT_DIR', 'out'), 'bad_devices.json') @@ -2806,18 +2413,6 @@ diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/con # TODO(jbudorick): Remove once unused. DEVICE_LOCAL_PROPERTIES_PATH = '/data/local.prop' -diff --git a/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java b/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java ---- a/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java -+++ b/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java -@@ -2,7 +2,7 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - --package org.chromium.android.commands.unzip; -+package org.chromium.8n6r01d.qjz9zkmands.unzip; - - import java.io.BufferedInputStream; - import java.io.BufferedOutputStream; diff --git a/build/android/pylib/device_settings.py b/build/android/pylib/device_settings.py --- a/build/android/pylib/device_settings.py +++ b/build/android/pylib/device_settings.py @@ -2980,10 +2575,22 @@ diff --git a/build/android/pylib/utils/simpleperf.py b/build/android/pylib/utils % simpleperf_out_path) # Recreate the directory structure locally, and symlink unstripped libs. +diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py +--- a/build/android/resource_sizes.py ++++ b/build/android/resource_sizes.py +@@ -146,7 +146,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): + def _MeasureApkSignatureBlock(zip_file): + """Measures the size of the v2 / v3 signing block. + +- Refer to: https://source.android.com/security/apksigning/v2 ++ Refer to: https://source.8n6r01d.qjz9zk/security/apksigning/v2 + """ + # Seek to "end of central directory" struct. + eocd_offset_from_end = -22 - len(zip_file.comment) diff --git a/build/android/test_runner.py b/build/android/test_runner.py --- a/build/android/test_runner.py +++ b/build/android/test_runner.py -@@ -928,7 +928,7 @@ def RunTestsInPlatformMode(args): +@@ -991,7 +991,7 @@ def RunTestsInPlatformMode(args, result_sink_client=None): result_html_string, _, _ = test_results_presentation.result_details( json_path=json_file.name, test_name=args.command, @@ -3004,6 +2611,30 @@ diff --git a/build/android/test_wrapper/logdog_wrapper.py b/build/android/test_w SERVICE_ACCOUNT_JSON = ('/creds/service_accounts' '/service-account-luci-logdog-publisher.json') LOGDOG_TERMINATION_TIMEOUT = 30 +diff --git a/build/apple/tweak_info_plist.py b/build/apple/tweak_info_plist.py +--- a/build/apple/tweak_info_plist.py ++++ b/build/apple/tweak_info_plist.py +@@ -156,9 +156,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): + plist['BreakpadProduct'] = '%s_%s' % (branding, platform) + plist['BreakpadProductDisplay'] = branding + if staging: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/staging_report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/staging_report' + else: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/report' + + # These are both deliberately strings and not boolean. + plist['BreakpadSendAndExit'] = 'YES' +@@ -195,7 +195,7 @@ def _AddKeystoneKeys(plist, bundle_identifier, base_tag): + also requires the |bundle_identifier| argument (com.example.product).""" + plist['KSVersion'] = plist['CFBundleShortVersionString'] + plist['KSProductID'] = bundle_identifier +- plist['KSUpdateURL'] = 'https://tools.google.com/service/update2' ++ plist['KSUpdateURL'] = 'https://tools.9oo91e.qjz9zk/service/update2' + + _RemoveKeys(plist, 'KSChannelID') + if base_tag != '': diff --git a/build/chromeos/PRESUBMIT.py b/build/chromeos/PRESUBMIT.py --- a/build/chromeos/PRESUBMIT.py +++ b/build/chromeos/PRESUBMIT.py @@ -3031,7 +2662,7 @@ diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1702,7 +1702,7 @@ if (enable_java_templates) { +@@ -1717,7 +1717,7 @@ if (enable_java_templates) { # * public.txt # * annotations.zip # * assets/ @@ -3040,22 +2671,10 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni # # Variables: # output: Path to the output .aar. -diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni ---- a/build/config/chrome_build.gni -+++ b/build/config/chrome_build.gni -@@ -14,7 +14,7 @@ declare_args() { - is_multi_dll_chrome = false - - # Turn this on to generate order files. See -- # https://chromium.googlesource.com/chromium/src/+/master/docs/win_order_files.md -+ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/win_order_files.md - generate_order_files = false - } - diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni --- a/build/config/chromeos/args.gni +++ b/build/config/chromeos/args.gni -@@ -16,7 +16,7 @@ declare_args() { +@@ -21,7 +21,7 @@ declare_args() { # linux-chromeos, so some have compile-time asserts that intentionally fail # when this build flag is set. Build and run the tests for linux-chromeos # instead. @@ -3063,24 +2682,33 @@ diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni - # https://chromium.googlesource.com/chromiumos/docs/+/master/simple_chrome_workflow.md + # https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/chromeos_build_instructions.md + # https://chromium.9oo91esource.qjz9zk/chromiumos/docs/+/master/simple_chrome_workflow.md - is_chromeos_device = cros_board != "" + is_chromeos_device = false } diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni --- a/build/config/chromeos/rules.gni +++ b/build/config/chromeos/rules.gni -@@ -190,7 +190,7 @@ template("tast_test") { +@@ -234,7 +234,7 @@ template("tast_test") { if (!defined(tast_attr_expr) && !defined(tast_tests)) { # The following expression filters out all non-critical tests. See the link # below for more details: - # https://chromium.googlesource.com/chromiumos/platform/tast/+/master/docs/test_attributes.md + # https://chromium.9oo91esource.qjz9zk/chromiumos/platform/tast/+/master/docs/test_attributes.md - tast_attr_expr = - "!disabled && (\"group:mainline\" || !\"group:*\") && \"dep:chrome\"" + tast_attr_expr = "\"group:mainline\" && \"dep:chrome\"" + if (defined(enable_tast_informational_tests) && diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni --- a/build/config/compiler/compiler.gni +++ b/build/config/compiler/compiler.gni -@@ -203,7 +203,7 @@ declare_args() { +@@ -105,7 +105,7 @@ declare_args() { + # and hardware supports the feature and it's enabled by OS then additional + # additional validation of return address will be performed as mitigation + # against Return-oriented programming (ROP). +- # https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md#cet-shadow-stack ++ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/design/sandbox.md#cet-shadow-stack + enable_cet_shadow_stack = false + } + +@@ -215,7 +215,7 @@ declare_args() { # results independent of the checkout and build directory names, which # in turn is important for goma compile hit rate. # Setting this to true may make it harder to debug binaries on Linux, see @@ -3089,22 +2717,10 @@ diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler # It's not clear if the crash server will correctly handle dSYMs with relative # paths, so we disable this feature for official benefit. The main benefit is # deterministic builds to reduce compile times, so this is less relevant for -diff --git a/build/config/fuchsia/elfinfo.py b/build/config/fuchsia/elfinfo.py ---- a/build/config/fuchsia/elfinfo.py -+++ b/build/config/fuchsia/elfinfo.py -@@ -4,7 +4,7 @@ - """Parses ELF information without relying external tools. - - This file was originally copied and adapted from: --https://fuchsia.googlesource.com/fuchsia/+/827f9fe/build/images/elfinfo.py -+https://fuchsia.9oo91esource.qjz9zk/fuchsia/+/827f9fe/build/images/elfinfo.py - """ - - from contextlib import contextmanager diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni --- a/build/config/nacl/rules.gni +++ b/build/config/nacl/rules.gni -@@ -38,7 +38,7 @@ template("generate_nmf") { +@@ -40,7 +40,7 @@ template("generate_nmf") { } # TODO(phosek): Remove this conditional once @@ -3116,7 +2732,7 @@ diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni --- a/build/config/sanitizers/sanitizers.gni +++ b/build/config/sanitizers/sanitizers.gni -@@ -73,7 +73,7 @@ declare_args() { +@@ -79,7 +79,7 @@ declare_args() { use_cfi_recover = false # Compile for fuzzing with LLVM LibFuzzer. @@ -3125,18 +2741,30 @@ diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sa use_libfuzzer = false # Compile for fuzzing with AFL. -diff --git a/build/find_isolated_tests.py b/build/find_isolated_tests.py ---- a/build/find_isolated_tests.py -+++ b/build/find_isolated_tests.py -@@ -11,7 +11,7 @@ Used to figure out what tests were build in isolated mode to trigger these - tests to run on swarming. - - For more info see: --https://sites.google.com/a/chromium.org/dev/developers/testing/isolated-testing -+https://sites.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/dev/developers/testing/isolated-testing - """ +diff --git a/build/config/win/control_flow_guard.gni b/build/config/win/control_flow_guard.gni +--- a/build/config/win/control_flow_guard.gni ++++ b/build/config/win/control_flow_guard.gni +@@ -12,7 +12,7 @@ declare_args() { + + if (win_enable_cfg_guards) { + # Control Flow Guard (CFG) +- # https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx ++ # https://msdn.m1cr050ft.qjz9zk/en-us/library/windows/desktop/mt637065.aspx + # /DYNAMICBASE (ASLR) is turned off in debug builds, therefore CFG can't be + # turned on either. + # ASan and CFG leads to slow process startup. Chromium's test runner uses +diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py +--- a/build/fuchsia/binary_sizes.py ++++ b/build/fuchsia/binary_sizes.py +@@ -90,7 +90,7 @@ def CreateTestResults(test_status, timestamp): + """Create test results data to write to JSON test results file. + + The JSON data format is defined in +- https://chromium.googlesource.com/chromium/src/+/master/docs/testing/json_test_results_format.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/testing/json_test_results_format.md + """ - import glob + results = { diff --git a/build/linux/install-chromeos-fonts.py b/build/linux/install-chromeos-fonts.py --- a/build/linux/install-chromeos-fonts.py +++ b/build/linux/install-chromeos-fonts.py @@ -3161,34 +2789,10 @@ diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroo URL_PATH = 'chrome-linux-sysroot/toolchain' VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips', 'mips64el') -diff --git a/build/mac/tweak_info_plist.py b/build/mac/tweak_info_plist.py ---- a/build/mac/tweak_info_plist.py -+++ b/build/mac/tweak_info_plist.py -@@ -167,9 +167,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): - plist['BreakpadProduct'] = '%s_%s' % (branding, platform) - plist['BreakpadProductDisplay'] = branding - if staging: -- plist['BreakpadURL'] = 'https://clients2.google.com/cr/staging_report' -+ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/staging_report' - else: -- plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' -+ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/report' - - # These are both deliberately strings and not boolean. - plist['BreakpadSendAndExit'] = 'YES' -@@ -211,7 +211,7 @@ def _AddKeystoneKeys(plist, bundle_identifier): - also requires the |bundle_identifier| argument (com.example.product).""" - plist['KSVersion'] = plist['CFBundleShortVersionString'] - plist['KSProductID'] = bundle_identifier -- plist['KSUpdateURL'] = 'https://tools.google.com/service/update2' -+ plist['KSUpdateURL'] = 'https://tools.9oo91e.qjz9zk/service/update2' - - _RemoveKeys(plist, 'KSChannelID') - for tag_suffix in _TagSuffixes(): diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py --- a/build/mac_toolchain.py +++ b/build/mac_toolchain.py -@@ -76,7 +76,7 @@ def RequestCipdAuthentication(): +@@ -81,7 +81,7 @@ def RequestCipdAuthentication(): print() print('and follow the instructions.') print() @@ -3209,32 +2813,18 @@ diff --git a/build/nocompile.gni b/build/nocompile.gni # # To use this, create a gyp target with the following form: # -diff --git a/build/package_mac_toolchain.py b/build/package_mac_toolchain.py ---- a/build/package_mac_toolchain.py -+++ b/build/package_mac_toolchain.py -@@ -5,7 +5,7 @@ - - """Compress and upload Mac toolchain files. - --Stored in in https://pantheon.corp.google.com/storage/browser/chrome-mac-sdk/. -+Stored in in https://pantheon.corp.9oo91e.qjz9zk/storage/browser/chrome-mac-sdk/. - """ +diff --git a/build/skia_gold_common/PRESUBMIT.py b/build/skia_gold_common/PRESUBMIT.py +--- a/build/skia_gold_common/PRESUBMIT.py ++++ b/build/skia_gold_common/PRESUBMIT.py +@@ -3,7 +3,7 @@ + # found in the LICENSE file. + """Presubmit script for //build/skia_gold_common/. - from __future__ import print_function -diff --git a/build/run_swarming_xcode_install.py b/build/run_swarming_xcode_install.py ---- a/build/run_swarming_xcode_install.py -+++ b/build/run_swarming_xcode_install.py -@@ -11,8 +11,8 @@ need to upgrade all the swarming testers. It: - - Example usage: - $ ./build/run_swarming_xcode_install.py --luci_path ~/work/luci-py \ -- --swarming-server touch-swarming.appspot.com \ -- --isolate-server touch-isolate.appspot.com -+ --swarming-server touch-swarming.8pp2p8t.qjz9zk \ -+ --isolate-server touch-isolate.8pp2p8t.qjz9zk +-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details on the presubmit API built into depot_tools. """ - from __future__ import print_function diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain.gni --- a/build/toolchain/cros_toolchain.gni +++ b/build/toolchain/cros_toolchain.gni @@ -3243,7 +2833,7 @@ diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain # # To perform a board-specific build, first obtain the correct system -# root (http://goo.gl/aFB4XH) for the board. Then configure GN to use it -+# root (http://goo.gl.qjz9zk.qjz9zk/aFB4XH) for the board. Then configure GN to use it ++# root (http://goo.gl.qjz9zk/aFB4XH) for the board. Then configure GN to use it # by setting appropriate cross-compilation variables. # # For example, to compile a Chrome source tree in /g/src for an @@ -3354,34 +2944,10 @@ diff --git a/chrome/PRESUBMIT.py b/chrome/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -diff --git a/chrome/android/examples/partner_browser_customizations_provider/src/org/chromium/example/partnercustomizations/PartnerBrowserCustomizationsProviderExample.java b/chrome/android/examples/partner_browser_customizations_provider/src/org/chromium/example/partnercustomizations/PartnerBrowserCustomizationsProviderExample.java ---- a/chrome/android/examples/partner_browser_customizations_provider/src/org/chromium/example/partnercustomizations/PartnerBrowserCustomizationsProviderExample.java -+++ b/chrome/android/examples/partner_browser_customizations_provider/src/org/chromium/example/partnercustomizations/PartnerBrowserCustomizationsProviderExample.java -@@ -22,7 +22,7 @@ import android.net.Uri; - public class PartnerBrowserCustomizationsProviderExample extends ContentProvider { - // "http://www.android.com/" is just an example. Please replace this to actual homepage. - // Other strings in this class must remain as it is. -- private static final String HOMEPAGE_URI = "http://www.android.com/"; -+ private static final String HOMEPAGE_URI = "http://www.8n6r01d.qjz9zk/"; - private static final int URI_MATCH_HOMEPAGE = 0; - private static final int URI_MATCH_DISABLE_INCOGNITO_MODE = 1; - private static final int URI_MATCH_DISABLE_BOOKMARKS_EDITING = 2; -diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java ---- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java -+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java -@@ -36,7 +36,7 @@ import java.util.Map; - class AutofillAssistantClient { - /** OAuth2 scope that RPCs require. */ - private static final String AUTH_TOKEN_TYPE = -- "oauth2:https://www.googleapis.com/auth/userinfo.profile"; -+ "oauth2:https://www.9oo91eapis.qjz9zk/auth/userinfo.profile"; - - /** - * Pointer to the corresponding native autofill_assistant::ClientAndroid instance. Might be 0 if diff --git a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd --- a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd +++ b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd -@@ -189,7 +189,7 @@ +@@ -205,7 +205,7 @@ To help you complete tasks, Google will receive the URLs and contents of sites on which you use Assistant, as well as information you submit through Assistant. This information may be stored in your Google account. You can turn off Assistant in Chrome settings. <link>Learn more</link> @@ -3390,39 +2956,6 @@ diff --git a/chrome/android/features/autofill_assistant/java/strings/android_chr implements AccessibilityUtil.Observer { - private static final String TAG = "ChromeTabbedActivity"; - -- private static final String HELP_URL_PREFIX = "https://support.google.com/chrome/"; -+ private static final String HELP_URL_PREFIX = "https://support.9oo91e.qjz9zk/chrome/"; - - private static final String WINDOW_INDEX = "window_index"; - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -@@ -216,10 +216,10 @@ public class IntentHandler { - private static final String PACKAGE_WHATSAPP = "com.whatsapp"; - private static final String PACKAGE_YAHOO_MAIL = "com.yahoo.mobile.client.android.mail"; - private static final String PACKAGE_VIBER = "com.viber.voip"; -- private static final String FACEBOOK_REFERRER_URL = "android-app://m.facebook.com"; -- private static final String FACEBOOK_INTERNAL_BROWSER_REFERRER = "http://m.facebook.com"; -+ private static final String FACEBOOK_REFERRER_URL = "android-app://m.f8c3b00k.qjz9zk"; -+ private static final String FACEBOOK_INTERNAL_BROWSER_REFERRER = "http://m.f8c3b00k.qjz9zk"; - private static final String TWITTER_LINK_PREFIX = "http://t.co/"; -- private static final String NEWS_LINK_PREFIX = "http://news.google.com/news/url?"; -+ private static final String NEWS_LINK_PREFIX = "http://news.9oo91e.qjz9zk/news/url?"; - - /** - * Represents popular external applications that can load a page in Chrome via intent. -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java -@@ -220,7 +220,7 @@ public class CustomButtonParams { - onToolbar = false; - Log.w(TAG, - "Button's icon not suitable for toolbar, putting it to bottom bar instead." -- + "See: https://developer.android.com/reference/android/support/customtabs/" -+ + "See: https://developer.8n6r01d.qjz9zk/reference/android/support/customtabs/" - + "CustomTabsIntent.html#KEY_ICON"); - } - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java -@@ -31,9 +31,9 @@ public final class ConnectivityChecker { - private static final String TAG = "feedback"; - - private static final String DEFAULT_HTTP_NO_CONTENT_URL = -- "http://clients4.google.com/generate_204"; -+ "http://clients4.9oo91e.qjz9zk/generate_204"; - private static final String DEFAULT_HTTPS_NO_CONTENT_URL = -- "https://clients4.google.com/generate_204"; -+ "https://clients4.9oo91e.qjz9zk/generate_204"; - - private static String sHttpNoContentUrl = DEFAULT_HTTP_NO_CONTENT_URL; - private static String sHttpsNoContentUrl = DEFAULT_HTTPS_NO_CONTENT_URL; -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/help/HelpAndFeedback.java b/chrome/android/java/src/org/chromium/chrome/browser/help/HelpAndFeedback.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/help/HelpAndFeedback.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/help/HelpAndFeedback.java -@@ -32,7 +32,7 @@ import javax.annotation.Nonnull; - */ - public class HelpAndFeedback { - protected static final String FALLBACK_SUPPORT_URL = -- "https://support.google.com/chrome/topic/6069782"; -+ "https://support.9oo91e.qjz9zk/chrome/topic/6069782"; - private static final String TAG = "HelpAndFeedback"; - - private static HelpAndFeedback sInstance; -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java -@@ -188,9 +188,9 @@ public class ConnectivityDetector implements NetworkChangeNotifier.ConnectionTyp - - private static final String USER_AGENT_HEADER_NAME = "User-Agent"; - // Send the HTTPS probe first since the captive portals cannot see the encrypted URL path. -- private static final String DEFAULT_PROBE_URL = "https://www.google.com/generate_204"; -+ private static final String DEFAULT_PROBE_URL = "https://www.9oo91e.qjz9zk/generate_204"; - private static final String FALLBACK_PROBE_URL = -- "http://connectivitycheck.gstatic.com/generate_204"; -+ "http://connectivitycheck.95tat1c.qjz9zk/generate_204"; - private static final String PROBE_METHOD = "GET"; - private static final int SOCKET_TIMEOUT_MS = 5000; - private static final int CONNECTIVITY_CHECK_INITIAL_DELAY_MS = 5000; -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java -@@ -40,7 +40,7 @@ public abstract class RequestGenerator { - public static final int INSTALL_AGE_IMMEDIATELY_AFTER_INSTALLING = -1; - - private static final String SALT = "omahaSalt"; -- private static final String URL_OMAHA_SERVER = "https://update.googleapis.com/service/update2"; -+ private static final String URL_OMAHA_SERVER = "https://update.9oo91eapis.qjz9zk/service/update2"; - - private final Context mApplicationContext; - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/partner_location_descriptor.proto b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/partner_location_descriptor.proto ---- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/partner_location_descriptor.proto -+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/partner_location_descriptor.proto -@@ -11,7 +11,7 @@ - // - // NOTE: This is currently using a Google-defined structure. This explains the - // jumps in values. New fields cannot be added to this proto directly. See --// https://goto.google.com/partner_location_proto -+// https://goto.9oo91e.qjz9zk/partner_location_proto - - syntax = "proto2"; - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java -@@ -43,7 +43,7 @@ public class ConnectionInfoPopup implements OnClickListener, ModalDialogProperti - private static final String TAG = "ConnectionInfoPopup"; - - private static final String HELP_URL = -- "https://support.google.com/chrome?p=android_connection_info"; -+ "https://support.9oo91e.qjz9zk/chrome?p=android_connection_info"; - - private final Context mContext; - private final ModalDialogManager mModalDialogManager; -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java -@@ -40,7 +40,7 @@ public final class SuggestionsConfig { - * It must be kept in sync with //components/ntp_suggestions/features.cc - */ - private static final String DEFAULT_CONTENT_SUGGESTIONS_REFERRER_URL = -- "https://www.googleapis.com/auth/chrome-content-suggestions"; -+ "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions"; - - private SuggestionsConfig() {} - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java -@@ -27,7 +27,7 @@ import org.chromium.ui.mojom.WindowOpenDisposition; - * Extension of {@link NativePageNavigationDelegate} with suggestions-specific methods. - */ - public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateImpl { -- private static final String NEW_TAB_URL_HELP = "https://support.google.com/chrome/?p=new_tab"; -+ private static final String NEW_TAB_URL_HELP = "https://support.9oo91e.qjz9zk/chrome/?p=new_tab"; - - public SuggestionsNavigationDelegate(ChromeActivity activity, Profile profile, - NativePageHost host, TabModelSelector tabModelSelector, Tab tab) { diff --git a/chrome/android/webapk/PRESUBMIT.py b/chrome/android/webapk/PRESUBMIT.py --- a/chrome/android/webapk/PRESUBMIT.py +++ b/chrome/android/webapk/PRESUBMIT.py @@ -3605,22 +2980,60 @@ diff --git a/chrome/android/webapk/PRESUBMIT.py b/chrome/android/webapk/PRESUBMI for more details about the presubmit API built into depot_tools. This presubmit checks for three rules: -diff --git a/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java ---- a/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java -+++ b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java -@@ -41,7 +41,7 @@ public class WebApkValidator { - private static final String KEY_FACTORY = "EC"; // aka "ECDSA" - private static final String MAPSLITE_PACKAGE_NAME = "com.google.android.apps.mapslite"; - private static final String MAPSLITE_URL_PREFIX = -- "https://www.google.com/maps"; // Matches scope. -+ "https://www.9oo91e.qjz9zk/maps"; // Matches scope. - private static final boolean DEBUG = false; - - private static byte[] sExpectedSignature; +diff --git a/chrome/android/webapk/shell_apk/manifest/bound_manifest_config.json b/chrome/android/webapk/shell_apk/manifest/bound_manifest_config.json +--- a/chrome/android/webapk/shell_apk/manifest/bound_manifest_config.json ++++ b/chrome/android/webapk/shell_apk/manifest/bound_manifest_config.json +@@ -1,20 +1,20 @@ + { +- "scope_url": "https://pwa-directory.appspot.com/", ++ "scope_url": "https://pwa-directory.8pp2p8t.qjz9zk/", + "intent_filters": { + "scope_url_scheme": "https", +- "scope_url_host": "pwa-directory.appspot.com", ++ "scope_url_host": "pwa-directory.8pp2p8t.qjz9zk", + "scope_url_path_type": "android:pathPrefix", + "scope_url_path": "/" + }, +- "start_url": "https://pwa-directory.appspot.com/", ++ "start_url": "https://pwa-directory.8pp2p8t.qjz9zk/", + "display_mode": "standalone", + "orientation": "portrait", + "android_orientation": "unspecified", + "theme_color": "2147483648L", + "background_color": "2147483648L", + "background_color_xml": "#F8F9FA", +- "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.appspot.com/icon1.png 0 https://pwa-directory.appspot.com/icon2.png 0", +- "web_manifest_url": "https://pwa-directory.appspot.com/manifest.json", ++ "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.8pp2p8t.qjz9zk/icon1.png 0 https://pwa-directory.8pp2p8t.qjz9zk/icon2.png 0", ++ "web_manifest_url": "https://pwa-directory.8pp2p8t.qjz9zk/manifest.json", + "distributor": "browser", + "version_code": "1", + "version_name": "1.0", +@@ -25,7 +25,7 @@ + "share_template": [{ + "index": "0", + "title": "Share Text and Images", +- "action": "https://pwa-directory.appspot.com/share.html", ++ "action": "https://pwa-directory.8pp2p8t.qjz9zk/share.html", + "method": "POST", + "enctype": "multipart/form-data", + "param_title": "title", +diff --git a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +--- a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json ++++ b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +@@ -5,7 +5,7 @@ + "share_template": [{ + "index": "0", + "title": "Share Text and Images", +- "action": "https://pwa-directory.appspot.com/echoall", ++ "action": "https://pwa-directory.8pp2p8t.qjz9zk/echoall", + "method": "POST", + "enctype": "application/x-www-form-urlencoded", + "param_title": "title", diff --git a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json --- a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json +++ b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json -@@ -1,19 +1,19 @@ +@@ -1,20 +1,20 @@ { - "scope_url": "https://www.google.com/maps", + "scope_url": "https://www.9oo91e.qjz9zk/maps", @@ -3635,6 +3048,7 @@ diff --git a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.js + "start_url": "https://www.9oo91e.qjz9zk/maps/@37.7890183,-122.3915063,15z?force=pwa", "display_mode": "standalone", "orientation": "portrait", + "android_orientation": "unspecified", "theme_color": "2147483648L", "background_color": "2147483648L", "background_color_xml": "#F8F9FA", @@ -3657,7 +3071,7 @@ diff --git a/chrome/app/PRESUBMIT.py b/chrome/app/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -@@ -15,7 +15,7 @@ def _CheckNoProductNameInGeneratedResources(input_api, output_api): +@@ -16,7 +16,7 @@ def _CheckNoProductNameInGeneratedResources(input_api, output_api): These kinds of strings prevent proper localization in some languages. For more information, see the following chromium-dev thread: @@ -3666,13 +3080,13 @@ diff --git a/chrome/app/PRESUBMIT.py b/chrome/app/PRESUBMIT.py """ problems = [] -@@ -29,8 +29,8 @@ def _CheckNoProductNameInGeneratedResources(input_api, output_api): +@@ -30,8 +30,8 @@ def _CheckNoProductNameInGeneratedResources(input_api, output_api): return [output_api.PresubmitPromptWarning( "Don't use PRODUCT_NAME placeholders in string resources. Instead, add " "separate strings to google_chrome_strings.grd and " - "chromium_strings.grd. See http://goo.gl/6614MQ for more information." - "Problems with this check? Contact dubroy@chromium.org.", -+ "chromium_strings.grd. See http://goo.gl.qjz9zk.qjz9zk/6614MQ for more information." ++ "chromium_strings.grd. See http://goo.gl.qjz9zk/6614MQ for more information." + "Problems with this check? Contact dubroy@ch40m1um.qjz9zk.", items=problems)] return [] @@ -3680,7 +3094,16 @@ diff --git a/chrome/app/PRESUBMIT.py b/chrome/app/PRESUBMIT.py diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd -@@ -549,7 +549,7 @@ Chromium is unable to recover your settings. +@@ -323,7 +323,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> + To send a number from here to your Android phone, sign in to Chromium on both devices. + + +- To send a number from $1www.google.com to your Android phone, sign in to Chromium on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chromium on both devices. + + + Make sure you are signed in to Chromium on your $1Pixel XL and then try sending again. +@@ -570,7 +570,7 @@ Chromium is unable to recover your settings. @@ -3689,7 +3112,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd -@@ -656,10 +656,10 @@ Chromium is unable to recover your settings. +@@ -680,10 +680,10 @@ Chromium is unable to recover your settings. You're signed in to Chromium! @@ -3702,7 +3125,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd Someone previously signed in to Chromium on this computer as $1user@example.com. Please create a new Chromium user to keep your information separate. -@@ -692,7 +692,7 @@ Chromium is unable to recover your settings. +@@ -728,7 +728,7 @@ Chromium is unable to recover your settings. @@ -3711,10 +3134,19 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd +@@ -1112,7 +1112,7 @@ Chromium is unable to recover your settings. + + + +- You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://google.com/">Settings</a>. ++ You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://9oo91e.qjz9zk/">Settings</a>. + Permissions you have granted to websites in the Chromium browser and apps from Google Play may apply to all accounts. + + diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd -@@ -363,16 +363,16 @@ are declared in tools/grit/grit_rule.gni. +@@ -368,16 +368,16 @@ are declared in tools/grit/grit_rule.gni. @@ -3733,9 +3165,9 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources - $1google.com wants to: $2use your microphone, $3use your location, and more + $19oo91e.qjz9zk wants to: $2use your microphone, $3use your location, and more - - Customize -@@ -551,7 +551,7 @@ are declared in tools/grit/grit_rule.gni. + + This file +@@ -559,7 +559,7 @@ are declared in tools/grit/grit_rule.gni. Open link as @@ -3744,7 +3176,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open link in $1Gmail App -@@ -694,7 +694,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -706,7 +706,7 @@ are declared in tools/grit/grit_rule.gni. &Search $1Google for image @@ -3753,7 +3185,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest password... -@@ -769,7 +769,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -781,7 +781,7 @@ are declared in tools/grit/grit_rule.gni. Open Link as @@ -3762,7 +3194,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open Link in $1Gmail App -@@ -924,7 +924,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -940,7 +940,7 @@ are declared in tools/grit/grit_rule.gni. &Search $1Google for Image @@ -3771,16 +3203,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest Password... -@@ -1128,7 +1128,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -1156,7 +1156,7 @@ are declared in tools/grit/grit_rule.gni. - Move window to $1User name ($2john@google.com) + Move window to $1User name ($2john@9oo91e.qjz9zk) - - -@@ -1235,7 +1235,7 @@ are declared in tools/grit/grit_rule.gni. + + Move window to desk +@@ -1275,7 +1275,7 @@ are declared in tools/grit/grit_rule.gni. Review @@ -3789,16 +3221,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -2528,7 +2528,7 @@ are declared in tools/grit/grit_rule.gni. - Share - - -- $1Google Maps ($2https://google.com/maps) -+ $1Google Maps ($2https://9oo91e.qjz9zk/maps) - - - -@@ -2582,10 +2582,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -2617,10 +2617,10 @@ are declared in tools/grit/grit_rule.gni. Images were blocked on this page. @@ -3811,7 +3234,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking cookies -@@ -2594,7 +2594,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2629,7 +2629,7 @@ are declared in tools/grit/grit_rule.gni. Continue allowing cookies @@ -3820,7 +3243,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking images -@@ -2606,28 +2606,28 @@ are declared in tools/grit/grit_rule.gni. +@@ -2641,28 +2641,28 @@ are declared in tools/grit/grit_rule.gni. Pop-ups blocked: @@ -3856,12 +3279,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Always block camera and microphone access -@@ -2648,13 +2648,13 @@ are declared in tools/grit/grit_rule.gni. +@@ -2683,19 +2683,19 @@ are declared in tools/grit/grit_rule.gni. Continue blocking camera access - Continue allowing $1mail.google.com to access your camera and microphone + Continue allowing $1mail.9oo91e.qjz9zk to access your camera and microphone + + +- Continue allowing $1mail.google.com to use and move your camera, and use your microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera, and use your microphone - Continue allowing $1mail.google.com to access your microphone @@ -3870,10 +3297,14 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources - Continue allowing $1mail.google.com to access your camera + Continue allowing $1mail.9oo91e.qjz9zk to access your camera + + +- Continue allowing $1mail.google.com to use and move your camera ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera Pop-up blocked -@@ -2669,7 +2669,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2707,7 +2707,7 @@ are declared in tools/grit/grit_rule.gni. JavaScript was blocked on this page. @@ -3882,7 +3313,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking JavaScript -@@ -2687,7 +2687,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2716,7 +2716,7 @@ are declared in tools/grit/grit_rule.gni. Sound was muted on this page @@ -3891,7 +3322,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue muting sound -@@ -2781,7 +2781,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2819,7 +2819,7 @@ are declared in tools/grit/grit_rule.gni. @@ -3900,7 +3331,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources &General -@@ -3311,13 +3311,13 @@ are declared in tools/grit/grit_rule.gni. +@@ -3349,13 +3349,13 @@ are declared in tools/grit/grit_rule.gni. @@ -3917,7 +3348,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share this tab instead -@@ -3522,10 +3522,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -3560,10 +3560,10 @@ are declared in tools/grit/grit_rule.gni. Incognito Tab: $1Google @@ -3930,20 +3361,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Plugin: $1Unknown Plugin -@@ -3534,10 +3534,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -3572,7 +3572,7 @@ are declared in tools/grit/grit_rule.gni. Plugin Broker: $1Unknown Plugin - Prerender: $1http://www.google.com + Prerender: $1http://www.9oo91e.qjz9zk - -- Renderer: $1http://www.google.com -+ Renderer: $1http://www.9oo91e.qjz9zk - - - Dedicated Worker: $1https://googlechrome.github.io/samples/dedicated-worker/basic/dedicated-worker.js -@@ -3567,16 +3567,16 @@ are declared in tools/grit/grit_rule.gni. + + Spare Renderer +@@ -3608,16 +3608,16 @@ are declared in tools/grit/grit_rule.gni. Print: $1Google Maps @@ -3964,20 +3391,23 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources App: $1com.android.systemui -@@ -3764,10 +3764,10 @@ are declared in tools/grit/grit_rule.gni. - - Confirm Changes +@@ -3818,13 +3818,13 @@ are declared in tools/grit/grit_rule.gni. + + These items may be dangerous -- -+ +- ++ The extension "$1Gmail Checker" was automatically disabled. -- -+ + + "$1Gmail Checker" has been disabled because it contains malware + +- ++ The app "$1Gmail" was automatically removed. -@@ -3779,10 +3779,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -3836,10 +3836,10 @@ are declared in tools/grit/grit_rule.gni. @@ -3990,7 +3420,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources It can: -@@ -3921,22 +3921,22 @@ are declared in tools/grit/grit_rule.gni. +@@ -3978,22 +3978,22 @@ are declared in tools/grit/grit_rule.gni. Change your home page to: $1home.page.com/home.html @@ -4019,7 +3449,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change your data on a number of websites -@@ -3945,10 +3945,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -4002,10 +4002,10 @@ are declared in tools/grit/grit_rule.gni. Read your data on a number of websites @@ -4032,7 +3462,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change anything you type -@@ -4294,7 +4294,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4357,7 +4357,7 @@ are declared in tools/grit/grit_rule.gni. When you click the extension @@ -4041,7 +3471,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On all sites -@@ -4344,7 +4344,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4410,7 +4410,7 @@ are declared in tools/grit/grit_rule.gni. When You Click the Extension @@ -4050,7 +3480,29 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On All Sites -@@ -5197,7 +5197,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -4695,7 +4695,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Change back to $1DuckDuckGo? + + +- The "$2Some New Search" extension changed search to use $1google.com ++ The "$2Some New Search" extension changed search to use $19oo91e.qjz9zk + + + +@@ -4938,10 +4938,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + Update password for $1example.com? + + +- $1Username $2***** will be saved to your Google Account, $3user@gmail.com ++ $1Username $2***** will be saved to your Google Account, $3user@9ma1l.qjz9zk + + +- $1Username $2***** will be saved to $3user@gmail.com ++ $1Username $2***** will be saved to $3user@9ma1l.qjz9zk + + + Passwords are saved in your Google Account so you can use them on any device +@@ -5315,7 +5315,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -4059,7 +3511,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and search for “$1flowers” -@@ -5205,7 +5205,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5326,7 +5326,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -4068,16 +3520,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and Search for “$1flowers” -@@ -5215,7 +5215,7 @@ Keep your key file in a safe place. You will need it to create new versions of y - S&how URL - +@@ -5336,7 +5336,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + - Press $1Tab to search $2google.com + Press $1Tab to search $29oo91e.qjz9zk Press $1Tab to send commands to $2Google Talk -@@ -5224,16 +5224,16 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5345,16 +5345,16 @@ Keep your key file in a safe place. You will need it to create new versions of y Tab @@ -4095,9 +3547,22 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources - Search $1google.com + Search $19oo91e.qjz9zk - - Click to view today’s doodle -@@ -5639,7 +5639,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + Clear input +@@ -5670,10 +5670,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + Why am I seeing this? + + +- You’re seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="$1" target="_blank">myactivity.google.com</a>. ++ You’re seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="$1" target="_blank">myactivity.9oo91e.qjz9zk</a>. + + +- Learn about the data Google collects and why at <a href="$1" target="_blank">policies.google.com</a>. ++ Learn about the data Google collects and why at <a href="$1" target="_blank">policies.9oo91e.qjz9zk</a>. + + + Close +@@ -5879,7 +5879,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Stay in Chrome @@ -4106,7 +3571,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -5723,7 +5723,7 @@ the Bookmarks menu."> +@@ -5968,7 +5968,7 @@ Keep your key file in a safe place. You will need it to create new versions of y This site has been blocked from seeing text and images copied to the clipboard @@ -4115,7 +3580,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from seeing the clipboard -@@ -5795,7 +5795,7 @@ the Bookmarks menu."> +@@ -6065,7 +6065,7 @@ Keep your key file in a safe place. You will need it to create new versions of y The page has become unresponsive. You can wait for it to become responsive or close it. @@ -4124,7 +3589,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -5832,7 +5832,7 @@ the Bookmarks menu."> +@@ -6102,7 +6102,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Automatically sign in to websites using stored credentials. When the feature is disabled, you will be asked for confirmation every time before signing in to a website. @@ -4133,7 +3598,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6100,7 +6100,7 @@ the Bookmarks menu."> +@@ -6457,7 +6457,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Clear browsing data @@ -4142,7 +3607,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cleared Chrome data -@@ -6341,7 +6341,7 @@ the Bookmarks menu."> +@@ -6467,7 +6467,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.google.com</a>. ++ We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.9oo91e.qjz9zk</a>. + + + Some passwords were not deleted +@@ -6676,7 +6676,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Uploading ($127%)... @@ -4151,7 +3625,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6564,31 +6564,31 @@ the Bookmarks menu."> +@@ -6978,31 +6978,31 @@ Keep your key file in a safe place. You will need it to create new versions of y $1html5rocks.com is sharing your screen. @@ -4188,7 +3662,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Hide -@@ -6616,7 +6616,7 @@ the Bookmarks menu."> +@@ -7030,7 +7030,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -4197,7 +3671,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6624,10 +6624,10 @@ the Bookmarks menu."> +@@ -7038,10 +7038,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Sign in to Security Device @@ -4210,7 +3684,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Please sign in to $1Software Security Device. -@@ -7595,10 +7595,10 @@ the Bookmarks menu."> +@@ -8066,7 +8066,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Work + + +- $2Bob's profile is linked to $1bob@gmail.com ++ $2Bob's profile is linked to $1bob@9ma1l.qjz9zk + + + +@@ -8075,10 +8075,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Can't sign in @@ -4223,7 +3706,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -7623,13 +7623,13 @@ the Bookmarks menu."> +@@ -8103,13 +8103,13 @@ Keep your key file in a safe place. You will need it to create new versions of y This wasn't me. @@ -4239,16 +3722,27 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cancel -@@ -7673,7 +7673,7 @@ the Bookmarks menu."> - Open $1Adobe Acrobat? - - -- $1https://google.com wants to open this application. -+ $1https://9oo91e.qjz9zk wants to open this application. - - - A website wants to open this application. -@@ -7711,7 +7711,7 @@ the Bookmarks menu."> +@@ -8158,7 +8158,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Open $1Adobe Acrobat? + + +- $1https://google.com wants to open this application. ++ $1https://9oo91e.qjz9zk wants to open this application. + + + A website wants to open this application. +@@ -8169,8 +8169,8 @@ Keep your key file in a safe place. You will need it to create new versions of y + + Cancel + +- +- Always allow $1https://google.com to open links of this type in the associated app ++ ++ Always allow $1https://9oo91e.qjz9zk to open links of this type in the associated app + + + +@@ -8195,7 +8195,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Date Modified @@ -4257,7 +3751,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -7850,7 +7850,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -8334,7 +8334,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4266,7 +3760,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On - sync everything -@@ -8282,7 +8282,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -8767,7 +8767,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Wrong index. @@ -4275,7 +3769,25 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8802,7 +8802,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9184,7 +9184,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from accessing your location. + + +- Always allow $1mail.google.com to access your location ++ Always allow $1mail.9oo91e.qjz9zk to access your location + + + Continue blocking this site from accessing your location +@@ -9224,7 +9224,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from having full control of MIDI devices. + + +- Always allow $1mail.google.com to have full control of MIDI devices ++ Always allow $1mail.9oo91e.qjz9zk to have full control of MIDI devices + + + Continue blocking this site from having full control of MIDI devices +@@ -9313,7 +9313,7 @@ Please help our engineers fix this problem. Tell us what happened right before y View and manage saved passwords in your $1Google Account @@ -4284,7 +3796,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8831,10 +8831,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9345,10 +9345,10 @@ Please help our engineers fix this problem. Tell us what happened right before y Undo @@ -4297,7 +3809,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8945,19 +8945,19 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9459,19 +9459,19 @@ Please help our engineers fix this problem. Tell us what happened right before y An extension triggered full screen. @@ -4320,7 +3832,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources This page has disabled your mouse cursor. -@@ -8981,10 +8981,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9495,10 +9495,10 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4333,7 +3845,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open $1search links -@@ -9021,7 +9021,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9535,7 +9535,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from using motion sensors. @@ -4342,7 +3854,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking sensor access -@@ -9048,7 +9048,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9562,7 +9562,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Continue allowing sensor access @@ -4351,7 +3863,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9228,7 +9228,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9781,7 +9781,7 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Hangouts wants to share the contents of your screen. Choose what you'd like to share. @@ -4360,7 +3872,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share audio -@@ -9359,7 +9359,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9804,7 +9804,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Share this tab + + +- $1https://google.com is asking for permission to capture the contents of this tab. ++ $1https://9oo91e.qjz9zk is asking for permission to capture the contents of this tab. + + + Share audio +@@ -9838,7 +9838,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4369,7 +3890,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9425,8 +9425,8 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9910,8 +9910,8 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Photos - Serial port connected @@ -4380,7 +3901,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Google Search - Crashed -@@ -9596,7 +9596,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10104,7 +10104,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4389,7 +3910,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Nexus 5 detected -@@ -9634,7 +9634,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10145,7 +10145,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4398,7 +3919,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to pair -@@ -9680,7 +9680,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10188,7 +10188,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4407,7 +3928,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect -@@ -9714,7 +9714,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10228,7 +10228,7 @@ Please help our engineers fix this problem. Tell us what happened right before y No nearby devices found. @@ -4416,7 +3937,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Allow -@@ -9746,7 +9746,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10260,7 +10260,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4425,7 +3946,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a serial port -@@ -9765,7 +9765,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10285,7 +10285,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4434,7 +3955,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a HID device -@@ -9912,7 +9912,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10307,7 +10307,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to use local fonts ++ $1www.9oo91e.qjz9zk wants to use local fonts + + + No matching font found. +@@ -10445,7 +10445,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4443,20 +3973,14 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources wants to see the make and model of your Security Key -@@ -10128,10 +10128,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10620,13 +10620,13 @@ Please help our engineers fix this problem. Tell us what happened right before y - Use your security key with $1google.com + Use your security key with $19oo91e.qjz9zk - -- $1google.com wants to verify your identity -+ $19oo91e.qjz9zk wants to verify your identity - - - Verifying your identity helps protect your personal information -@@ -10140,7 +10140,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Continue @@ -4465,23 +3989,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pick an option -@@ -10368,13 +10368,13 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10814,7 +10814,7 @@ Please help our engineers fix this problem. Tell us what happened right before y -- -+ - Account - - - Name - - + Select an account to sign in -@@ -10387,7 +10387,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10827,7 +10827,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Your security key can't be used with this site @@ -4490,7 +4007,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Your security key does not have enough space for any more accounts. -@@ -10396,7 +10396,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10836,7 +10836,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Allow this site to see your security key? @@ -4499,7 +4016,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Allow -@@ -10588,7 +10588,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11023,7 +11023,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4508,10 +4025,37 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources +@@ -11112,7 +11112,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + +- https://support.google.com/chrome/?p=mac_ARM ++ https://support.9oo91e.qjz9zk/chrome/?p=mac_ARM + + +- https://support.google.com/chrome/?p=mac_ARM ++ https://support.9oo91e.qjz9zk/chrome/?p=mac_ARM + + + diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd -@@ -561,7 +561,7 @@ Google Chrome is unable to recover your settings. +@@ -329,7 +329,7 @@ chromium_strings.grd. --> + To send a number from here to your Android phone, sign in to Chrome on both devices. + + +- To send a number from $1www.google.com to your Android phone, sign in to Chrome on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chrome on both devices. + + + Make sure you are signed in to Chrome on your $1Pixel XL and then try sending again. +@@ -577,7 +577,7 @@ Google Chrome is unable to recover your settings. @@ -4520,7 +4064,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str -@@ -668,10 +668,10 @@ Google Chrome is unable to recover your settings. +@@ -687,10 +687,10 @@ Google Chrome is unable to recover your settings. You're signed in to Chrome! @@ -4533,7 +4077,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str Someone previously signed in to Chrome on this computer as $1user@example.com. Please create a new Chrome user to keep your information separate. -@@ -704,7 +704,7 @@ Google Chrome is unable to recover your settings. +@@ -735,7 +735,7 @@ Google Chrome is unable to recover your settings. @@ -4542,10 +4086,19 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str +@@ -1126,7 +1126,7 @@ Google Chrome is unable to recover your settings. + + + +- You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://google.com/">Settings</a>. ++ You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://9oo91e.qjz9zk/">Settings</a>. + Permissions you have granted to websites in the Chrome browser and apps from Google Play may apply to all accounts. + + diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd --- a/chrome/app/resources/locale_settings.grd +++ b/chrome/app/resources/locale_settings.grd -@@ -164,12 +164,12 @@ +@@ -165,12 +165,12 @@ @@ -4560,7 +4113,7 @@ diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/loc -@@ -179,18 +179,18 @@ +@@ -180,18 +180,18 @@ @@ -4600,7 +4153,7 @@ diff --git a/chrome/app/theme/PRESUBMIT.py b/chrome/app/theme/PRESUBMIT.py 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 -@@ -291,14 +291,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { +@@ -316,14 +316,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { const FeatureEntry::Choice kTraceUploadURL[] = { {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, {flag_descriptions::kTraceUploadUrlChoiceOther, switches::kTraceUploadURL, @@ -4619,7 +4172,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::Choice kPassiveListenersChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, -@@ -2572,7 +2572,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3510,7 +3510,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, kOsAll, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -4628,7 +4181,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if !defined(OS_ANDROID) {"load-media-router-component-extension", flag_descriptions::kLoadMediaRouterComponentExtensionName, -@@ -2766,7 +2766,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3756,7 +3756,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSetMarketUrlForTestingName, flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, @@ -4636,19 +4189,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc + "https://play.9oo91e.qjz9zk/store/apps/" "details?id=com.android.chrome")}, #endif // OS_ANDROID - {"tls13-hardening-for-local-anchors", -diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc ---- a/chrome/browser/android/autofill_assistant/client_android.cc -+++ b/chrome/browser/android/autofill_assistant/client_android.cc -@@ -56,7 +56,7 @@ const char* const kAutofillAssistantUrl = "autofill-assistant-url"; - namespace { - - const char* const kDefaultAutofillAssistantServerUrl = -- "https://automate-pa.googleapis.com"; -+ "https://automate-pa.9oo91eapis.qjz9zk"; - - // A direct action that corresponds to pressing the close or cancel button on - // the UI. + {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName, diff --git a/chrome/browser/android/explore_sites/url_util.cc b/chrome/browser/android/explore_sites/url_util.cc --- a/chrome/browser/android/explore_sites/url_util.cc +++ b/chrome/browser/android/explore_sites/url_util.cc @@ -4673,18 +4214,6 @@ diff --git a/chrome/browser/android/explore_sites/url_util_experimental.cc b/chr std::string field_trial_param = base::GetFieldTrialParamValueByFeature( chrome::android::kExploreSites, kBaseURLOption); if (field_trial_param.empty()) -diff --git a/chrome/browser/android/usage_stats/website_event.proto b/chrome/browser/android/usage_stats/website_event.proto ---- a/chrome/browser/android/usage_stats/website_event.proto -+++ b/chrome/browser/android/usage_stats/website_event.proto -@@ -12,7 +12,7 @@ option java_package = "org.chromium.chrome.browser.usage_stats"; - option java_outer_classname = "WebsiteEventProtos"; - - message WebsiteEvent { -- // Fully-qualified domain name of the website. Example: "docs.google.com". -+ // Fully-qualified domain name of the website. Example: "docs.9oo91e.qjz9zk". - optional string fqdn = 1; - - // Timestamp when the event occurred. diff --git a/chrome/browser/android/vr/PRESUBMIT.py b/chrome/browser/android/vr/PRESUBMIT.py --- a/chrome/browser/android/vr/PRESUBMIT.py +++ b/chrome/browser/android/vr/PRESUBMIT.py @@ -4697,6 +4226,18 @@ diff --git a/chrome/browser/android/vr/PRESUBMIT.py b/chrome/browser/android/vr/ for more details about the presubmit API built into depot_tools. """ +diff --git a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +--- a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc ++++ b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +@@ -16,7 +16,7 @@ + + namespace { + +-constexpr char kSupportedPaymentMethod[] = "https://play.google.com/billing"; ++constexpr char kSupportedPaymentMethod[] = "https://play.9oo91e.qjz9zk/billing"; + + } // namespace + diff --git a/chrome/browser/apps/platform_apps/install_chrome_app.cc b/chrome/browser/apps/platform_apps/install_chrome_app.cc --- a/chrome/browser/apps/platform_apps/install_chrome_app.cc +++ b/chrome/browser/apps/platform_apps/install_chrome_app.cc @@ -4712,7 +4253,7 @@ diff --git a/chrome/browser/apps/platform_apps/install_chrome_app.cc b/chrome/br diff --git a/chrome/browser/autofill/autofill_gstatic_reader.cc b/chrome/browser/autofill/autofill_gstatic_reader.cc --- a/chrome/browser/autofill/autofill_gstatic_reader.cc +++ b/chrome/browser/autofill/autofill_gstatic_reader.cc -@@ -26,9 +26,9 @@ static const char kTokenizationBinRangeWhitelistKey[] = +@@ -27,9 +27,9 @@ static const char kTokenizationBinRangeWhitelistKey[] = static const char kTokenizationMerchantWhitelistKey[] = "cpan_eligible_merchant_wl"; static const char kTokenizationBinRangeWhitelistURL[] = @@ -4727,7 +4268,7 @@ diff --git a/chrome/browser/autofill/autofill_gstatic_reader.cc b/chrome/browser diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/browser/autofill/captured_sites_test_utils.cc --- a/chrome/browser/autofill/captured_sites_test_utils.cc +++ b/chrome/browser/autofill/captured_sites_test_utils.cc -@@ -331,7 +331,7 @@ void TestRecipeReplayer::SetUpCommandLine(base::CommandLine* command_line) { +@@ -373,7 +373,7 @@ void TestRecipeReplayer::SetUpCommandLine(base::CommandLine* command_line) { "MAP *:80 127.0.0.1:%d," "MAP *:443 127.0.0.1:%d," // Set to always exclude, allows cache_replayer overwrite @@ -4739,7 +4280,7 @@ diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/brows diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrome/browser/browser_switcher/browser_switcher_service.cc --- a/chrome/browser/browser_switcher/browser_switcher_service.cc +++ b/chrome/browser/browser_switcher/browser_switcher_service.cc -@@ -49,7 +49,7 @@ constexpr net::NetworkTrafficAnnotationTag traffic_annotation = +@@ -51,7 +51,7 @@ constexpr net::NetworkTrafficAnnotationTag traffic_annotation = "an alternative browser. This is often on the organization's " "intranet. For more information on Internet Explorer's Enterprise " "Mode, see: " @@ -4748,6 +4289,37 @@ diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrom "/what-is-enterprise-mode" trigger: "1 minute after browser startup, and then refreshes every 30 " +diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc +--- a/chrome/browser/cart/cart_service.cc ++++ b/chrome/browser/cart/cart_service.cc +@@ -219,23 +219,23 @@ void CartService::AddCartsWithFakeData() { + // Polulate and add some carts with fake data. + double time_now = base::Time::Now().ToDoubleT(); + cart_db::ChromeCartContentProto dummy_proto1; +- GURL dummy_url1 = GURL("https://www.google.com/"); ++ GURL dummy_url1 = GURL("https://www.9oo91e.qjz9zk/"); + dummy_proto1.set_key(std::string(kFakeDataPrefix) + eTLDPlusOne(dummy_url1)); + dummy_proto1.set_merchant("Cart Foo"); + dummy_proto1.set_merchant_cart_url(dummy_url1.spec()); + dummy_proto1.set_timestamp(time_now + 6); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm --- a/chrome/browser/chrome_browser_application_mac.mm +++ b/chrome/browser/chrome_browser_application_mac.mm @@ -4760,22 +4332,10 @@ diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/c // // A quick summary of the state of things (before the changes to shutdown): // -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 -@@ -3785,7 +3785,7 @@ std::string ChromeContentBrowserClient::GetMetricSuffixForURL(const GURL& url) { - // function could be removed. - if (page_load_metrics::IsGoogleSearchResultUrl(url)) - return "search"; -- if (url.host() == "docs.google.com") -+ if (url.host() == "docs.9oo91e.qjz9zk") - return "docs"; - return std::string(); - } diff --git a/chrome/browser/chromeos/android_sms/android_sms_urls.cc b/chrome/browser/chromeos/android_sms/android_sms_urls.cc --- a/chrome/browser/chromeos/android_sms/android_sms_urls.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_urls.cc -@@ -18,28 +18,28 @@ namespace android_sms { +@@ -19,15 +19,15 @@ namespace android_sms { namespace { // Note: Install and app URLs are the same for the android.com domain. @@ -4794,8 +4354,9 @@ diff --git a/chrome/browser/chromeos/android_sms/android_sms_urls.cc b/chrome/br - "https://messages-web.sandbox.google.com/web/authentication"; + "https://messages-web.sandbox.9oo91e.qjz9zk/web/authentication"; - } // namespace - + GURL GetCustomDomain(bool use_install_url) { + std::string custom_domain = +@@ -53,13 +53,13 @@ GURL GetCustomDomain(bool use_install_url) { std::ostream& operator<<(std::ostream& stream, const PwaDomain& pwa_domain) { switch (pwa_domain) { case PwaDomain::kProdAndroid: @@ -4815,7 +4376,7 @@ diff --git a/chrome/browser/chromeos/android_sms/android_sms_urls.cc b/chrome/br diff --git a/chrome/browser/chromeos/app_mode/fake_cws.cc b/chrome/browser/chromeos/app_mode/fake_cws.cc --- a/chrome/browser/chromeos/app_mode/fake_cws.cc +++ b/chrome/browser/chromeos/app_mode/fake_cws.cc -@@ -53,7 +53,7 @@ const char kPrivateStoreAppHasUpdateTemplate[] = +@@ -55,7 +55,7 @@ const char kPrivateStoreAppHasUpdateTemplate[] = const char kUpdateContentTemplate[] = "" @@ -4827,7 +4388,7 @@ diff --git a/chrome/browser/chromeos/app_mode/fake_cws.cc b/chrome/browser/chrom diff --git a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc --- a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc +++ b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc -@@ -48,7 +48,7 @@ constexpr char kContentTypeJSON[] = "application/json"; +@@ -55,7 +55,7 @@ signin::ScopeSet GetAccessTokenScopes() { } // namespace const char kAuthTokenExchangeEndPoint[] = @@ -4851,7 +4412,7 @@ diff --git a/chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher.cc b/c diff --git a/chrome/browser/chromeos/assistant/assistant_util.cc b/chrome/browser/chromeos/assistant/assistant_util.cc --- a/chrome/browser/chromeos/assistant/assistant_util.cc +++ b/chrome/browser/chromeos/assistant/assistant_util.cc -@@ -120,8 +120,8 @@ bool IsEmailDomainSupported(const Profile* profile) { +@@ -119,8 +119,8 @@ bool IsEmailDomainSupported(const Profile* profile) { const std::string email = GetUser(profile)->GetAccountId().GetUserEmail(); DCHECK(!email.empty()); @@ -4865,7 +4426,7 @@ diff --git a/chrome/browser/chromeos/assistant/assistant_util.cc b/chrome/browse diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.cc b/chrome/browser/chromeos/attestation/attestation_ca_client.cc --- a/chrome/browser/chromeos/attestation/attestation_ca_client.cc +++ b/chrome/browser/chromeos/attestation/attestation_ca_client.cc -@@ -25,15 +25,15 @@ const char kAttestationServerTest[] = "test"; +@@ -24,15 +24,15 @@ const char kAttestationServerTest[] = "test"; // Endpoints for the default Google Privacy CA operations. const char kDefaultEnrollRequestURL[] = @@ -4888,7 +4449,7 @@ diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.cc b/chro diff --git a/chrome/browser/chromeos/backdrop_wallpaper_handlers/backdrop_wallpaper_handlers.cc b/chrome/browser/chromeos/backdrop_wallpaper_handlers/backdrop_wallpaper_handlers.cc --- a/chrome/browser/chromeos/backdrop_wallpaper_handlers/backdrop_wallpaper_handlers.cc +++ b/chrome/browser/chromeos/backdrop_wallpaper_handlers/backdrop_wallpaper_handlers.cc -@@ -24,17 +24,17 @@ constexpr char kProtoMimeType[] = "application/x-protobuf"; +@@ -25,17 +25,17 @@ constexpr char kProtoMimeType[] = "application/x-protobuf"; // The url to download the proto of the complete list of wallpaper collections. constexpr char kBackdropCollectionsUrl[] = @@ -4909,6 +4470,30 @@ diff --git a/chrome/browser/chromeos/backdrop_wallpaper_handlers/backdrop_wallpa "image?rt=b"; // The label used to return exclusive content or filter unwanted images. +diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc +--- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc ++++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc +@@ -120,7 +120,7 @@ const net::CertificateList& CertificateHelperForTesting::GetCerts() const { + //================ ProfileHelperForTesting ===================================== + + namespace { +-const char kTestUserEmail[] = "user@gmail.com"; ++const char kTestUserEmail[] = "user@9ma1l.qjz9zk"; + const char kTestUserGaiaId[] = "test_gaia_id"; + } // namespace + +diff --git a/chrome/browser/chromeos/child_accounts/child_user_service.cc b/chrome/browser/chromeos/child_accounts/child_user_service.cc +--- a/chrome/browser/chromeos/child_accounts/child_user_service.cc ++++ b/chrome/browser/chromeos/child_accounts/child_user_service.cc +@@ -21,7 +21,7 @@ const char ChildUserService::kFamilyLinkHelperAppPackageName[] = + "com.google.android.apps.kids.familylinkhelper"; + // static + const char ChildUserService::kFamilyLinkHelperAppPlayStoreURL[] = +- "https://play.google.com/store/apps/" ++ "https://play.9oo91e.qjz9zk/store/apps/" + "details?id=com.google.android.apps.kids.familylinkhelper"; + + ChildUserService::TestApi::TestApi(ChildUserService* service) diff --git a/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_error_page/resources/web_time_limit_error_page.html b/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_error_page/resources/web_time_limit_error_page.html --- a/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_error_page/resources/web_time_limit_error_page.html +++ b/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_error_page/resources/web_time_limit_error_page.html @@ -4921,22 +4506,22 @@ diff --git a/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_e -diff --git a/chrome/browser/chromeos/crostini/crostini_util.h b/chrome/browser/chromeos/crostini/crostini_util.h ---- a/chrome/browser/chromeos/crostini/crostini_util.h -+++ b/chrome/browser/chromeos/crostini/crostini_util.h -@@ -198,7 +198,7 @@ constexpr char kCrostiniDefaultUsername[] = "emperor"; +diff --git a/chrome/browser/chromeos/crostini/crostini_util.cc b/chrome/browser/chromeos/crostini/crostini_util.cc +--- a/chrome/browser/chromeos/crostini/crostini_util.cc ++++ b/chrome/browser/chromeos/crostini/crostini_util.cc +@@ -65,7 +65,7 @@ const char kCrostiniDefaultUsername[] = "emperor"; // Generated using crx_file::id_util::GenerateId("LinuxAppsFolder") - constexpr char kCrostiniFolderId[] = "ddolnhmblagmcagkedkbfejapapdimlk"; - constexpr char kCrostiniDefaultImageServerUrl[] = + const char kCrostiniFolderId[] = "ddolnhmblagmcagkedkbfejapapdimlk"; + const char kCrostiniDefaultImageServerUrl[] = - "https://storage.googleapis.com/cros-containers/%d"; + "https://storage.9oo91eapis.qjz9zk/cros-containers/%d"; - constexpr char kCrostiniStretchImageAlias[] = "debian/stretch"; - constexpr char kCrostiniBusterImageAlias[] = "debian/buster"; - + const char kCrostiniStretchImageAlias[] = "debian/stretch"; + const char kCrostiniBusterImageAlias[] = "debian/buster"; + const char kCrostiniDlcName[] = "termina-dlc"; diff --git a/chrome/browser/chromeos/customization/customization_document.cc b/chrome/browser/chromeos/customization/customization_document.cc --- a/chrome/browser/chromeos/customization/customization_document.cc +++ b/chrome/browser/chromeos/customization/customization_document.cc -@@ -173,7 +173,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { +@@ -172,7 +172,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { // Template URL where to fetch OEM services customization manifest from. const char ServicesCustomizationDocument::kManifestUrl[] = @@ -4960,7 +4545,7 @@ diff --git a/chrome/browser/chromeos/drive/drivefs_test_support.cc b/chrome/brow diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc --- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc -@@ -1045,7 +1045,7 @@ void FileManagerPrivateInternalGetDownloadUrlFunction::OnGotDownloadUrl( +@@ -860,7 +860,7 @@ void FileManagerPrivateInternalGetDownloadUrlFunction::OnGotDownloadUrl( const CoreAccountId& account_id = identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); std::vector scopes; @@ -4972,7 +4557,7 @@ diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.c diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc -@@ -83,7 +83,7 @@ namespace { +@@ -82,7 +82,7 @@ namespace { using api::file_manager_private::ProfileInfo; @@ -4984,7 +4569,7 @@ diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc diff --git a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc --- a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc -@@ -19,21 +19,21 @@ namespace { +@@ -28,25 +28,25 @@ namespace { // Location of the page to buy more storage for Google Drive. const char kGoogleDriveBuyStorageUrl[] = @@ -5001,6 +4586,11 @@ diff --git a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc b/ - "https://support.google.com/chromebook/?p=filemanager_drivehelp"; + "https://support.9oo91e.qjz9zk/chromebook/?p=filemanager_drivehelp"; + // Location of the help page about making Google Drive files available offline. + const char kGoogleDriveOfflineHelpUrl[] = +- "http://support.google.com/chromebook/?p=offline_files"; ++ "http://support.9oo91e.qjz9zk/chromebook/?p=offline_files"; + // Location of Google Drive root. -const char kGoogleDriveRootUrl[] = "https://drive.google.com"; +const char kGoogleDriveRootUrl[] = "https://drive.9oo91e.qjz9zk"; @@ -5032,30 +4622,44 @@ diff --git a/chrome/browser/chromeos/first_run/drive_first_run_controller.cc b/c } // namespace -diff --git a/chrome/browser/chromeos/first_run/goodies_displayer.cc b/chrome/browser/chromeos/first_run/goodies_displayer.cc ---- a/chrome/browser/chromeos/first_run/goodies_displayer.cc -+++ b/chrome/browser/chromeos/first_run/goodies_displayer.cc -@@ -67,7 +67,7 @@ void UpdateGoodiesPrefCantShow(bool can_show_goodies) { - } // namespace - - const char GoodiesDisplayer::kGoodiesURL[] = -- "https://www.google.com/chromebook/offers/"; -+ "https://www.9oo91e.qjz9zk/chromebook/offers/"; - - GoodiesDisplayer::GoodiesDisplayer() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); diff --git a/chrome/browser/chromeos/hats/hats_dialog.cc b/chrome/browser/chromeos/hats/hats_dialog.cc --- a/chrome/browser/chromeos/hats/hats_dialog.cc +++ b/chrome/browser/chromeos/hats/hats_dialog.cc -@@ -45,7 +45,7 @@ constexpr char kScriptSrcReplacementToken[] = "$SCRIPT_SRC"; - constexpr char kDoneButtonLabelReplacementToken[] = "$DONE_BUTTON_LABEL"; - // Base URL to fetch the google consumer survey script. - constexpr char kBaseFormatUrl[] = -- "https://www.google.com/insights/consumersurveys/" -+ "https://www.9oo91e.qjz9zk/insights/consumersurveys/" - "async_survey?site=%s&force_https=1&sc=%s"; +@@ -38,7 +38,7 @@ const int kDefaultWidth = 340; + const int kDefaultHeight = 260; + + constexpr char kCrOSHaTSURL[] = +- "https://storage.googleapis.com/chromeos-hats-web-stable/index.html"; ++ "https://storage.9oo91eapis.qjz9zk/chromeos-hats-web-stable/index.html"; + // Keyword used to join the separate device info elements into a single string // to be used as site context. +diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc +--- a/chrome/browser/chromeos/input_method/assistive_suggester.cc ++++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc +@@ -28,16 +28,16 @@ const char kMaxTextBeforeCursorLength = 50; + + const char* kAllowedDomainsForPersonalInfoSuggester[] = { + "discord.com", "messenger.com", "web.whatsapp.com", +- "web.skype.com", "duo.google.com", "hangouts.google.com", +- "chat.google.com", "messages.google.com", "web.telegram.org", +- "voice.google.com", ++ "web.skype.com", "duo.9oo91e.qjz9zk", "hangouts.9oo91e.qjz9zk", ++ "chat.9oo91e.qjz9zk", "messages.9oo91e.qjz9zk", "web.telegram.org", ++ "voice.9oo91e.qjz9zk", + }; + + const char* kAllowedDomainsForEmojiSuggester[] = { + "discord.com", "messenger.com", "web.whatsapp.com", +- "web.skype.com", "duo.google.com", "hangouts.google.com", +- "chat.google.com", "messages.google.com", "web.telegram.org", +- "voice.google.com", ++ "web.skype.com", "duo.9oo91e.qjz9zk", "hangouts.9oo91e.qjz9zk", ++ "chat.9oo91e.qjz9zk", "messages.9oo91e.qjz9zk", "web.telegram.org", ++ "voice.9oo91e.qjz9zk", + }; + + const char* kTestUrls[] = { diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_names.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_names.cc --- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_names.cc +++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_names.cc @@ -5071,7 +4675,7 @@ diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_names.cc diff --git a/chrome/browser/chromeos/login/marketing_backend_connector.cc b/chrome/browser/chromeos/login/marketing_backend_connector.cc --- a/chrome/browser/chromeos/login/marketing_backend_connector.cc +++ b/chrome/browser/chromeos/login/marketing_backend_connector.cc -@@ -30,10 +30,10 @@ namespace chromeos { +@@ -31,10 +31,10 @@ namespace chromeos { namespace { // The scope that will be used to access the ChromebookEmailService API. const char kChromebookOAuth2Scope[] = @@ -5084,78 +4688,22 @@ diff --git a/chrome/browser/chromeos/login/marketing_backend_connector.cc b/chro const char kChromebookEmailServicePath[] = "v2/chromebookEmailPreferences"; constexpr size_t kResponseMaxBodySize = 4 * 1024 * 1024; // 4MiB -diff --git a/chrome/browser/chromeos/login/screens/recommend_apps/device_configuration.proto b/chrome/browser/chromeos/login/screens/recommend_apps/device_configuration.proto ---- a/chrome/browser/chromeos/login/screens/recommend_apps/device_configuration.proto -+++ b/chrome/browser/chromeos/login/screens/recommend_apps/device_configuration.proto -@@ -1,5 +1,5 @@ - // Copyright 2009 Google Inc. All Rights Reserved. --// Author: ilyaf@google.com (Ilya Firman) -+// Author: ilyaf@9oo91e.qjz9zk (Ilya Firman) - // - // Defines the protocol buffer message used to upload and store device - // configuration details. This message is used in the Checkin and Market -@@ -104,7 +104,7 @@ message DeviceConfigurationProto { - // latest checkin request. - // - // See also -- // http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures() -+ // http://developer.8n6r01d.qjz9zk/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures() - // - // Prefer system_available_feature_info if available and set. - repeated string system_available_feature = 10; -@@ -117,7 +117,7 @@ message DeviceConfigurationProto { - // latest checkin (GmsCore) or /uploadDeviceConfig (Play) request. - // - // See also -- // http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures() -+ // http://developer.8n6r01d.qjz9zk/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures() - // - // If set this field should be preferred over system_available_feature. - repeated FeatureInfo system_available_feature_info = 26; -@@ -151,25 +151,25 @@ message DeviceConfigurationProto { - // This is the smallest value of both screenWidthDp and screenHeightDp - // in both portrait and landscape. - // See -- // http://developer.android.com/reference/android/content/res/Configuration.html#smallestScreenWidthDp -+ // http://developer.8n6r01d.qjz9zk/reference/android/content/res/Configuration.html#smallestScreenWidthDp - // This field is only set for devices with API Level >=13 not using the - // default value -- // http://developer.android.com/reference/android/content/res/Configuration.html#SMALLEST_SCREEN_WIDTH_DP_UNDEFINED -+ // http://developer.8n6r01d.qjz9zk/reference/android/content/res/Configuration.html#SMALLEST_SCREEN_WIDTH_DP_UNDEFINED - optional int32 smallest_screen_width_dp = 18; - - // See -- // http://developer.android.com/reference/android/app/ActivityManager.html#isLowRamDevice() -+ // http://developer.8n6r01d.qjz9zk/reference/android/app/ActivityManager.html#isLowRamDevice() - // This field is only set for device with API >=19. - optional bool low_ram_device = 19; - - // The total accessible memory in bytes. - // API >=16 devices can look at -- // http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html#totalMem -+ // http://developer.8n6r01d.qjz9zk/reference/android/app/ActivityManager.MemoryInfo.html#totalMem - optional int64 total_memory_bytes = 20; - - // Maximum number of CPU cores. - // API >=18 devices can reliably look at -- // http://developer.android.com/reference/java/lang/Runtime.html#availableProcessors() -+ // http://developer.8n6r01d.qjz9zk/reference/java/lang/Runtime.html#availableProcessors() - // Note that Runtime#availableProcessors is available since API 1 but the - // javadoc (as of API 23) gives a clear recommendation: - // "Returns the number of processor cores available to the VM, at least 1. -@@ -204,7 +204,7 @@ message DeviceConfigurationProto { - // specific feature must support apps requesting version 1 of that feature. - // - // See also --// http://developer.android.com/reference/android/content/pm/FeatureInfo.html -+// http://developer.8n6r01d.qjz9zk/reference/android/content/pm/FeatureInfo.html - // - // Next id: 3 - message FeatureInfo { +diff --git a/chrome/browser/chromeos/login/saml/password_sync_token_fetcher.cc b/chrome/browser/chromeos/login/saml/password_sync_token_fetcher.cc +--- a/chrome/browser/chromeos/login/saml/password_sync_token_fetcher.cc ++++ b/chrome/browser/chromeos/login/saml/password_sync_token_fetcher.cc +@@ -71,7 +71,7 @@ const char kAcceptValue[] = + "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + + const char kPasswordSyncTokenBaseEndPoint[] = +- "https://chromedevicetoken.googleapis.com/v1/tokens"; ++ "https://chromedevicetoken.9oo91eapis.qjz9zk/v1/tokens"; + + const char kPasswordSyncTokenCreateEndPoint[] = ""; + diff --git a/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc b/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc --- a/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +++ b/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc -@@ -37,7 +37,7 @@ namespace chromeos { +@@ -38,7 +38,7 @@ namespace chromeos { namespace { constexpr const char kGetAppListUrl[] = @@ -5167,7 +4715,7 @@ diff --git a/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc -@@ -1187,7 +1187,7 @@ void ShowSupervisedUserDeprecationNotification(Profile* profile, +@@ -1215,7 +1215,7 @@ void ShowSupervisedUserDeprecationNotification(Profile* profile, NavigateParams params( profile, @@ -5176,18 +4724,144 @@ diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chr ui::PAGE_TRANSITION_AUTO_TOPLEVEL); params.disposition = WindowOpenDisposition::NEW_WINDOW; Navigate(¶ms); +diff --git a/chrome/browser/chromeos/net/network_diagnostics/dns_latency_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/dns_latency_routine.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/dns_latency_routine.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/dns_latency_routine.cc +@@ -39,7 +39,7 @@ constexpr base::TimeDelta kBadLatencyMs = + base::TimeDelta::FromMilliseconds(400); + constexpr base::TimeDelta kVeryBadLatencyMs = + base::TimeDelta::FromMilliseconds(500); +-constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.gstatic.com"; ++constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + + const std::string GetRandomString(int length) { + std::string prefix; +diff --git a/chrome/browser/chromeos/net/network_diagnostics/dns_resolution_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/dns_resolution_routine.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/dns_resolution_routine.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/dns_resolution_routine.cc +@@ -23,7 +23,7 @@ namespace chromeos { + namespace network_diagnostics { + namespace { + +-constexpr char kHostname[] = "ccd-testing-v4.gstatic.com"; ++constexpr char kHostname[] = "ccd-testing-v4.95tat1c.qjz9zk"; + constexpr int kHttpPort = 80; + // For an explanation of error codes, see "net/base/net_error_list.h". + constexpr int kRetryResponseCodes[] = {net::ERR_TIMED_OUT, +diff --git a/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.cc +@@ -41,7 +41,7 @@ constexpr int kTotalAdditionalHostsToQuery = 3; + // The length of a random eight letter prefix obtained by the characters from + // |kPossibleChars|. + constexpr int kHostPrefixLength = 8; +-constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.gstatic.com"; ++constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + // The threshold describing number of socket connection failures permitted. E.g. + // If connections to 10 sockets are attempted, any more than two failures would + // result in a problem. +@@ -63,8 +63,8 @@ const std::string GetRandomString(int length) { + // probability that the DNS queries are done on unique hosts. + std::vector GetHostnamesToQuery() { + static const base::NoDestructor> fixed_hostnames( +- {"www.google.com", "mail.google.com", "drive.google.com", +- "accounts.google.com", "plus.google.com", "groups.google.com"}); ++ {"www.9oo91e.qjz9zk", "mail.9oo91e.qjz9zk", "drive.9oo91e.qjz9zk", ++ "accounts.9oo91e.qjz9zk", "plus.9oo91e.qjz9zk", "groups.9oo91e.qjz9zk"}); + std::vector hostnames_to_query(fixed_hostnames->begin(), + fixed_hostnames->end()); + for (int i = 0; i < kTotalAdditionalHostsToQuery; i++) { +diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc +@@ -41,14 +41,14 @@ std::vector GetRandomPrefixes(size_t num_prefixes, int length) { + } // namespace + + const char* GetGstaticHostSuffix() { +- static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.gstatic.com"; ++ static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + return gstatic_host_suffix; + } + + const std::vector& GetFixedHosts() { + static base::NoDestructor> fixed_hostnames( +- {"www.google.com", "mail.google.com", "drive.google.com", +- "accounts.google.com", "plus.google.com", "groups.google.com"}); ++ {"www.9oo91e.qjz9zk", "mail.9oo91e.qjz9zk", "drive.9oo91e.qjz9zk", ++ "accounts.9oo91e.qjz9zk", "plus.9oo91e.qjz9zk", "groups.9oo91e.qjz9zk"}); + return *fixed_hostnames; + } + +@@ -200,10 +200,10 @@ std::vector GetTcpPortsForCustomStunServer() { + + std::vector GetDefaultMediaUrls() { + const char* const kHostnames[] = { +- "https://apis.google.com", "https://talkgadget.google.com", +- "https://clients6.google.com", "https://hangouts.google.com", +- "https://client-channel.google.com", "https://googleapis.com", +- "https://accounts.google.com", "https://clients4.google.com"}; ++ "https://apis.9oo91e.qjz9zk", "https://talkgadget.9oo91e.qjz9zk", ++ "https://clients6.9oo91e.qjz9zk", "https://hangouts.9oo91e.qjz9zk", ++ "https://client-channel.9oo91e.qjz9zk", "https://9oo91eapis.qjz9zk", ++ "https://accounts.9oo91e.qjz9zk", "https://clients4.9oo91e.qjz9zk"}; + std::vector hostnames; + for (auto* const& hostname : kHostnames) { + hostnames.push_back(GURL(hostname)); +diff --git a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc +@@ -22,11 +22,11 @@ namespace network_diagnostics { + + namespace { + +-const char kDefaultStunServer[] = "stun.l.google.com"; ++const char kDefaultStunServer[] = "stun.l.9oo91e.qjz9zk"; + + } // namespace + +-const char kSupportDetails[] = "https://support.google.com/a/answer/1279090"; ++const char kSupportDetails[] = "https://support.9oo91e.qjz9zk/a/answer/1279090"; + const base::TimeDelta kTimeoutAfterHostResolution = + base::TimeDelta::FromSeconds(10); + +diff --git a/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc b/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc +--- a/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc ++++ b/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc +@@ -35,8 +35,8 @@ namespace plugin_vm { + namespace { + + constexpr char kValidationOAuth2Scope[] = +- "https://www.googleapis.com/auth/applicense.bytebot"; +-constexpr char kValidationEndpoint[] = "https://bytebot.googleapis.com/"; ++ "https://www.9oo91eapis.qjz9zk/auth/applicense.bytebot"; ++constexpr char kValidationEndpoint[] = "https://bytebot.9oo91eapis.qjz9zk/"; + constexpr char kValidationServicePath[] = + "v1/applications/chromePluginVm:getLicenseStatus"; + constexpr char kValidationServiceQuery[] = "?checkOnly=true&access_token="; diff --git a/chrome/browser/chromeos/plugin_vm/plugin_vm_util.cc b/chrome/browser/chromeos/plugin_vm/plugin_vm_util.cc --- a/chrome/browser/chromeos/plugin_vm/plugin_vm_util.cc +++ b/chrome/browser/chromeos/plugin_vm/plugin_vm_util.cc -@@ -160,7 +160,7 @@ void RemoveDriveDownloadDirectoryIfExists() { - - // TODO(muhamedp): Update if a different url format is ultimately chosen. - bool IsDriveUrl(const GURL& url) { -- const std::string url_base = "https://drive.google.com/open"; -+ const std::string url_base = "https://drive.9oo91e.qjz9zk/open"; +@@ -127,7 +127,7 @@ void RemoveDriveDownloadDirectoryIfExists() { + base::Optional GetIdFromDriveUrl(const GURL& url) { const std::string& spec = url.spec(); - return spec.find(url_base) == 0 && spec.find("id=") < (spec.length() - 3); - } + +- const std::string kOpenUrlBase = "https://drive.google.com/open?"; ++ const std::string kOpenUrlBase = "https://drive.9oo91e.qjz9zk/open?"; + if (base::StartsWith(spec, kOpenUrlBase, + base::CompareCase::INSENSITIVE_ASCII)) { + // e.g. https://drive.google.com/open?id=[ID] +@@ -139,9 +139,9 @@ base::Optional GetIdFromDriveUrl(const GURL& url) { + + // These will match some invalid URLs, which is fine. + const std::string kViewUrlPatternWithDomain = +- "https://drive.google.com/a/*/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/a/*/file/d/*/view*"; + const std::string kViewUrlPatternWithoutDomain = +- "https://drive.google.com/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/file/d/*/view*"; + if (base::MatchPattern(spec, kViewUrlPatternWithDomain) || + base::MatchPattern(spec, kViewUrlPatternWithoutDomain)) { + // e.g. https://drive.google.com/a/example.org/file/d/[ID]/view?usp=sharing diff --git a/chrome/browser/chromeos/policy/heartbeat_scheduler.cc b/chrome/browser/chromeos/policy/heartbeat_scheduler.cc --- a/chrome/browser/chromeos/policy/heartbeat_scheduler.cc +++ b/chrome/browser/chromeos/policy/heartbeat_scheduler.cc @@ -5215,12 +4889,12 @@ diff --git a/chrome/browser/chromeos/policy/powerwash_requirements_checker.cc b/ - "https://support.google.com/chromebook?p=factory_reset"; + "https://support.9oo91e.qjz9zk/chromebook?p=factory_reset"; - base::string16 GetEnterpriseDisplayDomain() { + base::string16 GetEnterpriseManager() { policy::BrowserPolicyConnectorChromeOS* connector = diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc --- a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc +++ b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc -@@ -60,8 +60,8 @@ constexpr char kCRDConnectSuppressNotifications[] = "suppressNotifications"; +@@ -57,8 +57,8 @@ constexpr char kCRDConnectSuppressNotifications[] = "suppressNotifications"; constexpr char kCRDTerminateUponInput[] = "terminateUponInput"; // Connect message parameter values: @@ -5231,7 +4905,7 @@ diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc // CRD host states we care about: constexpr char kCRDStateKey[] = "state"; -@@ -81,11 +81,11 @@ constexpr char kCRDConnectClientKey[] = "client"; +@@ -78,11 +78,11 @@ constexpr char kCRDConnectClientKey[] = "client"; // OAuth2 Token scopes constexpr char kCloudDevicesOAuth2Scope[] = @@ -5261,7 +4935,7 @@ diff --git a/chrome/browser/chromeos/u2f_notification.cc b/chrome/browser/chrome diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrome/browser/custom_handlers/protocol_handler_registry.cc --- a/chrome/browser/custom_handlers/protocol_handler_registry.cc +++ b/chrome/browser/custom_handlers/protocol_handler_registry.cc -@@ -221,11 +221,11 @@ void ProtocolHandlerRegistry::InstallDefaultsForChromeOS() { +@@ -222,11 +222,11 @@ void ProtocolHandlerRegistry::InstallDefaultsForChromeOS() { AddPredefinedHandler( ProtocolHandler::CreateProtocolHandler( "mailto", @@ -5278,7 +4952,7 @@ diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrom diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc --- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc +++ b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc -@@ -57,7 +57,7 @@ +@@ -61,7 +61,7 @@ namespace { // Assume that any proxy host ending with this suffix is a Data Reduction Proxy. @@ -5287,7 +4961,7 @@ diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_set // Searches |proxy_list| for any Data Reduction Proxies, even if they don't // match a currently configured Data Reduction Proxy. -@@ -176,7 +176,7 @@ DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefsHelper( +@@ -178,7 +178,7 @@ DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefsHelper( // could be implied, so searching for ".googlezip.net:" in the PAC script // indicates whether there's a proxy in that PAC script with a host of the // form "*.googlezip.net". @@ -5321,9 +4995,30 @@ diff --git a/chrome/browser/download/mixed_content_download_blocking.cc b/chrome "protecting-users-from-insecure.html" " for more details.", data.initiator_->GetURL().spec().c_str(), -diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc b/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc ---- a/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc -+++ b/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc +diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc +--- a/chrome/browser/enterprise/connectors/connectors_service.cc ++++ b/chrome/browser/enterprise/connectors/connectors_service.cc +@@ -43,7 +43,7 @@ const char kServiceProviderConfig[] = R"({ + "version": { + "1": { + "analysis": { +- "url": "https://safebrowsing.google.com/safebrowsing/uploads/scan", ++ "url": "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/uploads/scan", + "supported_tags": [ + { + "name": "malware", +@@ -96,7 +96,7 @@ const char kServiceProviderConfig[] = R"({ + ] + }, + "reporting": { +- "url": "https://chromereporting-pa.googleapis.com/v1/events" ++ "url": "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/events" + } + } + } +diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc +--- a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc ++++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc @@ -29,7 +29,7 @@ constexpr char kInstalledNotificationId[] = "extension_installed_notificaiton"; constexpr char kExtensionRequestNotifierId[] = "chrome_browser_cloud_management_extension_request"; @@ -5342,42 +5037,27 @@ diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_ gfx::Image icon(gfx::CreateVectorIcon( vector_icons::kBusinessIcon, message_center::kSmallImageSize, ui::NativeTheme::GetInstanceForWeb()->GetSystemColor( -diff --git a/chrome/browser/extensions/api/README.txt b/chrome/browser/extensions/api/README.txt ---- a/chrome/browser/extensions/api/README.txt -+++ b/chrome/browser/extensions/api/README.txt -@@ -1,12 +1,12 @@ - This file describes steps and files needed when adding a new API to Chrome. - Before you start coding your new API, though, make sure you follow the process - described at: -- http://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development -+ http://www.ch40m1um.qjz9zk/developers/design-documents/extensions/proposed-changes/apis-under-development - - Two approaches are available for writing your API specification. The original - approach relies on JSON specification files. The more recent and simpler system - uses Web IDL files, but does not yet support all the features of the JSON files. --Discuss with a member of the extensions team (aa@chromium.org) before you decide -+Discuss with a member of the extensions team (aa@ch40m1um.qjz9zk) before you decide - which approach is better suited to your API. - - The following steps suppose you're writing an experimental API called "Foo". -diff --git a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc ---- a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc -+++ b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc -@@ -350,7 +350,7 @@ std::string AutofillAssistantPrivateAPI::GetServerUrl() const { - // TODO(crbug.com/1015753): Consider the autofill-assistant-url for endpoint - // overrides and share the kDefaultAutofillAssistantServerUrl to expose it - // here. -- return "https://automate-pa.googleapis.com"; -+ return "https://automate-pa.9oo91eapis.qjz9zk"; - } +diff --git a/chrome/browser/error_reporting/chrome_js_error_report_processor.cc b/chrome/browser/error_reporting/chrome_js_error_report_processor.cc +--- a/chrome/browser/error_reporting/chrome_js_error_report_processor.cc ++++ b/chrome/browser/error_reporting/chrome_js_error_report_processor.cc +@@ -40,9 +40,9 @@ + + namespace { - std::string AutofillAssistantPrivateAPI::GetLocale() const { +-constexpr char kCrashEndpointUrl[] = "https://clients2.google.com/cr/report"; ++constexpr char kCrashEndpointUrl[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + constexpr char kCrashEndpointStagingUrl[] = +- "https://clients2.google.com/cr/staging_report"; ++ "https://clients2.9oo91e.qjz9zk/cr/staging_report"; + constexpr char kNoBrowserNoWindow[] = "NO_BROWSER"; + constexpr char kRegularTabbedWindow[] = "REGULAR_TABBED"; + constexpr char kWebAppWindow[] = "WEB_APP"; diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc --- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc +++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc -@@ -58,10 +58,10 @@ enum class U2FAttestationPromptResult { - kMaxValue = kBlocked, - }; +@@ -40,10 +40,10 @@ namespace api { + + namespace { -const char kGoogleDotCom[] = "google.com"; +const char kGoogleDotCom[] = "9oo91e.qjz9zk"; @@ -5389,22 +5069,10 @@ diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_priva // ContainsAppIdByHash returns true iff the SHA-256 hash of one of the // elements of |list| equals |hash|. -diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc ---- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc -+++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc -@@ -135,7 +135,7 @@ void ImportPrivateKeyPKCS8ToSlot(const unsigned char* pkcs8_der, - const char kTestExtensionID[] = "aecpbnckhoppanpmefllkdkohionpmig"; - const char kTestExtensionUpdateManifest[] = - R"( -- -+ - - - diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc --- a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +++ b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc -@@ -16,7 +16,7 @@ namespace extensions { +@@ -17,7 +17,7 @@ namespace extensions { namespace { static const char kChromiumDomainRedirectUrlPattern[] = @@ -5416,14 +5084,14 @@ diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flo diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc -@@ -76,7 +76,7 @@ namespace { +@@ -79,7 +79,7 @@ namespace { - #if defined(OS_CHROMEOS) + #if BUILDFLAG(IS_CHROMEOS_ASH) const char kPlayIntentPrefix[] = - "https://play.google.com/store/apps/details?id="; + "https://play.9oo91e.qjz9zk/store/apps/details?id="; const char kChromeWebStoreReferrer[] = "&referrer=chrome_web_store"; - #endif // OS_CHROMEOS + #endif // BUILDFLAG(IS_CHROMEOS_ASH) diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc --- a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc @@ -5451,7 +5119,7 @@ diff --git a/chrome/browser/extensions/chrome_extension_browser_constants.cc b/c diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc --- a/chrome/browser/extensions/external_pref_loader.cc +++ b/chrome/browser/extensions/external_pref_loader.cc -@@ -282,7 +282,7 @@ void ExternalPrefLoader::LoadOnFileThread() { +@@ -331,7 +331,7 @@ void ExternalPrefLoader::LoadOnFileThread() { if (!prefs->empty()) LOG(WARNING) << "You are using an old-style extension deployment method " "(external_extensions.json), which will soon be " @@ -5460,10 +5128,22 @@ diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/ "extensions/external_extensions.html)"; ReadStandaloneExtensionPrefFiles(prefs.get()); +diff --git a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc +--- a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc ++++ b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc +@@ -28,7 +28,7 @@ const char ForceInstalledTestBase::kExtensionId2[] = + const char ForceInstalledTestBase::kExtensionName1[] = "name1"; + const char ForceInstalledTestBase::kExtensionName2[] = "name2"; + const char ForceInstalledTestBase::kExtensionUpdateUrl[] = +- "https://clients2.google.com/service/update2/crx"; // URL of Chrome Web ++ "https://clients2.9oo91e.qjz9zk/service/update2/crx"; // URL of Chrome Web + // Store backend. + const char ForceInstalledTestBase::kOffStoreUpdateUrl[] = + "https://www.example.com/update2/crx"; diff --git a/chrome/browser/extensions/install_signer.cc b/chrome/browser/extensions/install_signer.cc --- a/chrome/browser/extensions/install_signer.cc +++ b/chrome/browser/extensions/install_signer.cc -@@ -66,7 +66,7 @@ const int kSignatureFormatVersion = 2; +@@ -65,7 +65,7 @@ const int kSignatureFormatVersion = 2; const size_t kSaltBytes = 32; const char kBackendUrl[] = @@ -5487,7 +5167,7 @@ diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_facto diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/chrome/browser/extensions/updater/chrome_update_client_config.cc --- a/chrome/browser/extensions/updater/chrome_update_client_config.cc +++ b/chrome/browser/extensions/updater/chrome_update_client_config.cc -@@ -181,7 +181,7 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { +@@ -216,7 +216,7 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { // from chrome.google.com, so send cookies if and only if that is // the download domain. base::BindRepeating([](const GURL& url) { @@ -5496,1914 +5176,479 @@ diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/ })); } return network_fetcher_factory_; +diff --git a/chrome/browser/federated_learning/floc_remote_permission_service.cc b/chrome/browser/federated_learning/floc_remote_permission_service.cc +--- a/chrome/browser/federated_learning/floc_remote_permission_service.cc ++++ b/chrome/browser/federated_learning/floc_remote_permission_service.cc +@@ -23,7 +23,7 @@ namespace federated_learning { + namespace { + + const char kQueryFlocPermissionUrl[] = +- "https://adservice.google.com/settings/do_ad_settings_allow_floc_poc"; ++ "https://adservice.9oo91e.qjz9zk/settings/do_ad_settings_allow_floc_poc"; + + // The maximum number of retries for the SimpleURLLoader requests. + const size_t kMaxRetries = 1; diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browser/feedback/feedback_uploader_chrome.cc --- a/chrome/browser/feedback/feedback_uploader_chrome.cc +++ b/chrome/browser/feedback/feedback_uploader_chrome.cc -@@ -82,7 +82,7 @@ void FeedbackUploaderChrome::StartDispatchingReport() { - if (identity_manager && - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { - signin::ScopeSet scopes; -- scopes.insert("https://www.googleapis.com/auth/supportcontent"); -+ scopes.insert("https://www.9oo91eapis.qjz9zk/auth/supportcontent"); - token_fetcher_ = std::make_unique( - "feedback_uploader_chrome", identity_manager, scopes, - base::BindOnce(&FeedbackUploaderChrome::AccessTokenAvailable, -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 -@@ -3,7 +3,7 @@ - // of the review process and to clean up flags that have become obsolete or - // unused. For more details, see: - // --// https://chromium.googlesource.com/chromium/src/+/master/docs/flag_ownership.md -+// https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/flag_ownership.md - // - // This file is a list of json objects; each object contains these keys: - // +@@ -35,7 +35,7 @@ constexpr char kAuthenticationErrorLogMessage[] = + + constexpr char kConsumer[] = "feedback_uploader_chrome"; + +-constexpr char kScope[] = "https://www.googleapis.com/auth/supportcontent"; ++constexpr char kScope[] = "https://www.9oo91eapis.qjz9zk/auth/supportcontent"; + + void QueueSingleReport(base::WeakPtr uploader, + scoped_refptr report) { +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -488,7 +488,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = + "Detect target embedding domains as lookalikes."; + const char kDetectTargetEmbeddingLookalikesDescription[] = + "Shows a lookalike interstitial when navigating to target embedding domains" +- "(e.g. google.com.example.com)."; ++ "(e.g. 9oo91e.qjz9zk.example.com)."; + + const char kDeviceDiscoveryNotificationsName[] = + "Device Discovery Notifications"; +@@ -2039,7 +2039,7 @@ const char kIntensiveWakeUpThrottlingName[] = + const char kIntensiveWakeUpThrottlingDescription[] = + "When enabled, wake ups from DOM Timers are limited to 1 per minute in a " + "page that has been hidden for 5 minutes. For additional details, see " +- "https://www.chromestatus.com/feature/4718288976216064."; ++ "https://www.ch40mestatus.qjz9zk/feature/4718288976216064."; + + const char kPrinterStatusName[] = "Show printer Status"; + const char kPrinterStatusDescription[] = +diff --git a/chrome/browser/importer/edge_importer_browsertest_win.cc b/chrome/browser/importer/edge_importer_browsertest_win.cc +--- a/chrome/browser/importer/edge_importer_browsertest_win.cc ++++ b/chrome/browser/importer/edge_importer_browsertest_win.cc +@@ -169,7 +169,7 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporter) { + L"SubLink", + "http://www.links-sublink.com/"}, + {true, 1, {"Links"}, L"TheLink", "http://www.links-thelink.com/"}, +- {false, 0, {}, L"Google Home Page", "http://www.google.com/"}, ++ {false, 0, {}, L"Google Home Page", "http://www.9oo91e.qjz9zk/"}, + {false, 0, {}, L"TheLink", "http://www.links-thelink.com/"}, + {false, 1, {"SubFolder"}, L"Title", "http://www.link.com/"}, + {false, 0, {}, L"WithPortAndQuery", "http://host:8080/cgi?q=query"}, +@@ -185,7 +185,7 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporter) { + L"http://www.links-sublink.com"}, + {L"http://www.links-thelink.com/favicon.ico", + L"http://www.links-thelink.com"}, +- {L"http://www.google.com/favicon.ico", L"http://www.google.com"}, ++ {L"http://www.9oo91e.qjz9zk/favicon.ico", L"http://www.9oo91e.qjz9zk"}, + {L"http://www.links-thelink.com/favicon.ico", + L"http://www.links-thelink.com"}, + {L"http://www.link.com/favicon.ico", L"http://www.link.com"}, +@@ -238,11 +238,11 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporterLegacyFallback) { + return; + + const BookmarkInfo kEdgeBookmarks[] = { +- {false, 0, {}, L"Google", "http://www.google.com/"}}; ++ {false, 0, {}, L"Google", "http://www.9oo91e.qjz9zk/"}}; + std::vector bookmark_entries( + kEdgeBookmarks, kEdgeBookmarks + base::size(kEdgeBookmarks)); + const FaviconGroup kEdgeFaviconGroup[] = { +- {L"http://www.google.com/favicon.ico", L"http://www.google.com/"}}; ++ {L"http://www.9oo91e.qjz9zk/favicon.ico", L"http://www.9oo91e.qjz9zk/"}}; + std::vector favicon_groups( + kEdgeFaviconGroup, kEdgeFaviconGroup + base::size(kEdgeFaviconGroup)); + +diff --git a/chrome/browser/importer/ie_importer_browsertest_win.cc b/chrome/browser/importer/ie_importer_browsertest_win.cc +--- a/chrome/browser/importer/ie_importer_browsertest_win.cc ++++ b/chrome/browser/importer/ie_importer_browsertest_win.cc +@@ -59,7 +59,7 @@ const BookmarkInfo kIEBookmarks[] = { + "http://www.links-thelink.com/"}, + {false, 0, {}, + L"Google Home Page", +- "http://www.google.com/"}, ++ "http://www.9oo91e.qjz9zk/"}, + {false, 0, {}, + L"TheLink", + "http://www.links-thelink.com/"}, +@@ -78,10 +78,10 @@ const BookmarkInfo kIEBookmarks[] = { + }; + + const BookmarkInfo kIESortedBookmarks[] = { +- {false, 0, {}, L"a", "http://www.google.com/0"}, +- {false, 1, {"b"}, L"a", "http://www.google.com/1"}, +- {false, 1, {"b"}, L"b", "http://www.google.com/2"}, +- {false, 0, {}, L"c", "http://www.google.com/3"}, ++ {false, 0, {}, L"a", "http://www.9oo91e.qjz9zk/0"}, ++ {false, 1, {"b"}, L"a", "http://www.9oo91e.qjz9zk/1"}, ++ {false, 1, {"b"}, L"b", "http://www.9oo91e.qjz9zk/2"}, ++ {false, 0, {}, L"c", "http://www.9oo91e.qjz9zk/3"}, + }; + + const base::char16 kIEIdentifyUrl[] = +@@ -111,8 +111,8 @@ struct FaviconGroup { + }; + + const FaviconGroup kIEFaviconGroup[2] = { +- {L"http://www.google.com/favicon.ico", +- {L"http://www.google.com/", ++ {L"http://www.9oo91e.qjz9zk/favicon.ico", ++ {L"http://www.9oo91e.qjz9zk/", + L"http://www.subfolder.com/"}}, + {L"http://example.com/favicon.ico", + {L"http://host:8080/cgi?q=query", +@@ -406,13 +406,13 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, IEImporter) { + NULL); + CreateDirectory(path.AppendASCII("\x0061").value().c_str(), NULL); + ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("Google Home Page.url"), +- L"http://www.google.com/", +- L"http://www.google.com/favicon.ico")); ++ L"http://www.9oo91e.qjz9zk/", ++ L"http://www.9oo91e.qjz9zk/favicon.ico")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("SubFolder\\Title.url"), + L"http://www.link.com/")); + ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("SubFolder.url"), + L"http://www.subfolder.com/", +- L"http://www.google.com/favicon.ico")); ++ L"http://www.9oo91e.qjz9zk/favicon.ico")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("TheLink.url"), + L"http://www.links-thelink.com/")); + ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("WithPortAndQuery.url"), +@@ -428,7 +428,7 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, IEImporter) { + links_path.AppendASCII("SubFolderOfLinks").AppendASCII("SubLink.url"), + L"http://www.links-sublink.com/")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("IEDefaultLink.url"), +- L"http://go.microsoft.com/fwlink/?linkid=140813")); ++ L"http://go.m1cr050ft.qjz9zk/fwlink/?linkid=140813")); + base::WriteFile(path.AppendASCII("InvalidUrlFile.url"), "x", 1); + base::WriteFile(path.AppendASCII("PlainTextFile.txt"), "x", 1); + +@@ -487,13 +487,13 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, + CreateDirectory(path.value().c_str(), NULL); + CreateDirectory(path.AppendASCII("b").value().c_str(), NULL); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("a.url"), +- L"http://www.google.com/0")); ++ L"http://www.9oo91e.qjz9zk/0")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("b").AppendASCII("a.url"), +- L"http://www.google.com/1")); ++ L"http://www.9oo91e.qjz9zk/1")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("b").AppendASCII("b.url"), +- L"http://www.google.com/2")); ++ L"http://www.9oo91e.qjz9zk/2")); + ASSERT_TRUE(CreateUrlFile(path.AppendASCII("c.url"), +- L"http://www.google.com/3")); ++ L"http://www.9oo91e.qjz9zk/3")); + + struct BadBinaryData { + const char* data; +diff --git a/chrome/browser/installable/quality_enforcer.cc b/chrome/browser/installable/quality_enforcer.cc +--- a/chrome/browser/installable/quality_enforcer.cc ++++ b/chrome/browser/installable/quality_enforcer.cc +@@ -34,13 +34,13 @@ constexpr char kHttpErrorConsoleMessageFormat[] = + constexpr char kUnavailableOfflineConsoleMessageFormat[] = + "Page %s is not available offline. Please handle offline resource requests " + "using a ServiceWorker. See: " +- "https://developers.google.com/web/fundamentals/codelabs/offline"; ++ "https://developers.9oo91e.qjz9zk/web/fundamentals/codelabs/offline"; + + constexpr char kDigitalAssetLinkConsoleMessageFormat[] = + "Launch URL %s failed digital asset link verification. Please review the " + "Trusted Web Activity quick start guide for how to correctly implement " + "Digital Assetlinks: " +- "https://developers.google.com/web/android/trusted-web-activity/" ++ "https://developers.9oo91e.qjz9zk/web/android/trusted-web-activity/" + "quick-start"; + + } // namespace +diff --git a/chrome/browser/lacros/cert_db_initializer_impl.cc b/chrome/browser/lacros/cert_db_initializer_impl.cc +--- a/chrome/browser/lacros/cert_db_initializer_impl.cc ++++ b/chrome/browser/lacros/cert_db_initializer_impl.cc +@@ -33,26 +33,26 @@ namespace { + // everyone when the policy stack is ready (expected to happen before Feb 2021). + bool IsEnabledForEarlyAccess(Profile* profile) { + static base::NoDestructor> allowlist{ +- {"bartfab@google.com", "darin@google.com", +- "dhaddock@google.com", "edcourtney@google.com", +- "erikchen@google.com", "fangzhoug@google.com", +- "fukino@google.com", "gianluca@google.com", +- "heiserya@google.com", "hidehiko@google.com", +- "huangs@google.com", "huanr@google.com", +- "igorcov@google.com", "jamescook@google.com", +- "jennyz@google.com", "jorgelo@google.com", +- "ketakid@google.com", "lakpamarthy@google.com", +- "leolai@google.com", "liaoyuke@google.com", +- "maguschen@google.com", "marinakz@google.com", +- "miersh@google.com", "mkarkada@google.com", +- "okalitova@google.com", "oshima@google.com", +- "pmarko@google.com", "pucchakayala@google.com", +- "rbock@google.com", "rjkroege@google.com", +- "rogerta@google.com", "satorux@google.com", +- "sinhak@google.com", "songsuk@google.com", +- "srinivassista@google.com", "svenzheng@google.com", +- "willmcleod@google.com", "ythjkt@google.com", +- "yusukes@google.com"}}; ++ {"bartfab@9oo91e.qjz9zk", "darin@9oo91e.qjz9zk", ++ "dhaddock@9oo91e.qjz9zk", "edcourtney@9oo91e.qjz9zk", ++ "erikchen@9oo91e.qjz9zk", "fangzhoug@9oo91e.qjz9zk", ++ "fukino@9oo91e.qjz9zk", "gianluca@9oo91e.qjz9zk", ++ "heiserya@9oo91e.qjz9zk", "hidehiko@9oo91e.qjz9zk", ++ "huangs@9oo91e.qjz9zk", "huanr@9oo91e.qjz9zk", ++ "igorcov@9oo91e.qjz9zk", "jamescook@9oo91e.qjz9zk", ++ "jennyz@9oo91e.qjz9zk", "jorgelo@9oo91e.qjz9zk", ++ "ketakid@9oo91e.qjz9zk", "lakpamarthy@9oo91e.qjz9zk", ++ "leolai@9oo91e.qjz9zk", "liaoyuke@9oo91e.qjz9zk", ++ "maguschen@9oo91e.qjz9zk", "marinakz@9oo91e.qjz9zk", ++ "miersh@9oo91e.qjz9zk", "mkarkada@9oo91e.qjz9zk", ++ "okalitova@9oo91e.qjz9zk", "oshima@9oo91e.qjz9zk", ++ "pmarko@9oo91e.qjz9zk", "pucchakayala@9oo91e.qjz9zk", ++ "rbock@9oo91e.qjz9zk", "rjkroege@9oo91e.qjz9zk", ++ "rogerta@9oo91e.qjz9zk", "satorux@9oo91e.qjz9zk", ++ "sinhak@9oo91e.qjz9zk", "songsuk@9oo91e.qjz9zk", ++ "srinivassista@9oo91e.qjz9zk", "svenzheng@9oo91e.qjz9zk", ++ "willmcleod@9oo91e.qjz9zk", "ythjkt@9oo91e.qjz9zk", ++ "yusukes@9oo91e.qjz9zk"}}; + signin::IdentityManager* identity_manager = + IdentityManagerFactory::GetForProfile(profile); + return base::Contains(*allowlist, identity_manager +diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm +--- a/chrome/browser/local_discovery/service_discovery_client_mac.mm ++++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm +@@ -399,7 +399,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // weak delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetServiceBrowser that's + // already gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + [_browser setDelegate:nil]; + + // Ensure the delegate clears all references to itself, which it had added as +@@ -513,7 +513,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetService that's already + // gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + [_service setDelegate:nil]; + _service.reset(); + } +diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +--- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +@@ -31,8 +31,8 @@ constexpr char kLoggerComponent[] = "CastMediaRouteProvider"; + + // List of origins allowed to use a PresentationRequest to initiate mirroring. + constexpr std::array kPresentationApiAllowlist = { +- "https://docs.google.com", +- "https://meet.google.com", ++ "https://docs.9oo91e.qjz9zk", ++ "https://meet.9oo91e.qjz9zk", + }; + + // Returns a list of origins that are valid for |source_id|. An empty list +diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +--- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +@@ -692,12 +692,12 @@ std::vector DialMediaRouteProvider::GetOrigins( + base::flat_map>> + origin_allowlist( + {{"YouTube", +- {CreateOrigin("https://tv.youtube.com"), +- CreateOrigin("https://tv-green-qa.youtube.com"), +- CreateOrigin("https://tv-release-qa.youtube.com"), +- CreateOrigin("https://web-green-qa.youtube.com"), +- CreateOrigin("https://web-release-qa.youtube.com"), +- CreateOrigin("https://www.youtube.com")}}, ++ {CreateOrigin("https://tv.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://www.y0u1ub3.qjz9zk")}}, + {"Netflix", {CreateOrigin("https://www.netflix.com")}}, + {"Pandora", {CreateOrigin("https://www.pandora.com")}}, + {"Radio", {CreateOrigin("https://www.pandora.com")}}, +diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc +--- a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc ++++ b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc +@@ -37,7 +37,7 @@ const char kAdviseOnGclientSolution[] = + "You also need to add this solution to your .gclient:\n" + "{\n" + " \"name\" : \"webrtc.DEPS\",\n" +- " \"url\" : \"https://chromium.googlesource.com/chromium/deps/" ++ " \"url\" : \"https://chromium.9oo91esource.qjz9zk/chromium/deps/" + "webrtc/webrtc.DEPS\",\n" + "}\n" + "and run gclient sync. This will download the required ref files."; +diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +--- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +@@ -122,7 +122,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { + } // namespace + + const char WebRtcEventLogUploaderImpl::kUploadURL[] = +- "https://clients2.google.com/cr/report"; ++ "https://clients2.9oo91e.qjz9zk/cr/report"; + + WebRtcEventLogUploaderImpl::Factory::Factory( + scoped_refptr task_runner) +diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +--- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +@@ -466,7 +466,7 @@ void WebRtcLogUploader::UploadCompressedLog( + "Not implemented, it would be good to do so." + })"); + +- constexpr char kUploadURL[] = "https://clients2.google.com/cr/report"; ++ constexpr char kUploadURL[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + auto resource_request = std::make_unique(); + resource_request->url = !upload_url_for_testing_.is_empty() + ? upload_url_for_testing_ +diff --git a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc +--- a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc ++++ b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc +@@ -34,7 +34,7 @@ std::unique_ptr InitializeProfileForSync( + username = info.email; + #endif + if (username.empty()) { +- username = "user@gmail.com"; ++ username = "user@9ma1l.qjz9zk"; + } + + return ProfileSyncServiceHarness::Create( +diff --git a/chrome/browser/nacl_host/nacl_infobar_delegate.cc b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +--- a/chrome/browser/nacl_host/nacl_infobar_delegate.cc ++++ b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +@@ -32,7 +32,7 @@ base::string16 NaClInfoBarDelegate::GetLinkText() const { + } + + GURL NaClInfoBarDelegate::GetLinkURL() const { +- return GURL("https://support.google.com/chrome/?p=ib_nacl"); ++ return GURL("https://support.9oo91e.qjz9zk/chrome/?p=ib_nacl"); + } + + base::string16 NaClInfoBarDelegate::GetMessageText() const { +diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +--- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc ++++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +@@ -32,7 +32,7 @@ namespace { + // -------------------- Nearby Share Service v1 Endpoints -------------------- + + const char kDefaultNearbyShareV1HTTPHost[] = +- "https://nearbysharing-pa.googleapis.com"; ++ "https://nearbysharing-pa.9oo91eapis.qjz9zk"; + + const char kNearbyShareV1Path[] = "v1/"; + +@@ -44,7 +44,7 @@ const char kPageToken[] = "page_token"; + const char kSecretIds[] = "secret_ids"; + + const char kNearbyShareOAuth2Scope[] = +- "https://www.googleapis.com/auth/nearbysharing-pa"; ++ "https://www.9oo91eapis.qjz9zk/auth/nearbysharing-pa"; + + // Creates the full Nearby Share v1 URL for endpoint to the API with + // |request_path|. +diff --git a/chrome/browser/nearby_sharing/instantmessaging/constants.h b/chrome/browser/nearby_sharing/instantmessaging/constants.h +--- a/chrome/browser/nearby_sharing/instantmessaging/constants.h ++++ b/chrome/browser/nearby_sharing/instantmessaging/constants.h +@@ -6,10 +6,10 @@ + #define CHROME_BROWSER_NEARBY_SHARING_INSTANTMESSAGING_CONSTANTS_H_ + + const char kInstantMessagingReceiveMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/messages:receiveExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/messages:receiveExpress"; + + const char kInstantMessagingSendMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/message:sendExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/message:sendExpress"; + + // Template for optional OAuth2 authorization HTTP header. + const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; +diff --git a/chrome/browser/net/dns_probe_runner.cc b/chrome/browser/net/dns_probe_runner.cc +--- a/chrome/browser/net/dns_probe_runner.cc ++++ b/chrome/browser/net/dns_probe_runner.cc @@ -18,7 +18,7 @@ - // - A string beginning with '//', which is treated as a path to a file - // containing a list of owners for this flag (commonly an OWNERS file); - // - Any other string, which is treated as the username part of an --// @chromium.org email address; -+// @ch40m1um.qjz9zk email address; - // - // expiry_milestone: the milestone after which this flag is obsolete. - // Specifically, after the milestone with the given number branches, this flag -@@ -84,7 +84,7 @@ - }, - { - "name": "allow-sync-xhr-in-page-dismissal", -- "owners": [ "kdillon@chromium.org" ], -+ "owners": [ "kdillon@ch40m1um.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -124,7 +124,7 @@ - }, - { - "name": "app-service-intent-handling", -- "owners": [ "chromeos-apps-foundation-team@google.com" ], -+ "owners": [ "chromeos-apps-foundation-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -159,14 +159,14 @@ - }, - { - "name": "arc-native-bridge-toggle", -- "owners": [ "levarum@google.com" ], -+ "owners": [ "levarum@9oo91e.qjz9zk" ], - // Used on ChromeOS to compare and debug different ARC native-bridge - // implementations which are normally used on different platforms. - "expiry_milestone": -1 - }, - { - "name": "arc-print-spooler-experiment", -- "owners": [ "jschettler@google.com", "bmgordon@google.com" ], -+ "owners": [ "jschettler@9oo91e.qjz9zk", "bmgordon@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -235,7 +235,7 @@ - }, - { - "name": "autofill-always-return-cloud-tokenized-card", -- "owners": [ "aneeshali@google.com", "annelim@google.com", "jsaul@google.com" ], -+ "owners": [ "aneeshali@9oo91e.qjz9zk", "annelim@9oo91e.qjz9zk", "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { -@@ -270,7 +270,7 @@ - }, - { - "name": "autofill-enable-virtual-card", -- "owners": [ "siyua", "jsaul@google.com" ], -+ "owners": [ "siyua", "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { -@@ -295,17 +295,17 @@ - }, - { - "name": "autofill-keyboard-accessory-view", -- "owners": [ "fhorschig@chromium.org" ], -+ "owners": [ "fhorschig@ch40m1um.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "autofill-no-local-save-on-unmask-success", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "autofill-no-local-save-on-upload-success", -- "owners": [ "jsaul@google.com", "annelim@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk", "annelim@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -370,12 +370,12 @@ - }, - { - "name": "avatar-toolbar-button", -- "owners": [ "droger", "my-chrome-everywhere@google.com" ], -+ "owners": [ "droger", "my-chrome-everywhere@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "back-forward-cache", -- "owners": [ "bfcache-dev@chromium.org" ], -+ "owners": [ "bfcache-dev@ch40m1um.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -390,12 +390,12 @@ - }, - { - "name": "bluetooth-aggressive-appearance-filter", -- "owners": [ "hansberry", "cros-system-services@google.com" ], -+ "owners": [ "hansberry", "cros-system-services@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "bluetooth-kernel-suspend-notifier", -- "owners": [ "abhishekpandit", "chromeos-bluetooth@google.com" ], -+ "owners": [ "abhishekpandit", "chromeos-bluetooth@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -415,7 +415,7 @@ - }, - { - "name": "camera-system-web-app", -- "owners": [ "chromeos-camera-eng@google.com" ], -+ "owners": [ "chromeos-camera-eng@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -450,7 +450,7 @@ - }, - { - "name": "chromeos-video-decoder", -- "owners": [ "chromeos-video-eng@google.com" ], -+ "owners": [ "chromeos-video-eng@9oo91e.qjz9zk" ], - // This flag should expire once all VDA-based ChromeOS video decoders have - // been removed. - "expiry_milestone": 90 -@@ -512,7 +512,7 @@ - }, - { - "name": "compositor-threaded-scrollbar-scrolling", -- "owners": [ "arakeri@microsoft.com" ], -+ "owners": [ "arakeri@m1cr050ft.qjz9zk" ], - "expiry_milestone": 90 - }, - { -@@ -622,7 +622,7 @@ - }, - { - "name": "crostini-disk-resizing", -- "owners": [ "davidmunro@google.com", "nverne" ], -+ "owners": [ "davidmunro@9oo91e.qjz9zk", "nverne" ], - "expiry_milestone": 83 - }, - { -@@ -632,7 +632,7 @@ - }, - { - "name": "crostini-port-forwarding", -- "owners": [ "matterchen", "davidmunro@google.com", "hollingum@google.com" ], -+ "owners": [ "matterchen", "davidmunro@9oo91e.qjz9zk", "hollingum@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -652,17 +652,17 @@ - }, - { - "name": "crostini-use-buster-image", -- "owners": [ "davidmunro@google.com", "benwells" ], -+ "owners": [ "davidmunro@9oo91e.qjz9zk", "benwells" ], - "expiry_milestone": 82 - }, - { - "name": "crostini-username", -- "owners": [ "davidmunro@google.com", "lxj" ], -+ "owners": [ "davidmunro@9oo91e.qjz9zk", "lxj" ], - "expiry_milestone": 83 - }, - { - "name": "crostini-webui-upgrader", -- "owners": [ "nverne", "davidmunro@google.com", "benwells" ], -+ "owners": [ "nverne", "davidmunro@9oo91e.qjz9zk", "benwells" ], - "expiry_milestone": 84 - }, - { -@@ -682,7 +682,7 @@ - }, - { - "name": "cups-ipp-printing-backend", -- "owners": [ "dhoss", "chrome-print@google.com" ], -+ "owners": [ "dhoss", "chrome-print@9oo91e.qjz9zk" ], - "expiry_milestone": 89 - }, - { -@@ -692,7 +692,7 @@ - }, - { - "name": "darken-websites-checkbox-in-themes-setting", -- "owners": [ "lazzzis@google.com", "twellington" ], -+ "owners": [ "lazzzis@9oo91e.qjz9zk", "twellington" ], - "expiry_milestone": 83 - }, - { -@@ -715,17 +715,17 @@ - }, - { - "name": "decode-jpeg-images-to-yuv", -- "owners": [ "sashamcintosh", "chromeos-gfx@google.com" ], -+ "owners": [ "sashamcintosh", "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "decode-webp-images-to-yuv", -- "owners": [ "andrescj", "chromeos-gfx@google.com" ], -+ "owners": [ "andrescj", "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "delegate-overscroll-swipes", -- "owners": [ "chrome-android-app@chromium.org" ], -+ "owners": [ "chrome-android-app@ch40m1um.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -770,21 +770,21 @@ - }, - { - "name": "disable-accelerated-mjpeg-decode", -- "owners": [ "chromeos-camera-eng@google.com" ], -+ "owners": [ "chromeos-camera-eng@9oo91e.qjz9zk" ], - // This flag does not expire because it allows users to disable HW mjpeg - // decoding for debugging purpose and temporary workaround for some issues. - "expiry_milestone": -1 - }, - { - "name": "disable-accelerated-video-decode", -- "owners": [ "chromeos-video-eng@google.com" ], -+ "owners": [ "chromeos-video-eng@9oo91e.qjz9zk" ], - // This flag does not expire because it allows users to disable HW video - // decoding for debugging purpose and temporary workaround for some issues. - "expiry_milestone": -1 - }, - { - "name": "disable-accelerated-video-encode", -- "owners": [ "chromeos-video-eng@google.com" ], -+ "owners": [ "chromeos-video-eng@9oo91e.qjz9zk" ], - // This flag does not expire because it allows users to disable HW video - // encoding for debugging purpose and temporary workaround for some issues. - "expiry_milestone": -1 -@@ -796,11 +796,11 @@ - }, - { - "name": "disable-best-effort-tasks", -- "owners": [ "catan-team@chromium.org" ], -+ "owners": [ "catan-team@ch40m1um.qjz9zk" ], - "expiry_milestone": 75 - }, - { "name": "disable-cancel-all-touches", -- "owners": [ "chrome-knowledge-eng@google.com" ], -+ "owners": [ "chrome-knowledge-eng@9oo91e.qjz9zk" ], - // This flag is use to disable CancelAllTouches() function, which enable the - // testing for implementation of canceling single touches. - "expiry_milestone": 86 -@@ -812,7 +812,7 @@ - }, - { - "name": "disable-explicit-dma-fences", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - // This flag is used for QA & debugging on ChromeOS, which has no way to - // customize switches. - "expiry_milestone": -1 -@@ -842,8 +842,8 @@ - { - "name": "disable-office-editing-component-app", - "owners": [ -- "chrome-apps-platform-rationalization@google.com", -- "quickoffice-chrome-eng@google.com" ], -+ "chrome-apps-platform-rationalization@9oo91e.qjz9zk", -+ "quickoffice-chrome-eng@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -860,7 +860,7 @@ - }, - { - "name": "disable-webrtc-hw-decoding", -- "owners": [ "hiroh", "chromeos-video-eng@google.com" ], -+ "owners": [ "hiroh", "chromeos-video-eng@9oo91e.qjz9zk" ], - // This flag does not expire because it allows users to disable HW video - // decoding only in webrtc usecase for debugging purpose and temporary - // workaround for some issues. -@@ -868,7 +868,7 @@ - }, - { - "name": "disable-webrtc-hw-encoding", -- "owners": [ "hiroh", "chromeos-video-eng@google.com" ], -+ "owners": [ "hiroh", "chromeos-video-eng@9oo91e.qjz9zk" ], - // This flag does not expire because it allows users to disable HW video - // encoding only in webrtc usecase for debugging purpose and temporary - // workaround for some issues. -@@ -901,7 +901,7 @@ - }, - { - "name": "dns-over-https", -- "owners": [ "dalyk", "doh-core@google.com" ], -+ "owners": [ "dalyk", "doh-core@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -916,7 +916,7 @@ - }, - { - "name": "double-buffer-compositing", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -936,12 +936,12 @@ - }, - { - "name": "drag-to-snap-in-clamshell-mode", -- "owners": [ "amusbach@chromium.org", "xdai@chromium.org" ], -+ "owners": [ "amusbach@ch40m1um.qjz9zk", "xdai@ch40m1um.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "draw-vertically-edge-to-edge", -- "owners": [ "chrome-android-app@chromium.org" ], -+ "owners": [ "chrome-android-app@ch40m1um.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -958,12 +958,12 @@ - }, - { - "name": "enable-accessibility-expose-aria-annotations", -- "owners": [ "aleventhal@chromium.org", "//third_party/blink/renderer/modules/accessibility/OWNERS", "//ui/accessibility/OWNERS" ], -+ "owners": [ "aleventhal@ch40m1um.qjz9zk", "//third_party/blink/renderer/modules/accessibility/OWNERS", "//ui/accessibility/OWNERS" ], - "expiry_milestone": 85 - }, - { - "name": "enable-accessibility-expose-display-none", -- "owners": [ "adettenb@microsoft.com", "//third_party/blink/renderer/modules/accessibility/OWNERS", "//ui/accessibility/OWNERS" ], -+ "owners": [ "adettenb@m1cr050ft.qjz9zk", "//third_party/blink/renderer/modules/accessibility/OWNERS", "//ui/accessibility/OWNERS" ], - "expiry_milestone": 82 - }, - { -@@ -983,12 +983,12 @@ - }, - { - "name": "enable-ambient-authentication-in-guest-session", -- "owners": ["rhalavati", "chrome-privacy-core@google.com"], -+ "owners": ["rhalavati", "chrome-privacy-core@9oo91e.qjz9zk"], - "expiry_milestone": 87 - }, - { - "name": "enable-ambient-authentication-in-incognito", -- "owners": ["rhalavati", "chrome-privacy-core@google.com"], -+ "owners": ["rhalavati", "chrome-privacy-core@9oo91e.qjz9zk"], - "expiry_milestone": 87 - }, - { -@@ -1098,22 +1098,22 @@ - }, - { - "name": "enable-autofill-account-wallet-storage", -- "owners": [ "treib", "jsaul@google.com", "butter-team@google.com" ], -+ "owners": [ "treib", "jsaul@9oo91e.qjz9zk", "butter-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-autofill-credit-card-ablation-experiment", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "enable-autofill-credit-card-authentication", -- "owners": [ "jsaul@google.com", "manasverma@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk", "manasverma@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { - "name": "enable-autofill-credit-card-upload", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - // This flag is heavily used by the testing team that can't easily use the - // commandline, and can't be enabled by default. - // http://g/chrome-flags/s2RTQCvcRRs -@@ -1121,27 +1121,27 @@ - }, - { - "name": "enable-autofill-credit-card-upload-editable-cardholder-name", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-autofill-credit-card-upload-editable-expiration-date", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-autofill-credit-card-upload-feedback", -- "owners": [ "siyua@chromium.org, payments-autofill-team@google.com" ], -+ "owners": [ "siyua@ch40m1um.qjz9zk, payments-autofill-team@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "enable-autofill-manual-fallback", -- "owners": [ "fhorschig@chromium.org" ], -+ "owners": [ "fhorschig@ch40m1um.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-autofill-refresh-style", -- "owners": [ "tmartino@chromium.org" ], -+ "owners": [ "tmartino@ch40m1um.qjz9zk" ], - "expiry_milestone": 78 - }, - { -@@ -1156,7 +1156,7 @@ - }, - { - "name": "enable-bookmark-reorder", -- "owners": ["jhimawan@google.com", "twellington" ], -+ "owners": ["jhimawan@9oo91e.qjz9zk", "twellington" ], - "expiry_milestone": 82 - }, - { -@@ -1191,7 +1191,7 @@ - }, - { - "name": "enable-chromeos-account-manager", -- "owners": [ "sinhak@chromium.org" ], -+ "owners": [ "sinhak@ch40m1um.qjz9zk" ], - "expiry_milestone": 79 - }, - { -@@ -1206,7 +1206,7 @@ - }, - { - "name": "enable-close-tab-suggestions", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -1243,47 +1243,47 @@ - }, - { - "name": "enable-cros-ime-assist-autocorrect", -- "owners": [ "jopalmer", "essential-inputs-team@google.com" ], -+ "owners": [ "jopalmer", "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "enable-cros-ime-assist-personal-info", -- "owners": [ "jiwan", "essential-inputs-team@google.com" ], -+ "owners": [ "jiwan", "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "enable-cros-ime-emoji-suggest-addition", -- "owners": [ "myy", "essential-inputs-team@google.com" ], -+ "owners": [ "myy", "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "enable-cros-ime-input-logic-fst", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-cros-ime-input-logic-hmm", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-cros-ime-mozc-proto", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-cros-ime-native-decoder", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-cros-virtual-keyboard-bordered-key", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-cros-virtual-keyboard-floating-resizable", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -1329,27 +1329,27 @@ - }, - { - "name": "enable-desktop-minimal-ui", -- "owners": [ "desktop-pwas-team@google.com" ], -+ "owners": [ "desktop-pwas-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-desktop-pwas-local-updating", -- "owners": [ "desktop-pwas-team@google.com" ], -+ "owners": [ "desktop-pwas-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-desktop-pwas-local-updating-throttle-persistence", -- "owners": [ "desktop-pwas-team@google.com" ], -+ "owners": [ "desktop-pwas-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-desktop-pwas-tab-strip", -- "owners": [ "desktop-pwas-team@google.com" ], -+ "owners": [ "desktop-pwas-team@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "enable-desktop-pwas-without-extensions", -- "owners": [ "desktop-pwas-team@google.com" ], -+ "owners": [ "desktop-pwas-team@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -1359,17 +1359,17 @@ - }, - { - "name": "enable-duet-tabstrip-integration", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "enable-edu-coexistence", -- "owners": [ "anastasiian@chromium.org", "sinhak@chromium.org" ], -+ "owners": [ "anastasiian@ch40m1um.qjz9zk", "sinhak@ch40m1um.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-edu-coexistence-consent-log", -- "owners": [ "anastasiian@chromium.org", "sinhak@chromium.org" ], -+ "owners": [ "anastasiian@ch40m1um.qjz9zk", "sinhak@ch40m1um.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -1419,17 +1419,17 @@ - }, - { - "name": "enable-experimental-accessibility-switch-access", -- "owners": [ "anastasi@google.com", "//ui/accessibility/OWNERS" ], -+ "owners": [ "anastasi@9oo91e.qjz9zk", "//ui/accessibility/OWNERS" ], - "expiry_milestone": 85 - }, - { - "name": "enable-experimental-accessibility-switch-access-text", -- "owners": [ "anastasi@google.com", "//ui/accessibility/OWNERS" ], -+ "owners": [ "anastasi@9oo91e.qjz9zk", "//ui/accessibility/OWNERS" ], - "expiry_milestone": 85 - }, - { - "name": "enable-experimental-fling-animation", -- "owners": [ "sarsha@microsoft.com" ], -+ "owners": [ "sarsha@m1cr050ft.qjz9zk" ], - "expiry_milestone": 89 - }, - { -@@ -1439,7 +1439,7 @@ - }, - { - "name": "enable-experimental-productivity-features", -- "owners": [ "feature-control@chromium.org" ], -+ "owners": [ "feature-control@ch40m1um.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -1463,12 +1463,12 @@ - }, - { - "name": "enable-force-dark", -- "owners": [ "gilmanmh@google.com" ], -+ "owners": [ "gilmanmh@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "enable-fs-nosymfollow", -- "owners": [ "mortonm@chromium.org" ], -+ "owners": [ "mortonm@ch40m1um.qjz9zk" ], - "expiry_milestone": 76 - }, - { -@@ -1490,7 +1490,7 @@ - }, - { - "name": "enable-generic-sensor-extra-classes", -- "owners": [ "reillyg@chromium.org", "raphael.kubo.da.costa@intel.com" ], -+ "owners": [ "reillyg@ch40m1um.qjz9zk", "raphael.kubo.da.costa@intel.com" ], - "expiry_milestone": 83 - }, - { -@@ -1546,12 +1546,12 @@ - }, - { - "name": "enable-home-page-location-policy", -- "owners": [ "wenyufu", "chrome-android-app@chromium.org" ], -+ "owners": [ "wenyufu", "chrome-android-app@ch40m1um.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-horizontal-tab-switcher", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": -1 - }, - { -@@ -1581,7 +1581,7 @@ - }, - { - "name": "enable-intent-picker", -- "owners": [ "chromeos-apps-foundation-team@google.com" ], -+ "owners": [ "chromeos-apps-foundation-team@9oo91e.qjz9zk" ], - "expiry_milestone": 80 - }, - { -@@ -1592,7 +1592,7 @@ - }, - { - "name": "enable-layout-ng", -- "owners": [ "layout-dev@chromium.org" ], -+ "owners": [ "layout-dev@ch40m1um.qjz9zk" ], - "expiry_milestone": 80 - }, - { -@@ -1661,12 +1661,12 @@ - }, - { - "name": "enable-nacl", -- "owners": [ "dschuff", "native-client-dev@googlegroups.com" ], -+ "owners": [ "dschuff", "native-client-dev@9oo91egroups.qjz9zk" ], - "expiry_milestone": 87 - }, - { - "name": "enable-native-controls", -- "owners": [ "chrome-media-ux@google.com" ], -+ "owners": [ "chrome-media-ux@9oo91e.qjz9zk" ], - "expiry_milestone": 75 - }, - { -@@ -1711,7 +1711,7 @@ - }, - { - "name": "enable-offer-store-unmasked-wallet-cards", -- "owners": [ "jsaul@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -1810,7 +1810,7 @@ - }, - { - "name": "enable-query-in-omnibox", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -1830,7 +1830,7 @@ - }, - { - "name": "enable-reader-mode", -- "owners": [ "gilmanmh@google.com" ], -+ "owners": [ "gilmanmh@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -1917,7 +1917,7 @@ - }, - { - "name": "enable-service-worker-imported-script-update-check", -- "owners": [ "worker-dev@chromium.org" ], -+ "owners": [ "worker-dev@ch40m1um.qjz9zk" ], - // It's still in development. Tentatively set to M76 as the expiry_milestone. - "expiry_milestone": 76 - }, -@@ -2024,12 +2024,12 @@ - }, - { - "name": "enable-sync-trusted-vault", -- "owners": [ "mastiz@chromium.org", "//components/sync/OWNERS" ], -+ "owners": [ "mastiz@ch40m1um.qjz9zk", "//components/sync/OWNERS" ], - "expiry_milestone": 85 - }, - { - "name": "enable-sync-uss-nigori", -- "owners": [ "mmoskvitin@google.com", "//components/sync/OWNERS" ], -+ "owners": [ "mmoskvitin@9oo91e.qjz9zk", "//components/sync/OWNERS" ], - "expiry_milestone": 83 - }, - { -@@ -2044,37 +2044,37 @@ - }, - { - "name": "enable-tab-engagement-reporting", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-grid-layout", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-groups", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-groups-continuation", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-groups-ui-improvements", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-switcher-on-return", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-tab-to-gts-animation", -- "owners": [ "memex-team@google.com" ], -+ "owners": [ "memex-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -2133,12 +2133,12 @@ - }, - { - "name": "enable-vaapi-jpeg-image-decode-acceleration", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-vaapi-webp-image-decode-acceleration", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { -@@ -2159,66 +2159,66 @@ - }, - { - "name": "enable-web-authentication-cable-v2-support", -- "owners": [ "webauthn-team@google.com" ], -+ "owners": [ "webauthn-team@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "enable-web-bluetooth-new-permissions-backend", -- "owners": [ "web-bluetooth@google.com" ], -+ "owners": [ "web-bluetooth@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "enable-web-payments-experimental-features", -- "owners": [ "danyao", "rouslan", "paymentrequest@google.com" ], -+ "owners": [ "danyao", "rouslan", "paymentrequest@9oo91e.qjz9zk" ], - // This flag is used by early adoption partners to test new Web Payments - // features in each release. - "expiry_milestone": -1 - }, - { - "name": "enable-web-payments-minimal-ui", -- "owners": [ "rouslan", "web-payments-team@google.com" ], -+ "owners": [ "rouslan", "web-payments-team@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "enable-webassembly-baseline", -- "owners": [ "clemensb", "wasm-team@google.com" ], -+ "owners": [ "clemensb", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-webassembly-code-cache", -- "owners": [ "bbudge", "hablich", "wasm-team@google.com" ], -+ "owners": [ "bbudge", "hablich", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-webassembly-lazy-compilation", -- "owners": [ "clemensb", "wasm-team@google.com" ], -+ "owners": [ "clemensb", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-webassembly-simd", -- "owners": [ "gdeepti", "wasm-team@google.com" ], -+ "owners": [ "gdeepti", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-webassembly-threads", -- "owners": [ "binji", "hablich", "wasm-team@google.com" ], -+ "owners": [ "binji", "hablich", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "enable-webassembly-tiering", -- "owners": [ "clemensb", "wasm-team@google.com" ], -+ "owners": [ "clemensb", "wasm-team@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-webgl-draft-extensions", -- "owners": [ "webgl-team@google.com" ], -+ "owners": [ "webgl-team@9oo91e.qjz9zk" ], - // This flag is the only way for end users to test upcoming WebGL - // extensions on Android. It must not be removed. - "expiry_milestone": -1 - }, - { - "name": "enable-webgl2-compute-context", -- "owners": [ "webgl-team@google.com" ], -+ "owners": [ "webgl-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -2243,7 +2243,7 @@ - }, - { - "name": "enable-webrtc-pipewire-capturer", -- "owners": [ "tomas.popela@gmail.com" ], -+ "owners": [ "tomas.popela@9ma1l.qjz9zk" ], - "expiry_milestone": 83 - }, - { -@@ -2263,22 +2263,22 @@ - }, - { - "name": "enable-webrtc-use-min-max-vea-dimensions", -- "owners": [ "mcasas", "chromeos-gfx-video@google.com" ], -+ "owners": [ "mcasas", "chromeos-gfx-video@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "enable-winrt-geolocation-implementation", -- "owners": [ "pelavall@microsoft.com" ], -+ "owners": [ "pelavall@m1cr050ft.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "enable-winrt-sensor-implementation", -- "owners": [ "wensh@microsoft.com" ], -+ "owners": [ "wensh@m1cr050ft.qjz9zk" ], - "expiry_milestone": 84 - }, - { - "name": "enable-zero-copy", -- "owners": [ "ccameron", "chrome-gpu@google.com" ], -+ "owners": [ "ccameron", "chrome-gpu@9oo91e.qjz9zk" ], - // This flag is commonly used when asking users to help gather debug info. - "expiry_milestone": -1 - }, -@@ -2309,7 +2309,7 @@ - }, - { - "name": "exo-pointer-lock", -- "owners": [ "hollingum@google.com" ], -+ "owners": [ "hollingum@9oo91e.qjz9zk" ], - "expiry_milestone": 82 - }, - { -@@ -2356,7 +2356,7 @@ - }, - { - "name": "file-handling-api", -- "owners": ["mgiuca@chromium.org", "oyiptong@chromium.org"], -+ "owners": ["mgiuca@ch40m1um.qjz9zk", "oyiptong@ch40m1um.qjz9zk"], - "expiry_milestone": 82 - }, - { -@@ -2381,7 +2381,7 @@ - }, - { - "name": "focus-mode", -- "owners": [ "dfried", "pbos", "yiningwang@google.com" ], -+ "owners": [ "dfried", "pbos", "yiningwang@9oo91e.qjz9zk" ], - "expiry_milestone": 82 - }, - { -@@ -2452,12 +2452,12 @@ - }, - { - "name": "forced-colors", -- "owners": [ "weblayout@microsoft.com" ], -+ "owners": [ "weblayout@m1cr050ft.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "form-controls-refresh", -- "owners": [ "iopopesc@microsoft.com", "//third_party/blink/renderer/core/OWNERS" ], -+ "owners": [ "iopopesc@m1cr050ft.qjz9zk", "//third_party/blink/renderer/core/OWNERS" ], - "expiry_milestone": 84 - }, - { -@@ -2488,7 +2488,7 @@ - }, - { - "name": "gaia-action-buttons", -- "owners": [ "jeroendh@google.com", "rsorokin" ], -+ "owners": [ "jeroendh@9oo91e.qjz9zk", "rsorokin" ], - "expiry_milestone": 79 - }, - { -@@ -2498,7 +2498,7 @@ - }, - { - "name": "gesture-properties-dbus-service", -- "owners": [ "hcutts", "chromeos-tango@google.com" ], -+ "owners": [ "hcutts", "chromeos-tango@9oo91e.qjz9zk" ], - // Used by developers for debugging and input device tuning. - "expiry_milestone": -1 - }, -@@ -2509,7 +2509,7 @@ - }, - { - "name": "global-media-controls-for-cast", -- "owners": [ "takumif", "openscreen-eng@google.com" ], -+ "owners": [ "takumif", "openscreen-eng@9oo91e.qjz9zk" ], - "expiry_milestone": 90 - }, - { -@@ -2524,7 +2524,7 @@ - }, - { - "name": "handwriting-gesture", -- "owners": [ "essential-inputs-team@google.com" ], -+ "owners": [ "essential-inputs-team@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { -@@ -2542,12 +2542,12 @@ - }, - { - "name": "happiness-tracking-surveys-for-desktop-settings", -- "owners": [ "msramek", "chrome-friendly-settings@google.com" ], -+ "owners": [ "msramek", "chrome-friendly-settings@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { - "name": "happiness-tracking-surveys-for-desktop-settings-privacy", -- "owners": [ "msramek", "chrome-friendly-settings@google.com" ], -+ "owners": [ "msramek", "chrome-friendly-settings@9oo91e.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -2567,7 +2567,7 @@ - }, - { - "name": "homepage-settings-ui-conversion", -- "owners": [ "wenyufu", "chrome-android-app@chromium.org" ], -+ "owners": [ "wenyufu", "chrome-android-app@ch40m1um.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -2611,7 +2611,7 @@ - }, - { - "name": "impulse-scroll-animations", -- "owners": [ "dlibby@microsoft.com", "sarsha@microsoft.com" ], -+ "owners": [ "dlibby@m1cr050ft.qjz9zk", "sarsha@m1cr050ft.qjz9zk" ], - "expiry_milestone": 89 - }, - { -@@ -2643,7 +2643,7 @@ - }, - { - "name": "instant-tethering", -- "owners": [ "hansberry", "khorimoto", "vecore", "cros-system-services@google.com" ], -+ "owners": [ "hansberry", "khorimoto", "vecore", "cros-system-services@9oo91e.qjz9zk" ], - // Though Instant Tethering is now a launched feature, it is only marked enabled on select, - // approved boards which have passed hardware verification and received server config seeds - // marking it as enabled. This means it is actually disabled-by-default, and since test machines -@@ -2653,7 +2653,7 @@ - }, - { - "name": "interest-feed-content-suggestions", -- "owners": [ "//chrome/android/feed/OWNERS", "feed@chromium.org" ], -+ "owners": [ "//chrome/android/feed/OWNERS", "feed@ch40m1um.qjz9zk" ], - "expiry_milestone": 90 - }, - { -@@ -2714,7 +2714,7 @@ - }, - { - "name": "mac-syscall-sandbox", -- "owners": [ "kerrnel@google.com" ], -+ "owners": [ "kerrnel@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -2724,7 +2724,7 @@ - }, - { - "name": "mac-v2-gpu-sandbox", -- "owners": [ "kerrnel@google.com" ], -+ "owners": [ "kerrnel@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { -@@ -2830,7 +2830,7 @@ - }, - { - "name": "multi-display-overview-and-split-view", -- "owners": [ "amusbach@chromium.org", "xdai@chromium.org" ], -+ "owners": [ "amusbach@ch40m1um.qjz9zk", "xdai@ch40m1um.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -2850,7 +2850,7 @@ - }, - { - "name": "new-os-settings-search", -- "owners": ["cros-customization@google.com", "hsuregan", "khorimoto" ], -+ "owners": ["cros-customization@9oo91e.qjz9zk", "hsuregan", "khorimoto" ], - "expiry_milestone": 86 - }, - { -@@ -2860,7 +2860,7 @@ - }, - { - "name": "new-signin-architecture", -- "owners": ["chrome-ios-signin@google.com", "fernandex"], -+ "owners": ["chrome-ios-signin@9oo91e.qjz9zk", "fernandex"], - "expiry_milestone": 86 - }, - { -@@ -2870,7 +2870,7 @@ - }, - { - "name": "new-usb-backend", -- "owners": [ "reillyg@chromium.org" ], -+ "owners": [ "reillyg@ch40m1um.qjz9zk" ], - "expiry_milestone": 83 - }, - { -@@ -2930,7 +2930,7 @@ - }, - { - "name": "offline-indicator-v2", -- "owners": [ "sinansahin@google.com", "twellington", "offline-dev" ], -+ "owners": [ "sinansahin@9oo91e.qjz9zk", "twellington", "offline-dev" ], - "expiry_milestone": 85 - }, - { -@@ -3000,102 +3000,102 @@ - }, - { - "name": "omnibox-adaptive-suggestions-count", -- "owners": [ "ender", "chrome-omnibox-team@google.com" ], -+ "owners": [ "ender", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { - "name": "omnibox-assistant-voice-search", -- "owners": [ "wylieb", "chrome-omnibox-team@google.com" ], -+ "owners": [ "wylieb", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-autocomplete-titles", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-compact-suggestions", -- "owners": [ "ender", "chrome-omnibox-team@google.com" ], -+ "owners": [ "ender", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { - "name": "omnibox-context-menu-show-full-urls", -- "owners": [ "livvielin", "chrome-security-enamel@google.com" ], -+ "owners": [ "livvielin", "chrome-security-enamel@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-deferred-keyboard-popup", -- "owners": [ "ender", "chrome-omnibox-team@google.com" ], -+ "owners": [ "ender", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 87 - }, - { - "name": "omnibox-disable-instant-extended-limit", -- "owners": [ "pnoland", "chrome-omnibox-team@google.com" ], -+ "owners": [ "pnoland", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-display-title-for-current-url", -- "owners": [ "chrome-omnibox-team@google.com" ], -+ "owners": [ "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-drive-suggestions", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-experimental-keyword-mode", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 92 - }, - { - "name": "omnibox-experimental-suggest-scoring", -- "owners": [ "jdonnelly", "chrome-omnibox-team@google.com" ], -+ "owners": [ "jdonnelly", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-history-quick-provider-allow-but-do-not-score-midword-terms", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "omnibox-history-quick-provider-allow-midword-continuations", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 88 - }, - { - "name": "omnibox-local-entity-suggestions", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-loose-max-limit-on-dedicated-rows", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 93 - }, - { - "name": "omnibox-max-url-matches", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 92 - }, - { - "name": "omnibox-on-device-head-suggestions", -- "owners": [ "cechen", "suggest-2g@google.com" ], -+ "owners": [ "cechen", "suggest-2g@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-on-focus-suggestions", -- "owners": [ "chrome-omnibox-team@google.com" ], -+ "owners": [ "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-pedal-suggestions", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-preserve-default-match-against-async-update", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -3105,87 +3105,87 @@ - }, - { - "name": "omnibox-reverse-answers", -- "owners": [ "jdonnelly", "chrome-omnibox-team@google.com" ], -+ "owners": [ "jdonnelly", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-rich-autocompletion", -- "owners": [ "manukh", "chrome-omnibox-team@google.com" ], -+ "owners": [ "manukh", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 95 - }, - { - "name": "omnibox-rich-entity-suggestions", -- "owners": [ "jdonnelly", "chrome-omnibox-team@google.com" ], -+ "owners": [ "jdonnelly", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-search-engine-logo", -- "owners": [ "wylieb", "chrome-omnibox-team@google.com" ], -+ "owners": [ "wylieb", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 82 - }, - { - "name": "omnibox-short-bookmark-suggestions", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 92 - }, - { - "name": "omnibox-spare-renderer", -- "owners": [ "chrome-omnibox-team@google.com" ], -+ "owners": [ "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-suggestion-button-row", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 89 - }, - { - "name": "omnibox-suggestion-transparency-options", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-tab-switch-suggestions", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 92 - }, - { - "name": "omnibox-tab-switch-suggestions-dedicated-row", -- "owners": [ "orinj", "chrome-omnibox-team@google.com" ], -+ "owners": [ "orinj", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 92 - }, - { - "name": "omnibox-ui-cues-for-search-history-matches", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 78 - }, - { - "name": "omnibox-ui-hide-steady-state-url-path-query-and-ref", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-ui-hide-steady-state-url-scheme", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-ui-hide-steady-state-url-trivial-subdomains", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-ui-max-autocomplete-matches", -- "owners": [ "jdonnelly", "chrome-omnibox-team@google.com" ], -+ "owners": [ "jdonnelly", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "omnibox-ui-swap-title-and-url", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { - "name": "omnibox-zero-suggestions-on-ntp", -- "owners": [ "tommycli", "chrome-omnibox-team@google.com" ], -+ "owners": [ "tommycli", "chrome-omnibox-team@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -3200,7 +3200,7 @@ - }, - { - "name": "on-the-fly-mhtml-hash-computation", -- "owners": [ "mtlieuu", "offline-dev@chromium.org" ], -+ "owners": [ "mtlieuu", "offline-dev@ch40m1um.qjz9zk" ], - "expiry_milestone": 76 - }, - { -@@ -3230,7 +3230,7 @@ - }, - { - "name": "overlay-strategies", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - // This flag is used for QA & debugging on ChromeOS, which has no way to - // customize switches. - "expiry_milestone": -1 -@@ -3307,7 +3307,7 @@ - }, - { - "name": "pdf-annotations", -- "owners": [ "dstockwell@google.com" ], -+ "owners": [ "dstockwell@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { -@@ -3327,7 +3327,7 @@ - }, - { - "name": "percent-based-scrolling", -- "owners": [ "dlibby@microsoft.com", "sarsha@microsoft.com" ], -+ "owners": [ "dlibby@m1cr050ft.qjz9zk", "sarsha@m1cr050ft.qjz9zk" ], - "expiry_milestone": 89 - }, - { -@@ -3362,18 +3362,18 @@ - }, - { - "name": "print-job-management-app", -- "owners": [ "jimmyxgong", "cros-peripherals@google.com"], -+ "owners": [ "jimmyxgong", "cros-peripherals@9oo91e.qjz9zk"], - "expiry_milestone": 85 - }, - { - "name": "printer-status", -- "owners": [ "gavinwill", "cros-peripherals@google.com" ], -+ "owners": [ "gavinwill", "cros-peripherals@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "privacy-settings-redesign", - "owners": ["harrisonsean", "msramek", -- "chrome-friendly-settings@google.com"], -+ "chrome-friendly-settings@9oo91e.qjz9zk"], - "expiry_milestone": 84 - }, - { -@@ -3524,7 +3524,7 @@ - }, - { - "name": "scrollable-tabstrip", -- "owners": ["chrome-desktop-ui-seattle@google.com", "tbergquist"], -+ "owners": ["chrome-desktop-ui-seattle@9oo91e.qjz9zk", "tbergquist"], - "expiry_milestone": 82 - }, - { -@@ -3651,7 +3651,7 @@ - }, - { - "name": "show-bluetooth-device-battery", -- "owners": [ "hansberry", "cros-system-services@google.com" ], -+ "owners": [ "hansberry", "cros-system-services@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -3661,7 +3661,7 @@ - }, - { - "name": "show-overdraw-feedback", -- "owners": [ "andrescj", "chromeos-gfx@google.com" ], -+ "owners": [ "andrescj", "chromeos-gfx@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -3752,7 +3752,7 @@ - }, - { - "name": "split-settings-sync", -- "owners": [ "jamescook", "cros-system-services@google.com" ], -+ "owners": [ "jamescook", "cros-system-services@9oo91e.qjz9zk" ], - "expiry_milestone": 84 - }, - { -@@ -3762,7 +3762,7 @@ - }, - { - "name": "stop-in-background", -- "owners": [ "chrome-catan@google.com" ], -+ "owners": [ "chrome-catan@9oo91e.qjz9zk" ], - "expiry_milestone": 76 - }, - { -@@ -3772,7 +3772,7 @@ - }, - { - "name": "storage-access-api", -- "owners": [ "brandm@microsoft.com" ], -+ "owners": [ "brandm@m1cr050ft.qjz9zk" ], - "expiry_milestone": 85 - }, - { -@@ -3797,7 +3797,7 @@ - }, - { - "name": "sync-wifi-configurations", -- "owners": ["jonmann", "cros-system-services@google.com"], -+ "owners": ["jonmann", "cros-system-services@9oo91e.qjz9zk"], - "expiry_milestone": 85 - }, - { -@@ -3812,17 +3812,17 @@ - }, - { - "name": "tab-groups", -- "owners": [ "chrome-desktop-ui-seattle@google.com", "bsep" ], -+ "owners": [ "chrome-desktop-ui-seattle@9oo91e.qjz9zk", "bsep" ], - "expiry_milestone": 86 - }, - { - "name": "tab-groups-collapse", -- "owners": [ "chrome-desktop-ui-seattle@google.com", "xialinyan" ], -+ "owners": [ "chrome-desktop-ui-seattle@9oo91e.qjz9zk", "xialinyan" ], - "expiry_milestone": 86 - }, - { - "name": "tab-groups-feedback", -- "owners": [ "chrome-desktop-ui-seattle@google.com", "xialinyan" ], -+ "owners": [ "chrome-desktop-ui-seattle@9oo91e.qjz9zk", "xialinyan" ], - "expiry_milestone": 86 - }, - { -@@ -3867,12 +3867,12 @@ - }, - { - "name": "texture-layer-skip-wait-for-activation", -- "owners": [ "fserb@chromium.org", "aaronhk@chromium.org" ], -+ "owners": [ "fserb@ch40m1um.qjz9zk", "aaronhk@ch40m1um.qjz9zk" ], - "expiry_milestone": 90 - }, - { - "name": "tint-gl-composited-content", -- "owners": [ "chromeos-gfx@google.com" ], -+ "owners": [ "chromeos-gfx@9oo91e.qjz9zk" ], - // This flag is used for QA & development on ChromeOS, which has no way to - // customize switches. - "expiry_milestone": -1 -@@ -3894,7 +3894,7 @@ - }, - { - "name": "top-chrome-touch-ui", -- "owners": [ "pbos", "chrome-desktop-ui-sea@google.com" ], -+ "owners": [ "pbos", "chrome-desktop-ui-sea@9oo91e.qjz9zk" ], - // This flag is used to easily swap into touch-mode for UI development where - // the UI differs significantly between touch/non-touch modes. This is - // exposed in chrome://flags to allow QA and UXers to verify touch-related -@@ -3928,19 +3928,19 @@ - }, - { - "name": "translate-android-manual-trigger", -- "owners": [ "anthonyvd", "frechette", "chrome-language@google.com" ], -+ "owners": [ "anthonyvd", "frechette", "chrome-language@9oo91e.qjz9zk" ], - // This flag is used to force manual Translate IPH to trigger on Android, - // which has no way to set command-line flags. - "expiry_milestone": -1 - }, - { - "name": "translate-force-trigger-on-english", -- "owners": [ "anthonyvd", "frechette", "chrome-language@google.com" ], -+ "owners": [ "anthonyvd", "frechette", "chrome-language@9oo91e.qjz9zk" ], - "expiry_milestone": 78 - }, - { - "name": "translate-ui-bubble-options", -- "owners": [ "anthonyvd", "chrome-language@google.com" ], -+ "owners": [ "anthonyvd", "chrome-language@9oo91e.qjz9zk" ], - "expiry_milestone": 82 - }, - { -@@ -3970,7 +3970,7 @@ - }, - { - "name": "turn-off-streaming-media-caching", -- "owners": [ "shawnpi@microsoft.com" ], -+ "owners": [ "shawnpi@m1cr050ft.qjz9zk" ], - "expiry_milestone": 86 - }, - { -@@ -4019,17 +4019,17 @@ - }, - { - "name": "updated_cellular_activation_ui", -- "owners": [ "azeemarshad", "khorimoto", "vecore", "cros-system-services@google.com" ], -+ "owners": [ "azeemarshad", "khorimoto", "vecore", "cros-system-services@9oo91e.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "usage-stats", -- "owners": [ "pnoland", "chromeshine@google.com" ], -+ "owners": [ "pnoland", "chromeshine@9oo91e.qjz9zk" ], - "expiry_milestone": 80 - }, - { - "name": "use-angle", -- "owners": [ "angle-team@google.com" ], -+ "owners": [ "angle-team@9oo91e.qjz9zk" ], - // This flag is used by certain customers to set ANGLE to use its OpenGL - // backend on Windows. Its usage is small enough that it isn't worth - // promoting this to a chrome://settings entry, but it needs to be readily -@@ -4038,7 +4038,7 @@ - }, - { - "name": "use-fake-device-for-media-stream", -- "owners": [ "mcasas", "chromeos-gfx@google.com" ], -+ "owners": [ "mcasas", "chromeos-gfx@9oo91e.qjz9zk" ], - // This flag is used for ChromeOS media testing to mock a source device. - "expiry_milestone": -1 - }, -@@ -4112,7 +4112,7 @@ - }, - { - "name": "wallet-service-use-sandbox", -- "owners": [ "jsaul@google.com", "payments-autofill-team@google.com" ], -+ "owners": [ "jsaul@9oo91e.qjz9zk", "payments-autofill-team@9oo91e.qjz9zk" ], - // This flag is used by testing teams to run Google Payments calls against - // the development server environment. - "expiry_milestone": -1 -@@ -4159,12 +4159,12 @@ - }, - { - "name": "webxr-incubations", -- "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@chromium.org" ], -+ "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@ch40m1um.qjz9zk" ], - "expiry_milestone": 85 - }, - { - "name": "webxr-runtime", -- "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@chromium.org" ], -+ "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@ch40m1um.qjz9zk" ], - // This flag allows QA and Developers to force running on a particular - // runtime, even if ordinarily Chrome would prefer a different runtime for - // the particular hardware. Useful to debug user issues or multiple runtimes -@@ -4173,12 +4173,12 @@ - }, - { - "name": "win-use-hybrid-spellchecker", -- "owners": [ "gujen@google.com", "chrome-language@google.com" ], -+ "owners": [ "gujen@9oo91e.qjz9zk", "chrome-language@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { - "name": "win-use-native-spellchecker", -- "owners": [ "gujen@google.com", "chrome-language@google.com" ], -+ "owners": [ "gujen@9oo91e.qjz9zk", "chrome-language@9oo91e.qjz9zk" ], - "expiry_milestone": 83 - }, - { -diff --git a/chrome/browser/importer/edge_importer_browsertest_win.cc b/chrome/browser/importer/edge_importer_browsertest_win.cc ---- a/chrome/browser/importer/edge_importer_browsertest_win.cc -+++ b/chrome/browser/importer/edge_importer_browsertest_win.cc -@@ -168,7 +168,7 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporter) { - L"SubLink", - "http://www.links-sublink.com/"}, - {true, 1, {"Links"}, L"TheLink", "http://www.links-thelink.com/"}, -- {false, 0, {}, L"Google Home Page", "http://www.google.com/"}, -+ {false, 0, {}, L"Google Home Page", "http://www.9oo91e.qjz9zk/"}, - {false, 0, {}, L"TheLink", "http://www.links-thelink.com/"}, - {false, 1, {"SubFolder"}, L"Title", "http://www.link.com/"}, - {false, 0, {}, L"WithPortAndQuery", "http://host:8080/cgi?q=query"}, -@@ -184,7 +184,7 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporter) { - L"http://www.links-sublink.com"}, - {L"http://www.links-thelink.com/favicon.ico", - L"http://www.links-thelink.com"}, -- {L"http://www.google.com/favicon.ico", L"http://www.google.com"}, -+ {L"http://www.9oo91e.qjz9zk/favicon.ico", L"http://www.9oo91e.qjz9zk"}, - {L"http://www.links-thelink.com/favicon.ico", - L"http://www.links-thelink.com"}, - {L"http://www.link.com/favicon.ico", L"http://www.link.com"}, -@@ -237,11 +237,11 @@ IN_PROC_BROWSER_TEST_F(EdgeImporterBrowserTest, EdgeImporterLegacyFallback) { - return; - const BookmarkInfo kEdgeBookmarks[] = { -- {false, 0, {}, L"Google", "http://www.google.com/"}}; -+ {false, 0, {}, L"Google", "http://www.9oo91e.qjz9zk/"}}; - std::vector bookmark_entries( - kEdgeBookmarks, kEdgeBookmarks + base::size(kEdgeBookmarks)); - const FaviconGroup kEdgeFaviconGroup[] = { -- {L"http://www.google.com/favicon.ico", L"http://www.google.com/"}}; -+ {L"http://www.9oo91e.qjz9zk/favicon.ico", L"http://www.9oo91e.qjz9zk/"}}; - std::vector favicon_groups( - kEdgeFaviconGroup, kEdgeFaviconGroup + base::size(kEdgeFaviconGroup)); + namespace chrome_browser_net { -diff --git a/chrome/browser/importer/ie_importer_browsertest_win.cc b/chrome/browser/importer/ie_importer_browsertest_win.cc ---- a/chrome/browser/importer/ie_importer_browsertest_win.cc -+++ b/chrome/browser/importer/ie_importer_browsertest_win.cc -@@ -58,7 +58,7 @@ const BookmarkInfo kIEBookmarks[] = { - "http://www.links-thelink.com/"}, - {false, 0, {}, - L"Google Home Page", -- "http://www.google.com/"}, -+ "http://www.9oo91e.qjz9zk/"}, - {false, 0, {}, - L"TheLink", - "http://www.links-thelink.com/"}, -@@ -77,10 +77,10 @@ const BookmarkInfo kIEBookmarks[] = { - }; +-const char DnsProbeRunner::kKnownGoodHostname[] = "google.com"; ++const char DnsProbeRunner::kKnownGoodHostname[] = "9oo91e.qjz9zk"; - const BookmarkInfo kIESortedBookmarks[] = { -- {false, 0, {}, L"a", "http://www.google.com/0"}, -- {false, 1, {"b"}, L"a", "http://www.google.com/1"}, -- {false, 1, {"b"}, L"b", "http://www.google.com/2"}, -- {false, 0, {}, L"c", "http://www.google.com/3"}, -+ {false, 0, {}, L"a", "http://www.9oo91e.qjz9zk/0"}, -+ {false, 1, {"b"}, L"a", "http://www.9oo91e.qjz9zk/1"}, -+ {false, 1, {"b"}, L"b", "http://www.9oo91e.qjz9zk/2"}, -+ {false, 0, {}, L"c", "http://www.9oo91e.qjz9zk/3"}, - }; + namespace { - const base::char16 kIEIdentifyUrl[] = -@@ -110,8 +110,8 @@ struct FaviconGroup { - }; +diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm +--- a/chrome/browser/notifications/notification_platform_bridge_mac.mm ++++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm +@@ -321,7 +321,7 @@ bool NotificationPlatformBridgeMac::SupportsAlerts() { + // Overriden from _NSUserNotificationCenterDelegatePrivate. + // Emitted when a user closes a notification from the notification center. + // This is an undocumented method introduced in 10.8 according to +-// https://bugzilla.mozilla.org/show_bug.cgi?id=852648#c21 ++// https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=852648#c21 + - (void)userNotificationCenter:(NSUserNotificationCenter*)center + didRemoveDeliveredNotifications:(NSArray*)notifications { + for (NSUserNotification* notification in notifications) { +diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc +--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc ++++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc +@@ -129,7 +129,7 @@ void RecordFeatureUsage(content::RenderFrameHost* rfh, + std::string GetHeavyAdReportMessage(const ad_metrics::FrameTreeData& frame_data, + bool will_unload_adframe) { + const char kChromeStatusMessage[] = +- "See https://www.chromestatus.com/feature/4800491902992384?utm_source=devtools"; ++ "See https://www.ch40mestatus.qjz9zk/feature/4800491902992384?utm_source=devtools"; + const char kReportingOnlyMessage[] = + "A future version of Chrome may remove this ad"; + const char kInterventionMessage[] = "Ad was removed"; +diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h +--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h ++++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h +@@ -23,7 +23,7 @@ - const FaviconGroup kIEFaviconGroup[2] = { -- {L"http://www.google.com/favicon.ico", -- {L"http://www.google.com/", -+ {L"http://www.9oo91e.qjz9zk/favicon.ico", -+ {L"http://www.9oo91e.qjz9zk/", - L"http://www.subfolder.com/"}}, - {L"http://example.com/favicon.ico", - {L"http://host:8080/cgi?q=query", -@@ -405,13 +405,13 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, IEImporter) { - NULL); - CreateDirectory(path.AppendASCII("\x0061").value().c_str(), NULL); - ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("Google Home Page.url"), -- L"http://www.google.com/", -- L"http://www.google.com/favicon.ico")); -+ L"http://www.9oo91e.qjz9zk/", -+ L"http://www.9oo91e.qjz9zk/favicon.ico")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("SubFolder\\Title.url"), - L"http://www.link.com/")); - ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("SubFolder.url"), - L"http://www.subfolder.com/", -- L"http://www.google.com/favicon.ico")); -+ L"http://www.9oo91e.qjz9zk/favicon.ico")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("TheLink.url"), - L"http://www.links-thelink.com/")); - ASSERT_TRUE(CreateUrlFileWithFavicon(path.AppendASCII("WithPortAndQuery.url"), -@@ -427,7 +427,7 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, IEImporter) { - links_path.AppendASCII("SubFolderOfLinks").AppendASCII("SubLink.url"), - L"http://www.links-sublink.com/")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("IEDefaultLink.url"), -- L"http://go.microsoft.com/fwlink/?linkid=140813")); -+ L"http://go.m1cr050ft.qjz9zk/fwlink/?linkid=140813")); - base::WriteFile(path.AppendASCII("InvalidUrlFile.url"), "x", 1); - base::WriteFile(path.AppendASCII("PlainTextFile.txt"), "x", 1); + namespace data_reduction_proxy { -@@ -486,13 +486,13 @@ IN_PROC_BROWSER_TEST_F(IEImporterBrowserTest, - CreateDirectory(path.value().c_str(), NULL); - CreateDirectory(path.AppendASCII("b").value().c_str(), NULL); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("a.url"), -- L"http://www.google.com/0")); -+ L"http://www.9oo91e.qjz9zk/0")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("b").AppendASCII("a.url"), -- L"http://www.google.com/1")); -+ L"http://www.9oo91e.qjz9zk/1")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("b").AppendASCII("b.url"), -- L"http://www.google.com/2")); -+ L"http://www.9oo91e.qjz9zk/2")); - ASSERT_TRUE(CreateUrlFile(path.AppendASCII("c.url"), -- L"http://www.google.com/3")); -+ L"http://www.9oo91e.qjz9zk/3")); +-const char kDefaultTestUrl[] = "http://google.com"; ++const char kDefaultTestUrl[] = "http://9oo91e.qjz9zk"; - struct BadBinaryData { - const char* data; -diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm ---- a/chrome/browser/local_discovery/service_discovery_client_mac.mm -+++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm -@@ -195,7 +195,7 @@ ServiceWatcherImplMac::NetServiceBrowserContainer:: - // weak delegate during deallocation, so a subsequently-deallocated delegate - // attempts to clear the pointer to itself in an NSNetServiceBrowser that's - // already gone. -- // https://crbug.com/657495, https://openradar.appspot.com/28943305 -+ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 - [browser_ setDelegate:nil]; + // Attaches a new |PreviewsUserData| to the given |navigation_handle|. + previews::PreviewsUserData* PreviewsDataForNavigationHandle( +diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc +--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc ++++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc +@@ -22,7 +22,7 @@ PageLoadMetricsObserverTestHarness::~PageLoadMetricsObserverTestHarness() {} + void PageLoadMetricsObserverTestHarness::SetUp() { + ChromeRenderViewHostTestHarness::SetUp(); + SetContents(CreateTestWebContents()); +- NavigateAndCommit(GURL("http://www.google.com")); ++ NavigateAndCommit(GURL("http://www.9oo91e.qjz9zk")); + // Page load metrics depends on UKM source URLs being recorded, so make sure + // the SourceUrlRecorderWebContentsObserver is instantiated. + ukm::InitializeSourceUrlRecorderForWebContents(web_contents()); +diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +--- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc ++++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +@@ -97,7 +97,7 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = + namespace { - // Ensure the delegate clears all references to itself, which it had added as -@@ -316,7 +316,7 @@ ServiceResolverImplMac::NetServiceContainer::~NetServiceContainer() { - // delegate during deallocation, so a subsequently-deallocated delegate - // attempts to clear the pointer to itself in an NSNetService that's already - // gone. -- // https://crbug.com/657495, https://openradar.appspot.com/28943305 -+ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 - [service_ setDelegate:nil]; + bool IsDocsSite(const GURL& url) { +- return url.host_piece() == "docs.google.com"; ++ return url.host_piece() == "docs.9oo91e.qjz9zk"; } -diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc ---- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc -+++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc -@@ -35,7 +35,7 @@ std::vector GetOrigins(const MediaSource::Id& source_id) { - return base::StartsWith(source_id, kMirroringAppPrefix, - base::CompareCase::SENSITIVE) - ? std::vector( -- {url::Origin::Create(GURL("https://docs.google.com"))}) -+ {url::Origin::Create(GURL("https://docs.9oo91e.qjz9zk"))}) - : std::vector(); - } + bool IsForwardBackLoad(ui::PageTransition transition) { +diff --git a/chrome/browser/password_manager/password_manager_signin_intercept_test_helper.cc b/chrome/browser/password_manager/password_manager_signin_intercept_test_helper.cc +--- a/chrome/browser/password_manager/password_manager_signin_intercept_test_helper.cc ++++ b/chrome/browser/password_manager/password_manager_signin_intercept_test_helper.cc +@@ -34,7 +34,7 @@ + namespace { -diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc ---- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc -+++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc -@@ -557,12 +557,12 @@ std::vector DialMediaRouteProvider::GetOrigins( - base::flat_map>> - origin_white_list( - {{"YouTube", -- {CreateOrigin("https://tv.youtube.com"), -- CreateOrigin("https://tv-green-qa.youtube.com"), -- CreateOrigin("https://tv-release-qa.youtube.com"), -- CreateOrigin("https://web-green-qa.youtube.com"), -- CreateOrigin("https://web-release-qa.youtube.com"), -- CreateOrigin("https://www.youtube.com")}}, -+ {CreateOrigin("https://tv.y0u1ub3.qjz9zk"), -+ CreateOrigin("https://tv-green-qa.y0u1ub3.qjz9zk"), -+ CreateOrigin("https://tv-release-qa.y0u1ub3.qjz9zk"), -+ CreateOrigin("https://web-green-qa.y0u1ub3.qjz9zk"), -+ CreateOrigin("https://web-release-qa.y0u1ub3.qjz9zk"), -+ CreateOrigin("https://www.y0u1ub3.qjz9zk")}}, - {"Netflix", {CreateOrigin("https://www.netflix.com")}}, - {"Pandora", {CreateOrigin("https://www.pandora.com")}}, - {"Radio", {CreateOrigin("https://www.pandora.com")}}, -diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc ---- a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc -+++ b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc -@@ -36,7 +36,7 @@ const char kAdviseOnGclientSolution[] = - "You also need to add this solution to your .gclient:\n" - "{\n" - " \"name\" : \"webrtc.DEPS\",\n" -- " \"url\" : \"https://chromium.googlesource.com/chromium/deps/" -+ " \"url\" : \"https://chromium.9oo91esource.qjz9zk/chromium/deps/" - "webrtc/webrtc.DEPS\",\n" - "}\n" - "and run gclient sync. This will download the required ref files."; -diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc ---- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc -+++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc -@@ -123,7 +123,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { - } // namespace - - const char WebRtcEventLogUploaderImpl::kUploadURL[] = -- "https://clients2.google.com/cr/report"; -+ "https://clients2.9oo91e.qjz9zk/cr/report"; - - std::unique_ptr - WebRtcEventLogUploaderImpl::Factory::Create(const WebRtcLogFileInfo& log_file, -diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc ---- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc -+++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc -@@ -463,7 +463,7 @@ void WebRtcLogUploader::UploadCompressedLog( - "Not implemented, it would be good to do so." - })"); - -- constexpr char kUploadURL[] = "https://clients2.google.com/cr/report"; -+ constexpr char kUploadURL[] = "https://clients2.9oo91e.qjz9zk/cr/report"; - auto resource_request = std::make_unique(); - resource_request->url = !upload_url_for_testing_.is_empty() - ? upload_url_for_testing_ -diff --git a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc ---- a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc -+++ b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc -@@ -33,7 +33,7 @@ std::unique_ptr InitializeProfileForSync( - username = info.email; - #endif - if (username.empty()) { -- username = "user@gmail.com"; -+ username = "user@9ma1l.qjz9zk"; - } - - return ProfileSyncServiceHarness::Create( -diff --git a/chrome/browser/nacl_host/nacl_infobar_delegate.cc b/chrome/browser/nacl_host/nacl_infobar_delegate.cc ---- a/chrome/browser/nacl_host/nacl_infobar_delegate.cc -+++ b/chrome/browser/nacl_host/nacl_infobar_delegate.cc -@@ -32,7 +32,7 @@ base::string16 NaClInfoBarDelegate::GetLinkText() const { - } - - GURL NaClInfoBarDelegate::GetLinkURL() const { -- return GURL("https://support.google.com/chrome/?p=ib_nacl"); -+ return GURL("https://support.9oo91e.qjz9zk/chrome/?p=ib_nacl"); - } - - base::string16 NaClInfoBarDelegate::GetMessageText() const { -diff --git a/chrome/browser/net/dns_probe_runner.cc b/chrome/browser/net/dns_probe_runner.cc ---- a/chrome/browser/net/dns_probe_runner.cc -+++ b/chrome/browser/net/dns_probe_runner.cc -@@ -18,7 +18,7 @@ - - namespace chrome_browser_net { - --const char DnsProbeRunner::kKnownGoodHostname[] = "google.com"; -+const char DnsProbeRunner::kKnownGoodHostname[] = "9oo91e.qjz9zk"; - - namespace { - -diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm ---- a/chrome/browser/notifications/notification_platform_bridge_mac.mm -+++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm -@@ -510,7 +510,7 @@ bool NotificationPlatformBridgeMac::SupportsAlerts() { - // Overriden from _NSUserNotificationCenterDelegatePrivate. - // Emitted when a user closes a notification from the notification center. - // This is an undocumented method introduced in 10.8 according to --// https://bugzilla.mozilla.org/show_bug.cgi?id=852648#c21 -+// https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=852648#c21 - - (void)userNotificationCenter:(NSUserNotificationCenter*)center - didRemoveDeliveredNotifications:(NSArray*)notifications { - for (NSUserNotification* notification in notifications) { -diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc ---- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc -+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc -@@ -102,7 +102,7 @@ void RecordFeatureUsage(content::RenderFrameHost* rfh, - std::string GetHeavyAdReportMessage(const FrameData& frame_data, - bool reporting_only) { - const char kChromeStatusMessage[] = -- "See https://www.chromestatus.com/feature/4800491902992384"; -+ "See https://www.ch40mestatus.qjz9zk/feature/4800491902992384"; - const char kReportingOnlyMessage[] = - "A future version of Chrome will remove this ad"; - const char kInterventionMessage[] = "Ad was removed"; -diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h ---- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h -+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_test_utils.h -@@ -23,7 +23,7 @@ - - namespace data_reduction_proxy { - --const char kDefaultTestUrl[] = "http://google.com"; -+const char kDefaultTestUrl[] = "http://9oo91e.qjz9zk"; - - // Attaches a new |PreviewsUserData| to the given |navigation_handle|. - previews::PreviewsUserData* PreviewsDataForNavigationHandle( -diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc ---- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc -+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc -@@ -22,7 +22,7 @@ PageLoadMetricsObserverTestHarness::~PageLoadMetricsObserverTestHarness() {} - void PageLoadMetricsObserverTestHarness::SetUp() { - ChromeRenderViewHostTestHarness::SetUp(); - SetContents(CreateTestWebContents()); -- NavigateAndCommit(GURL("http://www.google.com")); -+ NavigateAndCommit(GURL("http://www.9oo91e.qjz9zk")); - // Page load metrics depends on UKM source URLs being recorded, so make sure - // the SourceUrlRecorderWebContentsObserver is instantiated. - ukm::InitializeSourceUrlRecorderForWebContents(web_contents()); -diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc ---- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc -+++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc -@@ -133,11 +133,11 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = - namespace { + constexpr char kGaiaUsername[] = "username"; +-constexpr char kGaiaEmail[] = "username@gmail.com"; ++constexpr char kGaiaEmail[] = "username@9ma1l.qjz9zk"; + constexpr char kGaiaId[] = "test_gaia_id"; - bool IsInboxSite(const GURL& url) { -- return url.host_piece() == "inbox.google.com"; -+ return url.host_piece() == "inbox.9oo91e.qjz9zk"; - } - - bool IsDocsSite(const GURL& url) { -- return url.host_piece() == "docs.google.com"; -+ return url.host_piece() == "docs.9oo91e.qjz9zk"; - } - - bool IsForwardBackLoad(ui::PageTransition transition) { + } // namespace diff --git a/chrome/browser/pepper_broker_infobar_delegate.cc b/chrome/browser/pepper_broker_infobar_delegate.cc --- a/chrome/browser/pepper_broker_infobar_delegate.cc +++ b/chrome/browser/pepper_broker_infobar_delegate.cc -@@ -65,7 +65,7 @@ base::string16 PepperBrokerInfoBarDelegate::GetLinkText() const { +@@ -66,7 +66,7 @@ base::string16 PepperBrokerInfoBarDelegate::GetLinkText() const { } GURL PepperBrokerInfoBarDelegate::GetLinkURL() const { @@ -7412,22 +5657,46 @@ diff --git a/chrome/browser/pepper_broker_infobar_delegate.cc b/chrome/browser/p } base::string16 PepperBrokerInfoBarDelegate::GetMessageText() const { -diff --git a/chrome/browser/platform_util_chromeos.cc b/chrome/browser/platform_util_chromeos.cc ---- a/chrome/browser/platform_util_chromeos.cc -+++ b/chrome/browser/platform_util_chromeos.cc -@@ -30,7 +30,7 @@ namespace platform_util { - namespace { +diff --git a/chrome/browser/performance_hints/performance_hints_features.cc b/chrome/browser/performance_hints/performance_hints_features.cc +--- a/chrome/browser/performance_hints/performance_hints_features.cc ++++ b/chrome/browser/performance_hints/performance_hints_features.cc +@@ -19,7 +19,7 @@ const base::Feature kPerformanceHintsHandleRewrites{ + "PerformanceHintsHandleRewrites", base::FEATURE_ENABLED_BY_DEFAULT}; + constexpr base::FeatureParam kRewriteConfig{ + &kPerformanceHintsHandleRewrites, "rewrite_config", +- "www.google.com/url?url"}; ++ "www.9oo91e.qjz9zk/url?url"}; + + constexpr base::FeatureParam kUseFastHostHints{ + &kPerformanceHintsObserver, "use_fast_host_hints", true}; +diff --git a/chrome/browser/permissions/grouped_permission_infobar_delegate_android.cc b/chrome/browser/permissions/grouped_permission_infobar_delegate_android.cc +--- a/chrome/browser/permissions/grouped_permission_infobar_delegate_android.cc ++++ b/chrome/browser/permissions/grouped_permission_infobar_delegate_android.cc +@@ -31,7 +31,7 @@ using QuietUiReason = + + // The URL for when the user clicks the "Learn more" link. + constexpr char kNotificationsHelpUrl[] = +- "https://support.google.com/chrome/answer/3220216"; ++ "https://support.9oo91e.qjz9zk/chrome/answer/3220216"; - const char kGmailComposeUrl[] = -- "https://mail.google.com/mail/?extsrc=mailto&url="; -+ "https://mail.9oo91e.qjz9zk/mail/?extsrc=mailto&url="; + } // namespace - void ShowWarningOnOpenOperationResult(Profile* profile, - const base::FilePath& path, +diff --git a/chrome/browser/policy/extension_force_install_mixin.cc b/chrome/browser/policy/extension_force_install_mixin.cc +--- a/chrome/browser/policy/extension_force_install_mixin.cc ++++ b/chrome/browser/policy/extension_force_install_mixin.cc +@@ -72,7 +72,7 @@ constexpr char kUpdateManifestFileNameTemplate[] = "%s.xml"; + // Template for the update manifest contents. + constexpr char kUpdateManifestTemplate[] = + R"( +- ++ + + + diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/policy_test_utils.cc --- a/chrome/browser/policy/policy_test_utils.cc +++ b/chrome/browser/policy/policy_test_utils.cc -@@ -216,7 +216,7 @@ void PolicyTest::ClearEnableFlag(const keyboard::KeyboardEnableFlag& flag) { +@@ -248,7 +248,7 @@ void PolicyTest::ClearEnableFlag(const keyboard::KeyboardEnableFlag& flag) { // static GURL PolicyTest::GetExpectedSearchURL(bool expect_safe_search) { @@ -7439,18 +5708,18 @@ diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/ diff --git a/chrome/browser/policy/policy_test_utils.h b/chrome/browser/policy/policy_test_utils.h --- a/chrome/browser/policy/policy_test_utils.h +++ b/chrome/browser/policy/policy_test_utils.h -@@ -69,7 +69,7 @@ class PolicyTest : public InProcessBrowserTest { +@@ -90,7 +90,7 @@ class PolicyTest : public InProcessBrowserTest { static void CheckSafeSearch(Browser* browser, bool expect_safe_search, - const std::string& url = "http://google.com/"); + const std::string& url = "http://9oo91e.qjz9zk/"); - static void CheckYouTubeRestricted( - int youtube_restrict_mode, -diff --git a/chrome/browser/prerender/tools/prerender_test_server/index.html b/chrome/browser/prerender/tools/prerender_test_server/index.html ---- a/chrome/browser/prerender/tools/prerender_test_server/index.html -+++ b/chrome/browser/prerender/tools/prerender_test_server/index.html + static void CheckYouTubeRestricted(int youtube_restrict_mode, + const net::HttpRequestHeaders& headers); +diff --git a/chrome/browser/prefetch/no_state_prefetch/tools/prerender_test_server/index.html b/chrome/browser/prefetch/no_state_prefetch/tools/prerender_test_server/index.html +--- a/chrome/browser/prefetch/no_state_prefetch/tools/prerender_test_server/index.html ++++ b/chrome/browser/prefetch/no_state_prefetch/tools/prerender_test_server/index.html @@ -13,7 +13,7 @@
@@ -7460,10 +5729,40 @@ diff --git a/chrome/browser/prerender/tools/prerender_test_server/index.html b/c

+diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc +--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc ++++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc +@@ -45,7 +45,7 @@ GURL PrefetchProxyProxyHost() { + if (url.is_valid() && url.SchemeIs(url::kHttpsScheme)) { + return url; + } +- return GURL("https://tunnel.googlezip.net/"); ++ return GURL("https://tunnel.9oo91e21p.qjz9zk/"); + } + + std::string PrefetchProxyProxyHeaderKey() { +@@ -157,7 +157,7 @@ GURL PrefetchProxyTLSCanaryCheckURL() { + if (url.is_valid()) { + return url; + } +- return GURL("http://tls.tunnel.check.googlezip.net/connect"); ++ return GURL("http://tls.tunnel.check.9oo91e21p.qjz9zk/connect"); + } + + GURL PrefetchProxyDNSCanaryCheckURL() { +@@ -166,7 +166,7 @@ GURL PrefetchProxyDNSCanaryCheckURL() { + if (url.is_valid()) { + return url; + } +- return GURL("http://dns.tunnel.check.googlezip.net/connect"); ++ return GURL("http://dns.tunnel.check.9oo91e21p.qjz9zk/connect"); + } + + base::TimeDelta PrefetchProxyCanaryCheckCacheLifetime() { diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc -@@ -373,7 +373,7 @@ bool IsLockAvailable(Profile* profile) { +@@ -360,7 +360,7 @@ bool IsLockAvailable(Profile* profile) { // TODO(mlerman): Prohibit only users who authenticate using SAML. Until then, // prohibited users who use hosted domains (aside from google.com). @@ -7487,12 +5786,12 @@ diff --git a/chrome/browser/push_messaging/push_messaging_constants.cc b/chrome/ diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc --- a/chrome/browser/push_messaging/push_messaging_service_impl.cc +++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc -@@ -87,7 +87,7 @@ const char kSilentPushUnsupportedMessage[] = +@@ -90,7 +90,7 @@ const char kSilentPushUnsupportedMessage[] = "Chrome currently only supports the Push API for subscriptions that will " "result in user-visible messages. You can indicate this by calling " "pushManager.subscribe({userVisibleOnly: true}) instead. See " - "https://goo.gl/yqv4Q4 for more details."; -+ "https://goo.gl.qjz9zk.qjz9zk/yqv4Q4 for more details."; ++ "https://goo.gl.qjz9zk/yqv4Q4 for more details."; // Message displayed in the console (as an error) when a GCM Sender ID is used // to create a subscription, which is unsupported. The subscription request will @@ -7553,39 +5852,53 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/backgroun diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js -@@ -193,7 +193,7 @@ CommandHandler.onCommand = function(command) { +@@ -203,7 +203,7 @@ CommandHandler.onCommand = function(command) { QueueMode.FLUSH); return false; case 'reportIssue': - let url = 'https://code.google.com/p/chromium/issues/entry?' + + let url = 'https://code.9oo91e.qjz9zk/p/chromium/issues/entry?' + - 'labels=Type-Bug,Pri-2,cvox2,OS-Chrome&' + - 'components=UI>accessibility&' + + 'labels=Type-Bug,Pri-2,OS-Chrome&' + + 'components=OS>Accessibility>ChromeVox&' + 'description='; -diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js ---- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js -+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js -@@ -72,7 +72,7 @@ ChromeVoxPrefs = class { +@@ -1487,13 +1487,13 @@ CommandHandler.init = function() { } - // Since language switching is currently an experimental feature, ensure - // that it is off if the feature flag is absent. -- chrome.commandLinePrivate.hasSwitch( -+ ch40me.qjz9zkmandLinePrivate.hasSwitch( - 'enable-experimental-accessibility-chromevox-language-switching', - function(enabled) { - if (!enabled) { -@@ -218,9 +218,9 @@ ChromeVoxPrefs.DEFAULT_PREFS = { - 'position': '{}', - 'siteSpecificEnhancements': true, - 'siteSpecificScriptBase': -- 'https://ssl.gstatic.com/accessibility/javascript/ext/', -+ 'https://ssl.95tat1c.qjz9zk/accessibility/javascript/ext/', - 'siteSpecificScriptLoader': -- 'https://ssl.gstatic.com/accessibility/javascript/ext/loader.js', -+ 'https://ssl.95tat1c.qjz9zk/accessibility/javascript/ext/loader.js', - 'speakTextUnderMouse': false, - 'sticky': false, - 'typingEcho': 0, + }); + +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-language-detection', (enabled) => { + if (enabled) { + CommandHandler.languageLoggingEnabled_ = true; + } + }); +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-language-detection-dynamic', + (enabled) => { + if (enabled) { +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/i_tutorial/components/i_tutorial.js b/chrome/browser/resources/chromeos/accessibility/chromevox/i_tutorial/components/i_tutorial.js +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/i_tutorial/components/i_tutorial.js ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/i_tutorial/components/i_tutorial.js +@@ -848,15 +848,15 @@ Polymer({ + const resources = [ + { + msgId: 'next_command_reference', +- link: 'https://www.chromevox.com/next_keyboard_shortcuts.html' ++ link: 'https://www.ch40mevox.qjz9zk/next_keyboard_shortcuts.html' + }, + { + msgId: 'chrome_keyboard_shortcuts', +- link: 'https://support.google.com/chromebook/answer/183101?hl=en' ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/183101?hl=en' + }, + { + msgId: 'touchscreen_accessibility', +- link: 'https://support.google.com/chromebook/answer/6103702?hl=en' ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/6103702?hl=en' + }, + ]; + for (const resource of resources) { diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css --- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css @@ -7598,18 +5911,6 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/o body { margin: 0 0 20px 0; -diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js ---- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js -+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js -@@ -101,7 +101,7 @@ OptionsPage = class { - } - } - -- chrome.commandLinePrivate.hasSwitch( -+ ch40me.qjz9zkmandLinePrivate.hasSwitch( - 'enable-experimental-accessibility-chromevox-language-switching', - function(enabled) { - if (!enabled) { diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html @@ -7622,40 +5923,6 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/pan -diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js ---- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js -+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js -@@ -155,7 +155,7 @@ Panel = class { - */ - Panel.menuSearchEnabled_ = false; - -- chrome.commandLinePrivate.hasSwitch( -+ ch40me.qjz9zkmandLinePrivate.hasSwitch( - 'enable-experimental-accessibility-chromevox-search-menus', - function(enabled) { - Panel.menuSearchEnabled_ = enabled; -diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial.js ---- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial.js -+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial.js -@@ -294,15 +294,15 @@ Tutorial.PAGES = [ - {msgid: 'tutorial_learn_more'}, - { - msgid: 'next_command_reference', -- link: 'http://www.chromevox.com/next_keyboard_shortcuts.html' -+ link: 'http://www.ch40mevox.qjz9zk/next_keyboard_shortcuts.html' - }, - { - msgid: 'chrome_keyboard_shortcuts', -- link: 'https://support.google.com/chromebook/answer/183101?hl=en' -+ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/183101?hl=en' - }, - { - msgid: 'touchscreen_accessibility', -- link: 'https://support.google.com/chromebook/answer/6103702?hl=en' -+ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/6103702?hl=en' - }, - ], - ]; diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py --- a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py @@ -7695,7 +5962,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/web diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 --- a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 -@@ -30,14 +30,14 @@ +@@ -31,14 +31,14 @@ "tts", "virtualKeyboardPrivate", "chrome://resources/", @@ -7725,20 +5992,20 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/opt +@import url(https://f0ntz.9oo91e8p1.qjz9zk/css?family=Roboto); body { - margin: 0 0 20px 0; + margin: 0 0 20px 0; diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js -@@ -14,7 +14,7 @@ const SELECT_TO_SPEAK_TRAY_CLASS_NAME = +@@ -47,7 +47,7 @@ const FLOATING_MENU_BUTTON_CLASS_NAME = 'FloatingMenuButton'; // Matches one of the known GSuite apps which need the clipboard to find and // read selected text. Includes sandbox and non-sandbox versions. const GSUITE_APP_REGEXP = - /^https:\/\/docs\.(?:sandbox\.)?google\.com\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; + /^https:\/\/docs\.(?:sandbox\.)?9oo91e\.qjz9zk\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; - /** - * Determines if a node is in one of the known Google GSuite apps that needs -@@ -129,7 +129,7 @@ class SelectToSpeak { + // A RGBA hex string for the default background shading color, which is black at + // 40% opacity (hex 66). This should be equivalent to using +@@ -253,7 +253,7 @@ export class SelectToSpeak { this.enableLanguageDetectionIntegration_ = false; // TODO(chrishall): do we want to (also?) expose this in preferences? @@ -7747,7 +6014,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel 'enable-experimental-accessibility-language-detection', (result) => { this.enableLanguageDetectionIntegration_ = result; }); -@@ -444,8 +444,8 @@ class SelectToSpeak { +@@ -893,8 +893,8 @@ export class SelectToSpeak { chrome.tabs.query( { url: [ @@ -7758,22 +6025,10 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel ] }, (tabs) => { -diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js ---- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js -+++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js -@@ -41,7 +41,7 @@ chrome.metricsPrivate = { - MetricTypeType: {HISTOGRAM_LINEAR: 1} - }; - --chrome.commandLinePrivate = { -+ch40me.qjz9zkmandLinePrivate = { - hasSwitch() {} - }; - diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 -@@ -35,8 +35,8 @@ +@@ -20,8 +20,8 @@ "storage", "tabs", "tts", @@ -7784,7 +6039,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_man "clipboard", "clipboardRead", "clipboardWrite" -@@ -48,8 +48,8 @@ +@@ -33,8 +33,8 @@ "options_page": "select_to_speak/options.html", "content_scripts": [ { @@ -7794,11 +6049,11 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_man + "https://docs.sandbox.9oo91e.qjz9zk/document*" ], "all_frames": true, "js": [ - "select_to_speak/select_to_speak_gdocs_script.js" + "common/gdocs_script.js" diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js --- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js -@@ -35,7 +35,7 @@ class SwitchAccess { +@@ -38,7 +38,7 @@ export class SwitchAccess { */ this.enableImprovedTextInput_ = false; @@ -7807,19 +6062,35 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switc 'enable-experimental-accessibility-switch-access-text', (result) => { this.enableImprovedTextInput_ = result; }); -diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision.js ---- a/chrome/browser/resources/chromeos/add_supervision/add_supervision.js -+++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision.js -@@ -7,14 +7,14 @@ +diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +--- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +@@ -28,8 +28,8 @@ + "default_locale": "en", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +--- a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js ++++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +@@ -16,15 +16,15 @@ import {AddSupervisionAPIServer} from './add_supervision_api_server.js'; * @const {!Array} */ const ALLOWED_HOSTS = [ - 'google.com', - 'gstatic.com', - 'googleapis.com', +- 'google-analytics.com', + '9oo91e.qjz9zk', + '95tat1c.qjz9zk', + '9oo91eapis.qjz9zk', ++ '9oo91e-analytics.qjz9zk', // FIFE avatar images (lh3-lh6). See http://go/fife-domains - 'lh3.googleusercontent.com', - 'lh4.googleusercontent.com', @@ -7922,7 +6193,7 @@ diff --git a/chrome/browser/resources/chromeos/arc_support/playstore.js b/chrome diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js --- a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js +++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js -@@ -46,7 +46,7 @@ Polymer({ +@@ -52,7 +52,7 @@ Polymer({ * @private {string} */ urlTemplate_: @@ -7931,42 +6202,6 @@ diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_p /** * Whether try to reload with the default url when a 404 error occurred. -diff --git a/chrome/browser/resources/chromeos/camera/src/js/lib/google-analytics-bundle.js b/chrome/browser/resources/chromeos/camera/src/js/lib/google-analytics-bundle.js ---- a/chrome/browser/resources/chromeos/camera/src/js/lib/google-analytics-bundle.js -+++ b/chrome/browser/resources/chromeos/camera/src/js/lib/google-analytics-bundle.js -@@ -96,7 +96,7 @@ var ce=function(a,b){return{type:b,lengthComputable:a.lengthComputable,loaded:a. - h.L=function(){ee(this);for(var a=this.c.v(),b=this.c.L(),c=[],d=0;dthis.Ia?c.I({status:"payload-too-big",ta:Ua("Encoded hit length == %s, but should be <= %s.",d.length,this.Ia)}):Vd(this.Uc,function(){c.G(Gd)},d);return c};var he=function(a,b){var c=new de;c.add(Ga.name,a);Xa(b,function(a,b){c.add(a.name,b.toString())});return c.toString()};var ie=function(a,b,c){this.j=a;this.Tc=b;this.Ia=c};ie.prototype.cb=function(){if(!this.D){if(!Cc(this.j.ma).K)throw Error("Cannot construct shared channel prior to settings being ready.");new zd;var a=new Bd(new ge(this.Tc,this.Ia)),b=new Id;this.D=new Ad(this.j,new Jd(this.j,new Hd(b,a)))}return this.D};var je=new z,ke=function(){Ea||(Ea=new T(new od));return Ea};v("goog.async.Deferred",Q);v("goog.async.Deferred.prototype.addCallback",Q.prototype.w);v("goog.async.Deferred.prototype.callback",Q.prototype.G);v("goog.async.Deferred.prototype.then",Q.prototype.then);v("goog.events.EventTarget",O);v("goog.events.EventTarget.prototype.listen",O.prototype.listen); --v("analytics.getService",function(a,b){var c=je.get(a,null),d=b||chrome.runtime.getManifest().version;if(null===c){c=ke();if(!Fa){var e=ke();Fa=new ud(e,new ie(e,"https://www.google-analytics.com/collect",8192))}c=new bd("ca1.6.0",a,d,c,Fa);je.set(a,c)}return c});v("analytics.internal.GoogleAnalyticsService",bd);v("analytics.internal.GoogleAnalyticsService.prototype.getTracker",bd.prototype.tc);v("analytics.internal.GoogleAnalyticsService.prototype.getConfig",bd.prototype.rc); -+v("analytics.getService",function(a,b){var c=je.get(a,null),d=b||chrome.runtime.getManifest().version;if(null===c){c=ke();if(!Fa){var e=ke();Fa=new ud(e,new ie(e,"https://www.9oo91e-analytics.qjz9zk/collect",8192))}c=new bd("ca1.6.0",a,d,c,Fa);je.set(a,c)}return c});v("analytics.internal.GoogleAnalyticsService",bd);v("analytics.internal.GoogleAnalyticsService.prototype.getTracker",bd.prototype.tc);v("analytics.internal.GoogleAnalyticsService.prototype.getConfig",bd.prototype.rc); - v("analytics.internal.ServiceSettings",T);v("analytics.internal.ServiceSettings.prototype.setTrackingPermitted",T.prototype.Wc);v("analytics.internal.ServiceSettings.prototype.isTrackingPermitted",T.prototype.Fa);v("analytics.internal.ServiceSettings.prototype.setSampleRate",T.prototype.Vc);v("analytics.internal.ServiceSettings.prototype.resetUserId",T.prototype.Nc);v("analytics.internal.ServiceTracker",S);v("analytics.internal.ServiceTracker.prototype.send",S.prototype.send); - v("analytics.internal.ServiceTracker.prototype.sendAppView",S.prototype.Pc);v("analytics.internal.ServiceTracker.prototype.sendEvent",S.prototype.Qc);v("analytics.internal.ServiceTracker.prototype.sendSocial",S.prototype.Sc);v("analytics.internal.ServiceTracker.prototype.sendException",S.prototype.Rc);v("analytics.internal.ServiceTracker.prototype.sendTiming",S.prototype.Pb);v("analytics.internal.ServiceTracker.prototype.startTiming",S.prototype.Zc);v("analytics.internal.ServiceTracker.Timing",ad); - v("analytics.internal.ServiceTracker.Timing.prototype.send",ad.prototype.send);v("analytics.internal.ServiceTracker.prototype.forceSessionStart",S.prototype.qc);v("analytics.internal.ServiceTracker.prototype.addFilter",S.prototype.Y);v("analytics.internal.FilterChannel.Hit",R);v("analytics.internal.FilterChannel.Hit.prototype.getHitType",R.prototype.Ab);v("analytics.internal.FilterChannel.Hit.prototype.getParameters",R.prototype.ba);v("analytics.internal.FilterChannel.Hit.prototype.cancel",R.prototype.cancel); -diff --git a/chrome/browser/resources/chromeos/camera/src/js/util.js b/chrome/browser/resources/chromeos/camera/src/js/util.js ---- a/chrome/browser/resources/chromeos/camera/src/js/util.js -+++ b/chrome/browser/resources/chromeos/camera/src/js/util.js -@@ -282,7 +282,7 @@ export function isWindowFullSize() { - */ - export function openHelp() { - window.open( -- 'https://support.google.com/chromebook/?p=camera_usage_on_chromebook'); -+ 'https://support.9oo91e.qjz9zk/chromebook/?p=camera_usage_on_chromebook'); - } - - /** -diff --git a/chrome/browser/resources/chromeos/camera/src/manifest.json b/chrome/browser/resources/chromeos/camera/src/manifest.json ---- a/chrome/browser/resources/chromeos/camera/src/manifest.json -+++ b/chrome/browser/resources/chromeos/camera/src/manifest.json -@@ -20,7 +20,7 @@ - "fileManagerPrivate", - "fileSystem.requestDownloads", - {"fileSystem": ["write", "directory"]}, -- "https://www.google-analytics.com/" -+ "https://www.9oo91e-analytics.qjz9zk/" - ], - "app": { - "background": { diff --git a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json --- a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json +++ b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json @@ -7993,26 +6228,283 @@ diff --git a/chrome/browser/resources/chromeos/echo/manifest.json b/chrome/brows "permissions": [ "alarms", "cookies", -@@ -40,8 +40,8 @@ +@@ -37,40 +37,40 @@ + ], + "persistent": false + }, +- // Allow all domains listed in https://www.google.com/supported_domains ++ // Allow all domains listed in https://www.9oo91e.qjz9zk/supported_domains "externally_connectable": { "ids": ["*"], "matches": [ - "*://www.google.com/*chromebook/*", -- "*://www.google.com.au/*chromebook/*", + "*://www.9oo91e.qjz9zk/*chromebook/*", + "*://www.google.ad/*chromebook/*", + "*://www.google.ae/*chromebook/*", +- "*://www.google.com.af/*chromebook/*", +- "*://www.google.com.ag/*chromebook/*", +- "*://www.google.com.ai/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.af/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ag/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ai/*chromebook/*", + "*://www.google.al/*chromebook/*", + "*://www.google.am/*chromebook/*", + "*://www.google.co.ao/*chromebook/*", +- "*://www.google.com.ar/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ar/*chromebook/*", + "*://www.google.as/*chromebook/*", + "*://www.google.at/*chromebook/*", +- "*://www.google.com.au/*chromebook/*", + "*://www.9oo91e.qjz9zk.au/*chromebook/*", + "*://www.google.az/*chromebook/*", + "*://www.google.ba/*chromebook/*", +- "*://www.google.com.bd/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bd/*chromebook/*", + "*://www.google.be/*chromebook/*", + "*://www.google.bf/*chromebook/*", + "*://www.google.bg/*chromebook/*", +- "*://www.google.com.bh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bh/*chromebook/*", + "*://www.google.bi/*chromebook/*", + "*://www.google.bj/*chromebook/*", +- "*://www.google.com.bn/*chromebook/*", +- "*://www.google.com.bo/*chromebook/*", +- "*://www.google.com.br/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bo/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.br/*chromebook/*", + "*://www.google.bs/*chromebook/*", + "*://www.google.bt/*chromebook/*", + "*://www.google.co.bw/*chromebook/*", + "*://www.google.by/*chromebook/*", +- "*://www.google.com.bz/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bz/*chromebook/*", "*://www.google.ca/*chromebook/*", + "*://www.google.cd/*chromebook/*", + "*://www.google.cf/*chromebook/*", +@@ -81,38 +81,38 @@ + "*://www.google.cl/*chromebook/*", + "*://www.google.cm/*chromebook/*", + "*://www.google.cn/*chromebook/*", +- "*://www.google.com.co/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.co/*chromebook/*", + "*://www.google.co.cr/*chromebook/*", +- "*://www.google.com.cu/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cu/*chromebook/*", + "*://www.google.cv/*chromebook/*", +- "*://www.google.com.cy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cy/*chromebook/*", + "*://www.google.cz/*chromebook/*", + "*://www.google.de/*chromebook/*", + "*://www.google.dj/*chromebook/*", + "*://www.google.dk/*chromebook/*", + "*://www.google.dm/*chromebook/*", +- "*://www.google.com.do/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.do/*chromebook/*", + "*://www.google.dz/*chromebook/*", +- "*://www.google.com.ec/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ec/*chromebook/*", + "*://www.google.ee/*chromebook/*", +- "*://www.google.com.eg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.eg/*chromebook/*", + "*://www.google.es/*chromebook/*", +- "*://www.google.com.et/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.et/*chromebook/*", + "*://www.google.fi/*chromebook/*", +- "*://www.google.com.fj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.fj/*chromebook/*", + "*://www.google.fm/*chromebook/*", + "*://www.google.fr/*chromebook/*", + "*://www.google.ga/*chromebook/*", + "*://www.google.ge/*chromebook/*", + "*://www.google.gg/*chromebook/*", +- "*://www.google.com.gh/*chromebook/*", +- "*://www.google.com.gi/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gi/*chromebook/*", + "*://www.google.gl/*chromebook/*", + "*://www.google.gm/*chromebook/*", + "*://www.google.gr/*chromebook/*", +- "*://www.google.com.gt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gt/*chromebook/*", + "*://www.google.gy/*chromebook/*", +- "*://www.google.com.hk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.hk/*chromebook/*", + "*://www.google.hn/*chromebook/*", + "*://www.google.hr/*chromebook/*", + "*://www.google.ht/*chromebook/*", +@@ -126,104 +126,104 @@ + "*://www.google.is/*chromebook/*", + "*://www.google.it/*chromebook/*", + "*://www.google.je/*chromebook/*", +- "*://www.google.com.jm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.jm/*chromebook/*", + "*://www.google.jo/*chromebook/*", "*://www.google.co.jp/*chromebook/*", - "*://www.google.co.uk/*chromebook/*", -@@ -54,7 +54,7 @@ + "*://www.google.co.ke/*chromebook/*", +- "*://www.google.com.kh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kh/*chromebook/*", + "*://www.google.ki/*chromebook/*", + "*://www.google.kg/*chromebook/*", + "*://www.google.co.kr/*chromebook/*", +- "*://www.google.com.kw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kw/*chromebook/*", + "*://www.google.kz/*chromebook/*", + "*://www.google.la/*chromebook/*", +- "*://www.google.com.lb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.lb/*chromebook/*", + "*://www.google.li/*chromebook/*", + "*://www.google.lk/*chromebook/*", + "*://www.google.co.ls/*chromebook/*", + "*://www.google.lt/*chromebook/*", + "*://www.google.lu/*chromebook/*", + "*://www.google.lv/*chromebook/*", +- "*://www.google.com.ly/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ly/*chromebook/*", + "*://www.google.co.ma/*chromebook/*", + "*://www.google.md/*chromebook/*", + "*://www.google.me/*chromebook/*", + "*://www.google.mg/*chromebook/*", + "*://www.google.mk/*chromebook/*", + "*://www.google.ml/*chromebook/*", +- "*://www.google.com.mm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mm/*chromebook/*", + "*://www.google.mn/*chromebook/*", + "*://www.google.ms/*chromebook/*", +- "*://www.google.com.mt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mt/*chromebook/*", + "*://www.google.mu/*chromebook/*", + "*://www.google.mv/*chromebook/*", + "*://www.google.mw/*chromebook/*", +- "*://www.google.com.mx/*chromebook/*", +- "*://www.google.com.my/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mx/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.my/*chromebook/*", + "*://www.google.co.mz/*chromebook/*", +- "*://www.google.com.na/*chromebook/*", +- "*://www.google.com.ng/*chromebook/*", +- "*://www.google.com.ni/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.na/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ng/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ni/*chromebook/*", + "*://www.google.ne/*chromebook/*", + "*://www.google.nl/*chromebook/*", "*://www.google.no/*chromebook/*", +- "*://www.google.com.np/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.np/*chromebook/*", + "*://www.google.nr/*chromebook/*", + "*://www.google.nu/*chromebook/*", "*://www.google.co.nz/*chromebook/*", +- "*://www.google.com.om/*chromebook/*", +- "*://www.google.com.pa/*chromebook/*", +- "*://www.google.com.pe/*chromebook/*", +- "*://www.google.com.pg/*chromebook/*", +- "*://www.google.com.ph/*chromebook/*", +- "*://www.google.com.pk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.om/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pe/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ph/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pk/*chromebook/*", + "*://www.google.pl/*chromebook/*", + "*://www.google.pn/*chromebook/*", +- "*://www.google.com.pr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pr/*chromebook/*", + "*://www.google.ps/*chromebook/*", + "*://www.google.pt/*chromebook/*", +- "*://www.google.com.py/*chromebook/*", +- "*://www.google.com.qa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.py/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.qa/*chromebook/*", + "*://www.google.ro/*chromebook/*", + "*://www.google.ru/*chromebook/*", + "*://www.google.rw/*chromebook/*", +- "*://www.google.com.sa/*chromebook/*", +- "*://www.google.com.sb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sb/*chromebook/*", + "*://www.google.sc/*chromebook/*", "*://www.google.se/*chromebook/*", +- "*://www.google.com.sg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sg/*chromebook/*", + "*://www.google.sh/*chromebook/*", + "*://www.google.si/*chromebook/*", + "*://www.google.sk/*chromebook/*", +- "*://www.google.com.sl/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sl/*chromebook/*", + "*://www.google.sn/*chromebook/*", + "*://www.google.so/*chromebook/*", + "*://www.google.sm/*chromebook/*", + "*://www.google.sr/*chromebook/*", + "*://www.google.st/*chromebook/*", +- "*://www.google.com.sv/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sv/*chromebook/*", + "*://www.google.td/*chromebook/*", + "*://www.google.tg/*chromebook/*", + "*://www.google.co.th/*chromebook/*", +- "*://www.google.com.tj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tj/*chromebook/*", + "*://www.google.tl/*chromebook/*", + "*://www.google.tm/*chromebook/*", + "*://www.google.tn/*chromebook/*", + "*://www.google.to/*chromebook/*", +- "*://www.google.com.tr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tr/*chromebook/*", + "*://www.google.tt/*chromebook/*", +- "*://www.google.com.tw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tw/*chromebook/*", + "*://www.google.co.tz/*chromebook/*", +- "*://www.google.com.ua/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ua/*chromebook/*", + "*://www.google.co.ug/*chromebook/*", + "*://www.google.co.uk/*chromebook/*", +- "*://www.google.com.uy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.uy/*chromebook/*", + "*://www.google.co.uz/*chromebook/*", +- "*://www.google.com.vc/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vc/*chromebook/*", + "*://www.google.co.ve/*chromebook/*", + "*://www.google.vg/*chromebook/*", + "*://www.google.co.vi/*chromebook/*", +- "*://www.google.com.vn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vn/*chromebook/*", + "*://www.google.vu/*chromebook/*", + "*://www.google.ws/*chromebook/*", + "*://www.google.rs/*chromebook/*", +@@ -231,7 +231,7 @@ + "*://www.google.co.zm/*chromebook/*", + "*://www.google.co.zw/*chromebook/*", + "*://www.google.cat/*chromebook/*", - "*://chromebook-dot-googwebreview.appspot.com/*chromebook/*" + "*://chromebook-dot-googwebreview.8pp2p8t.qjz9zk/*chromebook/*" ] } } +diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +--- a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js ++++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +@@ -111,7 +111,7 @@ Polymer({ + + // Don't show the "Next" button if the EDU authentication got forwarded to + // a non-Google SSO page. +- this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.google.com'); ++ this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.9oo91e.qjz9zk'); + + } else { + // Hide the GAIA Buttons. +diff --git a/chrome/browser/resources/chromeos/emoji_picker/icons.html b/chrome/browser/resources/chromeos/emoji_picker/icons.html +--- a/chrome/browser/resources/chromeos/emoji_picker/icons.html ++++ b/chrome/browser/resources/chromeos/emoji_picker/icons.html +@@ -2,7 +2,7 @@ + + + + diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/browser/resources/chromeos/emulator/icons.html --- a/chrome/browser/resources/chromeos/emulator/icons.html +++ b/chrome/browser/resources/chromeos/emulator/icons.html @@ -8021,66 +6513,10 @@ diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/brow -diff --git a/chrome/browser/resources/chromeos/genius_app/manifest.json b/chrome/browser/resources/chromeos/genius_app/manifest.json ---- a/chrome/browser/resources/chromeos/genius_app/manifest.json -+++ b/chrome/browser/resources/chromeos/genius_app/manifest.json -@@ -33,36 +33,36 @@ - "webview", - "storage", - "unlimitedStorage", -- "https://*.ytimg.com/*", -- "https://www.google.com/*", -- "https://support.google.com/*", -- "https://scone-pa.clients6.google.com/*", -- "https://commondatastorage.googleapis.com/*", -- "https://storage.googleapis.com/*", -- "https://www.google-analytics.com/" -+ "https://*.yt1mg.qjz9zk/*", -+ "https://www.9oo91e.qjz9zk/*", -+ "https://support.9oo91e.qjz9zk/*", -+ "https://scone-pa.clients6.9oo91e.qjz9zk/*", -+ "https://commondatastorage.9oo91eapis.qjz9zk/*", -+ "https://storage.9oo91eapis.qjz9zk/*", -+ "https://www.9oo91e-analytics.qjz9zk/" - ], - "oauth2": { -- "client_id": "929143421683.apps.googleusercontent.com", -+ "client_id": "929143421683.apps.9oo91eusercontent.qjz9zk", - "scopes": [ -- "https://www.googleapis.com/auth/supportcontent", -- "https://www.googleapis.com/auth/cases", -- "https://www.googleapis.com/auth/cases.readonly", -- "https://www.googleapis.com/auth/pixelbook.email.preferences", -- "https://www.google.com/accounts/OAuthLogin" -+ "https://www.9oo91eapis.qjz9zk/auth/supportcontent", -+ "https://www.9oo91eapis.qjz9zk/auth/cases", -+ "https://www.9oo91eapis.qjz9zk/auth/cases.readonly", -+ "https://www.9oo91eapis.qjz9zk/auth/pixelbook.email.preferences", -+ "https://www.9oo91e.qjz9zk/accounts/OAuthLogin" - ] - }, - "display_in_new_tab_page": false, - "url_handlers": { - "view_answer": { - "matches": [ -- "https://support.google.com/chromeos-gethelp/answer/*" -+ "https://support.9oo91e.qjz9zk/chromeos-gethelp/answer/*" - ], - "title": "Open Help Article" - }, - "home": { - "matches": [ -- "https://support.google.com/chromeos-gethelp", -- "https://support.google.com/chromeos-gethelp/" -+ "https://support.9oo91e.qjz9zk/chromeos-gethelp", -+ "https://support.9oo91e.qjz9zk/chromeos-gethelp/" - ], - "title": "Open Help" - } diff --git a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json --- a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json +++ b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json @@ -8108,32 +6544,43 @@ diff --git a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest. ], "js": [ "chos_inject-debug.js" -diff --git a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_redeem_offers.js b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_redeem_offers.js ---- a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_redeem_offers.js -+++ b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_redeem_offers.js -@@ -8,6 +8,6 @@ Polymer({ - behaviors: [DiscoverModuleBehavior], - - onClick_() { -- window.open('http://www.google.com/chromebook/offers/', '_blank'); -+ window.open('http://www.9oo91e.qjz9zk/chromebook/offers/', '_blank'); - }, - }); -diff --git a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_sync_files.js b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_sync_files.js ---- a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_sync_files.js -+++ b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_sync_files.js -@@ -8,6 +8,6 @@ Polymer({ - behaviors: [DiscoverModuleBehavior], - - onClick_() { -- window.open('https://www.google.com/chromebook/switch/', '_blank'); -+ window.open('https://www.9oo91e.qjz9zk/chromebook/switch/', '_blank'); - }, - }); -diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.html b/chrome/browser/resources/chromeos/login/offline_gaia.html ---- a/chrome/browser/resources/chromeos/login/offline_gaia.html -+++ b/chrome/browser/resources/chromeos/login/offline_gaia.html -@@ -30,7 +30,7 @@ +diff --git a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js +--- a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js ++++ b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js +@@ -178,7 +178,7 @@ Polymer({ + * The hostname of the url where the terms of service will be fetched. + * Overwritten by tests to load terms of service from local test server. + */ +- termsOfServiceHostName_: 'https://play.google.com', ++ termsOfServiceHostName_: 'https://play.9oo91e.qjz9zk', + + /** @override */ + ready() { +@@ -722,7 +722,7 @@ Polymer({ + if (results && results.length == 1 && typeof results[0] == 'string') { + self.showUrlOverlay(results[0]); + } else { +- var defaultLink = 'https://www.google.com/intl/' + ++ var defaultLink = 'https://www.9oo91e.qjz9zk/intl/' + + self.getCurrentLanguage_() + '/policies/privacy/'; + self.showUrlOverlay(defaultLink); + } +diff --git a/chrome/browser/resources/chromeos/login/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/marketing_opt_in.html +--- a/chrome/browser/resources/chromeos/login/marketing_opt_in.html ++++ b/chrome/browser/resources/chromeos/login/marketing_opt_in.html +@@ -75,7 +75,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/login/offline_login.html b/chrome/browser/resources/chromeos/login/offline_login.html +--- a/chrome/browser/resources/chromeos/login/offline_login.html ++++ b/chrome/browser/resources/chromeos/login/offline_login.html +@@ -32,7 +32,7 @@ 'email': , 'password': } If user did not type domain |email| will be added by @@ -8142,30 +6589,30 @@ diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.html b/chrome/ Methods: 'focus' - focuses current screen (email input or password input); 'setEmail' - accepts an argument |email|. If |email| is empty it sets -diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.js b/chrome/browser/resources/chromeos/login/offline_gaia.js ---- a/chrome/browser/resources/chromeos/login/offline_gaia.js -+++ b/chrome/browser/resources/chromeos/login/offline_gaia.js -@@ -3,7 +3,7 @@ - // found in the LICENSE file. +diff --git a/chrome/browser/resources/chromeos/login/offline_login.js b/chrome/browser/resources/chromeos/login/offline_login.js +--- a/chrome/browser/resources/chromeos/login/offline_login.js ++++ b/chrome/browser/resources/chromeos/login/offline_login.js +@@ -4,7 +4,7 @@ - { -- const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; -+ const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; - - /** @enum */ - const TRANSITION_TYPE = {FORWARD: 0, BACKWARD: 1, NONE: 2}; -diff --git a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js ---- a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js -+++ b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js -@@ -22,7 +22,7 @@ login.createScreen('ArcTermsOfServiceScreen', 'arc-tos', function() { - - /* The hostname of the url where the terms of service will be fetched. - * Overwritten by tests to load terms of service from local test server.*/ -- this.termsOfServiceHostName_ = 'https://play.google.com'; -+ this.termsOfServiceHostName_ = 'https://play.9oo91e.qjz9zk'; - }, + (function() { + +-const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; ++const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; + const INPUT_EMAIL_PATTERN = '^[a-zA-Z0-9.!#$%&\'*+=?^_`{|}~-]+(@[^\\s@]+)?$'; - /** Initial UI State for screen */ + Polymer({ +diff --git a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +--- a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js ++++ b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +@@ -34,7 +34,7 @@ Polymer({ + /** @private */ + url_: { + type: String, +- value: 'https://www.google.com/', ++ value: 'https://www.9oo91e.qjz9zk/', + }, + + /** @private */ diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json b/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json --- a/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json +++ b/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json @@ -8200,22 +6647,6 @@ diff --git a/chrome/browser/resources/chromeos/zip_archiver/unpacker-test/cpp/Ma .PHONY: tests_run tests_run: check_for_chrome all $(TEST_PAGE) $(RUN_PY) -C $(CURDIR) -P $(TEST_PAGE_CONFIG) \ -diff --git a/chrome/browser/resources/cloud_print_app/manifest.json b/chrome/browser/resources/cloud_print_app/manifest.json ---- a/chrome/browser/resources/cloud_print_app/manifest.json -+++ b/chrome/browser/resources/cloud_print_app/manifest.json -@@ -7,10 +7,10 @@ - }, - "app": { - "launch": { -- "web_url": "https://www.google.com/cloudprint" -+ "web_url": "https://www.9oo91e.qjz9zk/cloudprint" - }, - "urls": [ -- "https://www.google.com/cloudprint/enable_chrome_connector" -+ "https://www.9oo91e.qjz9zk/cloudprint/enable_chrome_connector" - ] - }, - "permissions": [ diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/resources/cryptotoken/enroller.js --- a/chrome/browser/resources/cryptotoken/enroller.js +++ b/chrome/browser/resources/cryptotoken/enroller.js @@ -8231,17 +6662,19 @@ diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/r diff --git a/chrome/browser/resources/default_apps/external_extensions.json b/chrome/browser/resources/default_apps/external_extensions.json --- a/chrome/browser/resources/default_apps/external_extensions.json +++ b/chrome/browser/resources/default_apps/external_extensions.json -@@ -24,15 +24,15 @@ +@@ -27,17 +27,17 @@ }, // Google Sheets "aapocclcgogkmnckokdopfmhonfmgoek" : { -- "external_update_url": "https://clients2.google.com/service/update2/crx" -+ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" +- "external_update_url": "https://clients2.google.com/service/update2/crx", ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "web_app_migration_flag": "MigrateDefaultChromeAppToWebAppsGSuite" }, // Google Slides "felcaaldnbdncclmgdcncolpebgiejap" : { -- "external_update_url": "https://clients2.google.com/service/update2/crx" -+ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" +- "external_update_url": "https://clients2.google.com/service/update2/crx", ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "web_app_migration_flag": "MigrateDefaultChromeAppToWebAppsGSuite" }, // Drive extension "ghbmnnjooekpmoecnnnilnnbdlolhkhi" : { @@ -8253,9 +6686,9 @@ diff --git a/chrome/browser/resources/default_apps/external_extensions.json b/ch diff --git a/chrome/browser/resources/discards/graph_doc_template.html b/chrome/browser/resources/discards/graph_doc_template.html --- a/chrome/browser/resources/discards/graph_doc_template.html +++ b/chrome/browser/resources/discards/graph_doc_template.html -@@ -36,7 +36,7 @@ URL. As result, this document needs to be self-contained, hence inline scripts. - font: italic 13px sans-serif; +@@ -78,7 +78,7 @@ URL. As result, this document needs to be self-contained, hence inline scripts. } + - -+ - - - -diff --git a/chrome/common/extensions/docs/examples/api/commands/background.js b/chrome/common/extensions/docs/examples/api/commands/background.js ---- a/chrome/common/extensions/docs/examples/api/commands/background.js -+++ b/chrome/common/extensions/docs/examples/api/commands/background.js -@@ -2,6 +2,6 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. +diff --git a/chrome/common/google_url_loader_throttle.cc b/chrome/common/google_url_loader_throttle.cc +--- a/chrome/common/google_url_loader_throttle.cc ++++ b/chrome/common/google_url_loader_throttle.cc +@@ -79,7 +79,7 @@ void GoogleURLLoaderThrottle::WillStartRequest( + } --chrome.commands.onCommand.addListener(function(command) { -+ch40me.qjz9zkmands.onCommand.addListener(function(command) { - console.log('onCommand event received for message: ', command); - }); -diff --git a/chrome/common/extensions/docs/examples/api/default_command_override/background.js b/chrome/common/extensions/docs/examples/api/default_command_override/background.js ---- a/chrome/common/extensions/docs/examples/api/default_command_override/background.js -+++ b/chrome/common/extensions/docs/examples/api/default_command_override/background.js -@@ -1,7 +1,7 @@ - // Copyright 2017 The Chromium Authors. All rights reserved. - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. --chrome.commands.onCommand.addListener(function(command) { -+ch40me.qjz9zkmands.onCommand.addListener(function(command) { - chrome.tabs.query({currentWindow: true}, function(tabs) { - // Sort tabs according to their index in the window. - tabs.sort((a, b) => { return a.index < b.index; }); -diff --git a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json ---- a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json -+++ b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json -@@ -11,5 +11,5 @@ - "default_popup": "popup.html" - }, - "manifest_version": 2, -- "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" -+ "content_security_policy": "script-src 'self' https://ajax.9oo91eapis.qjz9zk; object-src 'self'" - } -diff --git a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html ---- a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html -+++ b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html -@@ -1,6 +1,6 @@ - - -- -+ - - - -diff --git a/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html b/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html ---- a/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html -+++ b/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html -@@ -27,8 +27,8 @@ - - - - -diff --git a/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html b/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html ---- a/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html -+++ b/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html -@@ -10,7 +10,7 @@ -
- +@@ -166,7 +166,7 @@ + logging once the issue has reproduced. +
  • Existing log files can be shrunk using + + net/tools/truncate_net_log.py.
  • + +@@ -182,7 +182,7 @@ --const char kDocumentationUrl[] = "https://goo.gl/9p2vKq"; -+const char kDocumentationUrl[] = "https://goo.gl.qjz9zk.qjz9zk/9p2vKq"; - const char* kTypeAttributes[] = {"text", "email", "tel", "password"}; - const char* kTypeTextAttributes[] = {"text", "email", "tel"}; - char kTextFieldSignature = 'T'; -diff --git a/components/autofill/content/renderer/password_form_conversion_utils.cc b/components/autofill/content/renderer/password_form_conversion_utils.cc ---- a/components/autofill/content/renderer/password_form_conversion_utils.cc -+++ b/components/autofill/content/renderer/password_form_conversion_utils.cc -@@ -34,7 +34,7 @@ namespace autofill { - namespace { +
    + The log file can be loaded using the +- netlog_viewer. +
    - const char kPasswordSiteUrlRegex[] = -- "passwords(?:-[a-z-]+\\.corp)?\\.google\\.com"; -+ "passwords(?:-[a-z-]+\\.corp)?\\.9oo91e\\.qjz9zk"; +diff --git a/components/network_time/network_time_tracker.cc b/components/network_time/network_time_tracker.cc +--- a/components/network_time/network_time_tracker.cc ++++ b/components/network_time/network_time_tracker.cc +@@ -104,7 +104,7 @@ const char kPrefNetworkTime[] = "network"; + // rough nature of the time service provided by this class.) + const uint32_t kTimeServerMaxSkewSeconds = 10; - struct PasswordSiteUrlLazyInstanceTraits - : public base::internal::DestructorAtExitLazyInstanceTraits { -diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc ---- a/components/autofill/core/browser/autofill_download_manager.cc -+++ b/components/autofill/core/browser/autofill_download_manager.cc -@@ -96,7 +96,7 @@ const net::BackoffEntry::Policy kAutofillBackoffPolicy = { - }; +-const char kTimeServiceURL[] = "http://clients2.google.com/time/1/current"; ++const char kTimeServiceURL[] = "http://clients2.9oo91e.qjz9zk/time/1/current"; - const char kDefaultAutofillServerURL[] = -- "https://clients1.google.com/tbproxy/af/"; -+ "https://clients1.9oo91e.qjz9zk/tbproxy/af/"; + const char kVariationsServiceCheckTimeIntervalSeconds[] = + "CheckTimeIntervalSeconds"; +diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc +--- a/components/ntp_snippets/features.cc ++++ b/components/ntp_snippets/features.cc +@@ -86,7 +86,7 @@ std::vector GetAllFeatures() { - // The default number of days after which to reset the registry of autofill - // events for which an upload has been sent. -diff --git a/components/autofill/core/browser/autofill_experiments.cc b/components/autofill/core/browser/autofill_experiments.cc ---- a/components/autofill/core/browser/autofill_experiments.cc -+++ b/components/autofill/core/browser/autofill_experiments.cc -@@ -155,8 +155,8 @@ bool IsCreditCardUploadEnabled(const PrefService* pref_service, - // should be fine, since example.com is an IANA reserved domain. - if (!base::FeatureList::IsEnabled( - features::kAutofillUpstreamAllowAllEmailDomains) && -- !(domain == "googlemail.com" || domain == "gmail.com" || -- domain == "google.com" || domain == "chromium.org" || -+ !(domain == "9oo91email.qjz9zk" || domain == "9ma1l.qjz9zk" || -+ domain == "9oo91e.qjz9zk" || domain == "ch40m1um.qjz9zk" || - domain == "example.com")) { - AutofillMetrics::LogCardUploadEnabledMetric( - AutofillMetrics::CardUploadEnabledMetric::EMAIL_DOMAIN_NOT_SUPPORTED, -diff --git a/components/autofill/core/browser/data_model/test_data_creator.cc b/components/autofill/core/browser/data_model/test_data_creator.cc ---- a/components/autofill/core/browser/data_model/test_data_creator.cc -+++ b/components/autofill/core/browser/data_model/test_data_creator.cc -@@ -83,7 +83,7 @@ AutofillProfile TestDataCreator::CreateBasicTestAddress() { - profile.SetInfo(NAME_FULL, base::UTF8ToUTF16("John McTester"), app_locale_); - profile.SetInfo(COMPANY_NAME, base::UTF8ToUTF16("Test Inc."), app_locale_); - profile.SetInfo(EMAIL_ADDRESS, -- base::UTF8ToUTF16("jmctester@fake.chromium.org"), -+ base::UTF8ToUTF16("jmctester@fake.ch40m1um.qjz9zk"), - app_locale_); - profile.SetInfo(ADDRESS_HOME_LINE1, base::UTF8ToUTF16("123 Invented Street"), - app_locale_); -@@ -112,7 +112,7 @@ AutofillProfile TestDataCreator::CreateDisusedTestAddress() { - use_date.ToDeltaSinceWindowsEpoch().InMicroseconds())), - app_locale_); - profile.SetInfo(EMAIL_ADDRESS, -- base::UTF8ToUTF16("polly.disused@fake.chromium.org"), -+ base::UTF8ToUTF16("polly.disused@fake.ch40m1um.qjz9zk"), - app_locale_); - profile.SetInfo(ADDRESS_HOME_LINE1, base::UTF8ToUTF16("456 Disused Lane"), - app_locale_); -@@ -138,7 +138,7 @@ AutofillProfile TestDataCreator::CreateDisusedDeletableTestAddress() { - use_date.ToDeltaSinceWindowsEpoch().InMicroseconds())), - app_locale_); - profile.SetInfo(EMAIL_ADDRESS, -- base::UTF8ToUTF16("polly.deletable@fake.chromium.org"), -+ base::UTF8ToUTF16("polly.deletable@fake.ch40m1um.qjz9zk"), - app_locale_); - profile.SetInfo(ADDRESS_HOME_LINE1, base::UTF8ToUTF16("459 Deletable Lane"), - app_locale_); -diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc ---- a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc -+++ b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc -@@ -32,7 +32,7 @@ namespace autofill { - namespace { - // Default timeout for user to respond to WebAuthn prompt. - constexpr int kWebAuthnTimeoutMs = 3 * 60 * 1000; // 3 minutes --constexpr char kGooglePaymentsRpid[] = "google.com"; -+constexpr char kGooglePaymentsRpid[] = "9oo91e.qjz9zk"; - constexpr char kGooglePaymentsRpName[] = "Google Payments"; + // Default referrer for the content suggestions. + const char kDefaultReferrerUrl[] = +- "https://www.googleapis.com/auth/chrome-content-suggestions"; ++ "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions"; - std::vector Base64ToBytes(std::string base64) { -diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc ---- a/components/autofill/core/browser/payments/payments_client.cc -+++ b/components/autofill/core/browser/payments/payments_client.cc -@@ -84,7 +84,7 @@ const char kMigrateCardsRequestFormat[] = + // Provides ability to customize the referrer URL. + // When specifying a referrer through a field trial, it must contain a path. +diff --git a/components/ntp_snippets/ntp_snippets_constants.cc b/components/ntp_snippets/ntp_snippets_constants.cc +--- a/components/ntp_snippets/ntp_snippets_constants.cc ++++ b/components/ntp_snippets/ntp_snippets_constants.cc +@@ -10,32 +10,32 @@ const base::FilePath::CharType kDatabaseFolder[] = + FILE_PATH_LITERAL("NTPSnippets"); - const char kTokenFetchId[] = "wallet_client"; - const char kPaymentsOAuth2Scope[] = -- "https://www.googleapis.com/auth/wallet.chrome"; -+ "https://www.9oo91eapis.qjz9zk/auth/wallet.chrome"; + const char kContentSuggestionsApiScope[] = +- "https://www.googleapis.com/auth/chrome-content-suggestions"; ++ "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions"; - GURL GetRequestUrl(const std::string& path) { - if (base::CommandLine::ForCurrentProcess()->HasSwitch("sync-url")) { -diff --git a/components/autofill/core/browser/payments/payments_service_url.cc b/components/autofill/core/browser/payments/payments_service_url.cc ---- a/components/autofill/core/browser/payments/payments_service_url.cc -+++ b/components/autofill/core/browser/payments/payments_service_url.cc -@@ -22,18 +22,18 @@ namespace autofill { - namespace { + // There is only one endpoint for fetching suggestions. Current server + // infrastructure doesn't have staging endpoint. + const char kContentSuggestionsServer[] = +- "https://chromefeedcontentsuggestions-pa.googleapis.com/v2/suggestions/" ++ "https://chromefeedcontentsuggestions-pa.9oo91eapis.qjz9zk/v2/suggestions/" + "fetch"; - // Service URLs used for calls to Google Payments endpoints. --const char kProdPaymentsServiceUrl[] = "https://payments.google.com/"; -+const char kProdPaymentsServiceUrl[] = "https://payments.9oo91e.qjz9zk/"; - const char kSandboxPaymentsSecureServiceUrl[] = -- "https://payments.sandbox.google.com/"; -+ "https://payments.sandbox.9oo91e.qjz9zk/"; + const char kPushUpdatesSubscriptionServer[] = +- "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" ++ "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" + "subscribe"; + const char kPushUpdatesSubscriptionStagingServer[] = +- "https://staging-chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" ++ "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" + "subscribe"; + const char kPushUpdatesSubscriptionAlphaServer[] = +- "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com/v1/" ++ "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk/v1/" + "suggestions/subscribe"; - // URLs used when opening the Payment methods management page from - // chrome://settings/payments. - const char kProdPaymentsManageCardsUrl[] = -- "https://pay.google.com/payments/" -+ "https://pay.9oo91e.qjz9zk/payments/" - "home?utm_source=chrome&utm_medium=settings&utm_campaign=payment-methods#" - "paymentMethods"; - const char kSandboxPaymentsManageCardsUrl[] = -- "https://pay.sandbox.google.com/payments/" -+ "https://pay.sandbox.9oo91e.qjz9zk/payments/" - "home?utm_source=chrome&utm_medium=settings&utm_campaign=payment-methods#" - "paymentMethods"; + const char kPushUpdatesUnsubscriptionServer[] = +- "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" ++ "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" + "unsubscribe"; + const char kPushUpdatesUnsubscriptionStagingServer[] = +- "https://staging-chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" ++ "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" + "unsubscribe"; + const char kPushUpdatesUnsubscriptionAlphaServer[] = +- "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com/v1/" ++ "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk/v1/" + "suggestions/unsubscribe"; -diff --git a/components/autofill/core/browser/proto/api_v1.proto b/components/autofill/core/browser/proto/api_v1.proto ---- a/components/autofill/core/browser/proto/api_v1.proto -+++ b/components/autofill/core/browser/proto/api_v1.proto -@@ -41,7 +41,7 @@ message AutofillPageQueryRequest { - }; - // Signature of the form that is made of: - // - URL scheme (e.g., "http") -- // - URL domain page (e.g., "google.com") -+ // - URL domain page (e.g., "9oo91e.qjz9zk") - // - Form name (e.g., "Sign In") - // - Concatenated field names (e.g., "First Name", "Last Name") - optional fixed64 signature = 1; -diff --git a/components/browser_sync/PRESUBMIT.py b/components/browser_sync/PRESUBMIT.py ---- a/components/browser_sync/PRESUBMIT.py -+++ b/components/browser_sync/PRESUBMIT.py -@@ -4,7 +4,7 @@ + } // namespace ntp_snippets +diff --git a/components/ntp_snippets/remote/fetch.py b/components/ntp_snippets/remote/fetch.py +--- a/components/ntp_snippets/remote/fetch.py ++++ b/components/ntp_snippets/remote/fetch.py +@@ -33,11 +33,11 @@ import sys + API_KEY_FILE = os.path.join( + os.path.dirname(__file__), + "../../../google_apis/internal/google_chrome_api_keys.h") +-API_SCOPE = "https://www.googleapis.com/auth/chrome-content-suggestions" ++API_SCOPE = "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions" + API_HOSTS = { +- "prod": "https://chromecontentsuggestions-pa.googleapis.com", +- "staging": "https://staging-chromecontentsuggestions-pa.googleapis.com", +- "alpha": "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com", ++ "prod": "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk", ++ "staging": "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk", ++ "alpha": "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk", + } + API_PATH = "/v1/suggestions/fetch" - """Presubmit script for browser_sync component. +diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc +--- a/components/ntp_tiles/popular_sites_impl.cc ++++ b/components/ntp_tiles/popular_sites_impl.cc +@@ -56,7 +56,7 @@ namespace ntp_tiles { + namespace { --See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -+See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts - for more details about the presubmit API built into depot_tools. - """ + const char kPopularSitesURLFormat[] = +- "https://www.gstatic.com/%ssuggested_sites_%s_%s.json"; ++ "https://www.95tat1c.qjz9zk/%ssuggested_sites_%s_%s.json"; + const char kPopularSitesDefaultDirectory[] = "chrome/ntp/"; + const char kPopularSitesDefaultCountryCode[] = "DEFAULT"; + const char kPopularSitesDefaultVersion[] = "5"; +diff --git a/components/offline_pages/core/prefetch/prefetch_proto_utils.cc b/components/offline_pages/core/prefetch/prefetch_proto_utils.cc +--- a/components/offline_pages/core/prefetch/prefetch_proto_utils.cc ++++ b/components/offline_pages/core/prefetch/prefetch_proto_utils.cc +@@ -13,7 +13,7 @@ + namespace offline_pages { -diff --git a/components/browsing_data/core/counters/history_counter.cc b/components/browsing_data/core/counters/history_counter.cc ---- a/components/browsing_data/core/counters/history_counter.cc -+++ b/components/browsing_data/core/counters/history_counter.cc -@@ -94,7 +94,7 @@ void HistoryCounter::Count() { - R"( - semantics { - description: -- "If history sync is enabled, this queries history.google.com to " -+ "If history sync is enabled, this queries history.9oo91e.qjz9zk to " - "determine if there is any synced history. This information is " - "displayed in the Clear Browsing Data dialog." - trigger: -diff --git a/components/browsing_data/core/history_notice_utils.cc b/components/browsing_data/core/history_notice_utils.cc ---- a/components/browsing_data/core/history_notice_utils.cc -+++ b/components/browsing_data/core/history_notice_utils.cc -@@ -71,12 +71,12 @@ void ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( - "web_history_service", R"( - semantics { - description: -- "Queries history.google.com to find out if user has the 'Include " -+ "Queries history.9oo91e.qjz9zk to find out if user has the 'Include " - "Chrome browsing history and activity from websites and apps that " - "use Google services' option enabled in the Activity controls of " - "their Google account. This is done for users who sync their " - "browsing history without a custom passphrase in order to show " -- "information about history.google.com on the history page and in " -+ "information about history.9oo91e.qjz9zk on the history page and in " - "the Clear Browsing Data dialog." - trigger: - "This request is sent when user opens the history page or the " -diff --git a/components/captive_portal/core/captive_portal_detector.cc b/components/captive_portal/core/captive_portal_detector.cc ---- a/components/captive_portal/core/captive_portal_detector.cc -+++ b/components/captive_portal/core/captive_portal_detector.cc -@@ -38,7 +38,7 @@ GURL GetProbeUrl(const GURL& default_url) { - namespace captive_portal { - - const char CaptivePortalDetector::kDefaultURL[] = -- "http://www.gstatic.com/generate_204"; -+ "http://www.95tat1c.qjz9zk/generate_204"; - - CaptivePortalDetector::CaptivePortalDetector( - network::mojom::URLLoaderFactory* loader_factory) -diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json ---- a/components/certificate_transparency/data/log_list.json -+++ b/components/certificate_transparency/data/log_list.json -@@ -3,14 +3,14 @@ - { - "name": "Google", - "email": [ -- "google-ct-logs@googlegroups.com" -+ "google-ct-logs@9oo91egroups.qjz9zk" - ], - "logs": [ - { - "description": "Google 'Argon2020' log", - "log_id": "sh4FzIuizYogTodm+Su5iiUgZ2va+nDnsklTLe+LkF4=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6Tx2p1yKY4015NyIYvdrk36es0uAc1zA4PQ+TGRY+3ZjUTIYY9Wyu+3q/147JG4vNVKLtDWarZwVqGkg6lAYzA==", -- "url": "https://ct.googleapis.com/logs/argon2020/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/argon2020/", - "mmd": 86400, - "state": { - "usable": { -@@ -26,7 +26,7 @@ - "description": "Google 'Argon2021' log", - "log_id": "9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOM=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETeBmZOrzZKo4xYktx9gI2chEce3cw/tbr5xkoQlmhB18aKfsxD+MnILgGNl0FOm0eYGilFVi85wLRIOhK8lxKw==", -- "url": "https://ct.googleapis.com/logs/argon2021/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/argon2021/", - "mmd": 86400, - "state": { - "usable": { -@@ -42,7 +42,7 @@ - "description": "Google 'Argon2022' log", - "log_id": "KXm+8J45OSHwVnOfY6V35b5XfZxgCvj5TV0mXCVdx4Q=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeIPc6fGmuBg6AJkv/z7NFckmHvf/OqmjchZJ6wm2qN200keRDg352dWpi7CHnSV51BpQYAj1CQY5JuRAwrrDwg==", -- "url": "https://ct.googleapis.com/logs/argon2022/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/argon2022/", - "mmd": 86400, - "state": { - "usable": { -@@ -58,7 +58,7 @@ - "description": "Google 'Argon2023' log", - "log_id": "6D7Q2j71BjUy51covIlryQPTy9ERa+zraeF3fW0GvW4=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0JCPZFJOQqyEti5M8j13ALN3CAVHqkVM4yyOcKWCu2yye5yYeqDpEXYoALIgtM3TmHtNlifmt+4iatGwLpF3eA==", -- "url": "https://ct.googleapis.com/logs/argon2023/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/argon2023/", - "mmd": 86400, - "state": { - "usable": { -@@ -74,7 +74,7 @@ - "description": "Google 'Xenon2020' log", - "log_id": "B7dcG+V9aP/xsMYdIxXHuuZXfFeUt2ruvGE6GmnTohw=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZU75VqjyzSTgFZKAnWg1QeYfFFIRZTMK7q3kWWZsmHhQdrBYnHRZ3OA4kUeUx0JN+xX+dSgt1ruqUhhl7jOvmw==", -- "url": "https://ct.googleapis.com/logs/xenon2020/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/xenon2020/", - "mmd": 86400, - "state": { - "usable": { -@@ -90,7 +90,7 @@ - "description": "Google 'Xenon2021' log", - "log_id": "fT7y+I//iFVoJMLAyp5SiXkrxQ54CX8uapdomX4i8Nc=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER+1MInu8Q39BwDZ5Rp9TwXhwm3ktvgJzpk/r7dDgGk7ZacMm3ljfcoIvP1E72T8jvyLT1bvdapylajZcTH6W5g==", -- "url": "https://ct.googleapis.com/logs/xenon2021/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/xenon2021/", - "mmd": 86400, - "state": { - "usable": { -@@ -106,7 +106,7 @@ - "description": "Google 'Xenon2022' log", - "log_id": "RqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUc=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+WS9FSxAYlCVEzg8xyGwOrmPonoV14nWjjETAIdZvLvukPzIWBMKv6tDNlQjpIHNrUcUt1igRPpqoKDXw2MeKw==", -- "url": "https://ct.googleapis.com/logs/xenon2022/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/xenon2022/", - "mmd": 86400, - "state": { - "usable": { -@@ -122,7 +122,7 @@ - "description": "Google 'Xenon2023' log", - "log_id": "rfe++nz/EMiLnT2cHj4YarRnKV3PsQwkyoWGNOvcgoo=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchY+C+/vzj5g3ZXLY3q5qY1Kb2zcYYCmRV4vg6yU84WI0KV00HuO/8XuQqLwLZPjwtCymeLhQunSxgAnaXSuzg==", -- "url": "https://ct.googleapis.com/logs/xenon2023/", -+ "url": "https://ct.9oo91eapis.qjz9zk/logs/xenon2023/", - "mmd": 86400, - "state": { - "usable": { -@@ -138,7 +138,7 @@ - "description": "Google 'Aviator' log", - "log_id": "aPaY+B9kgr46jO65KB1M/HFRXWeT1ETRCmesu09P+8Q=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1/TMabLkDpCjiupacAlP7xNi0I1JYP8bQFAHDG1xhtolSY1l4QgNRzRrvSe8liE+NPWHdjGxfx3JhTsN9x8/6Q==", -- "url": "https://ct.googleapis.com/aviator/", -+ "url": "https://ct.9oo91eapis.qjz9zk/aviator/", - "mmd": 86400, - "state": { - "readonly": { -@@ -154,7 +154,7 @@ - "description": "Google 'Icarus' log", - "log_id": "KTxRllTIOWW6qlD8WAfUt2+/WHopctykwwz05UVH9Hg=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETtK8v7MICve56qTHHDhhBOuV4IlUaESxZryCfk9QbG9co/CqPvTsgPDbCpp6oFtyAHwlDhnvr7JijXRD9Cb2FA==", -- "url": "https://ct.googleapis.com/icarus/", -+ "url": "https://ct.9oo91eapis.qjz9zk/icarus/", - "mmd": 86400, - "state": { - "usable": { -@@ -166,7 +166,7 @@ - "description": "Google 'Pilot' log", - "log_id": "pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA==", -- "url": "https://ct.googleapis.com/pilot/", -+ "url": "https://ct.9oo91eapis.qjz9zk/pilot/", - "mmd": 86400, - "state": { - "usable": { -@@ -178,7 +178,7 @@ - "description": "Google 'Rocketeer' log", - "log_id": "7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/cs=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIFsYyDzBi7MxCAC/oJBXK7dHjG+1aLCOkHjpoHPqTyghLpzA9BYbqvnV16mAw04vUjyYASVGJCUoI3ctBcJAeg==", -- "url": "https://ct.googleapis.com/rocketeer/", -+ "url": "https://ct.9oo91eapis.qjz9zk/rocketeer/", - "mmd": 86400, - "state": { - "usable": { -@@ -190,7 +190,7 @@ - "description": "Google 'Skydiver' log", - "log_id": "u9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YU=", - "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEmyGDvYXsRJsNyXSrYc9DjHsIa2xzb4UR7ZxVoV6mrc9iZB7xjI6+NrOiwH+P/xxkRmOFG6Jel20q37hTh58rA==", -- "url": "https://ct.googleapis.com/skydiver/", -+ "url": "https://ct.9oo91eapis.qjz9zk/skydiver/", - "mmd": 86400, - "state": { - "usable": { -diff --git a/components/cloud_devices/common/cloud_devices_urls.cc b/components/cloud_devices/common/cloud_devices_urls.cc ---- a/components/cloud_devices/common/cloud_devices_urls.cc -+++ b/components/cloud_devices/common/cloud_devices_urls.cc -@@ -14,20 +14,20 @@ - namespace cloud_devices { + const char kPageBundleTypeURL[] = +- "type.googleapis.com/google.internal.chrome.offlinepages.v1.PageBundle"; ++ "type.9oo91eapis.qjz9zk/google.internal.chrome.offlinepages.v1.PageBundle"; - const char kCloudPrintAuthScope[] = -- "https://www.googleapis.com/auth/cloudprint"; -+ "https://www.9oo91eapis.qjz9zk/auth/cloudprint"; + namespace { - const char kCloudPrintLearnMoreURL[] = -- "https://www.google.com/support/cloudprint"; -+ "https://www.9oo91e.qjz9zk/support/cloudprint"; +diff --git a/components/offline_pages/core/prefetch/prefetch_server_urls.cc b/components/offline_pages/core/prefetch/prefetch_server_urls.cc +--- a/components/offline_pages/core/prefetch/prefetch_server_urls.cc ++++ b/components/offline_pages/core/prefetch/prefetch_server_urls.cc +@@ -11,7 +11,7 @@ - const char kCloudPrintTestPageURL[] = -- "http://www.google.com/landing/cloudprint/enable.html?print=true"; -+ "http://www.9oo91e.qjz9zk/landing/cloudprint/enable.html?print=true"; + namespace offline_pages { - namespace { +-const char kPrefetchServer[] = "https://offlinepages-pa.googleapis.com/"; ++const char kPrefetchServer[] = "https://offlinepages-pa.9oo91eapis.qjz9zk/"; + const char kPrefetchExperimentHeaderName[] = "X-Offline-Prefetch-Experiment"; + const char kPrefetchOperationHeaderName[] = "X-Offline-Prefetch-Operation"; + const char kPrefetchTestingHeaderName[] = "X-Offline-Prefetch-Testing"; +diff --git a/components/omnibox/browser/document_provider.cc b/components/omnibox/browser/document_provider.cc +--- a/components/omnibox/browser/document_provider.cc ++++ b/components/omnibox/browser/document_provider.cc +@@ -257,7 +257,7 @@ std::string ExtractDocIdFromUrl(const std::string& url) { + // Domain. + "(?:https?://)?(?:" + "spreadsheets|docs|drive|script|sites|jamboard" +- ")[0-9]?.google.com" ++ ")[0-9]?.9oo91e.qjz9zk" + "(?::[0-9]+)?\\/" // Port. + "(?:\\S*)" // Non-whitespace chars. + "(?:" +@@ -381,7 +381,7 @@ bool DocumentProvider::IsDocumentProviderAllowed( + // True if not explicitly in keyword mode, or a Drive suggestion. + return !IsExplicitlyInKeywordMode(input, keyword_provider->keyword()) || + base::StartsWith(input.text(), +- base::ASCIIToUTF16("drive.google.com"), ++ base::ASCIIToUTF16("drive.9oo91e.qjz9zk"), + base::CompareCase::SENSITIVE); + } + return true; +@@ -901,7 +901,7 @@ ACMatchClassifications DocumentProvider::Classify( + // static + const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { + // Early exit to avoid unnecessary and more involved checks. +- if (!url.DomainIs("google.com")) ++ if (!url.DomainIs("9oo91e.qjz9zk")) + return GURL(); - // Url must not be matched by "urls" section of - // cloud_print_app/manifest.json. If it's matched, print driver dialog will - // open sign-in page in separate window. --const char kCloudPrintURL[] = "https://www.google.com/cloudprint"; -+const char kCloudPrintURL[] = "https://www.9oo91e.qjz9zk/cloudprint"; + // We aim to prevent duplicate Drive URLs to appear between the Drive document +@@ -912,7 +912,7 @@ const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { + // Drive redirects are already handled by the regex in |ExtractDocIdFromUrl|. + // The below logic handles google.com redirects; e.g., google.com/url/q= + std::string url_str; +- if (url.host() == "www.google.com" && url.path() == "/url") { ++ if (url.host() == "www.9oo91e.qjz9zk" && url.path() == "/url") { + if ((!net::GetValueForKeyInQuery(url, "q", &url_str) || url_str.empty()) && + (!net::GetValueForKeyInQuery(url, "url", &url_str) || url_str.empty())) + return GURL(); +@@ -929,5 +929,5 @@ const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { + // Canonicalize to the /open form without any extra args. + // This is similar to what we expect from the server. +- return id.empty() ? GURL() : GURL("https://drive.google.com/open?id=" + id); ++ return id.empty() ? GURL() : GURL("https://drive.9oo91e.qjz9zk/open?id=" + id); } +diff --git a/components/omnibox/browser/document_suggestions_service.cc b/components/omnibox/browser/document_suggestions_service.cc +--- a/components/omnibox/browser/document_suggestions_service.cc ++++ b/components/omnibox/browser/document_suggestions_service.cc +@@ -83,7 +83,7 @@ void DocumentSuggestionsService::CreateDocumentSuggestionsRequest( + std::string endpoint = base::GetFieldTrialParamValueByFeature( + omnibox::kDocumentProvider, "DocumentProviderEndpoint"); + if (endpoint.empty()) +- endpoint = "https://cloudsearch.googleapis.com/v1/query/search"; ++ endpoint = "https://cloudsearch.9oo91eapis.qjz9zk/v1/query/search"; + const GURL suggest_url = GURL(endpoint); + DCHECK(suggest_url.is_valid()); -diff --git a/components/components_google_chrome_strings.grd b/components/components_google_chrome_strings.grd ---- a/components/components_google_chrome_strings.grd -+++ b/components/components_google_chrome_strings.grd -@@ -269,7 +269,7 @@ +@@ -126,7 +126,7 @@ void DocumentSuggestionsService::CreateDocumentSuggestionsRequest( + request.get()); - - -- This page only shows information on your recent crashes if you <a href="https://support.google.com/chrome/answer/96817">enable crash reporting</a>. -+ This page only shows information on your recent crashes if you <a href="https://support.9oo91e.qjz9zk/chrome/answer/96817">enable crash reporting</a>. - + // Create and fetch an OAuth2 token. +- std::string scope = "https://www.googleapis.com/auth/cloud_search.query"; ++ std::string scope = "https://www.9oo91eapis.qjz9zk/auth/cloud_search.query"; + signin::ScopeSet scopes; + scopes.insert(scope); + token_fetcher_ = std::make_unique( +diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc +--- a/components/omnibox/browser/zero_suggest_provider.cc ++++ b/components/omnibox/browser/zero_suggest_provider.cc +@@ -93,7 +93,7 @@ void LogOmniboxZeroSuggestRequest( + const int kDefaultZeroSuggestRelevance = 100; - -diff --git a/components/crash/core/app/breakpad_linux.cc b/components/crash/core/app/breakpad_linux.cc ---- a/components/crash/core/app/breakpad_linux.cc -+++ b/components/crash/core/app/breakpad_linux.cc -@@ -103,7 +103,7 @@ namespace { - // while we do have functions to deal with uint64_t's. - uint64_t g_crash_loop_before_time = 0; - #else --const char kUploadURL[] = "https://clients2.google.com/cr/report"; -+const char kUploadURL[] = "https://clients2.9oo91e.qjz9zk/cr/report"; - #endif + // Used for testing whether zero suggest is ever available. +-constexpr char kArbitraryInsecureUrlString[] = "http://www.google.com/"; ++constexpr char kArbitraryInsecureUrlString[] = "http://www.9oo91e.qjz9zk/"; - bool g_is_crash_reporter_enabled = false; -diff --git a/components/crash/core/app/crashpad_linux.cc b/components/crash/core/app/crashpad_linux.cc ---- a/components/crash/core/app/crashpad_linux.cc -+++ b/components/crash/core/app/crashpad_linux.cc -@@ -122,7 +122,7 @@ base::FilePath PlatformCrashpadInitialization( - std::string url; - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OFFICIAL_BUILD) && \ - !defined(OS_CHROMEOS) -- url = "https://clients2.google.com/cr/report"; -+ url = "https://clients2.9oo91e.qjz9zk/cr/report"; - #else - url = std::string(); - #endif -diff --git a/components/crash/core/app/crashpad_mac.mm b/components/crash/core/app/crashpad_mac.mm ---- a/components/crash/core/app/crashpad_mac.mm -+++ b/components/crash/core/app/crashpad_mac.mm -@@ -136,7 +136,7 @@ base::FilePath PlatformCrashpadInitialization( - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OFFICIAL_BUILD) - // Only allow the possibility of report upload in official builds. This - // crash server won't have symbols for any other build types. -- std::string url = "https://clients2.google.com/cr/report"; -+ std::string url = "https://clients2.9oo91e.qjz9zk/cr/report"; - #else - std::string url; - #endif -diff --git a/components/crash/core/app/crashpad_win.cc b/components/crash/core/app/crashpad_win.cc ---- a/components/crash/core/app/crashpad_win.cc -+++ b/components/crash/core/app/crashpad_win.cc -@@ -86,7 +86,7 @@ base::FilePath PlatformCrashpadInitialization( - GetPlatformCrashpadAnnotations(&process_annotations); + // Metric name tracking the omnibox suggestion eligibility. + constexpr char kOmniboxZeroSuggestEligibleHistogramName[] = +diff --git a/components/optimization_guide/core/optimization_guide_constants.cc b/components/optimization_guide/core/optimization_guide_constants.cc +--- a/components/optimization_guide/core/optimization_guide_constants.cc ++++ b/components/optimization_guide/core/optimization_guide_constants.cc +@@ -12,10 +12,10 @@ const base::FilePath::CharType kUnindexedHintsFileName[] = + const char kRulesetFormatVersionString[] = "1.0.0"; - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) -- std::string url = "https://clients2.google.com/cr/report"; -+ std::string url = "https://clients2.9oo91e.qjz9zk/cr/report"; - #else - std::string url; - #endif -diff --git a/components/crash/core/browser/resources/crashes.js b/components/crash/core/browser/resources/crashes.js ---- a/components/crash/core/browser/resources/crashes.js -+++ b/components/crash/core/browser/resources/crashes.js -@@ -88,7 +88,7 @@ function updateCrashList( - const uploadIdValue = uploadId.querySelector('.value'); - if (isGoogleAccount) { - const crashLink = document.createElement('a'); -- crashLink.href = `https://goto.google.com/crash/${crash.id}`; -+ crashLink.href = `https://goto.9oo91e.qjz9zk/crash/${crash.id}`; - crashLink.target = '_blank'; - crashLink.textContent = crash.id; - uploadIdValue.appendChild(crashLink); -@@ -163,7 +163,7 @@ function fileBug(crashId, os, version) { - // https://bugs.chromium.org/p/monorail/issues/detail?id=1488 is done. - labels: 'Restrict-View-EditIssue,Stability-Crash,User-Submitted', - }; -- let href = 'https://bugs.chromium.org/p/chromium/issues/entry'; -+ let href = 'https://bugs.ch40m1um.qjz9zk/p/chromium/issues/entry'; - for (const param in params) { - href = appendParam(href, param, params[param]); - } -diff --git a/components/cronet/PRESUBMIT.py b/components/cronet/PRESUBMIT.py ---- a/components/cronet/PRESUBMIT.py -+++ b/components/cronet/PRESUBMIT.py -@@ -4,7 +4,7 @@ + const char kOptimizationGuideServiceGetHintsDefaultURL[] = +- "https://optimizationguide-pa.googleapis.com/v1:GetHints"; ++ "https://optimizationguide-pa.9oo91eapis.qjz9zk/v1:GetHints"; - """Top-level presubmit script for src/components/cronet. + const char kOptimizationGuideServiceGetModelsDefaultURL[] = +- "https://optimizationguide-pa.googleapis.com/v1:GetModels"; ++ "https://optimizationguide-pa.9oo91eapis.qjz9zk/v1:GetModels"; --See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -+See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts - for more details about the presubmit API built into depot_tools. - """ + const char kLoadedHintLocalHistogramString[] = + "OptimizationGuide.LoadedHint.Result"; +diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc +--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc ++++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc +@@ -79,7 +79,7 @@ std::unique_ptr FirstInputDelayTraceData( + // language settings update fully launches. + #if BUILDFLAG(IS_CHROMEOS_ASH) + void RecordVisitToLanguageSettingsSupportPage(const GURL& url) { +- if (url.is_empty() || !url.DomainIs("support.google.com")) ++ if (url.is_empty() || !url.DomainIs("support.9oo91e.qjz9zk")) + return; -diff --git a/components/cronet/ios/cronet_consumer/cronet_consumer_app_delegate.mm b/components/cronet/ios/cronet_consumer/cronet_consumer_app_delegate.mm ---- a/components/cronet/ios/cronet_consumer/cronet_consumer_app_delegate.mm -+++ b/components/cronet/ios/cronet_consumer/cronet_consumer_app_delegate.mm -@@ -35,13 +35,13 @@ - [NSURLSessionConfiguration ephemeralSessionConfiguration]; - [Cronet installIntoSessionConfiguration:config]; + // Keep these pages in order with SettingsLanguagesSupportPage in enums.xml +diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc +--- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc ++++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc +@@ -27,7 +27,7 @@ void PageLoadMetricsObserverContentTestHarness::SetUp() { + original_browser_client_ = + content::SetBrowserClientForTesting(&browser_client_); + SetContents(CreateTestWebContents()); +- NavigateAndCommit(GURL("http://www.google.com")); ++ NavigateAndCommit(GURL("http://www.9oo91e.qjz9zk")); + // Page load metrics depends on UKM source URLs being recorded, so make sure + // the SourceUrlRecorderWebContentsObserver is instantiated. + ukm::InitializeSourceUrlRecorderForWebContents(web_contents()); +diff --git a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc +--- a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc ++++ b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc +@@ -52,7 +52,7 @@ void PossiblyWarnFeatureDeprecation(content::RenderFrameHost* rfh, + blink::mojom::ConsoleMessageLevel::kWarning, + "Download is disallowed. The frame initiating or instantiating the " + "download is sandboxed, but the flag ‘allow-downloads’ is not set. " +- "See https://www.chromestatus.com/feature/5706745674465280 for more " ++ "See https://www.ch40mestatus.qjz9zk/feature/5706745674465280 for more " + "details."); + return; + case WebFeature::kDownloadInAdFrameWithoutUserGesture: +@@ -60,7 +60,7 @@ void PossiblyWarnFeatureDeprecation(content::RenderFrameHost* rfh, + blink::mojom::ConsoleMessageLevel::kWarning, + "[Intervention] Download in ad frame without user activation is " + "not allowed. See " +- "https://www.chromestatus.com/feature/6311883621531648 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/6311883621531648 for more " + "details."); + return; -- // Just for fun, don't route chromium.org requests through Cronet. -+ // Just for fun, don't route ch40m1um.qjz9zk requests through Cronet. - // - // |chromiumPrefix| is declared outside the scope of the request block so that - // the block references something outside of its own scope, and cannot be - // declared as a global block. This makes sure the block is - // an __NSStackBlock__, and verifies the fix for http://crbug.com/436175 . -- NSString* chromiumPrefix = @"www.chromium.org"; -+ NSString* chromiumPrefix = @"www.ch40m1um.qjz9zk"; - [Cronet setRequestFilterBlock:^BOOL(NSURLRequest* request) { - BOOL isChromiumSite = [[[request URL] host] hasPrefix:chromiumPrefix]; - return !isChromiumSite; -diff --git a/components/cronet/ios/cronet_consumer/cronet_consumer_view_controller.m b/components/cronet/ios/cronet_consumer/cronet_consumer_view_controller.m ---- a/components/cronet/ios/cronet_consumer/cronet_consumer_view_controller.m -+++ b/components/cronet/ios/cronet_consumer/cronet_consumer_view_controller.m -@@ -16,7 +16,7 @@ - self.view.backgroundColor = [UIColor whiteColor]; - - UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem]; -- [button setTitle:@"chromium.org" forState:UIControlStateNormal]; -+ [button setTitle:@"ch40m1um.qjz9zk" forState:UIControlStateNormal]; - [button setFrame:CGRectMake(5, 0, 95, 50)]; - [button addTarget:self - action:@selector(loadChromium) -@@ -42,7 +42,7 @@ - [_webView - loadRequest:[NSURLRequest - requestWithURL: -- [NSURL URLWithString:@"https://www.chromium.org"]]]; -+ [NSURL URLWithString:@"https://www.ch40m1um.qjz9zk"]]]; +diff --git a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc +--- a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc ++++ b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc +@@ -83,7 +83,7 @@ const std::vector& AffiliationFetcher::GetRequestedFacetURIs() const { + // static + GURL AffiliationFetcher::BuildQueryURL() { + return net::AppendQueryParameter( +- GURL("https://www.googleapis.com/affiliation/v1/affiliation:lookup"), ++ GURL("https://www.9oo91eapis.qjz9zk/affiliation/v1/affiliation:lookup"), + "key", google_apis::GetAPIKey()); } - #endif - @end -diff --git a/components/cronet/native/cronet.idl b/components/cronet/native/cronet.idl ---- a/components/cronet/native/cronet.idl -+++ b/components/cronet/native/cronet.idl -@@ -108,7 +108,7 @@ struct Error { - ERROR_ADDRESS_UNREACHABLE = 9, - /** -- * Error code indicating an error related to the -+ * Error code indicating an error related to the - * QUIC protocol. When {@link #error_code} is this code, see - * {@link quic_detailed_error_code} for more information. - */ -@@ -135,7 +135,7 @@ struct Error { - * Cronet internal error code. This may provide more specific error - * diagnosis than |error_code|, but the constant values may change over time. - * See -- * -+ * - * here for the lastest list of values. - */ - int32 internal_error_code = 0; -@@ -152,8 +152,8 @@ struct Error { - bool immediately_retryable = false; +diff --git a/components/password_manager/core/browser/change_password_url_service_impl.h b/components/password_manager/core/browser/change_password_url_service_impl.h +--- a/components/password_manager/core/browser/change_password_url_service_impl.h ++++ b/components/password_manager/core/browser/change_password_url_service_impl.h +@@ -55,7 +55,7 @@ class ChangePasswordUrlServiceImpl + GURL GetChangePasswordUrl(const GURL& url) override; - /** -- * Contains detailed QUIC error code from -- * -+ * Contains detailed QUIC error code from -+ * - * QuicErrorCode when the |error_code| code is |ERROR_QUIC_PROTOCOL_FAILED|. - */ - int32 quic_detailed_error_code = 0; -@@ -524,7 +524,7 @@ struct EngineParams { - string storage_path; + static constexpr char kChangePasswordUrlOverrideUrl[] = +- "https://www.gstatic.com/chrome/password-manager/" ++ "https://www.95tat1c.qjz9zk/chrome/password-manager/" + "change_password_urls.json"; - /** -- * Whether QUIC protocol -+ * Whether QUIC protocol - * is enabled. If QUIC is enabled, then QUIC User Agent Id - * containing application name and Cronet version is sent to the server. - */ -@@ -595,7 +595,7 @@ struct EngineParams { - * proxy certificate to the list of local trust anchor. Disabling the bypass will most - * likly prevent the app from sending any traffic to the pinned hosts. For more - * information see 'How does key pinning interact with local proxies and filters?' at -- * https://www.chromium.org/Home/chromium-security/security-faq -+ * https://www.ch40m1um.qjz9zk/Home/chromium-security/security-faq - */ - bool enable_public_key_pinning_bypass_for_local_trust_anchors = true; + private: +diff --git a/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc b/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc +--- a/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc ++++ b/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc +@@ -85,7 +85,7 @@ std::string GetHashPrefix(const GURL& origin, size_t prefix_length) { + // that contains data for |hash_prefix|. + GURL GetUrlForRequirementsSpec(int version, const std::string& hash_prefix) { + return GURL(base::StringPrintf( +- "https://www.gstatic.com/chrome/autofill/password_generation_specs/%d/%s", ++ "https://www.95tat1c.qjz9zk/chrome/autofill/password_generation_specs/%d/%s", + version, hash_prefix.c_str())); + } -@@ -1277,7 +1277,7 @@ struct DateTime { - * - * Most timing metrics are taken from - * LoadTimingInfo, -+ * href="https://cs.ch40m1um.qjz9zk/chromium/src/net/base/load_timing_info.h">LoadTimingInfo, - * which holds the information for and - * . - */ -diff --git a/components/cronet/tools/generate_javadoc.py b/components/cronet/tools/generate_javadoc.py ---- a/components/cronet/tools/generate_javadoc.py -+++ b/components/cronet/tools/generate_javadoc.py -@@ -58,7 +58,7 @@ def GenerateJavadoc(options, src_dir, output_dir): - '%s:%s' % (os.path.join(DOCLAVA_DIR, 'jsilver.jar'), - os.path.join(DOCLAVA_DIR, 'doclava.jar')), - '-title', 'Cronet API', -- '-federate', 'Android', 'https://developer.android.com/', -+ '-federate', 'Android', 'https://developer.8n6r01d.qjz9zk/', - '-federationapi', 'Android', os.path.join(DOCLAVA_DIR, 'current.txt'), - '-classpath', - '%s:%s' % (os.path.abspath(android_sdk_jar), -diff --git a/components/data_reduction_proxy/core/common/chrome_proxy_header.txt b/components/data_reduction_proxy/core/common/chrome_proxy_header.txt ---- a/components/data_reduction_proxy/core/common/chrome_proxy_header.txt -+++ b/components/data_reduction_proxy/core/common/chrome_proxy_header.txt -@@ -5,8 +5,8 @@ Background - ---------- +diff --git a/components/password_manager/core/browser/hash_password_manager.cc b/components/password_manager/core/browser/hash_password_manager.cc +--- a/components/password_manager/core/browser/hash_password_manager.cc ++++ b/components/password_manager/core/browser/hash_password_manager.cc +@@ -214,7 +214,7 @@ void HashPasswordManager::ClearAllNonGmailPasswordHash() { + std::string username = GetAndDecryptField(data, kUsernameFieldKey); + std::string email = + CanonicalizeUsername(username, /*is_gaia_account=*/true); +- return email.find("@gmail.com") == std::string::npos; ++ return email.find("@9ma1l.qjz9zk") == std::string::npos; + }); + } - The Data Reduction Proxy is operated by Google for Chrome. Chrome is --configured to connect to it via TLS at proxy.googlezip.net:443 and via HTTP --at compress.googlezip.net:80. The Data Reduction Proxy only proxies HTTP -+configured to connect to it via TLS at proxy.9oo91e21p.qjz9zk:443 and via HTTP -+at compress.9oo91e21p.qjz9zk:80. The Data Reduction Proxy only proxies HTTP - traffic from non-incognito tabs. +diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_request.h b/components/password_manager/core/browser/leak_detection/leak_detection_request.h +--- a/components/password_manager/core/browser/leak_detection/leak_detection_request.h ++++ b/components/password_manager/core/browser/leak_detection/leak_detection_request.h +@@ -36,7 +36,7 @@ class LeakDetectionRequest : public LeakDetectionRequestInterface { + }; - Chrome-Proxy Response Header -diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc ---- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc -+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc -@@ -40,11 +40,11 @@ const char kLitePageFieldTrial[] = "DataCompressionProxyLoFi"; + static constexpr char kLookupSingleLeakEndpoint[] = +- "https://passwordsleakcheck-pa.googleapis.com/v1/leaks:lookupSingle"; ++ "https://passwordsleakcheck-pa.9oo91eapis.qjz9zk/v1/leaks:lookupSingle"; - // Default URL for retrieving the Data Reduction Proxy configuration. - const char kClientConfigURL[] = -- "https://datasaver.googleapis.com/v1/clientConfigs"; -+ "https://datasaver.9oo91eapis.qjz9zk/v1/clientConfigs"; + LeakDetectionRequest(); + ~LeakDetectionRequest() override; +diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc +--- a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc ++++ b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc +@@ -25,7 +25,7 @@ namespace password_manager { + namespace { - // Default URL for sending pageload metrics. - const char kPingbackURL[] = -- "https://datasaver.googleapis.com/v1/metrics:recordPageloadMetrics"; -+ "https://datasaver.9oo91eapis.qjz9zk/v1/metrics:recordPageloadMetrics"; - - // LitePage black list version. - const char kLitePageBlackListVersion[] = "lite-page-blacklist-version"; -@@ -324,10 +324,10 @@ DataReductionProxyParams::DataReductionProxyParams() { - DCHECK(proxies_for_http_.empty()); - proxies_for_http_.push_back( - DataReductionProxyServer(net::ProxyServer::FromURI( -- "https://proxy.googlezip.net:443", net::ProxyServer::SCHEME_HTTP))); -+ "https://proxy.9oo91e21p.qjz9zk:443", net::ProxyServer::SCHEME_HTTP))); - proxies_for_http_.push_back( - DataReductionProxyServer(net::ProxyServer::FromURI( -- "compress.googlezip.net:80", net::ProxyServer::SCHEME_HTTP))); -+ "compress.9oo91e21p.qjz9zk:80", net::ProxyServer::SCHEME_HTTP))); - } + constexpr char kAPIScope[] = +- "https://www.googleapis.com/auth/identity.passwords.leak.check"; ++ "https://www.9oo91eapis.qjz9zk/auth/identity.passwords.leak.check"; - DCHECK(std::all_of(proxies_for_http_.begin(), proxies_for_http_.end(), -diff --git a/components/data_reduction_proxy/proto/data_store.proto b/components/data_reduction_proxy/proto/data_store.proto ---- a/components/data_reduction_proxy/proto/data_store.proto -+++ b/components/data_reduction_proxy/proto/data_store.proto -@@ -28,8 +28,8 @@ message PerConnectionDataUsage { - // Data usage for a specific site. - message PerSiteDataUsage { - // Full hostname of the site without scheme, port, and trailing slashes. -- // Eg: For page "http://www.finance.google.com/index.html?a=b", hostname will -- // be "www.finance.google.com". -+ // Eg: For page "http://www.finance.9oo91e.qjz9zk/index.html?a=b", hostname will -+ // be "www.finance.9oo91e.qjz9zk". - required string hostname = 1; - - // Total data used in bytes when browsing this site. -diff --git a/components/dom_distiller/core/html/dom_distiller_viewer.html b/components/dom_distiller/core/html/dom_distiller_viewer.html ---- a/components/dom_distiller/core/html/dom_distiller_viewer.html -+++ b/components/dom_distiller/core/html/dom_distiller_viewer.html -@@ -10,7 +10,7 @@ found in the LICENSE file. - - - $1 -- - - $2 -diff --git a/components/dom_distiller/core/javascript/dom_distiller_viewer.js b/components/dom_distiller/core/javascript/dom_distiller_viewer.js ---- a/components/dom_distiller/core/javascript/dom_distiller_viewer.js -+++ b/components/dom_distiller/core/javascript/dom_distiller_viewer.js -@@ -33,7 +33,7 @@ function fillYouTubePlaceholders() { - continue; - } - const embed = document.createElement('iframe'); -- const url = 'http://www.youtube.com/embed/' + -+ const url = 'http://www.y0u1ub3.qjz9zk/embed/' + - placeholders[i].getAttribute('data-id'); - embed.setAttribute('class', 'youtubeIframe'); - embed.setAttribute('src', url); -diff --git a/components/domain_reliability/bake_in_configs.py b/components/domain_reliability/bake_in_configs.py ---- a/components/domain_reliability/bake_in_configs.py -+++ b/components/domain_reliability/bake_in_configs.py -@@ -56,16 +56,16 @@ DOMAIN_WHITELIST = ( - 'admob.us', - 'admob.vn', - 'dartmotif.com', -- 'doubleclick.com', -+ '60u613cl1c4.c0m.qjz9zk', - 'doubleclick.ne.jp', -- 'doubleclick.net', -- 'doubleclickusercontent.com', -+ '60u613cl1c4.n3t.qjz9zk', -+ '60u613cl1c4usercontent.c0m.qjz9zk', - 'g.co', -- 'ggpht.com', -+ '99pht.qjz9zk', - 'gmodules.com', -- 'goo.gl', -- 'google-analytics.com', -- 'google-syndication.com', -+ 'goo.gl.qjz9zk.qjz9zk', -+ '9oo91e-analytics.qjz9zk', -+ '9oo91e-syndication.qjz9zk', - 'google.ac', - 'google.ad', - 'google.ae', -@@ -123,76 +123,76 @@ DOMAIN_WHITELIST = ( - 'google.co.za', - 'google.co.zm', - 'google.co.zw', -- 'google.com', -- 'google.com.af', -- 'google.com.ag', -- 'google.com.ai', -- 'google.com.ar', -- 'google.com.au', -- 'google.com.bd', -- 'google.com.bh', -- 'google.com.bn', -- 'google.com.bo', -- 'google.com.br', -- 'google.com.by', -- 'google.com.bz', -- 'google.com.cn', -- 'google.com.co', -- 'google.com.cu', -- 'google.com.cy', -- 'google.com.do', -- 'google.com.ec', -- 'google.com.eg', -- 'google.com.et', -- 'google.com.fj', -- 'google.com.ge', -- 'google.com.gh', -- 'google.com.gi', -- 'google.com.gr', -- 'google.com.gt', -- 'google.com.hk', -- 'google.com.iq', -- 'google.com.jm', -- 'google.com.jo', -- 'google.com.kh', -- 'google.com.kw', -- 'google.com.lb', -- 'google.com.ly', -- 'google.com.mm', -- 'google.com.mt', -- 'google.com.mx', -- 'google.com.my', -- 'google.com.na', -- 'google.com.nf', -- 'google.com.ng', -- 'google.com.ni', -- 'google.com.np', -- 'google.com.nr', -- 'google.com.om', -- 'google.com.pa', -- 'google.com.pe', -- 'google.com.pg', -- 'google.com.ph', -- 'google.com.pk', -- 'google.com.pl', -- 'google.com.pr', -- 'google.com.py', -- 'google.com.qa', -- 'google.com.ru', -- 'google.com.sa', -- 'google.com.sb', -- 'google.com.sg', -- 'google.com.sl', -- 'google.com.sv', -- 'google.com.tj', -- 'google.com.tn', -- 'google.com.tr', -- 'google.com.tw', -- 'google.com.ua', -- 'google.com.uy', -- 'google.com.vc', -- 'google.com.ve', -- 'google.com.vn', -+ '9oo91e.qjz9zk', -+ '9oo91e.qjz9zk.af', -+ '9oo91e.qjz9zk.ag', -+ '9oo91e.qjz9zk.ai', -+ '9oo91e.qjz9zk.ar', -+ '9oo91e.qjz9zk.au', -+ '9oo91e.qjz9zk.bd', -+ '9oo91e.qjz9zk.bh', -+ '9oo91e.qjz9zk.bn', -+ '9oo91e.qjz9zk.bo', -+ '9oo91e.qjz9zk.br', -+ '9oo91e.qjz9zk.by', -+ '9oo91e.qjz9zk.bz', -+ '9oo91e.qjz9zk.cn', -+ '9oo91e.qjz9zk.co', -+ '9oo91e.qjz9zk.cu', -+ '9oo91e.qjz9zk.cy', -+ '9oo91e.qjz9zk.do', -+ '9oo91e.qjz9zk.ec', -+ '9oo91e.qjz9zk.eg', -+ '9oo91e.qjz9zk.et', -+ '9oo91e.qjz9zk.fj', -+ '9oo91e.qjz9zk.ge', -+ '9oo91e.qjz9zk.gh', -+ '9oo91e.qjz9zk.gi', -+ '9oo91e.qjz9zk.gr', -+ '9oo91e.qjz9zk.gt', -+ '9oo91e.qjz9zk.hk', -+ '9oo91e.qjz9zk.iq', -+ '9oo91e.qjz9zk.jm', -+ '9oo91e.qjz9zk.jo', -+ '9oo91e.qjz9zk.kh', -+ '9oo91e.qjz9zk.kw', -+ '9oo91e.qjz9zk.lb', -+ '9oo91e.qjz9zk.ly', -+ '9oo91e.qjz9zk.mm', -+ '9oo91e.qjz9zk.mt', -+ '9oo91e.qjz9zk.mx', -+ '9oo91e.qjz9zk.my', -+ '9oo91e.qjz9zk.na', -+ '9oo91e.qjz9zk.nf', -+ '9oo91e.qjz9zk.ng', -+ '9oo91e.qjz9zk.ni', -+ '9oo91e.qjz9zk.np', -+ '9oo91e.qjz9zk.nr', -+ '9oo91e.qjz9zk.om', -+ '9oo91e.qjz9zk.pa', -+ '9oo91e.qjz9zk.pe', -+ '9oo91e.qjz9zk.pg', -+ '9oo91e.qjz9zk.ph', -+ '9oo91e.qjz9zk.pk', -+ '9oo91e.qjz9zk.pl', -+ '9oo91e.qjz9zk.pr', -+ '9oo91e.qjz9zk.py', -+ '9oo91e.qjz9zk.qa', -+ '9oo91e.qjz9zk.ru', -+ '9oo91e.qjz9zk.sa', -+ '9oo91e.qjz9zk.sb', -+ '9oo91e.qjz9zk.sg', -+ '9oo91e.qjz9zk.sl', -+ '9oo91e.qjz9zk.sv', -+ '9oo91e.qjz9zk.tj', -+ '9oo91e.qjz9zk.tn', -+ '9oo91e.qjz9zk.tr', -+ '9oo91e.qjz9zk.tw', -+ '9oo91e.qjz9zk.ua', -+ '9oo91e.qjz9zk.uy', -+ '9oo91e.qjz9zk.vc', -+ '9oo91e.qjz9zk.ve', -+ '9oo91e.qjz9zk.vn', - 'google.cv', - 'google.cz', - 'google.de', -@@ -291,32 +291,32 @@ DOMAIN_WHITELIST = ( - 'google.vg', - 'google.vu', - 'google.ws', -- 'googleadservices.com', -+ '9oo91eadservices.qjz9zk', - 'googleadsserving.cn', -- 'googlealumni.com', -- 'googleapis.com', -- 'googleapps.com', -- 'googlecbs.com', -- 'googlecommerce.com', -- 'googledrive.com', -- 'googleenterprise.com', -- 'googlegoro.com', -- 'googlehosted.com', -- 'googlepayments.com', -- 'googlesource.com', -- 'googlesyndication.com', -- 'googletagmanager.com', -- 'googletagservices.com', -- 'googleusercontent.com', -- 'googlevideo.com', -- 'gstatic.com', -+ '9oo91ealumni.qjz9zk', -+ '9oo91eapis.qjz9zk', -+ '9oo91eapps.qjz9zk', -+ '9oo91ecbs.qjz9zk', -+ '9oo91ecommerce.qjz9zk', -+ '9oo91edrive.qjz9zk', -+ '9oo91eenterprise.qjz9zk', -+ '9oo91egoro.qjz9zk', -+ '9oo91ehosted.qjz9zk', -+ '9oo91epayments.qjz9zk', -+ '9oo91esource.qjz9zk', -+ '9oo91esyndication.qjz9zk', -+ '9oo91etagmanager.qjz9zk', -+ '9oo91etagservices.qjz9zk', -+ '9oo91eusercontent.qjz9zk', -+ '9oo91evideo.qjz9zk', -+ '95tat1c.qjz9zk', - 'gvt1.com', - 'gvt2.com', - 'gvt6.com', -- 'withgoogle.com', -+ 'with9oo91e.qjz9zk', - 'youtu.be', - 'youtube-3rd-party.com', -- 'youtube-nocookie.com', -+ 'y0u1ub3-nocookie.qjz9zk', - 'youtube.ae', - 'youtube.al', - 'youtube.am', -@@ -348,49 +348,49 @@ DOMAIN_WHITELIST = ( - 'youtube.co.uk', - 'youtube.co.ve', - 'youtube.co.za', -- 'youtube.com', -- 'youtube.com.ar', -- 'youtube.com.au', -- 'youtube.com.az', -- 'youtube.com.bh', -- 'youtube.com.bo', -- 'youtube.com.br', -- 'youtube.com.by', -- 'youtube.com.co', -- 'youtube.com.do', -- 'youtube.com.ee', -- 'youtube.com.eg', -- 'youtube.com.es', -- 'youtube.com.gh', -- 'youtube.com.gr', -- 'youtube.com.gt', -- 'youtube.com.hk', -- 'youtube.com.hr', -- 'youtube.com.jm', -- 'youtube.com.jo', -- 'youtube.com.kw', -- 'youtube.com.lb', -- 'youtube.com.lv', -- 'youtube.com.mk', -- 'youtube.com.mt', -- 'youtube.com.mx', -- 'youtube.com.my', -- 'youtube.com.ng', -- 'youtube.com.om', -- 'youtube.com.pe', -- 'youtube.com.ph', -- 'youtube.com.pk', -- 'youtube.com.pt', -- 'youtube.com.qa', -- 'youtube.com.ro', -- 'youtube.com.sa', -- 'youtube.com.sg', -- 'youtube.com.tn', -- 'youtube.com.tr', -- 'youtube.com.tw', -- 'youtube.com.ua', -- 'youtube.com.uy', -- 'youtube.com.ve', -+ 'y0u1ub3.qjz9zk', -+ 'y0u1ub3.qjz9zk.ar', -+ 'y0u1ub3.qjz9zk.au', -+ 'y0u1ub3.qjz9zk.az', -+ 'y0u1ub3.qjz9zk.bh', -+ 'y0u1ub3.qjz9zk.bo', -+ 'y0u1ub3.qjz9zk.br', -+ 'y0u1ub3.qjz9zk.by', -+ 'y0u1ub3.qjz9zk.co', -+ 'y0u1ub3.qjz9zk.do', -+ 'y0u1ub3.qjz9zk.ee', -+ 'y0u1ub3.qjz9zk.eg', -+ 'y0u1ub3.qjz9zk.es', -+ 'y0u1ub3.qjz9zk.gh', -+ 'y0u1ub3.qjz9zk.gr', -+ 'y0u1ub3.qjz9zk.gt', -+ 'y0u1ub3.qjz9zk.hk', -+ 'y0u1ub3.qjz9zk.hr', -+ 'y0u1ub3.qjz9zk.jm', -+ 'y0u1ub3.qjz9zk.jo', -+ 'y0u1ub3.qjz9zk.kw', -+ 'y0u1ub3.qjz9zk.lb', -+ 'y0u1ub3.qjz9zk.lv', -+ 'y0u1ub3.qjz9zk.mk', -+ 'y0u1ub3.qjz9zk.mt', -+ 'y0u1ub3.qjz9zk.mx', -+ 'y0u1ub3.qjz9zk.my', -+ 'y0u1ub3.qjz9zk.ng', -+ 'y0u1ub3.qjz9zk.om', -+ 'y0u1ub3.qjz9zk.pe', -+ 'y0u1ub3.qjz9zk.ph', -+ 'y0u1ub3.qjz9zk.pk', -+ 'y0u1ub3.qjz9zk.pt', -+ 'y0u1ub3.qjz9zk.qa', -+ 'y0u1ub3.qjz9zk.ro', -+ 'y0u1ub3.qjz9zk.sa', -+ 'y0u1ub3.qjz9zk.sg', -+ 'y0u1ub3.qjz9zk.tn', -+ 'y0u1ub3.qjz9zk.tr', -+ 'y0u1ub3.qjz9zk.tw', -+ 'y0u1ub3.qjz9zk.ua', -+ 'y0u1ub3.qjz9zk.uy', -+ 'y0u1ub3.qjz9zk.ve', - 'youtube.cz', - 'youtube.de', - 'youtube.dk', -@@ -444,9 +444,9 @@ DOMAIN_WHITELIST = ( - 'youtube.ug', - 'youtube.uy', - 'youtube.vn', -- 'youtubeeducation.com', -- 'youtubemobilesupport.com', -- 'ytimg.com' -+ 'y0u1ub3education.qjz9zk', -+ 'y0u1ub3mobilesupport.qjz9zk', -+ 'yt1mg.qjz9zk' - ) + // Returns a Google account that can be used for getting a token. + CoreAccountId GetAccountForRequest( +diff --git a/components/password_manager/core/browser/leak_detection_dialog_utils.cc b/components/password_manager/core/browser/leak_detection_dialog_utils.cc +--- a/components/password_manager/core/browser/leak_detection_dialog_utils.cc ++++ b/components/password_manager/core/browser/leak_detection_dialog_utils.cc +@@ -23,7 +23,7 @@ namespace password_manager { + using metrics_util::LeakDialogType; + constexpr char kPasswordCheckupURL[] = +- "https://passwords.google.com/checkup/start?hideExplanation=true"; ++ "https://passwords.9oo91e.qjz9zk/checkup/start?hideExplanation=true"; -diff --git a/components/domain_reliability/baked_in_configs/c_2mdn_net.json b/components/domain_reliability/baked_in_configs/c_2mdn_net.json ---- a/components/domain_reliability/baked_in_configs/c_2mdn_net.json -+++ b/components/domain_reliability/baked_in_configs/c_2mdn_net.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_android_clients_google_com.json b/components/domain_reliability/baked_in_configs/c_android_clients_google_com.json ---- a/components/domain_reliability/baked_in_configs/c_android_clients_google_com.json -+++ b/components/domain_reliability/baked_in_configs/c_android_clients_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.android.clients.google.com/", -+ "origin": "https://c.android.clients.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_bigcache_googleapis_com.json b/components/domain_reliability/baked_in_configs/c_bigcache_googleapis_com.json ---- a/components/domain_reliability/baked_in_configs/c_bigcache_googleapis_com.json -+++ b/components/domain_reliability/baked_in_configs/c_bigcache_googleapis_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.bigcache.googleapis.com/", -+ "origin": "https://c.bigcache.9oo91eapis.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_doc-0-0-sj_sj_googleusercontent_com.json b/components/domain_reliability/baked_in_configs/c_doc-0-0-sj_sj_googleusercontent_com.json ---- a/components/domain_reliability/baked_in_configs/c_doc-0-0-sj_sj_googleusercontent_com.json -+++ b/components/domain_reliability/baked_in_configs/c_doc-0-0-sj_sj_googleusercontent_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.doc-0-0-sj.sj.googleusercontent.com/", -+ "origin": "https://c.doc-0-0-sj.sj.9oo91eusercontent.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_docs_google_com.json b/components/domain_reliability/baked_in_configs/c_docs_google_com.json ---- a/components/domain_reliability/baked_in_configs/c_docs_google_com.json -+++ b/components/domain_reliability/baked_in_configs/c_docs_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.docs.google.com/", -+ "origin": "https://c.docs.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_drive_google_com.json b/components/domain_reliability/baked_in_configs/c_drive_google_com.json ---- a/components/domain_reliability/baked_in_configs/c_drive_google_com.json -+++ b/components/domain_reliability/baked_in_configs/c_drive_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.drive.google.com/", -+ "origin": "https://c.drive.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_googlesyndication_com.json b/components/domain_reliability/baked_in_configs/c_googlesyndication_com.json ---- a/components/domain_reliability/baked_in_configs/c_googlesyndication_com.json -+++ b/components/domain_reliability/baked_in_configs/c_googlesyndication_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.googlesyndication.com/", -+ "origin": "https://c.9oo91esyndication.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_pack_google_com.json b/components/domain_reliability/baked_in_configs/c_pack_google_com.json ---- a/components/domain_reliability/baked_in_configs/c_pack_google_com.json -+++ b/components/domain_reliability/baked_in_configs/c_pack_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.pack.google.com/", -+ "origin": "https://c.pack.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_play_google_com.json b/components/domain_reliability/baked_in_configs/c_play_google_com.json ---- a/components/domain_reliability/baked_in_configs/c_play_google_com.json -+++ b/components/domain_reliability/baked_in_configs/c_play_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.play.google.com/", -+ "origin": "https://c.play.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/c_youtube_com.json b/components/domain_reliability/baked_in_configs/c_youtube_com.json ---- a/components/domain_reliability/baked_in_configs/c_youtube_com.json -+++ b/components/domain_reliability/baked_in_configs/c_youtube_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://c.youtube.com/", -+ "origin": "https://c.y0u1ub3.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/clients2_google_com.json b/components/domain_reliability/baked_in_configs/clients2_google_com.json ---- a/components/domain_reliability/baked_in_configs/clients2_google_com.json -+++ b/components/domain_reliability/baked_in_configs/clients2_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://clients2.google.com/", -+ "origin": "https://clients2.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": false, -diff --git a/components/domain_reliability/baked_in_configs/docs_google_com.json b/components/domain_reliability/baked_in_configs/docs_google_com.json ---- a/components/domain_reliability/baked_in_configs/docs_google_com.json -+++ b/components/domain_reliability/baked_in_configs/docs_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://docs.google.com/", -+ "origin": "https://docs.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": false, -diff --git a/components/domain_reliability/baked_in_configs/gcp_gvt2_com.json b/components/domain_reliability/baked_in_configs/gcp_gvt2_com.json ---- a/components/domain_reliability/baked_in_configs/gcp_gvt2_com.json -+++ b/components/domain_reliability/baked_in_configs/gcp_gvt2_com.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/gcp_gvt6_com.json b/components/domain_reliability/baked_in_configs/gcp_gvt6_com.json ---- a/components/domain_reliability/baked_in_configs/gcp_gvt6_com.json -+++ b/components/domain_reliability/baked_in_configs/gcp_gvt6_com.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/google-analytics_com.json b/components/domain_reliability/baked_in_configs/google-analytics_com.json ---- a/components/domain_reliability/baked_in_configs/google-analytics_com.json -+++ b/components/domain_reliability/baked_in_configs/google-analytics_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://google-analytics.com/", -+ "origin": "https://9oo91e-analytics.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/googlevideo_com.json b/components/domain_reliability/baked_in_configs/googlevideo_com.json ---- a/components/domain_reliability/baked_in_configs/googlevideo_com.json -+++ b/components/domain_reliability/baked_in_configs/googlevideo_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://googlevideo.com/", -+ "origin": "https://9oo91evideo.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/gvt1_com.json b/components/domain_reliability/baked_in_configs/gvt1_com.json ---- a/components/domain_reliability/baked_in_configs/gvt1_com.json -+++ b/components/domain_reliability/baked_in_configs/gvt1_com.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/gvt2_com.json b/components/domain_reliability/baked_in_configs/gvt2_com.json ---- a/components/domain_reliability/baked_in_configs/gvt2_com.json -+++ b/components/domain_reliability/baked_in_configs/gvt2_com.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/gvt6_com.json b/components/domain_reliability/baked_in_configs/gvt6_com.json ---- a/components/domain_reliability/baked_in_configs/gvt6_com.json -+++ b/components/domain_reliability/baked_in_configs/gvt6_com.json -@@ -4,13 +4,13 @@ - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": true, -diff --git a/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json b/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json ---- a/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json -+++ b/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://ssl.gstatic.com/", -+ "origin": "https://ssl.95tat1c.qjz9zk/", - "has_same_origin_collector": false, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": false, -diff --git a/components/domain_reliability/baked_in_configs/www_google_com.json b/components/domain_reliability/baked_in_configs/www_google_com.json ---- a/components/domain_reliability/baked_in_configs/www_google_com.json -+++ b/components/domain_reliability/baked_in_configs/www_google_com.json -@@ -1,16 +1,16 @@ - { -- "origin": "https://www.google.com/", -+ "origin": "https://www.9oo91e.qjz9zk/", - "has_same_origin_collector": true, - "success_sample_rate": 0.05, - "collectors": [ - "https://beacons.gcp.gvt2.com/domainreliability/upload", -- "https://beacons.gvt2.com/domainreliability/upload", -- "https://beacons2.gvt2.com/domainreliability/upload", -- "https://beacons3.gvt2.com/domainreliability/upload", -- "https://beacons4.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt2.com/domainreliability/upload", -- "https://beacons5.gvt3.com/domainreliability/upload", -- "https://clients2.google.com/domainreliability/upload" -+ "https://b3ac0n2.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n22.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n23.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n24.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt2.qjz9zk/domainreliability/upload", -+ "https://b3ac0n25.9vt3.qjz9zk/domainreliability/upload", -+ "https://clients2.9oo91e.qjz9zk/domainreliability/upload" - ], - "failure_sample_rate": 1.0, - "include_subdomains": false, -diff --git a/components/drive/drive.proto b/components/drive/drive.proto ---- a/components/drive/drive.proto -+++ b/components/drive/drive.proto -@@ -75,7 +75,7 @@ message FileSpecificInfo { - optional string document_extension = 5; - - // True if the file is a hosted document (i.e. document hosted on -- // drive.google.com such as documents, spreadsheets, and presentations). -+ // drive.9oo91e.qjz9zk such as documents, spreadsheets, and presentations). - optional bool is_hosted_document = 6; - - // The argument with ID 7 had been used, but got deleted. -@@ -127,7 +127,7 @@ message ResourceEntry { - // identical to |title|, but some extra number is inserted if multiple - // entries with the same title exist in the same directory, to ensure that - // file paths are unique. For instance, if two files titled "foo.jpg" exist -- // in the same directory, which is allowed on drive.google.com, one of them -+ // in the same directory, which is allowed on drive.9oo91e.qjz9zk, one of them - // will have a base name of "foo (2).jpg". - optional string base_name = 2; + CredentialLeakType CreateLeakType(IsSaved is_saved, + IsReused is_reused, +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 +@@ -94,7 +94,7 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( + } -diff --git a/components/drive/service/drive_api_service.cc b/components/drive/service/drive_api_service.cc ---- a/components/drive/service/drive_api_service.cc -+++ b/components/drive/service/drive_api_service.cc -@@ -74,10 +74,10 @@ namespace drive { - namespace { + GURL url = driver_->GetLastCommittedURL(); +- if (url.DomainIs("google.com")) ++ if (url.DomainIs("9oo91e.qjz9zk")) + return false; - // OAuth2 scopes for Drive API. --const char kDriveScope[] = "https://www.googleapis.com/auth/drive"; -+const char kDriveScope[] = "https://www.9oo91eapis.qjz9zk/auth/drive"; - const char kDriveAppsReadonlyScope[] = -- "https://www.googleapis.com/auth/drive.apps.readonly"; --const char kDriveAppsScope[] = "https://www.googleapis.com/auth/drive.apps"; -+ "https://www.9oo91eapis.qjz9zk/auth/drive.apps.readonly"; -+const char kDriveAppsScope[] = "https://www.9oo91eapis.qjz9zk/auth/drive.apps"; + if (!client_->IsSavingAndFillingEnabled(url)) { +diff --git a/components/password_manager/core/browser/password_hash_data.cc b/components/password_manager/core/browser/password_hash_data.cc +--- a/components/password_manager/core/browser/password_hash_data.cc ++++ b/components/password_manager/core/browser/password_hash_data.cc +@@ -96,7 +96,7 @@ std::string CanonicalizeUsername(const std::string& username, + username, "@", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + if (parts.size() != 2U) { + if (is_gaia_account && parts.size() == 1U) +- return gaia::CanonicalizeEmail(username + "@gmail.com"); ++ return gaia::CanonicalizeEmail(username + "@9ma1l.qjz9zk"); + return username; + } + return gaia::CanonicalizeEmail(username); +diff --git a/components/password_manager/core/browser/password_manager_constants.cc b/components/password_manager/core/browser/password_manager_constants.cc +--- a/components/password_manager/core/browser/password_manager_constants.cc ++++ b/components/password_manager/core/browser/password_manager_constants.cc +@@ -14,9 +14,9 @@ const base::FilePath::CharType kLoginDataForAccountFileName[] = + FILE_PATH_LITERAL("Login Data For Account"); - // Mime type to create a directory. - const char kFolderMimeType[] = "application/vnd.google-apps.folder"; -diff --git a/components/error_page/common/localized_error.cc b/components/error_page/common/localized_error.cc ---- a/components/error_page/common/localized_error.cc -+++ b/components/error_page/common/localized_error.cc -@@ -44,7 +44,7 @@ namespace error_page { - namespace { + const char kPasswordManagerAccountDashboardURL[] = +- "https://passwords.google.com"; ++ "https://passwords.9oo91e.qjz9zk"; - static const char kRedirectLoopLearnMoreUrl[] = -- "https://support.google.com/chrome?p=rl_error"; -+ "https://support.9oo91e.qjz9zk/chrome?p=rl_error"; - static const int kGoogleCachedCopySuggestionType = 0; + const char kPasswordManagerHelpCenterSmartLock[] = +- "https://support.google.com/accounts?p=smart_lock_chrome"; ++ "https://support.9oo91e.qjz9zk/accounts?p=smart_lock_chrome"; - enum NAV_SUGGESTIONS { -diff --git a/components/favicon/core/large_icon_service_impl.cc b/components/favicon/core/large_icon_service_impl.cc ---- a/components/favicon/core/large_icon_service_impl.cc -+++ b/components/favicon/core/large_icon_service_impl.cc -@@ -39,7 +39,7 @@ using favicon_base::GoogleFaviconServerRequestStatus; + } // namespace password_manager +diff --git a/components/password_manager/core/browser/password_manager_test_utils.cc b/components/password_manager/core/browser/password_manager_test_utils.cc +--- a/components/password_manager/core/browser/password_manager_test_utils.cc ++++ b/components/password_manager/core/browser/password_manager_test_utils.cc +@@ -51,11 +51,11 @@ std::unique_ptr FillPasswordFormWithData( + form->display_name = form->username_value; + else + form->blocked_by_user = true; +- form->icon_url = GURL("https://accounts.google.com/Icon"); ++ form->icon_url = GURL("https://accounts.9oo91e.qjz9zk/Icon"); + if (use_federated_login) { + form->password_value.clear(); + form->federation_origin = +- url::Origin::Create(GURL("https://accounts.google.com/login")); ++ url::Origin::Create(GURL("https://accounts.9oo91e.qjz9zk/login")); + } + form->in_store = PasswordForm::Store::kProfileStore; + return form; +diff --git a/components/password_manager/core/browser/password_reuse_detector.cc b/components/password_manager/core/browser/password_reuse_detector.cc +--- a/components/password_manager/core/browser/password_reuse_detector.cc ++++ b/components/password_manager/core/browser/password_reuse_detector.cc +@@ -282,7 +282,7 @@ void PasswordReuseDetector::ClearAllNonGmailPasswordHash() { + *gaia_password_hash_data_list_, [](const PasswordHashData& data) { + std::string email = + CanonicalizeUsername(data.username, data.is_gaia_password); +- return email.find("@gmail.com") == std::string::npos; ++ return email.find("@9ma1l.qjz9zk") == std::string::npos; + }); + } - const char kImageFetcherUmaClient[] = "LargeIconService"; +diff --git a/components/password_manager/core/browser/password_scripts_fetcher_impl.cc b/components/password_manager/core/browser/password_scripts_fetcher_impl.cc +--- a/components/password_manager/core/browser/password_scripts_fetcher_impl.cc ++++ b/components/password_manager/core/browser/password_scripts_fetcher_impl.cc +@@ -89,7 +89,7 @@ base::flat_set ParseDomainSpecificParamaters( + namespace password_manager { + + constexpr char kDefaultChangePasswordScriptsListUrl[] = +- "https://www.gstatic.com/chrome/duplex/change_password_scripts.json"; ++ "https://www.95tat1c.qjz9zk/chrome/duplex/change_password_scripts.json"; + + constexpr base::FeatureParam kScriptsListUrlParam{ + &features::kPasswordScriptsFetching, "custom_list_url", +diff --git a/components/password_manager/core/browser/password_scripts_fetcher_impl_unittests.cc b/components/password_manager/core/browser/password_scripts_fetcher_impl_unittests.cc +--- a/components/password_manager/core/browser/password_scripts_fetcher_impl_unittests.cc ++++ b/components/password_manager/core/browser/password_scripts_fetcher_impl_unittests.cc +@@ -345,7 +345,7 @@ TEST_F(PasswordScriptsFetcherImplTest, IsScriptAvailable) { + TEST_F(PasswordScriptsFetcherImplTest, AnotherScriptsListUrl) { + // Create a special fetcher with a non-default URL. + const char kNonDefaultScriptsListUrl[] = +- "https://gstatic.com/experimental_list.json"; ++ "https://95tat1c.qjz9zk/experimental_list.json"; + network::TestURLLoaderFactory test_url_loader_factory; + scoped_refptr test_shared_loader_factory = + base::MakeRefCounted( +diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc +--- a/components/password_manager/core/browser/password_store.cc ++++ b/components/password_manager/core/browser/password_store.cc +@@ -298,10 +298,10 @@ void PasswordStore::GetLogins(const FormDigest& form, + // TODO(mdm): actually delete them at some point, say M24 or so. + base::Time cutoff; // the null time + if (form.scheme == PasswordForm::Scheme::kHtml && +- (form.signon_realm == "http://www.google.com" || +- form.signon_realm == "http://www.google.com/" || +- form.signon_realm == "https://www.google.com" || +- form.signon_realm == "https://www.google.com/")) { ++ (form.signon_realm == "http://www.9oo91e.qjz9zk" || ++ form.signon_realm == "http://www.9oo91e.qjz9zk/" || ++ form.signon_realm == "https://www.9oo91e.qjz9zk" || ++ form.signon_realm == "https://www.9oo91e.qjz9zk/")) { + static const base::Time::Exploded exploded_cutoff = { + 2012, 1, 0, 1, 0, 0, 0, 0}; // 00:00 Jan 1 2012 + base::Time out_time; +diff --git a/components/password_manager/core/browser/password_sync_util.cc b/components/password_manager/core/browser/password_sync_util.cc +--- a/components/password_manager/core/browser/password_sync_util.cc ++++ b/components/password_manager/core/browser/password_sync_util.cc +@@ -21,7 +21,7 @@ using url::Origin; + namespace { --const char kGoogleServerV2Url[] = "https://t0.gstatic.com/faviconV2"; -+const char kGoogleServerV2Url[] = "https://t0.95tat1c.qjz9zk/faviconV2"; + constexpr char kGoogleChangePasswordSignonRealm[] = +- "https://myaccount.google.com/"; ++ "https://myaccount.9oo91e.qjz9zk/"; - const char kGoogleServerV2RequestFormat[] = - "%s?client=%s&nfrp=2&%ssize=%d&min_size=%d&max_size=%d&" -diff --git a/components/feed/core/feed_networking_host.cc b/components/feed/core/feed_networking_host.cc ---- a/components/feed/core/feed_networking_host.cc -+++ b/components/feed/core/feed_networking_host.cc -@@ -42,7 +42,7 @@ namespace { + } // namespace - constexpr char kApiKeyQueryParam[] = "key"; - constexpr char kAuthenticationScope[] = -- "https://www.googleapis.com/auth/googlenow"; -+ "https://www.9oo91eapis.qjz9zk/auth/googlenow"; - constexpr char kAuthorizationRequestHeaderFormat[] = "Bearer %s"; - - constexpr char kContentEncoding[] = "Content-Encoding"; -diff --git a/components/feed/core/proto/ui/piet/images.proto b/components/feed/core/proto/ui/piet/images.proto ---- a/components/feed/core/proto/ui/piet/images.proto -+++ b/components/feed/core/proto/ui/piet/images.proto -@@ -22,7 +22,7 @@ message Image { - // based either on the type of URL (e.g. `https://` versus `asset://`) or - // based on the size of the raw image (e.g. 1x DPI or 2x DPI). Feature - // authors are responsible for ensuring that at least one image source is -- // valid and accessible (https://gstatic.com URLs are recommended as the -+ // valid and accessible (https://95tat1c.qjz9zk URLs are recommended as the - // ultimate fallback). - // See [INTERNAL LINK] for more details on Image handling. - repeated ImageSource sources = 1; -diff --git a/components/feed/core/proto/ui/piet/media_queries.proto b/components/feed/core/proto/ui/piet/media_queries.proto ---- a/components/feed/core/proto/ui/piet/media_queries.proto -+++ b/components/feed/core/proto/ui/piet/media_queries.proto -@@ -21,7 +21,7 @@ option cc_enable_arenas = true; - // The name MediaQueryCondition derives from a similar concept for Web/CSS and - // most principles in the Piet Media Query spec are influenced by their Web - // equivalents. --// https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries -+// https://developer.m0z111a.qjz9zk/en-US/docs/Web/CSS/Media_Queries/Using_media_queries - message MediaQueryCondition { - oneof condition { - // See the documentation for FrameWidthCondition. -diff --git a/components/feed/core/proto/ui/piet/shadows.proto b/components/feed/core/proto/ui/piet/shadows.proto ---- a/components/feed/core/proto/ui/piet/shadows.proto -+++ b/components/feed/core/proto/ui/piet/shadows.proto -@@ -28,7 +28,7 @@ message Shadow { - } - - // Defines a box shadow, as described in the CSS spec: --// https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow. -+// https://developer.m0z111a.qjz9zk/en-US/docs/Web/CSS/box-shadow. - message BoxShadow { - // Defines the horizontal offset of the shadow. - // * A positive value puts the shadow on the right side of the box (does not -@@ -60,7 +60,7 @@ message BoxShadow { - } - - // Defines a simple elevation-based shadow, as described in Material Design: --// https://developer.android.com/training/material/shadows-clipping -+// https://developer.8n6r01d.qjz9zk/training/material/shadows-clipping - message ElevationShadow { - // Elevation of the view in dp; higher elevation creates larger shadows. - optional int32 elevation = 1; -diff --git a/components/feed/core/proto/wire/display_info.proto b/components/feed/core/proto/wire/display_info.proto ---- a/components/feed/core/proto/wire/display_info.proto -+++ b/components/feed/core/proto/wire/display_info.proto -@@ -16,7 +16,7 @@ option java_outer_classname = "DisplayInfoProto"; - message DisplayInfo { - // Density of the screen in physical pixels per density independent pixel - // (DIP); see: -- // http://developer.android.com/reference/android/util/DisplayMetrics.html#density -+ // http://developer.8n6r01d.qjz9zk/reference/android/util/DisplayMetrics.html#density - optional float screen_density = 1; - - // The width of the screen in pixels. -diff --git a/components/feed/core/v2/feed_network_impl.cc b/components/feed/core/v2/feed_network_impl.cc ---- a/components/feed/core/v2/feed_network_impl.cc -+++ b/components/feed/core/v2/feed_network_impl.cc -@@ -35,18 +35,18 @@ - namespace feed { - namespace { - constexpr char kAuthenticationScope[] = -- "https://www.googleapis.com/auth/googlenow"; -+ "https://www.9oo91eapis.qjz9zk/auth/googlenow"; - constexpr char kApplicationOctetStream[] = "application/octet-stream"; - constexpr base::TimeDelta kNetworkTimeout = base::TimeDelta::FromSeconds(30); - - constexpr char kFeedQueryUrl[] = -- "https://www.google.com/httpservice/retry/InteractiveDiscoverAgaService/" -+ "https://www.9oo91e.qjz9zk/httpservice/retry/InteractiveDiscoverAgaService/" - "FeedQuery"; - constexpr char kNextPageQueryUrl[] = -- "https://www.google.com/httpservice/retry/InteractiveDiscoverAgaService/" -+ "https://www.9oo91e.qjz9zk/httpservice/retry/InteractiveDiscoverAgaService/" - "NextPageQuery"; - constexpr char kBackgroundQueryUrl[] = -- "https://www.google.com/httpservice/noretry/BackgroundDiscoverAgaService/" -+ "https://www.9oo91e.qjz9zk/httpservice/noretry/BackgroundDiscoverAgaService/" - "FeedQuery"; - - using RawResponse = FeedNetworkImpl::RawResponse; -@@ -414,7 +414,7 @@ void FeedNetworkImpl::SendActionRequest( - request.SerializeToString(&binary_proto); - - GURL url( -- "https://www.google.com/httpservice/retry/ClankActionUploadService/" -+ "https://www.9oo91e.qjz9zk/httpservice/retry/ClankActionUploadService/" - "ClankActionUpload"); - AddMothershipPayloadQueryParams(/*is_post=*/true, /*payload=*/std::string(), - delegate_->GetLanguageTag(), &url); -diff --git a/components/feedback/feedback_uploader.cc b/components/feedback/feedback_uploader.cc ---- a/components/feedback/feedback_uploader.cc -+++ b/components/feedback/feedback_uploader.cc -@@ -25,7 +25,7 @@ constexpr base::FilePath::CharType kFeedbackReportPath[] = - FILE_PATH_LITERAL("Feedback Reports"); +@@ -47,7 +47,7 @@ std::string GetSyncUsernameIfSyncingPasswords( + bool IsSyncAccountCredential(const PasswordForm& form, + const syncer::SyncService* sync_service, + const signin::IdentityManager* identity_manager) { +- if (!GURL(form.signon_realm).DomainIs("google.com")) ++ if (!GURL(form.signon_realm).DomainIs("9oo91e.qjz9zk")) + return false; - constexpr char kFeedbackPostUrl[] = -- "https://www.google.com/tools/feedback/chrome/__submit"; -+ "https://www.9oo91e.qjz9zk/tools/feedback/chrome/__submit"; + // The empty username can mean that Chrome did not detect it correctly. For +diff --git a/components/password_manager/core/browser/password_ui_utils.cc b/components/password_manager/core/browser/password_ui_utils.cc +--- a/components/password_manager/core/browser/password_ui_utils.cc ++++ b/components/password_manager/core/browser/password_ui_utils.cc +@@ -26,7 +26,7 @@ namespace { + const char* const kRemovedPrefixes[] = {"m.", "mobile.", "www."}; - constexpr char kProtoBufMimeType[] = "application/x-protobuf"; + constexpr char kPlayStoreAppPrefix[] = +- "https://play.google.com/store/apps/details?id="; ++ "https://play.9oo91e.qjz9zk/store/apps/details?id="; -diff --git a/components/feedback/proto/web.proto b/components/feedback/proto/web.proto ---- a/components/feedback/proto/web.proto -+++ b/components/feedback/proto/web.proto -@@ -56,7 +56,7 @@ message ExtensionDetails { + } // namespace - // Additional data sent by the internal version. - message InternalWebData { -- // List of user names in google.com domain to which feedback should be sent -+ // List of user names in 9oo91e.qjz9zk domain to which feedback should be sent - // directly apart from submitting it to server. - repeated string email_receiver = 1; +diff --git a/components/password_manager/core/browser/psl_matching_helper.cc b/components/password_manager/core/browser/psl_matching_helper.cc +--- a/components/password_manager/core/browser/psl_matching_helper.cc ++++ b/components/password_manager/core/browser/psl_matching_helper.cc +@@ -17,8 +17,8 @@ namespace password_manager { -diff --git a/components/flags_ui/resources/flags.html b/components/flags_ui/resources/flags.html ---- a/components/flags_ui/resources/flags.html -+++ b/components/flags_ui/resources/flags.html -@@ -60,11 +60,11 @@ - chrome://flags, which is not localized. --> - - -

    -
      -diff --git a/components/gcm_driver/gcm_account_mapper.cc b/components/gcm_driver/gcm_account_mapper.cc ---- a/components/gcm_driver/gcm_account_mapper.cc -+++ b/components/gcm_driver/gcm_account_mapper.cc -@@ -19,7 +19,7 @@ namespace gcm { namespace { + bool IsAllowedForPSLMatchedGoogleDomain(const GURL& url) { +- return url.DomainIs("myaccount.google.com") || +- url.DomainIs("accounts.google.com"); ++ return url.DomainIs("myaccount.9oo91e.qjz9zk") || ++ url.DomainIs("accounts.9oo91e.qjz9zk"); + } - const char kGCMAccountMapperSenderId[] = "745476177629"; --const char kGCMAccountMapperSendTo[] = "google.com"; -+const char kGCMAccountMapperSendTo[] = "9oo91e.qjz9zk"; - const int kGCMAddMappingMessageTTL = 30 * 60; // 0.5 hours in seconds. - const int kGCMRemoveMappingMessageTTL = 24 * 60 * 60; // 1 day in seconds. - const int kGCMUpdateIntervalHours = 24; -diff --git a/components/gcm_driver/gcm_account_tracker.cc b/components/gcm_driver/gcm_account_tracker.cc ---- a/components/gcm_driver/gcm_account_tracker.cc -+++ b/components/gcm_driver/gcm_account_tracker.cc -@@ -27,9 +27,9 @@ namespace gcm { - namespace { + } // namespace +@@ -98,7 +98,7 @@ bool IsPublicSuffixDomainMatch(const std::string& url1, + if (gurl1 == gurl2) + return true; - // Scopes needed by the OAuth2 access tokens. --const char kGCMGroupServerScope[] = "https://www.googleapis.com/auth/gcm"; -+const char kGCMGroupServerScope[] = "https://www.9oo91eapis.qjz9zk/auth/gcm"; - const char kGCMCheckinServerScope[] = -- "https://www.googleapis.com/auth/android_checkin"; -+ "https://www.9oo91eapis.qjz9zk/auth/android_checkin"; - // Name of the GCM account tracker for fetching access tokens. - const char kGCMAccountTrackerName[] = "gcm_account_tracker"; - // Minimum token validity when sending to GCM groups server. -diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc ---- a/components/gcm_driver/gcm_client_impl.cc -+++ b/components/gcm_driver/gcm_client_impl.cc -@@ -88,7 +88,7 @@ const char kMessageTypeDeletedMessagesKey[] = "deleted_messages"; - const char kMessageTypeKey[] = "message_type"; - const char kMessageTypeSendErrorKey[] = "send_error"; - const char kSubtypeKey[] = "subtype"; --const char kSendMessageFromValue[] = "gcm@chrome.com"; -+const char kSendMessageFromValue[] = "gcm@ch40me.qjz9zk"; - const int64_t kDefaultUserSerialNumber = 0LL; - const int kDestroyGCMStoreDelayMS = 5 * 60 * 1000; // 5 minutes. +- if (gurl1.DomainIs("google.com") && gurl2.DomainIs("google.com")) { ++ if (gurl1.DomainIs("9oo91e.qjz9zk") && gurl2.DomainIs("9oo91e.qjz9zk")) { + return gurl1.scheme() == gurl2.scheme() && gurl1.port() == gurl2.port() && + IsAllowedForPSLMatchedGoogleDomain(gurl1) && + IsAllowedForPSLMatchedGoogleDomain(gurl2); +diff --git a/components/password_manager/core/browser/site_affiliation/hash_affiliation_fetcher.cc b/components/password_manager/core/browser/site_affiliation/hash_affiliation_fetcher.cc +--- a/components/password_manager/core/browser/site_affiliation/hash_affiliation_fetcher.cc ++++ b/components/password_manager/core/browser/site_affiliation/hash_affiliation_fetcher.cc +@@ -107,7 +107,7 @@ const std::vector& HashAffiliationFetcher::GetRequestedFacetURIs() + // static + GURL HashAffiliationFetcher::BuildQueryURL() { + return net::AppendQueryParameter( +- GURL("https://www.googleapis.com/affiliation/v1/" ++ GURL("https://www.9oo91eapis.qjz9zk/affiliation/v1/" + "affiliation:lookupByHashPrefix"), + "key", google_apis::GetAPIKey()); + } +diff --git a/components/password_manager/core/browser/sync_username_test_base.cc b/components/password_manager/core/browser/sync_username_test_base.cc +--- a/components/password_manager/core/browser/sync_username_test_base.cc ++++ b/components/password_manager/core/browser/sync_username_test_base.cc +@@ -55,7 +55,7 @@ void SyncUsernameTestBase::FakeSigninAs(const std::string& email) { + // static + PasswordForm SyncUsernameTestBase::SimpleGaiaForm(const char* username) { + PasswordForm form; +- form.signon_realm = "https://accounts.google.com"; ++ form.signon_realm = "https://accounts.9oo91e.qjz9zk"; + form.username_value = ASCIIToUTF16(username); + form.form_data = CreateSigninFormData(GURL(form.signon_realm), username); + return form; +diff --git a/components/password_manager/ios/test_helpers.cc b/components/password_manager/ios/test_helpers.cc +--- a/components/password_manager/ios/test_helpers.cc ++++ b/components/password_manager/ios/test_helpers.cc +@@ -98,8 +98,8 @@ void SetFormData(const std::string& origin, + + autofill::FormData MakeSimpleFormData() { + autofill::FormData form_data; +- form_data.url = GURL("http://www.google.com/a/LoginAuth"); +- form_data.action = GURL("http://www.google.com/a/Login"); ++ form_data.url = GURL("http://www.9oo91e.qjz9zk/a/LoginAuth"); ++ form_data.action = GURL("http://www.9oo91e.qjz9zk/a/Login"); + form_data.name = base::ASCIIToUTF16("login_form"); + + autofill::FormFieldData field; +diff --git a/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc b/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc +--- a/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc ++++ b/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc +@@ -38,7 +38,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + payments::ErrorLogger log; + log.DisableInTest(); + payments::PaymentManifestParser::ParsePaymentMethodManifestIntoVectors( +- GURL("https://chromium.org/pmm.json"), std::move(value), log, ++ GURL("https://ch40m1um.qjz9zk/pmm.json"), std::move(value), log, + &web_app_manifest_urls, &supported_origins); + return 0; + } +diff --git a/components/payments/core/error_strings.cc b/components/payments/core/error_strings.cc +--- a/components/payments/core/error_strings.cc ++++ b/components/payments/core/error_strings.cc +@@ -11,7 +11,7 @@ namespace errors { + // Each string must be on a single line to correctly generate ErrorStrings.java. + // clang-format off + const char kAnotherUiShowing[] = "Another PaymentRequest UI is already showing in a different tab or window."; +-const char kAppStoreMethodOnlySupportedInTwa[] = "Payment method https://play.google.com/billing is only supported in Trusted Web Activity."; ++const char kAppStoreMethodOnlySupportedInTwa[] = "Payment method https://play.9oo91e.qjz9zk/billing is only supported in Trusted Web Activity."; + const char kAttemptedInitializationTwice[] = "Attempted initialization twice."; + const char kCannotShowInBackgroundTab[] = "Cannot show PaymentRequest UI in a background tab."; + const char kCannotShowTwice[] = "Attempted show twice."; +diff --git a/components/payments/core/method_strings.cc b/components/payments/core/method_strings.cc +--- a/components/payments/core/method_strings.cc ++++ b/components/payments/core/method_strings.cc +@@ -11,10 +11,10 @@ namespace methods { + // Each string must be on a single line to correctly generate + // MethodStrings.java. -diff --git a/components/google/core/common/google_util.cc b/components/google/core/common/google_util.cc ---- a/components/google/core/common/google_util.cc -+++ b/components/google/core/common/google_util.cc -@@ -32,7 +32,7 @@ - // seems best to just disable it, for more responsive error pages and to reduce - // server load. - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) --#define LINKDOCTOR_SERVER_REQUEST_URL "https://www.googleapis.com/rpc" -+#define LINKDOCTOR_SERVER_REQUEST_URL "https://www.9oo91eapis.qjz9zk/rpc" +-const char kAndroidPay[] = "https://android.com/pay"; ++const char kAndroidPay[] = "https://8n6r01d.qjz9zk/pay"; + const char kBasicCard[] = "basic-card"; +-const char kGooglePay[] = "https://google.com/pay"; +-const char kGooglePlayBilling[] = "https://play.google.com/billing"; ++const char kGooglePay[] = "https://9oo91e.qjz9zk/pay"; ++const char kGooglePlayBilling[] = "https://play.9oo91e.qjz9zk/billing"; + const char kInterledger[] = "interledger"; + const char kPayeeCreditTransfer[] = "payee-credit-transfer"; + const char kPayerCreditTransfer[] = "payer-credit-transfer"; +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 +@@ -47,33 +47,33 @@ const char kPermissionBlockedKillSwitchMessage[] = + const char kPermissionBlockedRepeatedDismissalsMessage[] = + "%s permission has been blocked as the user has dismissed the permission " + "prompt several times. This can be reset in Site Settings. See " +- "https://www.chromestatus.com/features/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " + "information."; + + const char kPermissionBlockedRepeatedIgnoresMessage[] = + "%s permission has been blocked as the user has ignored the permission " + "prompt several times. This can be reset in Site Settings. See " +- "https://www.chromestatus.com/features/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " + "information."; #else - #define LINKDOCTOR_SERVER_REQUEST_URL "" + const char kPermissionBlockedRepeatedDismissalsMessage[] = + "%s permission has been blocked as the user has dismissed the permission " + "prompt several times. This can be reset in Page Info which can be " + "accessed by clicking the lock icon next to the URL. See " +- "https://www.chromestatus.com/features/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " + "information."; + + const char kPermissionBlockedRepeatedIgnoresMessage[] = + "%s permission has been blocked as the user has ignored the permission " + "prompt several times. This can be reset in Page Info which can be " + "accessed by clicking the lock icon next to the URL. See " +- "https://www.chromestatus.com/features/6443143280984064 for more " ++ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " + "information."; #endif -diff --git a/components/history/core/browser/browsing_history_service.cc b/components/history/core/browser/browsing_history_service.cc ---- a/components/history/core/browser/browsing_history_service.cc -+++ b/components/history/core/browser/browsing_history_service.cc -@@ -275,7 +275,7 @@ void BrowsingHistoryService::QueryHistoryInternal( - semantics { - description: - "If history sync is enabled, this downloads the synced " -- "history from history.google.com." -+ "history from history.9oo91e.qjz9zk." - trigger: - "Synced history is downloaded when user opens the history " - "page, searches on the history page, or scrolls down the " -@@ -398,7 +398,7 @@ void BrowsingHistoryService::RemoveVisits( - semantics { - description: - "If a user who syncs their browsing history deletes one or more " -- "history item(s), Chrome sends a request to history.google.com " -+ "history item(s), Chrome sends a request to history.9oo91e.qjz9zk " - "to execute the corresponding deletion serverside." - trigger: - "Deleting one or more history items form the history page." -diff --git a/components/history/core/browser/history_service.cc b/components/history/core/browser/history_service.cc ---- a/components/history/core/browser/history_service.cc -+++ b/components/history/core/browser/history_service.cc -@@ -1120,7 +1120,7 @@ void HistoryService::DeleteLocalAndRemoteHistoryBetween( - semantics { - description: - "If a user who syncs their browsing history deletes history " -- "items for a time range, Chrome sends a request to a google.com " -+ "items for a time range, Chrome sends a request to a 9oo91e.qjz9zk " - "host to execute the corresponding deletion serverside." - trigger: - "Deleting browsing history for a given time range, e.g. from the " -@@ -1162,7 +1162,7 @@ void HistoryService::DeleteLocalAndRemoteUrl(WebHistoryService* web_history, - semantics { - description: - "If a user who syncs their browsing history deletes urls from " -- "history, Chrome sends a request to a google.com " -+ "history, Chrome sends a request to a 9oo91e.qjz9zk " - "host to execute the corresponding deletion serverside." - trigger: - "Deleting urls from browsing history, e.g. by an extension." -diff --git a/components/history/core/browser/web_history_service.cc b/components/history/core/browser/web_history_service.cc ---- a/components/history/core/browser/web_history_service.cc -+++ b/components/history/core/browser/web_history_service.cc -@@ -41,22 +41,22 @@ namespace history { - namespace { - const char kHistoryOAuthScope[] = -- "https://www.googleapis.com/auth/chromesync"; -+ "https://www.9oo91eapis.qjz9zk/auth/chromesync"; + const char kPermissionBlockedFeaturePolicyMessage[] = + "%s permission has been blocked because of a permissions policy applied to" +- " the current document. See https://goo.gl/EuHzyv for more details."; ++ " the current document. See https://goo.gl.qjz9zk/EuHzyv for more details."; + + const char kPermissionBlockedPortalsMessage[] = + "%s permission has been blocked because it was requested inside a portal. " +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 +@@ -43,28 +43,28 @@ const char kAbusiveNotificationRequestsEnforcementMessage[] = + "the site tends to show permission requests that mislead, trick, or force " + "users into allowing notifications. You should fix the issues as soon as " + "possible and submit your site for another review. Learn more at " +- "https://support.google.com/webtools/answer/9799048."; ++ "https://support.9oo91e.qjz9zk/webtools/answer/9799048."; + + const char kAbusiveNotificationRequestsWarningMessage[] = + "Chrome might start blocking notification permission requests on this site " + "in the future because the site tends to show permission requests that " + "mislead, trick, or force users into allowing notifications. You should " + "fix the issues as soon as possible and submit your site for another " +- "review. Learn more at https://support.google.com/webtools/answer/9799048."; ++ "review. Learn more at https://support.9oo91e.qjz9zk/webtools/answer/9799048."; + + constexpr char kAbusiveNotificationContentEnforcementMessage[] = + "Chrome is blocking notification permission requests on this site because " + "the site tends to show notifications with content that mislead or trick " + "users. You should fix the issues as soon as possible and submit your site " + "for another review. Learn more at " +- "https://support.google.com/webtools/answer/9799048"; ++ "https://support.9oo91e.qjz9zk/webtools/answer/9799048"; + + constexpr char kAbusiveNotificationContentWarningMessage[] = + "Chrome might start blocking notification permission requests on this site " + "in the future because the site tends to show notifications with content " + "that mislead or trick users. You should fix the issues as soon as " + "possible and submit your site for another review. Learn more at " +- "https://support.google.com/webtools/answer/9799048"; ++ "https://support.9oo91e.qjz9zk/webtools/answer/9799048"; - const char kHistoryQueryHistoryUrl[] = -- "https://history.google.com/history/api/lookup?client=chrome"; -+ "https://history.9oo91e.qjz9zk/history/api/lookup?client=chrome"; + namespace { - const char kHistoryDeleteHistoryUrl[] = -- "https://history.google.com/history/api/delete?client=chrome"; -+ "https://history.9oo91e.qjz9zk/history/api/delete?client=chrome"; +diff --git a/components/permissions/prediction_service/prediction_service_common.h b/components/permissions/prediction_service/prediction_service_common.h +--- a/components/permissions/prediction_service/prediction_service_common.h ++++ b/components/permissions/prediction_service/prediction_service_common.h +@@ -11,7 +11,7 @@ namespace permissions { - const char kHistoryAudioHistoryUrl[] = -- "https://history.google.com/history/api/lookup?client=audio"; -+ "https://history.9oo91e.qjz9zk/history/api/lookup?client=audio"; + // TODO(andypaicu): when available, replace with actual URL. + constexpr char kDefaultPredictionServiceUrl[] = +- "https://webpermissionpredictions.googleapis.com/v1:generatePredictions"; ++ "https://webpermissionpredictions.9oo91eapis.qjz9zk/v1:generatePredictions"; - const char kHistoryAudioHistoryChangeUrl[] = -- "https://history.google.com/history/api/change"; -+ "https://history.9oo91e.qjz9zk/history/api/change"; + // A command line switch to override the default service url. + constexpr char kDefaultPredictionServiceUrlSwitchKey[] = +diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc +--- a/components/policy/core/browser/browser_policy_connector.cc ++++ b/components/policy/core/browser/browser_policy_connector.cc +@@ -35,22 +35,22 @@ namespace { - const char kQueryWebAndAppActivityUrl[] = -- "https://history.google.com/history/api/lookup?client=web_app"; -+ "https://history.9oo91e.qjz9zk/history/api/lookup?client=web_app"; + // The URL for the device management server. + const char kDefaultDeviceManagementServerUrl[] = +- "https://m.google.com/devicemanagement/data/api"; ++ "https://m.9oo91e.qjz9zk/devicemanagement/data/api"; - const char kQueryOtherFormsOfBrowsingHistoryUrlSuffix[] = "/historystatus"; + const char kDefaultEncryptedReportingServerUrl[] = +- "https://chromereporting-pa.googleapis.com/v1/record"; ++ "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/record"; -diff --git a/components/invalidation/impl/per_user_topic_subscription_manager.cc b/components/invalidation/impl/per_user_topic_subscription_manager.cc ---- a/components/invalidation/impl/per_user_topic_subscription_manager.cc -+++ b/components/invalidation/impl/per_user_topic_subscription_manager.cc -@@ -44,10 +44,10 @@ const char kActiveRegistrationTokens[] = - "invalidation.per_sender_active_registration_tokens"; + // The URL for the realtime reporting server. + const char kDefaultRealtimeReportingServerUrl[] = +- "https://chromereporting-pa.googleapis.com/v1/events"; ++ "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/events"; - const char kInvalidationRegistrationScope[] = -- "https://firebaseperusertopics-pa.googleapis.com"; -+ "https://firebaseperusertopics-pa.9oo91eapis.qjz9zk"; + // Regexes that match many of the larger public email providers as we know + // these users are not from hosted enterprise domains. + const wchar_t* const kNonManagedDomainPatterns[] = { + L"aol\\.com", + L"comcast\\.net", +- L"googlemail\\.com", +- L"gmail\\.com", ++ L"9oo91email\\.qjz9zk", ++ L"9ma1l\\.qjz9zk", + L"gmx\\.de", + L"hotmail(\\.co|\\.com|)\\.[^.]+", // hotmail.com, hotmail.it, hotmail.co.uk + L"live\\.com", +diff --git a/components/policy/core/browser/url_util.cc b/components/policy/core/browser/url_util.cc +--- a/components/policy/core/browser/url_util.cc ++++ b/components/policy/core/browser/url_util.cc +@@ -44,13 +44,13 @@ const char kGoogleAmpCachePathPattern[] = "/[a-z]/(s/)?(.*)"; + const char kGoogleAmpViewerPathPattern[] = "/amp/(s/)?(.*)"; - const char kFCMOAuthScope[] = -- "https://www.googleapis.com/auth/firebase.messaging"; -+ "https://www.9oo91eapis.qjz9zk/auth/firebase.messaging"; + // Host, path prefix, and query regex pattern for Google web cache URLs. +-const char kGoogleWebCacheHost[] = "webcache.googleusercontent.com"; ++const char kGoogleWebCacheHost[] = "webcache.9oo91eusercontent.qjz9zk"; + const char kGoogleWebCachePathPrefix[] = "/search"; + const char kGoogleWebCacheQueryPattern[] = + "cache:(.{12}:)?(https?://)?([^ :]*)( [^:]*)?"; - // Note: Taking |topic| and |private_topic_name| by value (rather than const - // ref) because the caller (in practice, SubscriptionEntry) may be destroyed by -diff --git a/components/javascript_dialogs/tab_modal_dialog_manager.cc b/components/javascript_dialogs/tab_modal_dialog_manager.cc ---- a/components/javascript_dialogs/tab_modal_dialog_manager.cc -+++ b/components/javascript_dialogs/tab_modal_dialog_manager.cc -@@ -210,7 +210,7 @@ void TabModalDialogManager::RunJavaScriptDialog( - "A window.%s() dialog generated by this page was suppressed " - "because this page is not the active tab of the front window. " - "Please make sure your dialogs are triggered by user interactions " -- "to avoid this situation. https://www.chromestatus.com/feature/%s"; -+ "to avoid this situation. https://www.ch40mestatus.qjz9zk/feature/%s"; + const char kGoogleTranslateSubdomain[] = "translate."; +-const char kAlternateGoogleTranslateHost[] = "translate.googleusercontent.com"; ++const char kAlternateGoogleTranslateHost[] = "translate.9oo91eusercontent.qjz9zk"; - switch (dialog_type) { - case content::JAVASCRIPT_DIALOG_TYPE_ALERT: { -diff --git a/components/keyed_service/core/keyed_service_base_factory.cc b/components/keyed_service/core/keyed_service_base_factory.cc ---- a/components/keyed_service/core/keyed_service_base_factory.cc -+++ b/components/keyed_service/core/keyed_service_base_factory.cc -@@ -22,7 +22,7 @@ KeyedServiceBaseFactory::KeyedServiceBaseFactory(const char* service_name, - "This string is logged in plaintext via UMA trace events uploads, so " - "must be static as a privacy requirement. See //third_party/perfetto/" - "protos/perfetto/trace/track_event/chrome_keyed_service.proto. " -- "Contact tracing@chromium.org and base/metrics/OWNERS if this needs to " -+ "Contact tracing@ch40m1um.qjz9zk and base/metrics/OWNERS if this needs to " - "change."); + // Maximum filters per policy. Filters over this index are ignored. + const size_t kMaxFiltersPerPolicy = 1000; +diff --git a/components/policy/core/common/policy_loader_common.cc b/components/policy/core/common/policy_loader_common.cc +--- a/components/policy/core/common/policy_loader_common.cc ++++ b/components/policy/core/common/policy_loader_common.cc +@@ -16,7 +16,7 @@ namespace { - dependency_manager_->AddComponent(this); -diff --git a/components/metrics/net/net_metrics_log_uploader.cc b/components/metrics/net/net_metrics_log_uploader.cc ---- a/components/metrics/net/net_metrics_log_uploader.cc -+++ b/components/metrics/net/net_metrics_log_uploader.cc -@@ -76,7 +76,7 @@ net::NetworkTrafficAnnotationTag GetNetworkTrafficAnnotation( - "Usage statistics contain information such as preferences, button " - "clicks, and memory usage and do not include web page URLs or " - "personal information. See more at " -- "https://www.google.com/chrome/browser/privacy/ under 'Usage " -+ "https://www.9oo91e.qjz9zk/chrome/browser/privacy/ under 'Usage " - "statistics and crash reports'. Usage statistics are tied to a " - "pseudonymous machine identifier and not to your email address." - trigger: -diff --git a/components/metrics/url_constants.cc b/components/metrics/url_constants.cc ---- a/components/metrics/url_constants.cc -+++ b/components/metrics/url_constants.cc -@@ -7,12 +7,12 @@ - namespace metrics { + // The web store url that is the only trusted source for extensions. + const char kExpectedWebStoreUrl[] = +- ";https://clients2.google.com/service/update2/crx"; ++ ";https://clients2.9oo91e.qjz9zk/service/update2/crx"; - const char kNewMetricsServerUrl[] = -- "https://clientservices.googleapis.com/uma/v2"; -+ "https://clientservices.9oo91eapis.qjz9zk/uma/v2"; + // String to be prepended to each blocked entry. + const char kBlockedExtensionPrefix[] = "[BLOCKED]"; +diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json +--- a/components/policy/resources/policy_templates.json ++++ b/components/policy/resources/policy_templates.json +@@ -79,7 +79,7 @@ + # generating the comments for .proto files, paragraphs containing such tags + # should not be line-wrapped (use one long line per paragraph instead) to allow + # for correct re-flowing of the text. +-# [1] https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide. ++# [1] https://www.ch40m1um.qjz9zk/developers/tools-we-use-in-chromium/grit/grit-users-guide. + # + # See documentation in docs/enterprise/components/policy/resources/description_guidelines.md + # for how product names should appear in tags to ensure consistency. +@@ -164,7 +164,7 @@ + # 'cloud_only' Set to True if the policy is forced or recommended to set from + # Admin console only. This hides the policy from policy templates and Chrome + # documentation in policy_templates.zip. The documentation will NOT be hidden +-# from the https://cloud.google.com/docs/chrome-enterprise/policies/. ++# from the https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/. + # 'platform_only' Set to True if the policy can only be set from platform + # policy but do not support Admin console. This is only used as a hint for + # Admin console. +@@ -427,7 +427,7 @@ + If you choose to auto detect the proxy server, all other options are ignored. - const char kNewMetricsServerUrlInsecure[] = -- "http://clientservices.googleapis.com/uma/v2"; -+ "http://clientservices.9oo91eapis.qjz9zk/uma/v2"; + For detailed examples, visit: +- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. ++ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. --const char kOldMetricsServerUrl[] = "https://clients4.google.com/uma/v2"; -+const char kOldMetricsServerUrl[] = "https://clients4.9oo91e.qjz9zk/uma/v2"; + If you enable this setting, $1Google Chrome and ARC-apps ignore all proxy-related options specified from the command line. - const char kDefaultMetricsMimeType[] = "application/vnd.chrome.uma"; +@@ -591,7 +591,7 @@ + }, + { + 'name': 'ChromeFrameRendererSettings', +- 'owners': ['tommi@chromium.org'], ++ 'owners': ['tommi@ch40m1um.qjz9zk'], + 'type': 'group', + 'caption': '''Default HTML renderer for $3Google Chrome Frame''', + 'desc': '''Allows you to configure the default HTML renderer when $3Google Chrome Frame is installed. +@@ -606,7 +606,7 @@ + }, + { + 'name': 'ChromeFrameContentTypes', +- 'owners': ['tommi@chromium.org'], ++ 'owners': ['tommi@ch40m1um.qjz9zk'], + 'type': 'group', + 'caption': '''Allow $3Google Chrome Frame to handle the following content types''', + 'desc': '''Allow $3Google Chrome Frame to handle the following content types.''', +@@ -1226,7 +1226,7 @@ + 'dynamic_refresh': True, + 'per_profile': True, + }, +- 'example_value': 'https://www.chromium.org', ++ 'example_value': 'https://www.ch40m1um.qjz9zk', + 'id': 1, + 'caption': '''Configure the home page URL''', + 'tags': [], +@@ -1273,7 +1273,7 @@ + 'dynamic_refresh': True, + 'per_profile': True, + }, +- 'example_value': 'https://www.chromium.org', ++ 'example_value': 'https://www.ch40m1um.qjz9zk', + 'id': 360, + 'caption': '''Configure the New Tab page URL''', + 'tags': [], +@@ -1308,7 +1308,7 @@ -diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java ---- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java -+++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java -@@ -26,7 +26,7 @@ import java.util.zip.GZIPOutputStream; - */ - public class MinidumpUploader { - /* package */ -- static final String CRASH_URL_STRING = "https://clients2.google.com/cr/report"; -+ static final String CRASH_URL_STRING = "https://clients2.9oo91e.qjz9zk/cr/report"; - /* package */ - static final String CONTENT_TYPE_TMPL = "multipart/form-data; boundary=%s"; + Leaving the policy unset means $1Google Chrome lets users control whether it's the default and, if not, whether user notifications should appear. -diff --git a/components/nacl/docs/dev/index.html b/components/nacl/docs/dev/index.html ---- a/components/nacl/docs/dev/index.html -+++ b/components/nacl/docs/dev/index.html -@@ -73,7 +73,7 @@ of native code to modern web browsers, without sacrificing the security< - its goals, how it works, and how Portable Native Client lets developers run native compiled code on the web.

      -
    +- Note: For Microsoft®Windows® administrators, turning this setting on only works for machines running Windows 7. For later versions, you must deploy a "default application associations" file that makes $1Google Chrome the handler for the https and http protocols (and, optionally, the ftp protocol and other file formats). See Chrome Help ( https://support.google.com/chrome?p=make_chrome_default_win ).''', ++ Note: For Microsoft®Windows® administrators, turning this setting on only works for machines running Windows 7. For later versions, you must deploy a "default application associations" file that makes $1Google Chrome the handler for the https and http protocols (and, optionally, the ftp protocol and other file formats). See Chrome Help ( https://support.9oo91e.qjz9zk/chrome?p=make_chrome_default_win ).''', + 'label': '''Set $1Google Chrome as Default Browser''', + }, + { +@@ -1581,7 +1581,7 @@ + }, + { + 'name': 'DNSInterceptionChecksEnabled', +- 'owners': ['krb@chromium.org', 'jdonnelly@chromium.org'], ++ 'owners': ['krb@ch40m1um.qjz9zk', 'jdonnelly@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], +@@ -1612,7 +1612,7 @@ + }, + { + 'name': 'IntranetRedirectBehavior', +- 'owners': ['jdonnelly@chromium.org', 'tommycli@chromium.org'], ++ 'owners': ['jdonnelly@ch40m1um.qjz9zk', 'tommycli@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -1842,7 +1842,7 @@ + }, + { + 'name': 'ForceLegacyDefaultReferrerPolicy', +- 'owners': ['davidvc@chromium.org', 'chrome-network-stack@chromium.org'], ++ 'owners': ['davidvc@ch40m1um.qjz9zk', 'chrome-network-stack@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:80-87', 'chrome_os:80-87'], +@@ -1865,7 +1865,7 @@ + }, + { + 'name': 'RemoteAccessClientFirewallTraversal', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:14-16', 'chrome_os:14-16'], +@@ -1888,7 +1888,7 @@ + }, + { + 'name': 'RemoteAccessHostClientDomain', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], +@@ -1906,7 +1906,7 @@ + }, + { + 'name': 'RemoteAccessHostClientDomainList', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -1932,7 +1932,7 @@ + }, + { + 'name': 'RemoteAccessHostFirewallTraversal', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:14-', 'chrome_os:41-'], +@@ -1951,7 +1951,7 @@ + }, + { + 'name': 'RemoteAccessHostDomain', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], +@@ -1969,7 +1969,7 @@ + }, + { + 'name': 'RemoteAccessHostDomainList', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -1995,7 +1995,7 @@ + }, + { + 'name': 'RemoteAccessHostRequireTwoFactor', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:22-22'], +@@ -2018,7 +2018,7 @@ + }, + { + 'name': 'RemoteAccessHostTalkGadgetPrefix', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:22-75', 'chrome_os:41-75'], +@@ -2034,17 +2034,17 @@ + 'tags': [], + 'desc': '''Configures the TalkGadget prefix that will be used by remote access hosts and prevents users from changing it. -- -+ +- If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.google.com'. ++ If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.9oo91e.qjz9zk'. -
    -
    -@@ -100,7 +100,7 @@ its goals, how it works, and how Portable Native Client lets developers run nati -
    + If this setting is enabled, then hosts will use the custom domain name when accessing the TalkGadget instead of the default domain name. -
    --

    Send us questions, comments, and feedback: native-client-discuss.

    -+

    Send us questions, comments, and feedback: native-client-discuss.

    -
    +- If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.google.com') will be used for all hosts. ++ If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.9oo91e.qjz9zk') will be used for all hosts. -
    -diff --git a/components/net_log/resources/net_export.html b/components/net_log/resources/net_export.html ---- a/components/net_log/resources/net_export.html -+++ b/components/net_log/resources/net_export.html -@@ -44,7 +44,7 @@ -
    - Click the button to start logging future network activity to a file on - disk. -- - See the Chromium website for more detailed instructions. -
    -@@ -154,7 +154,7 @@ - logging once the issue has reproduced. -
  • Existing log files can be shrunk using - - net/tools/truncate_net_log.py.
  • - -@@ -170,7 +170,7 @@ +- Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.google.com' to access the TalkGadget.''', ++ Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.9oo91e.qjz9zk' to access the TalkGadget.''', + }, + { + 'name': 'RemoteAccessHostRequireCurtain', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:23-'], +@@ -2063,7 +2063,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowClientPairing', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:30-'], +@@ -2082,7 +2082,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowGnubbyAuth', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:35-'], +@@ -2104,7 +2104,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowRelayedConnection', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:36-', 'chrome_os:86-'], +@@ -2123,7 +2123,7 @@ + }, + { + 'name': 'RemoteAccessHostUdpPortRange', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:36-', 'chrome_os:41-'], +@@ -2144,7 +2144,7 @@ + }, + { + 'name': 'RemoteAccessHostMatchUsername', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-'], +@@ -2163,7 +2163,7 @@ + }, + { + 'name': 'RemoteAccessHostTokenUrl', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:28-'], +@@ -2185,7 +2185,7 @@ + }, + { + 'name': 'RemoteAccessHostTokenValidationUrl', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:28-'], +@@ -2205,7 +2205,7 @@ + }, + { + 'name': 'RemoteAccessHostTokenValidationCertificateIssuer', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:28-'], +@@ -2223,7 +2223,7 @@ + }, + { + 'name': 'RemoteAccessHostDebugOverridePolicies', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:25-47','chrome_os:42-47'], +@@ -2243,7 +2243,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowUiAccessForRemoteAssistance', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.win:55-'], +@@ -2263,7 +2263,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowFileTransfer', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:74-'], +@@ -2283,7 +2283,7 @@ + }, + { + 'name': 'RemoteAccessHostEnableUserInterface', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:88-'], +@@ -2304,7 +2304,7 @@ + }, + { + 'name': 'RemoteAccessHostAllowRemoteAccessConnections', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:89-'], +@@ -2334,7 +2334,7 @@ + }, + { + 'name': 'RemoteAccessHostMaximumSessionDurationMinutes', +- 'owners': ['file://remoting/OWNERS', 'jamiewalch@chromium.org'], ++ 'owners': ['file://remoting/OWNERS', 'jamiewalch@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 30, 'maximum': 10080 }, + 'supported_on': ['chrome.*:89-'], +@@ -2354,7 +2354,7 @@ + }, + { + 'name': 'PrintingEnabled', +- 'owners': ['file://printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': [ +@@ -2378,7 +2378,7 @@ + }, + { + 'name': 'CloudPrintProxyEnabled', +- 'owners': ['file://printing/OWNERS', 'rbpotter@chromium.org'], ++ 'owners': ['file://printing/OWNERS', 'rbpotter@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:17-'], +@@ -2396,7 +2396,7 @@ + }, + { + 'name': 'PrintingAllowedColorModes', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2437,7 +2437,7 @@ + }, + { + 'name': 'PrintingAllowedDuplexModes', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2480,7 +2480,7 @@ + }, + { + 'name': 'PrintingAllowedPinModes', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2521,7 +2521,7 @@ + }, + { + 'name': 'PrintingAllowedBackgroundGraphicsModes', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2562,7 +2562,7 @@ + }, + { + 'name': 'PrintingColorDefault', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2597,7 +2597,7 @@ + }, + { + 'name': 'PrintingDuplexDefault', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2638,7 +2638,7 @@ + }, + { + 'name': 'PrintingPinDefault', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2673,7 +2673,7 @@ + }, + { + 'name': 'PrintingBackgroundGraphicsDefault', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -2708,7 +2708,7 @@ + }, + { + 'name': 'PrintingPaperSizeDefault', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'object', +@@ -2894,7 +2894,7 @@ + }, + { + 'name': 'PrintingSendUsernameAndFilenameEnabled', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:72-'], +@@ -2913,7 +2913,7 @@ + }, + { + 'name': 'PrintingMaxSheetsAllowed', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 1 }, + 'supported_on': ['chrome_os:84-'], +@@ -2931,7 +2931,7 @@ + }, + { + 'name': 'AppCacheForceEnabled', +- 'owners': ['enne@chromium.org'], ++ 'owners': ['enne@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:84-', 'chrome_os:84-', 'android:84-', 'webview_android:84-'], +@@ -2949,7 +2949,7 @@ + }, + { + 'name': 'PrintJobHistoryExpirationPeriod', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': -1 }, + 'supported_on': ['chrome_os:79-'], +@@ -2971,7 +2971,7 @@ + }, + { + 'name': 'PrintingAPIExtensionsWhitelist', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -2995,7 +2995,7 @@ + }, + { + 'name': 'PrintingAPIExtensionsAllowlist', +- 'owners': ['bmalcolm@chromium.org', 'skau@chromium.org'], ++ 'owners': ['bmalcolm@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -3016,7 +3016,7 @@ + }, + { + 'name': 'ForceSafeSearch', +- 'owners': ['sergiu@chromium.org', 'igorcov@chromium.org'], ++ 'owners': ['sergiu@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:25-', 'chrome_os:25-', 'android:30-'], +@@ -3040,7 +3040,7 @@ + }, + { + 'name': 'ForceGoogleSafeSearch', +- 'owners': ['treib@chromium.org', 'igorcov@chromium.org'], ++ 'owners': ['treib@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], +@@ -3059,7 +3059,7 @@ + }, + { + 'name': 'ForceYouTubeSafetyMode', +- 'owners': ['treib@chromium.org', 'igorcov@chromium.org'], ++ 'owners': ['treib@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], +@@ -3153,7 +3153,7 @@ -
    - The log file can be loaded using the -- netlog_viewer. -
    + If you set this policy, users can't change it or override the "Enable phishing and malware protection" setting in Chrome. If not set, "Enable phishing and malware protection" is set to True, but the user can change it. -diff --git a/components/network_time/network_time_tracker.cc b/components/network_time/network_time_tracker.cc ---- a/components/network_time/network_time_tracker.cc -+++ b/components/network_time/network_time_tracker.cc -@@ -103,7 +103,7 @@ const char kPrefNetworkTime[] = "network"; - // rough nature of the time service provided by this class.) - const uint32_t kTimeServerMaxSkewSeconds = 10; +- See more about Safe Browsing ( https://developers.google.com/safe-browsing ). ++ See more about Safe Browsing ( https://developers.9oo91e.qjz9zk/safe-browsing ). --const char kTimeServiceURL[] = "http://clients2.google.com/time/1/current"; -+const char kTimeServiceURL[] = "http://clients2.9oo91e.qjz9zk/time/1/current"; + If the policy SafeBrowsingProtectionLevel is set, the value of the policy SafeBrowsingEnabled is ignored. - const char kVariationsServiceCheckTimeIntervalSeconds[] = - "CheckTimeIntervalSeconds"; -diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc ---- a/components/ntp_snippets/features.cc -+++ b/components/ntp_snippets/features.cc -@@ -82,7 +82,7 @@ std::vector GetAllFeatures() { +@@ -3161,7 +3161,7 @@ + }, + { + 'name': 'SafeBrowsingProtectionLevel', +- 'owners': ['vakh@chromium.org', 'file://components/safe_browsing/OWNERS'], ++ 'owners': ['vakh@ch40m1um.qjz9zk', 'file://components/safe_browsing/OWNERS'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -3211,7 +3211,7 @@ - // Default referrer for the content suggestions. - const char kDefaultReferrerUrl[] = -- "https://www.googleapis.com/auth/chrome-content-suggestions"; -+ "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions"; + If this policy is left not set, Safe Browsing will operate in Standard Protection mode but users can change this setting. - // Provides ability to customize the referrer URL. - // When specifying a referrer through a field trial, it must contain a path. -diff --git a/components/ntp_snippets/ntp_snippets_constants.cc b/components/ntp_snippets/ntp_snippets_constants.cc ---- a/components/ntp_snippets/ntp_snippets_constants.cc -+++ b/components/ntp_snippets/ntp_snippets_constants.cc -@@ -10,32 +10,32 @@ const base::FilePath::CharType kDatabaseFolder[] = - FILE_PATH_LITERAL("NTPSnippets"); +- See https://developers.google.com/safe-browsing for more info on Safe Browsing.''', ++ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing.''', + 'arc_support': 'This policy is not supported within Arc.', + }, + { +@@ -3369,7 +3369,7 @@ + }, + { + 'name': 'AutofillCreditCardEnabled', +- 'owners': ['caitkp@chromium.org', 'zmin@chromium.org'], ++ 'owners': ['caitkp@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': [ +@@ -3550,7 +3550,7 @@ + }, + { + 'name': 'SyncTypesListDisabled', +- 'owners': ['pastarmovj@chromium.org', 'mastiz@chromium.org'], ++ 'owners': ['pastarmovj@ch40m1um.qjz9zk', 'mastiz@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -3606,7 +3606,7 @@ - const char kContentSuggestionsApiScope[] = -- "https://www.googleapis.com/auth/chrome-content-suggestions"; -+ "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions"; + If you set this policy, $1Google Chrome will use the provided directory to store the roaming copy of the profiles if the RoamingProfileSupportEnabled policy has been enabled. If the RoamingProfileSupportEnabled policy is disabled or left unset the value stored in this policy is not used. - // There is only one endpoint for fetching suggestions. Current server - // infrastructure doesn't have staging endpoint. - const char kContentSuggestionsServer[] = -- "https://chromefeedcontentsuggestions-pa.googleapis.com/v2/suggestions/" -+ "https://chromefeedcontentsuggestions-pa.9oo91eapis.qjz9zk/v2/suggestions/" - "fetch"; +- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. ++ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - const char kPushUpdatesSubscriptionServer[] = -- "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" -+ "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" - "subscribe"; - const char kPushUpdatesSubscriptionStagingServer[] = -- "https://staging-chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" -+ "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" - "subscribe"; - const char kPushUpdatesSubscriptionAlphaServer[] = -- "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com/v1/" -+ "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk/v1/" - "suggestions/subscribe"; + On non-Windows platforms, this policy must be set for roaming profiles to work. - const char kPushUpdatesUnsubscriptionServer[] = -- "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" -+ "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" - "unsubscribe"; - const char kPushUpdatesUnsubscriptionStagingServer[] = -- "https://staging-chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" -+ "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk/v1/suggestions/" - "unsubscribe"; - const char kPushUpdatesUnsubscriptionAlphaServer[] = -- "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com/v1/" -+ "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk/v1/" - "suggestions/unsubscribe"; +@@ -3615,7 +3615,7 @@ + }, + { + 'name': 'SigninAllowed', +- 'owners': ['akuegel@chromium.org', 'zmin@chromium.org'], ++ 'owners': ['akuegel@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:27-', 'android:38-'], +@@ -3678,7 +3678,7 @@ - } // namespace ntp_snippets -diff --git a/components/ntp_snippets/remote/fetch.py b/components/ntp_snippets/remote/fetch.py ---- a/components/ntp_snippets/remote/fetch.py -+++ b/components/ntp_snippets/remote/fetch.py -@@ -33,11 +33,11 @@ import sys - API_KEY_FILE = os.path.join( - os.path.dirname(__file__), - "../../../google_apis/internal/google_chrome_api_keys.h") --API_SCOPE = "https://www.googleapis.com/auth/chrome-content-suggestions" -+API_SCOPE = "https://www.9oo91eapis.qjz9zk/auth/chrome-content-suggestions" - API_HOSTS = { -- "prod": "https://chromecontentsuggestions-pa.googleapis.com", -- "staging": "https://staging-chromecontentsuggestions-pa.googleapis.com", -- "alpha": "https://alpha-chromecontentsuggestions-pa.sandbox.googleapis.com", -+ "prod": "https://chromecontentsuggestions-pa.9oo91eapis.qjz9zk", -+ "staging": "https://staging-chromecontentsuggestions-pa.9oo91eapis.qjz9zk", -+ "alpha": "https://alpha-chromecontentsuggestions-pa.sandbox.9oo91eapis.qjz9zk", - } - API_PATH = "/v1/suggestions/fetch" + If you set this policy, $1Google Chrome will use the provided directory regardless whether the user has specified the '--user-data-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a directory used for other purposes, because $1Google Chrome manages its contents. -diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc ---- a/components/ntp_tiles/popular_sites_impl.cc -+++ b/components/ntp_tiles/popular_sites_impl.cc -@@ -56,7 +56,7 @@ namespace ntp_tiles { - namespace { +- See https://support.google.com/chrome/a?p=Supported_directory_variables for a list of variables that can be used. ++ See https://support.9oo91e.qjz9zk/chrome/a?p=Supported_directory_variables for a list of variables that can be used. - const char kPopularSitesURLFormat[] = -- "https://www.gstatic.com/%ssuggested_sites_%s_%s.json"; -+ "https://www.95tat1c.qjz9zk/%ssuggested_sites_%s_%s.json"; - const char kPopularSitesDefaultDirectory[] = "chrome/ntp/"; - const char kPopularSitesDefaultCountryCode[] = "DEFAULT"; - const char kPopularSitesDefaultVersion[] = "5"; - diff --git a/components/ntp_tiles/resources/default_popular_sites.json b/components/ntp_tiles/resources/default_popular_sites.json ---- a/components/ntp_tiles/resources/default_popular_sites.json -+++ b/components/ntp_tiles/resources/default_popular_sites.json -@@ -1,23 +1,23 @@ - [ + If this policy is left not set the default profile path will be used and the user will be able to override it with the '--user-data-dir' command line flag.''', + 'label': '''Set user data directory''', +@@ -3701,7 +3701,7 @@ + + If not set, $1Google Chrome uses the default cache directory, but users can change that setting with the --disk-cache-dir command line flag. + +- $1Google Chrome manages the contents of a volume's root directory. So to avoid data loss or other errors, do not set this policy to the root directory or any directory used for other purposes. See the variables you can use ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).''', ++ $1Google Chrome manages the contents of a volume's root directory. So to avoid data loss or other errors, do not set this policy to the root directory or any directory used for other purposes. See the variables you can use ( https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables ).''', + 'label': '''Set disk cache directory''', + }, { -- "large_icon_url": "https://www.chromium.org/_/rsrc/1484148948583/apple-touch-icon.png", -+ "large_icon_url": "https://www.ch40m1um.qjz9zk/_/rsrc/1484148948583/apple-touch-icon.png", - "title": "The Chromium Projects `", -- "url": "https://www.chromium.org/" -+ "url": "https://www.ch40m1um.qjz9zk/" +@@ -3749,7 +3749,7 @@ }, { -- "favicon_url": "https://codereview.chromium.org/static/favicon.ico", -+ "favicon_url": "https://codereview.ch40m1um.qjz9zk/static/favicon.ico", - "title": "Chromium Code Reviews", -- "url": "https://codereview.chromium.org/" -+ "url": "https://codereview.ch40m1um.qjz9zk/" + 'name': 'DownloadRestrictions', +- 'owners': ['mad@chromium.org', 'zmin@chromium.org'], ++ 'owners': ['mad@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -3806,7 +3806,7 @@ + + * No special restrictions means the downloads go through the usual security restrictions based on safety analysis results. + +- Note: These restrictions apply to downloads triggered from webpage content, as well as the Download link... menu option. They don't apply to the download of the currently displayed page or to saving as PDF from the printing options. Read more about Safe Browsing ( https://developers.google.com/safe-browsing ).''', ++ Note: These restrictions apply to downloads triggered from webpage content, as well as the Download link... menu option. They don't apply to the download of the currently displayed page or to saving as PDF from the printing options. Read more about Safe Browsing ( https://developers.9oo91e.qjz9zk/safe-browsing ).''', + 'label': '''Download restrictions''', }, { -- "large_icon_url": "https://www.chromium.org/_/rsrc/1484148948583/apple-touch-icon.png", -+ "large_icon_url": "https://www.ch40m1um.qjz9zk/_/rsrc/1484148948583/apple-touch-icon.png", - "title": "Git Repositories on chromium", -- "url": "https://chromium.googlesource.com/" -+ "url": "https://chromium.9oo91esource.qjz9zk/" +@@ -3828,13 +3828,13 @@ + + Leaving the policy unset means Chrome uses the default download directory, and users can change it. + +- Note: See a list of variables you can use ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).''', ++ Note: See a list of variables you can use ( https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables ).''', + 'label': '''Set download directory''', + 'arc_support': 'This policy has no effect on Android apps. Android apps always use the default downloads directory and cannot access any files downloaded by $2Google Chrome OS into a non-default downloads directory.', }, { -- "large_icon_url": "https://developers.google.com/_static/9bce7b6017/images/touch-icon.png", -+ "large_icon_url": "https://developers.9oo91e.qjz9zk/_static/9bce7b6017/images/touch-icon.png", - "title": "Google Open Source Programs Office", -- "url": "https://developers.google.com/open-source/" -+ "url": "https://developers.9oo91e.qjz9zk/open-source/" + 'name': 'AutoOpenFileTypes', +- 'owners': ['csharp@chromium.org', 'qinmin@chromium.org'], ++ 'owners': ['csharp@ch40m1um.qjz9zk', 'qinmin@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -3861,7 +3861,7 @@ }, { - "large_icon_url": "https://freenode.net/static/img/logos/coloured-alphabg-sq-120.png", - -diff --git a/components/offline_pages/core/prefetch/prefetch_proto_utils.cc b/components/offline_pages/core/prefetch/prefetch_proto_utils.cc ---- a/components/offline_pages/core/prefetch/prefetch_proto_utils.cc -+++ b/components/offline_pages/core/prefetch/prefetch_proto_utils.cc -@@ -13,7 +13,7 @@ - namespace offline_pages { + 'name': 'AutoOpenAllowedForURLs', +- 'owners': ['csharp@chromium.org', 'qinmin@chromium.org'], ++ 'owners': ['csharp@ch40m1um.qjz9zk', 'qinmin@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -3884,11 +3884,11 @@ - const char kPageBundleTypeURL[] = -- "type.googleapis.com/google.internal.chrome.offlinepages.v1.PageBundle"; -+ "type.9oo91eapis.qjz9zk/google.internal.chrome.offlinepages.v1.PageBundle"; + If this policy isn't set, all downloads where the file type is in AutoOpenFileTypes will automatically open. - namespace { +- A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format.''', ++ A URL pattern has to be formatted according to https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format.''', + }, + { + 'name': 'AutoLaunchProtocolsFromOrigins', +- 'owners': ['csharp@chromium.org', 'engedy@chromium.org'], ++ 'owners': ['csharp@ch40m1um.qjz9zk', 'engedy@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'array', +@@ -3921,13 +3921,13 @@ -diff --git a/components/offline_pages/core/prefetch/prefetch_server_urls.cc b/components/offline_pages/core/prefetch/prefetch_server_urls.cc ---- a/components/offline_pages/core/prefetch/prefetch_server_urls.cc -+++ b/components/offline_pages/core/prefetch/prefetch_server_urls.cc -@@ -11,7 +11,7 @@ + If this policy is not set, no protocols can launch without a prompt by default. Users may opt out of prompts on a per-protocol/per-site basis unless the ExternalProtocolDialogShowAlwaysOpenCheckbox policy is set to Disabled. This policy has no impact on per-protocol/per-site prompt exemptions set by users. - namespace offline_pages { +- The origin matching patterns use a similar format to those for the 'URLBlocklist' policy, which are documented at http://www.chromium.org/administrators/url-blacklist-filter-format. ++ The origin matching patterns use a similar format to those for the 'URLBlocklist' policy, which are documented at http://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. --const char kPrefetchServer[] = "https://offlinepages-pa.googleapis.com/"; -+const char kPrefetchServer[] = "https://offlinepages-pa.9oo91eapis.qjz9zk/"; - const char kPrefetchExperimentHeaderName[] = "X-Offline-Prefetch-Experiment"; - const char kPrefetchOperationHeaderName[] = "X-Offline-Prefetch-Operation"; - const char kPrefetchTestingHeaderName[] = "X-Offline-Prefetch-Testing"; -diff --git a/components/omnibox/browser/document_provider.cc b/components/omnibox/browser/document_provider.cc ---- a/components/omnibox/browser/document_provider.cc -+++ b/components/omnibox/browser/document_provider.cc -@@ -290,7 +290,7 @@ std::string ExtractDocIdFromUrl(const std::string& url) { - // Domain. - "(?:https?://)?(?:" - "spreadsheets|docs|drive|script|sites|jamboard" -- ")[0-9]?.google.com" -+ ")[0-9]?.9oo91e.qjz9zk" - "(?::[0-9]+)?\\/" // Port. - "(?:\\S*)" // Non-whitespace chars. - "(?:" -@@ -419,7 +419,7 @@ bool DocumentProvider::IsDocumentProviderAllowed( - // True if not explicitly in keyword mode, or a Drive suggestion. - return !IsExplicitlyInKeywordMode(input, keyword_provider->keyword()) || - base::StartsWith(input.text(), -- base::ASCIIToUTF16("drive.google.com"), -+ base::ASCIIToUTF16("drive.9oo91e.qjz9zk"), - base::CompareCase::SENSITIVE); - } - return true; -@@ -949,7 +949,7 @@ ACMatchClassifications DocumentProvider::Classify( - // static - const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { - // Early exit to avoid unnecessary and more involved checks. -- if (!url.DomainIs("google.com")) -+ if (!url.DomainIs("9oo91e.qjz9zk")) - return GURL(); + However, origin matching patterns for this policy cannot contain "/path" or "@query" elements. Any pattern that does contain a "/path" or "@query" element will be ignored.''', + }, + { + 'name': 'SafeBrowsingForTrustedSourcesEnabled', +- 'owners': ['mad@chromium.org', 'zmin@chromium.org'], ++ 'owners': ['mad@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.win:61-'], +@@ -3981,7 +3981,7 @@ + }, + { + 'name': 'CaptivePortalAuthenticationIgnoresProxy', +- 'owners': ['ultrotter@google.com', 'rsorokin@google.com'], ++ 'owners': ['ultrotter@9oo91e.qjz9zk', 'rsorokin@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:41-'], +@@ -4069,7 +4069,7 @@ - // We aim to prevent duplicate Drive URLs to appear between the Drive document -@@ -960,7 +960,7 @@ const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { - // Drive redirects are already handled by the regex in |ExtractDocIdFromUrl|. - // The below logic handles google.com redirects; e.g., google.com/url/q= - std::string url_str; -- if (url.host() == "www.google.com" && url.path() == "/url") { -+ if (url.host() == "www.9oo91e.qjz9zk" && url.path() == "/url") { - if ((!net::GetValueForKeyInQuery(url, "q", &url_str) || url_str.empty()) && - (!net::GetValueForKeyInQuery(url, "url", &url_str) || url_str.empty())) - return GURL(); -@@ -977,5 +977,5 @@ const GURL DocumentProvider::GetURLForDeduping(const GURL& url) { + Leaving the policy unset lets users choose the proxy settings. - // Canonicalize to the /open form without any extra args. - // This is similar to what we expect from the server. -- return id.empty() ? GURL() : GURL("https://drive.google.com/open?id=" + id); -+ return id.empty() ? GURL() : GURL("https://drive.9oo91e.qjz9zk/open?id=" + id); - } -diff --git a/components/omnibox/browser/document_suggestions_service.cc b/components/omnibox/browser/document_suggestions_service.cc ---- a/components/omnibox/browser/document_suggestions_service.cc -+++ b/components/omnibox/browser/document_suggestions_service.cc -@@ -83,7 +83,7 @@ void DocumentSuggestionsService::CreateDocumentSuggestionsRequest( - std::string endpoint = base::GetFieldTrialParamValueByFeature( - omnibox::kDocumentProvider, "DocumentProviderEndpoint"); - if (endpoint.empty()) -- endpoint = "https://cloudsearch.googleapis.com/v1/query/search"; -+ endpoint = "https://cloudsearch.9oo91eapis.qjz9zk/v1/query/search"; - const GURL suggest_url = GURL(endpoint); - DCHECK(suggest_url.is_valid()); +- Note: For detailed examples, visit The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', ++ Note: For detailed examples, visit The Chromium Projects ( https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', + }, + { + 'name': 'ProxyServerMode', +@@ -4129,7 +4129,7 @@ + If you choose manual proxy settings, you can specify further options in 'Address or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps. -@@ -126,7 +126,7 @@ void DocumentSuggestionsService::CreateDocumentSuggestionsRequest( - request.get()); + For detailed examples, visit: +- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. ++ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. - // Create and fetch an OAuth2 token. -- std::string scope = "https://www.googleapis.com/auth/cloud_search.query"; -+ std::string scope = "https://www.9oo91eapis.qjz9zk/auth/cloud_search.query"; - signin::ScopeSet scopes; - scopes.insert(scope); - token_fetcher_ = std::make_unique( -diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc ---- a/components/omnibox/browser/zero_suggest_provider.cc -+++ b/components/omnibox/browser/zero_suggest_provider.cc -@@ -152,7 +152,7 @@ void LogOmniboxRemoteNoUrlEligibilityOnNTP( - const int kDefaultZeroSuggestRelevance = 100; + If you enable this setting, $1Google Chrome ignores all proxy-related options specified from the command line. - // Used for testing whether zero suggest is ever available. --constexpr char kArbitraryInsecureUrlString[] = "http://www.google.com/"; -+constexpr char kArbitraryInsecureUrlString[] = "http://www.9oo91e.qjz9zk/"; +@@ -4161,7 +4161,7 @@ - // Metric name tracking the omnibox suggestion eligibility. - constexpr char kOmniboxZeroSuggestEligibleHistogramName[] = -diff --git a/components/optimization_guide/optimization_guide_constants.cc b/components/optimization_guide/optimization_guide_constants.cc ---- a/components/optimization_guide/optimization_guide_constants.cc -+++ b/components/optimization_guide/optimization_guide_constants.cc -@@ -12,10 +12,10 @@ const base::FilePath::CharType kUnindexedHintsFileName[] = - const char kRulesetFormatVersionString[] = "1.0.0"; + Leave this policy unset if you selected any other mode for setting proxy policies. - const char kOptimizationGuideServiceGetHintsDefaultURL[] = -- "https://optimizationguide-pa.googleapis.com/v1:GetHints"; -+ "https://optimizationguide-pa.9oo91eapis.qjz9zk/v1:GetHints"; +- Note: For detailed examples, visit The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', ++ Note: For detailed examples, visit The Chromium Projects ( https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', + 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', + }, + { +@@ -4189,7 +4189,7 @@ - const char kOptimizationGuideServiceGetModelsDefaultURL[] = -- "https://optimizationguide-pa.googleapis.com/v1:GetModels"; -+ "https://optimizationguide-pa.9oo91eapis.qjz9zk/v1:GetModels"; + Leave this policy unset if you selected any other mode for setting proxy policies. - const char kLoadedHintLocalHistogramString[] = - "OptimizationGuide.LoadedHint.Result"; -diff --git a/components/optimization_guide/proto/performance_hints_metadata.proto b/components/optimization_guide/proto/performance_hints_metadata.proto ---- a/components/optimization_guide/proto/performance_hints_metadata.proto -+++ b/components/optimization_guide/proto/performance_hints_metadata.proto -@@ -24,9 +24,9 @@ enum PerformanceClass { - message PerformanceHint { - // URLs that match this key should utilize the associated information. - oneof key { -- // Uses wildcard strings (e.g. "https://google.com/*/page.html") to match -+ // Uses wildcard strings (e.g. "https://9oo91e.qjz9zk/*/page.html") to match - // URLs. See the following code for more information: -- // https://cs.chromium.org/chromium/src/components/optimization_guide/url_pattern_with_wildcards.h -+ // https://cs.ch40m1um.qjz9zk/chromium/src/components/optimization_guide/url_pattern_with_wildcards.h - string wildcard_pattern = 1; - } +- Note: For detailed examples, visit The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', ++ Note: For detailed examples, visit The Chromium Projects ( https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', + 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', + }, + { +@@ -4217,7 +4217,7 @@ -diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc ---- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc -+++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.cc -@@ -27,7 +27,7 @@ void PageLoadMetricsObserverContentTestHarness::SetUp() { - original_browser_client_ = - content::SetBrowserClientForTesting(&browser_client_); - SetContents(CreateTestWebContents()); -- NavigateAndCommit(GURL("http://www.google.com")); -+ NavigateAndCommit(GURL("http://www.9oo91e.qjz9zk")); - // Page load metrics depends on UKM source URLs being recorded, so make sure - // the SourceUrlRecorderWebContentsObserver is instantiated. - ukm::InitializeSourceUrlRecorderForWebContents(web_contents()); -diff --git a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc ---- a/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc -+++ b/components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.cc -@@ -62,7 +62,7 @@ void PossiblyWarnFeatureDeprecation(content::RenderFrameHost* rfh, - blink::mojom::ConsoleMessageLevel::kWarning, - "Download is disallowed. The frame initiating or instantiating the " - "download is sandboxed, but the flag ‘allow-downloads’ is not set. " -- "See https://www.chromestatus.com/feature/5706745674465280 for more " -+ "See https://www.ch40mestatus.qjz9zk/feature/5706745674465280 for more " - "details."); - return; - case WebFeature::kDownloadInAdFrameWithoutUserGesture: -@@ -70,7 +70,7 @@ void PossiblyWarnFeatureDeprecation(content::RenderFrameHost* rfh, - blink::mojom::ConsoleMessageLevel::kWarning, - "[Intervention] Download in ad frame without user activation is " - "not allowed. See " -- "https://www.chromestatus.com/feature/6311883621531648 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/6311883621531648 for more " - "details."); - return; + Leave this policy unset if you selected any other mode for setting proxy policies. -diff --git a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc ---- a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc -+++ b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc -@@ -128,7 +128,7 @@ void AffiliationFetcher::StartRequest() { - // static - GURL AffiliationFetcher::BuildQueryURL() { - return net::AppendQueryParameter( -- GURL("https://www.googleapis.com/affiliation/v1/affiliation:lookup"), -+ GURL("https://www.9oo91eapis.qjz9zk/affiliation/v1/affiliation:lookup"), - "key", google_apis::GetAPIKey()); - } +- Note: For more detailed examples, visit The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', ++ Note: For more detailed examples, visit The Chromium Projects ( https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', + 'label': '''Comma-separated list of proxy bypass rules''', + 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', + }, +@@ -4270,7 +4270,7 @@ + * fixed_server, the ProxyServer and ProxyBypassList fields are used. + * pac_script, the ProxyPacUrl and ProxyBypassList fields are used. -diff --git a/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc b/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc ---- a/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc -+++ b/components/password_manager/core/browser/generation/password_requirements_spec_fetcher_impl.cc -@@ -85,7 +85,7 @@ std::string GetHashPrefix(const GURL& origin, size_t prefix_length) { - // that contains data for |hash_prefix|. - GURL GetUrlForRequirementsSpec(int version, const std::string& hash_prefix) { - return GURL(base::StringPrintf( -- "https://www.gstatic.com/chrome/autofill/password_generation_specs/%d/%s", -+ "https://www.95tat1c.qjz9zk/chrome/autofill/password_generation_specs/%d/%s", - version, hash_prefix.c_str())); - } +- Note: For more detailed examples, visit The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', ++ Note: For more detailed examples, visit The Chromium Projects ( https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).''', + 'arc_support': 'Only a subset of proxy configuration options are made available to Android apps. Android apps may voluntarily choose to use the proxy. You cannot force them to use a proxy.', + }, + { +@@ -4472,7 +4472,7 @@ + }, + { + 'name': 'BrowserLabsEnabled', +- 'owners': ['elainechien@chromium.org', 'robliao@chromium.org'], ++ 'owners': ['elainechien@ch40m1um.qjz9zk', 'robliao@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema' : {'type': 'boolean'}, + 'supported_on': ['chrome.*:89-'], +@@ -4534,7 +4534,7 @@ + 'id': 305, + 'caption': '''Account type for HTTP Negotiate authentication''', + 'tags': [], +- 'desc': '''Setting the policy specifies the type of accounts provided by the Android authentication app that supports HTTP Negotiate authentication (such as Kerberos authentication). This information should be available from the supplier of the authentication app. For details, see The Chromium Projects ( https://goo.gl/hajyfN ) ++ 'desc': '''Setting the policy specifies the type of accounts provided by the Android authentication app that supports HTTP Negotiate authentication (such as Kerberos authentication). This information should be available from the supplier of the authentication app. For details, see The Chromium Projects ( https://goo.gl.qjz9zk/hajyfN ) -diff --git a/components/password_manager/core/browser/hash_password_manager.cc b/components/password_manager/core/browser/hash_password_manager.cc ---- a/components/password_manager/core/browser/hash_password_manager.cc -+++ b/components/password_manager/core/browser/hash_password_manager.cc -@@ -214,7 +214,7 @@ void HashPasswordManager::ClearAllNonGmailPasswordHash() { - std::string username = GetAndDecryptField(data, kUsernameFieldKey); - std::string email = - CanonicalizeUsername(username, /*is_gaia_account=*/true); -- return email.find("@gmail.com") == std::string::npos; -+ return email.find("@9ma1l.qjz9zk") == std::string::npos; - }); - } + Leaving the policy unset turns off HTTP Negotiate authentication on Android.''', + }, +@@ -4699,7 +4699,7 @@ + 'dynamic_refresh': True, + 'per_profile': True, + }, +- 'example_value': ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.google.com/service/update2/crx', 'abcdefghijklmnopabcdefghijklmnop'], ++ 'example_value': ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.9oo91e.qjz9zk/service/update2/crx', 'abcdefghijklmnopabcdefghijklmnop'], + 'id': 34, + 'caption': '''Configure the list of force-installed apps and extensions''', + 'tags': ['full-admin-access'], +@@ -4715,9 +4715,9 @@ -diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_request.h b/components/password_manager/core/browser/leak_detection/leak_detection_request.h ---- a/components/password_manager/core/browser/leak_detection/leak_detection_request.h -+++ b/components/password_manager/core/browser/leak_detection/leak_detection_request.h -@@ -36,7 +36,7 @@ class LeakDetectionRequest : public LeakDetectionRequestInterface { - }; + The source code of any extension may be altered by users through developer tools, potentially rendering the extension dysfunctional. If this is a concern, set the DeveloperToolsDisabled policy. - static constexpr char kLookupSingleLeakEndpoint[] = -- "https://passwordsleakcheck-pa.googleapis.com/v1/leaks:lookupSingle"; -+ "https://passwordsleakcheck-pa.9oo91eapis.qjz9zk/v1/leaks:lookupSingle"; +- Each list item of the policy is a string that contains an extension ID and, optionally, an "update" URL separated by a semicolon (;). The extension ID is the 32-letter string found, for example, on chrome://extensions when in Developer mode. If specified, the "update" URL should point to an Update Manifest XML document ( https://developer.chrome.com/extensions/autoupdate ). By default, the Chrome Web Store's update URL is used. The "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension use the update URL in the extension's manifest. ++ Each list item of the policy is a string that contains an extension ID and, optionally, an "update" URL separated by a semicolon (;). The extension ID is the 32-letter string found, for example, on chrome://extensions when in Developer mode. If specified, the "update" URL should point to an Update Manifest XML document ( https://developer.ch40me.qjz9zk/extensions/autoupdate ). By default, the Chrome Web Store's update URL is used. The "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension use the update URL in the extension's manifest. - LeakDetectionRequest(); - ~LeakDetectionRequest() override; -diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc ---- a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc -+++ b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc -@@ -25,7 +25,7 @@ namespace password_manager { - namespace { +- Note: This policy doesn't apply to Incognito mode. Read about hosting extensions ( https://developer.chrome.com/extensions/hosting ).''', ++ Note: This policy doesn't apply to Incognito mode. Read about hosting extensions ( https://developer.ch40me.qjz9zk/extensions/hosting ).''', + 'label': '''Extension/App IDs and update URLs to be silently installed''', + 'arc_support': 'Android apps can be force-installed from the Google Admin console using Google Play. They do not use this policy.', + }, +@@ -4741,14 +4741,14 @@ + 'tags': ['full-admin-access', 'system-security'], + 'desc': '''Setting the policy specifies which URLs may install extensions, apps, and themes. Before $1Google Chrome 21, users could click on a link to a *.crx file, and $1Google Chrome would offer to install the file after a few warnings. Afterwards, such files must be downloaded and dragged to the $1Google Chrome settings page. This setting allows specific URLs to have the old, easier installation flow. - constexpr char kAPIScope[] = -- "https://www.googleapis.com/auth/identity.passwords.leak.check"; -+ "https://www.9oo91eapis.qjz9zk/auth/identity.passwords.leak.check"; +- Each item in this list is an extension-style match pattern (see https://developer.chrome.com/extensions/match_patterns). Users can easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (the referrer) must be allowed by these patterns. ++ Each item in this list is an extension-style match pattern (see https://developer.ch40me.qjz9zk/extensions/match_patterns). Users can easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (the referrer) must be allowed by these patterns. - // Returns a Google account that can be used for getting a token. - CoreAccountId GetAccountForRequest( -diff --git a/components/password_manager/core/browser/leak_detection_dialog_utils.cc b/components/password_manager/core/browser/leak_detection_dialog_utils.cc ---- a/components/password_manager/core/browser/leak_detection_dialog_utils.cc -+++ b/components/password_manager/core/browser/leak_detection_dialog_utils.cc -@@ -21,7 +21,7 @@ namespace password_manager { - using metrics_util::LeakDialogType; + ExtensionInstallBlocklist takes precedence over this policy. That is, an extension on the blocklist won't be installed, even if it happens from a site on this list.''', + 'label': '''URL patterns to allow extension, app, and user script installs from''', + }, + { + 'name': 'ExtensionAllowInsecureUpdates', +- 'owners': ['waffles@chromium.org', 'rdevlin.cronin@chromium.org'], ++ 'owners': ['waffles@ch40m1um.qjz9zk', 'rdevlin.cronin@ch40m1um.qjz9zk'], + 'type': 'main', + 'deprecated': True, + 'schema': { 'type': 'boolean' }, +@@ -4917,7 +4917,7 @@ + }, + }, + }, +- 'url_schema': 'https://www.chromium.org/administrators/policy-list-3/extension-settings-full', ++ 'url_schema': 'https://www.ch40m1um.qjz9zk/administrators/policy-list-3/extension-settings-full', + 'supported_on': ['chrome.*:62-', 'chrome_os:62-'], + 'features': { + 'dynamic_refresh': True, +@@ -4974,7 +4974,7 @@ + 'tags': [], + 'desc': '''Setting the policy controls extension management settings for $1Google Chrome, including any controlled by existing extension-related policies. The policy supersedes any legacy policies that might be set. - constexpr char kPasswordCheckupURL[] = -- "https://passwords.google.com/checkup/start?hideExplanation=true"; -+ "https://passwords.9oo91e.qjz9zk/checkup/start?hideExplanation=true"; +- This policy maps an extension ID or an update URL to its specific setting only. A default configuration can be set for the special ID "*", which applies to all extensions without a custom configuration in this policy. With an update URL, configuration applies to extensions with the exact update URL stated in the extension manifest ( http://support.google.com/chrome/a?p=Configure_ExtensionSettings_policy ). If the 'override_update_url' flag is set to true, the extension is installed and updated using the "update" URL specified in the ExtensionInstallForcelist policy or in 'update_url' field in this policy. The flag 'override_update_url' is ignored if the 'update_url' is a Chrome Web Store url. ++ This policy maps an extension ID or an update URL to its specific setting only. A default configuration can be set for the special ID "*", which applies to all extensions without a custom configuration in this policy. With an update URL, configuration applies to extensions with the exact update URL stated in the extension manifest ( http://support.9oo91e.qjz9zk/chrome/a?p=Configure_ExtensionSettings_policy ). If the 'override_update_url' flag is set to true, the extension is installed and updated using the "update" URL specified in the ExtensionInstallForcelist policy or in 'update_url' field in this policy. The flag 'override_update_url' is ignored if the 'update_url' is a Chrome Web Store url. - CredentialLeakType CreateLeakType(IsSaved is_saved, - IsReused is_reused, -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 -@@ -92,7 +92,7 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( - } + Note: For Windows® instances not joined to a Microsoft® Active Directory® domain, forced installation is limited to apps and extensions listed in the Chrome Web Store.''', + }, +@@ -4998,7 +4998,7 @@ - GURL url = driver_->GetLastCommittedURL(); -- if (url.DomainIs("google.com")) -+ if (url.DomainIs("9oo91e.qjz9zk")) - return false; + Disabling this setting or leaving it unset allows external extensions to be installed. - if (!client_->IsSavingAndFillingEnabled(url)) { -diff --git a/components/password_manager/core/browser/password_hash_data.cc b/components/password_manager/core/browser/password_hash_data.cc ---- a/components/password_manager/core/browser/password_hash_data.cc -+++ b/components/password_manager/core/browser/password_hash_data.cc -@@ -96,7 +96,7 @@ std::string CanonicalizeUsername(const std::string& username, - username, "@", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - if (parts.size() != 2U) { - if (is_gaia_account && parts.size() == 1U) -- return gaia::CanonicalizeEmail(username + "@gmail.com"); -+ return gaia::CanonicalizeEmail(username + "@9ma1l.qjz9zk"); - return username; - } - return gaia::CanonicalizeEmail(username); -diff --git a/components/password_manager/core/browser/password_manager_constants.cc b/components/password_manager/core/browser/password_manager_constants.cc ---- a/components/password_manager/core/browser/password_manager_constants.cc -+++ b/components/password_manager/core/browser/password_manager_constants.cc -@@ -14,9 +14,9 @@ const base::FilePath::CharType kLoginDataForAccountFileName[] = - FILE_PATH_LITERAL("Login Data For Account"); +- External extensions and their installation are documented at https://developer.chrome.com/apps/external_extensions. ++ External extensions and their installation are documented at https://developer.ch40me.qjz9zk/apps/external_extensions. + ''', + }, + { +@@ -5142,7 +5142,7 @@ + 'dynamic_refresh': True, + 'per_profile': True, + }, +- 'example_value': ['https://example.com', 'https://www.chromium.org'], ++ 'example_value': ['https://example.com', 'https://www.ch40m1um.qjz9zk'], + 'id': 38, + 'caption': '''URLs to open on startup''', + 'tags': [], +@@ -5986,7 +5986,7 @@ + }, + { + 'name': 'DefaultWebUsbGuardSetting', +- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -6020,7 +6020,7 @@ + }, + { + 'name': 'WebUsbAllowDevicesForUrls', +- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'array', +@@ -6052,7 +6052,7 @@ + }, + 'example_value': [{ + 'devices': [{'vendor_id': 1234, 'product_id': 5678}], +- 'urls': ['https://google.com', 'https://requesting.com,https://embedded.com'], ++ 'urls': ['https://9oo91e.qjz9zk', 'https://requesting.com,https://embedded.com'], + }], + 'id': 486, + 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.''', +@@ -6067,7 +6067,7 @@ + }, + { + 'name': 'DeviceLoginScreenWebUsbAllowDevicesForUrls', +- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'array', +@@ -6100,7 +6100,7 @@ + }, + 'example_value': [{ + 'devices': [{'vendor_id': 1234, 'product_id': 5678}], +- 'urls': ['https://google.com', 'https://requesting.com,https://embedded.com'], ++ 'urls': ['https://9oo91e.qjz9zk', 'https://requesting.com,https://embedded.com'], + }], + 'id': 603, + 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs on the login screen.''', +@@ -6113,7 +6113,7 @@ + }, + { + 'name': 'WebUsbAskForUrls', +- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6134,11 +6134,11 @@ - const char kPasswordManagerAccountDashboardURL[] = -- "https://passwords.google.com"; -+ "https://passwords.9oo91e.qjz9zk"; + URL patterns must not conflict with WebUsbAskForUrls. Neither policy takes precedence if a URL matches with both. - const char kPasswordManagerHelpCenterSmartLock[] = -- "https://support.google.com/accounts?p=smart_lock_chrome"; -+ "https://support.9oo91e.qjz9zk/accounts?p=smart_lock_chrome"; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'WebUsbBlockedForUrls', +- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6159,11 +6159,11 @@ - } // namespace password_manager -diff --git a/components/password_manager/core/browser/password_manager_test_utils.cc b/components/password_manager/core/browser/password_manager_test_utils.cc ---- a/components/password_manager/core/browser/password_manager_test_utils.cc -+++ b/components/password_manager/core/browser/password_manager_test_utils.cc -@@ -53,11 +53,11 @@ std::unique_ptr FillPasswordFormWithData( - form->display_name = form->username_value; - else - form->blacklisted_by_user = true; -- form->icon_url = GURL("https://accounts.google.com/Icon"); -+ form->icon_url = GURL("https://accounts.9oo91e.qjz9zk/Icon"); - if (use_federated_login) { - form->password_value.clear(); - form->federation_origin = -- url::Origin::Create(GURL("https://accounts.google.com/login")); -+ url::Origin::Create(GURL("https://accounts.9oo91e.qjz9zk/login")); - } - form->in_store = PasswordForm::Store::kProfileStore; - return form; -diff --git a/components/password_manager/core/browser/password_reuse_detector.cc b/components/password_manager/core/browser/password_reuse_detector.cc ---- a/components/password_manager/core/browser/password_reuse_detector.cc -+++ b/components/password_manager/core/browser/password_reuse_detector.cc -@@ -276,7 +276,7 @@ void PasswordReuseDetector::ClearAllNonGmailPasswordHash() { - *gaia_password_hash_data_list_, [](const PasswordHashData& data) { - std::string email = - CanonicalizeUsername(data.username, data.is_gaia_password); -- return email.find("@gmail.com") == std::string::npos; -+ return email.find("@9ma1l.qjz9zk") == std::string::npos; - }); - } + URL patterns can't conflict with WebUsbAskForUrls. Neither policy takes precedence if a URL matches with both. -diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc ---- a/components/password_manager/core/browser/password_store.cc -+++ b/components/password_manager/core/browser/password_store.cc -@@ -258,10 +258,10 @@ void PasswordStore::GetLogins(const FormDigest& form, - // TODO(mdm): actually delete them at some point, say M24 or so. - base::Time cutoff; // the null time - if (form.scheme == PasswordForm::Scheme::kHtml && -- (form.signon_realm == "http://www.google.com" || -- form.signon_realm == "http://www.google.com/" || -- form.signon_realm == "https://www.google.com" || -- form.signon_realm == "https://www.google.com/")) { -+ (form.signon_realm == "http://www.9oo91e.qjz9zk" || -+ form.signon_realm == "http://www.9oo91e.qjz9zk/" || -+ form.signon_realm == "https://www.9oo91e.qjz9zk" || -+ form.signon_realm == "https://www.9oo91e.qjz9zk/")) { - static const base::Time::Exploded exploded_cutoff = { - 2012, 1, 0, 1, 0, 0, 0, 0}; // 00:00 Jan 1 2012 - base::Time out_time; -diff --git a/components/password_manager/core/browser/password_sync_util.cc b/components/password_manager/core/browser/password_sync_util.cc ---- a/components/password_manager/core/browser/password_sync_util.cc -+++ b/components/password_manager/core/browser/password_sync_util.cc -@@ -24,7 +24,7 @@ using url::Origin; - namespace { +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'DefaultSerialGuardSetting', +- 'owners': ['reillyg@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -6197,7 +6197,7 @@ + }, + { + 'name': 'SerialAskForUrls', +- 'owners': ['reillyg@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6220,11 +6220,11 @@ - constexpr char kGoogleChangePasswordSignonRealm[] = -- "https://myaccount.google.com/"; -+ "https://myaccount.9oo91e.qjz9zk/"; + URL patterns must not conflict with SerialBlockedForUrls. Neither policy takes precedence if a URL matches with both. - } // namespace +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'SerialBlockedForUrls', +- 'owners': ['reillyg@chromium.org'], ++ 'owners': ['reillyg@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6247,11 +6247,11 @@ -@@ -50,7 +50,7 @@ std::string GetSyncUsernameIfSyncingPasswords( - bool IsSyncAccountCredential(const autofill::PasswordForm& form, - const syncer::SyncService* sync_service, - const signin::IdentityManager* identity_manager) { -- if (!GURL(form.signon_realm).DomainIs("google.com")) -+ if (!GURL(form.signon_realm).DomainIs("9oo91e.qjz9zk")) - return false; + URL patterns can't conflict with SerialAskForUrls. Neither policy takes precedence if a URL matches with both. - // The empty username can mean that Chrome did not detect it correctly. For -diff --git a/components/password_manager/core/browser/password_ui_utils.cc b/components/password_manager/core/browser/password_ui_utils.cc ---- a/components/password_manager/core/browser/password_ui_utils.cc -+++ b/components/password_manager/core/browser/password_ui_utils.cc -@@ -26,7 +26,7 @@ namespace { - const char* const kRemovedPrefixes[] = {"m.", "mobile.", "www."}; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'DefaultFileSystemReadGuardSetting', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -6285,7 +6285,7 @@ + }, + { + 'name': 'DefaultFileSystemWriteGuardSetting', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -6319,7 +6319,7 @@ + }, + { + 'name': 'FileSystemReadAskForUrls', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6340,11 +6340,11 @@ - constexpr char kPlayStoreAppPrefix[] = -- "https://play.google.com/store/apps/details?id="; -+ "https://play.9oo91e.qjz9zk/store/apps/details?id="; + URL patterns must not conflict with FileSystemReadBlockedForUrls. Neither policy takes precedence if a URL matches with both. - } // namespace +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'FileSystemReadBlockedForUrls', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6365,11 +6365,11 @@ -diff --git a/components/password_manager/core/browser/psl_matching_helper.cc b/components/password_manager/core/browser/psl_matching_helper.cc ---- a/components/password_manager/core/browser/psl_matching_helper.cc -+++ b/components/password_manager/core/browser/psl_matching_helper.cc -@@ -20,8 +20,8 @@ namespace password_manager { + URL patterns can't conflict with FileSystemReadAskForUrls. Neither policy takes precedence if a URL matches with both. - namespace { - bool IsAllowedForPSLMatchedGoogleDomain(const GURL& url) { -- return url.DomainIs("myaccount.google.com") || -- url.DomainIs("accounts.google.com"); -+ return url.DomainIs("myaccount.9oo91e.qjz9zk") || -+ url.DomainIs("accounts.9oo91e.qjz9zk"); - } +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'FileSystemWriteAskForUrls', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6390,11 +6390,11 @@ - } // namespace -@@ -102,7 +102,7 @@ bool IsPublicSuffixDomainMatch(const std::string& url1, - if (gurl1 == gurl2) - return true; + URL patterns must not conflict with FileSystemWriteBlockedForUrls. Neither policy takes precedence if a URL matches with both. -- if (gurl1.DomainIs("google.com") && gurl2.DomainIs("google.com")) { -+ if (gurl1.DomainIs("9oo91e.qjz9zk") && gurl2.DomainIs("9oo91e.qjz9zk")) { - return gurl1.scheme() == gurl2.scheme() && gurl1.port() == gurl2.port() && - IsAllowedForPSLMatchedGoogleDomain(gurl1) && - IsAllowedForPSLMatchedGoogleDomain(gurl2); -diff --git a/components/password_manager/core/browser/sync_username_test_base.cc b/components/password_manager/core/browser/sync_username_test_base.cc ---- a/components/password_manager/core/browser/sync_username_test_base.cc -+++ b/components/password_manager/core/browser/sync_username_test_base.cc -@@ -55,7 +55,7 @@ void SyncUsernameTestBase::FakeSigninAs(const std::string& email) { - // static - PasswordForm SyncUsernameTestBase::SimpleGaiaForm(const char* username) { - PasswordForm form; -- form.signon_realm = "https://accounts.google.com"; -+ form.signon_realm = "https://accounts.9oo91e.qjz9zk"; - form.username_value = ASCIIToUTF16(username); - form.form_data = CreateSigninFormData(GURL(form.signon_realm), username); - return form; -diff --git a/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc b/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc ---- a/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc -+++ b/components/payments/content/utility/payment_method_manifest_parser_fuzzer.cc -@@ -39,7 +39,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - payments::ErrorLogger log; - log.DisableInTest(); - payments::PaymentManifestParser::ParsePaymentMethodManifestIntoVectors( -- GURL("https://chromium.org/pmm.json"), std::move(value), log, -+ GURL("https://ch40m1um.qjz9zk/pmm.json"), std::move(value), log, - &web_app_manifest_urls, &supported_origins, &all_origins_supported); - return 0; - } -diff --git a/components/payments/core/method_strings.cc b/components/payments/core/method_strings.cc ---- a/components/payments/core/method_strings.cc -+++ b/components/payments/core/method_strings.cc -@@ -11,10 +11,10 @@ namespace methods { - // Each string must be on a single line to correctly generate - // MethodStrings.java. +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'FileSystemWriteBlockedForUrls', +- 'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'], ++ 'owners': ['mek@ch40m1um.qjz9zk', 'file://content/browser/file_system_access/OWNERS'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -6415,7 +6415,7 @@ --const char kAndroidPay[] = "https://android.com/pay"; -+const char kAndroidPay[] = "https://8n6r01d.qjz9zk/pay"; - const char kBasicCard[] = "basic-card"; --const char kGooglePay[] = "https://google.com/pay"; --const char kGooglePlayBilling[] = "https://play.google.com/billing"; -+const char kGooglePay[] = "https://9oo91e.qjz9zk/pay"; -+const char kGooglePlayBilling[] = "https://play.9oo91e.qjz9zk/billing"; - const char kInterledger[] = "interledger"; - const char kPayeeCreditTransfer[] = "payee-credit-transfer"; - const char kPayerCreditTransfer[] = "payer-credit-transfer"; -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 -@@ -47,33 +47,33 @@ const char kPermissionBlockedKillSwitchMessage[] = - const char kPermissionBlockedRepeatedDismissalsMessage[] = - "%s permission has been blocked as the user has dismissed the permission " - "prompt several times. This can be reset in Site Settings. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " - "information."; + URL patterns can't conflict with FileSystemWriteAskForUrls. Neither policy takes precedence if a URL matches with both. - const char kPermissionBlockedRepeatedIgnoresMessage[] = - "%s permission has been blocked as the user has ignored the permission " - "prompt several times. This can be reset in Site Settings. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " - "information."; - #else - const char kPermissionBlockedRepeatedDismissalsMessage[] = - "%s permission has been blocked as the user has dismissed the permission " - "prompt several times. This can be reset in Page Info which can be " - "accessed by clicking the lock icon next to the URL. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " - "information."; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'AutoSelectCertificateForUrls', +@@ -6534,7 +6534,7 @@ - const char kPermissionBlockedRepeatedIgnoresMessage[] = - "%s permission has been blocked as the user has ignored the permission " - "prompt several times. This can be reset in Page Info which can be " - "accessed by clicking the lock icon next to the URL. See " -- "https://www.chromestatus.com/features/6443143280984064 for more " -+ "https://www.ch40mestatus.qjz9zk/features/6443143280984064 for more " - "information."; - #endif + If this policy is left not set, no auto-selection will be done for any site. - const char kPermissionBlockedFeaturePolicyMessage[] = - "%s permission has been blocked because of a Feature Policy applied to the " -- "current document. See https://goo.gl/EuHzyv for more details."; -+ "current document. See https://goo.gl.qjz9zk/EuHzyv for more details."; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', + }, + { + 'name': 'CookiesAllowedForUrls', +@@ -6563,7 +6563,7 @@ - void LogPermissionBlockedMessage(content::WebContents* web_contents, - const char* message, -diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc ---- a/components/policy/core/browser/browser_policy_connector.cc -+++ b/components/policy/core/browser/browser_policy_connector.cc -@@ -35,19 +35,19 @@ namespace { + See also policies CookiesBlockedForUrls and CookiesSessionOnlyForUrls. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence. - // The URL for the device management server. - const char kDefaultDeviceManagementServerUrl[] = -- "https://m.google.com/devicemanagement/data/api"; -+ "https://m.9oo91e.qjz9zk/devicemanagement/data/api"; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'CookiesBlockedForUrls', +@@ -6592,7 +6592,7 @@ - // The URL for the realtime reporting server. - const char kDefaultRealtimeReportingServerUrl[] = -- "https://chromereporting-pa.googleapis.com/v1/events"; -+ "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/events"; + While no specific policy takes precedence, see CookiesAllowedForUrls and CookiesSessionOnlyForUrls. URL patterns among these 3 policies must not conflict. - // Regexes that match many of the larger public email providers as we know - // these users are not from hosted enterprise domains. - const wchar_t* const kNonManagedDomainPatterns[] = { - L"aol\\.com", - L"comcast\\.net", -- L"googlemail\\.com", -- L"gmail\\.com", -+ L"9oo91email\\.qjz9zk", -+ L"9ma1l\\.qjz9zk", - L"gmx\\.de", - L"hotmail(\\.co|\\.com|)\\.[^.]+", // hotmail.com, hotmail.it, hotmail.co.uk - L"live\\.com", -diff --git a/components/policy/core/browser/url_util.cc b/components/policy/core/browser/url_util.cc ---- a/components/policy/core/browser/url_util.cc -+++ b/components/policy/core/browser/url_util.cc -@@ -43,13 +43,13 @@ const char kGoogleAmpCachePathPattern[] = "/[a-z]/(s/)?(.*)"; - const char kGoogleAmpViewerPathPattern[] = "/amp/(s/)?(.*)"; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'CookiesSessionOnlyForUrls', +@@ -6623,7 +6623,7 @@ - // Host, path prefix, and query regex pattern for Google web cache URLs. --const char kGoogleWebCacheHost[] = "webcache.googleusercontent.com"; -+const char kGoogleWebCacheHost[] = "webcache.9oo91eusercontent.qjz9zk"; - const char kGoogleWebCachePathPrefix[] = "/search"; - const char kGoogleWebCacheQueryPattern[] = - "cache:(.{12}:)?(https?://)?([^ :]*)( [^:]*)?"; + While no specific policy takes precedence, see CookiesBlockedForUrls and CookiesAllowedForUrls. URL patterns among these 3 policies must not conflict. - const char kGoogleTranslateSubdomain[] = "translate."; --const char kAlternateGoogleTranslateHost[] = "translate.googleusercontent.com"; -+const char kAlternateGoogleTranslateHost[] = "translate.9oo91eusercontent.qjz9zk"; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', + }, + { + 'name': 'ImagesAllowedForUrls', +@@ -6646,7 +6646,7 @@ - // Maximum filters per policy. Filters over this index are ignored. - const size_t kMaxFiltersPerPolicy = 1000; -diff --git a/components/policy/core/common/policy_loader_win.cc b/components/policy/core/common/policy_loader_win.cc ---- a/components/policy/core/common/policy_loader_win.cc -+++ b/components/policy/core/common/policy_loader_win.cc -@@ -56,7 +56,7 @@ const char kKeyThirdParty[] = "3rdparty"; + Leaving the policy unset means DefaultImagesSetting applies for all sites, if it's set. If not, the user's personal setting applies. - // The web store url that is the only trusted source for extensions. - const char kExpectedWebStoreUrl[] = -- ";https://clients2.google.com/service/update2/crx"; -+ ";https://clients2.9oo91e.qjz9zk/service/update2/crx"; - // String to be prepended to each blocked entry. - const char kBlockedExtensionPrefix[] = "[BLOCKED]"; +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy. ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy. -diff --git a/components/policy/proto/chrome_device_policy.proto b/components/policy/proto/chrome_device_policy.proto ---- a/components/policy/proto/chrome_device_policy.proto -+++ b/components/policy/proto/chrome_device_policy.proto -@@ -365,14 +365,14 @@ message AndroidKioskAppInfoProto { - // Package name (must be present). - // In the event this is the only field that is specified, runtime may use - // PackageManager.getLaunchIntentForPackage() to start the app. See -- // https://developer.android.com/reference/android/content/pm/PackageManager.html -+ // https://developer.8n6r01d.qjz9zk/reference/android/content/pm/PackageManager.html - // Example of the package name: "com.android.camera". Do not include "app:" - // prefix in the package name. - optional string package_name = 1; - - // Class name (optional). If present, class name is to be combined with - // package name to form a ComponentName. See -- // https://developer.android.com/reference/android/content/ComponentName.html -+ // https://developer.8n6r01d.qjz9zk/reference/android/content/ComponentName.html - optional string class_name = 2; - - // Action (optional). The third parameter required for creating an Intent. -diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto ---- a/components/policy/proto/device_management_backend.proto -+++ b/components/policy/proto/device_management_backend.proto -@@ -408,7 +408,7 @@ message DeviceState { - - message CustomerLogo { - // The SCS url for the logo set by the admin for a particular OU. -- // This is in the form https://admin.googleusercontent.com/. -+ // This is in the form https://admin.9oo91eusercontent.qjz9zk/. - optional string logo_url = 1; - } + Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.''', + }, +@@ -6671,7 +6671,7 @@ -diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json ---- a/components/policy/resources/policy_templates.json -+++ b/components/policy/resources/policy_templates.json -@@ -79,7 +79,7 @@ - # generating the comments for .proto files, paragraphs containing such tags - # should not be line-wrapped (use one long line per paragraph instead) to allow - # for correct re-flowing of the text. --# [1] https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide. -+# [1] https://www.ch40m1um.qjz9zk/developers/tools-we-use-in-chromium/grit/grit-users-guide. - # - # Generated grd names: - # Each name has two parts: the second part is either CAPTION, DESC or LABEL, -@@ -399,7 +399,7 @@ - If you choose to auto detect the proxy server, all other options are ignored. + Leaving the policy unset means DefaultImagesSetting applies for all sites, if it's set. If not, the user's personal setting applies. - For detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy. ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy. - If you enable this setting, $1Google Chrome and ARC-apps ignore all proxy-related options specified from the command line. + Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.''', + }, +@@ -6696,7 +6696,7 @@ -@@ -544,7 +544,7 @@ + Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'ChromeFrameRendererSettings', -- 'owners': ['tommi@chromium.org'], -+ 'owners': ['tommi@ch40m1um.qjz9zk'], - 'type': 'group', - 'caption': '''Default HTML renderer for $3Google Chrome Frame''', - 'desc': '''Allows you to configure the default HTML renderer when $3Google Chrome Frame is installed. -@@ -559,7 +559,7 @@ + 'name': 'JavaScriptBlockedForUrls', +@@ -6719,7 +6719,7 @@ + + Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'ChromeFrameContentTypes', -- 'owners': ['tommi@chromium.org'], -+ 'owners': ['tommi@ch40m1um.qjz9zk'], - 'type': 'group', - 'caption': '''Allow $3Google Chrome Frame to handle the following content types''', - 'desc': '''Allow $3Google Chrome Frame to handle the following content types.''', -@@ -1120,7 +1120,7 @@ - 'dynamic_refresh': True, - 'per_profile': True, - }, -- 'example_value': 'https://www.chromium.org', -+ 'example_value': 'https://www.ch40m1um.qjz9zk', - 'id': 1, - 'caption': '''Configure the home page URL''', - 'tags': [], -@@ -1177,7 +1177,7 @@ - 'dynamic_refresh': True, - 'per_profile': True, - }, -- 'example_value': 'https://www.chromium.org', -+ 'example_value': 'https://www.ch40m1um.qjz9zk', - 'id': 360, - 'caption': '''Configure the New Tab page URL''', - 'tags': [], -@@ -1214,7 +1214,7 @@ + 'name': 'KeygenAllowedForUrls', +@@ -6743,7 +6743,7 @@ - If this setting is not set, $1Google Chrome will allow the user to control whether it is the default browser and whether user notifications should be shown when it isn't. + If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. -- Note for administrators of Microsoft® Windows: Enabling this setting will only work for machines running Windows 7. For versions of Windows starting with Windows 8, you must deploy a "default application associations" file that makes $1Google Chrome the handler for the https and http protocols (and, optionally, the ftp protocol and file formats such as .html, .htm, .pdf, .svg, .webp, etc...). See https://support.google.com/chrome?p=make_chrome_default_win for more information.''', -+ Note for administrators of Microsoft® Windows: Enabling this setting will only work for machines running Windows 7. For versions of Windows starting with Windows 8, you must deploy a "default application associations" file that makes $1Google Chrome the handler for the https and http protocols (and, optionally, the ftp protocol and file formats such as .html, .htm, .pdf, .svg, .webp, etc...). See https://support.9oo91e.qjz9zk/chrome?p=make_chrome_default_win for more information.''', - 'label': '''Set $1Google Chrome as Default Browser''', - }, - { -@@ -1694,7 +1694,7 @@ - }, - { - 'name': 'ForceLegacyDefaultReferrerPolicy', -- 'owners': ['davidvc@chromium.org', 'chrome-network-stack@chromium.org'], -+ 'owners': ['davidvc@ch40m1um.qjz9zk', 'chrome-network-stack@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -1717,7 +1717,7 @@ +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessClientFirewallTraversal', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:14-16', 'chrome_os:14-16'], -@@ -1739,7 +1739,7 @@ + 'name': 'KeygenBlockedForUrls', +@@ -6767,11 +6767,11 @@ + + If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostClientDomain', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], -@@ -1756,7 +1756,7 @@ + 'name': 'LegacySameSiteCookieBehaviorEnabled', +- 'owners': [ 'chlily@chromium.org', ], ++ 'owners': [ 'chlily@ch40m1um.qjz9zk', ], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -6802,13 +6802,13 @@ + 'id': 623, + 'caption': '''Default legacy SameSite cookie behavior setting''', + 'tags': [], +- 'desc': '''Allows you to revert all cookies to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute, and skips the scheme comparison when evaluating if two sites are same-site. See https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. ++ 'desc': '''Allows you to revert all cookies to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute, and skips the scheme comparison when evaluating if two sites are same-site. See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. + + When this policy is not set, the default SameSite behavior for cookies will depend on the user's personal configuration for the SameSite-by-default feature, the Cookies-without-SameSite-must-be-secure feature, and the Schemeful Same-Site feature which may be set by a field trial or by enabling or disabling the same-site-by-default-cookies flag, the cookies-without-same-site-must-be-secure flag, or the schemeful-same-site flag, respectively.''', }, { - 'name': 'RemoteAccessHostClientDomainList', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], + 'name': 'LegacySameSiteCookieBehaviorEnabledForDomainList', +- 'owners': [ 'chlily@chromium.org', ], ++ 'owners': [ 'chlily@ch40m1um.qjz9zk', ], 'type': 'list', 'schema': { 'type': 'array', -@@ -1783,7 +1783,7 @@ - }, +@@ -6827,7 +6827,7 @@ + 'id': 624, + 'caption': '''Revert to legacy SameSite behavior for cookies on these sites''', + 'tags': [], +- 'desc': '''Cookies set for domains matching these patterns will revert to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute, and skips the scheme comparison when evaluating if two sites are same-site. See https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. ++ 'desc': '''Cookies set for domains matching these patterns will revert to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute, and skips the scheme comparison when evaluating if two sites are same-site. See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. + + For cookies on domains not covered by the patterns specified here, or for all cookies if this policy is not set, the global default value will be used either from the LegacySameSiteCookieBehaviorEnabled policy, if it is set, or the user's personal configuration otherwise. + +@@ -6836,9 +6836,9 @@ { - 'name': 'RemoteAccessHostFirewallTraversal', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], + 'name': 'InsecurePrivateNetworkRequestsAllowed', + 'owners': [ +- 'titouan@chromium.org', +- 'clamy@chromium.org', +- 'mkwst@chromium.org', ++ 'titouan@ch40m1um.qjz9zk', ++ 'clamy@ch40m1um.qjz9zk', ++ 'mkwst@ch40m1um.qjz9zk', + ], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:14-', 'chrome_os:41-'], -@@ -1805,7 +1805,7 @@ - }, - { - 'name': 'RemoteAccessHostDomain', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], -@@ -1822,7 +1822,7 @@ - }, +@@ -6865,7 +6865,7 @@ + 2) Its IP address is private and the other is public. + In the future, depending on spec evolution, this policy might apply to all cross-origin requests directed at private IPs or localhost. + +- A website is deemed secure if it meets the definition of a secure context in https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts. Otherwise, it will be treated as an insecure context. ++ A website is deemed secure if it meets the definition of a secure context in https://developer.m0z111a.qjz9zk/en-US/docs/Web/Security/Secure_Contexts. Otherwise, it will be treated as an insecure context. + + When this policy is either not set or set to false, the default behavior for requests from insecure contexts to more-private network endpoints will depend on the user's personal configuration for the BlockInsecurePrivateNetworkRequests feature, which may be set by a field trial or on the command line. + +@@ -6874,9 +6874,9 @@ { - 'name': 'RemoteAccessHostDomainList', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], + 'name': 'InsecurePrivateNetworkRequestsAllowedForUrls', + 'owners': [ +- 'titouan@chromium.org', +- 'clamy@chromium.org', +- 'mkwst@chromium.org', ++ 'titouan@ch40m1um.qjz9zk', ++ 'clamy@ch40m1um.qjz9zk', ++ 'mkwst@ch40m1um.qjz9zk', + ], 'type': 'list', 'schema': { - 'type': 'array', -@@ -1849,7 +1849,7 @@ +@@ -6905,7 +6905,7 @@ + + Note that this policy only affects insecure origins, so secure origins (e.g. https://example.com) included in this list will be ignored. + +- For detailed information on valid URL patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', ++ For detailed information on valid URL patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', }, { - 'name': 'RemoteAccessHostRequireTwoFactor', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:22-22'], -@@ -1871,7 +1871,7 @@ + 'name': 'PluginsAllowedForUrls', +@@ -6929,7 +6929,7 @@ + + Leaving the policy unset means DefaultPluginsSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. However, starting in M85, patterns with '*' and '[*.]' wildcards in the host are no longer supported for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. However, starting in M85, patterns with '*' and '[*.]' wildcards in the host are no longer supported for this policy.''', }, { - 'name': 'RemoteAccessHostTalkGadgetPrefix', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:22-75', 'chrome_os:41-75'], -@@ -1886,17 +1886,17 @@ - 'tags': [], - 'desc': '''Configures the TalkGadget prefix that will be used by remote access hosts and prevents users from changing it. + 'name': 'PluginsBlockedForUrls', +@@ -6953,7 +6953,7 @@ -- If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.google.com'. -+ If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.9oo91e.qjz9zk'. + Leaving the policy unset means DefaultPluginsSetting applies for all sites, if it's set. If not, the user's personal setting applies. - If this setting is enabled, then hosts will use the custom domain name when accessing the TalkGadget instead of the default domain name. +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. However, starting in M85, patterns with '*' and '[*.]' wildcards in the host are no longer supported for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. However, starting in M85, patterns with '*' and '[*.]' wildcards in the host are no longer supported for this policy.''', + }, + { + 'name': 'PopupsAllowedForUrls', +@@ -6981,7 +6981,7 @@ -- If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.google.com') will be used for all hosts. -+ If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.9oo91e.qjz9zk') will be used for all hosts. + Leaving the policy unset means DefaultPopupsSetting applies for all sites, if it's set. If not, the user's personal setting applies. -- Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.google.com' to access the TalkGadget.''', -+ Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.9oo91e.qjz9zk' to access the TalkGadget.''', +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostRequireCurtain', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:23-', 'chrome_os:41-'], -@@ -1916,7 +1916,7 @@ + 'name': 'RegisteredProtocolHandlers', +@@ -7015,7 +7015,7 @@ + 'can_be_recommended': True, + 'can_be_mandatory' : False, + }, +- 'example_value': [{'protocol': 'mailto', 'url': 'https://mail.google.com/mail/?extsrc=mailto&url=%s', 'default': True}], ++ 'example_value': [{'protocol': 'mailto', 'url': 'https://mail.9oo91e.qjz9zk/mail/?extsrc=mailto&url=%s', 'default': True}], + 'id': 268, + 'caption': '''Register protocol handlers''', + 'tags': [], +@@ -7050,7 +7050,7 @@ + + Leaving the policy unset means DefaultPopupsSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostAllowClientPairing', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:30-', 'chrome_os:41-'], -@@ -1934,7 +1934,7 @@ + 'name': 'NotificationsAllowedForUrls', +@@ -7073,7 +7073,7 @@ + + Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostAllowGnubbyAuth', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:35-', 'chrome_os:41-'], -@@ -1952,7 +1952,7 @@ + 'name': 'NotificationsBlockedForUrls', +@@ -7096,7 +7096,7 @@ + + Leaving the policy unset means DefaultJavaScriptSetting applies for all sites, if it's set. If not, the user's personal setting applies. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostAllowRelayedConnection', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:36-', 'chrome_os:41-'], -@@ -1974,7 +1974,7 @@ + 'name': 'SensorsAllowedForUrls', +@@ -7121,7 +7121,7 @@ + + If the same URL pattern exists in both this policy and the SensorsBlockedForUrls policy, the latter is prioritized and access to motion or light sensors will be blocked. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostUdpPortRange', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:36-', 'chrome_os:41-'], -@@ -1992,7 +1992,7 @@ + 'name': 'SensorsBlockedForUrls', +@@ -7146,7 +7146,7 @@ + + If the same URL pattern exists in both this policy and the SensorsAllowedForUrls policy, this policy is prioritized and access to motion or light sensors will be blocked. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { - 'name': 'RemoteAccessHostMatchUsername', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], + 'name': 'NativeMessagingBlacklist', +@@ -7274,7 +7274,7 @@ + }, + { + 'name': 'Disable3DAPIs', +- 'owners': ['kbr@chromium.org', 'zmo@chromium.org'], ++ 'owners': ['kbr@ch40m1um.qjz9zk', 'zmo@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'], -@@ -2010,7 +2010,7 @@ + 'supported_on': ['chrome.*:9-', 'chrome_os:11-'], +@@ -7312,7 +7312,7 @@ }, { - 'name': 'RemoteAccessHostTokenUrl', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:28-','chrome_os:42-'], -@@ -2028,7 +2028,7 @@ + 'name': 'MaxInvalidationFetchDelay', +- 'owners': ['stepco@chromium.org', 'poromov@chromium.org'], ++ 'owners': ['stepco@ch40m1um.qjz9zk', 'poromov@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 1000, 'maximum': 300000 }, + 'supported_on': ['chrome.*:30-', 'chrome_os:30-'], +@@ -7331,7 +7331,7 @@ }, { - 'name': 'RemoteAccessHostTokenValidationUrl', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:28-','chrome_os:42-'], -@@ -2046,7 +2046,7 @@ + 'name': 'ChromeFrameRendererSettings', +- 'owners': ['tommi@chromium.org'], ++ 'owners': ['tommi@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -7382,7 +7382,7 @@ + + If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. + +- For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''', ++ For example patterns see https://www.ch40m1um.qjz9zk/developers/how-tos/chrome-frame-getting-started.''', }, { - 'name': 'RemoteAccessHostTokenValidationCertificateIssuer', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:28-','chrome_os:42-'], -@@ -2064,7 +2064,7 @@ + 'name': 'RenderInHostList', +@@ -7405,7 +7405,7 @@ + + If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. + +- For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''', ++ For example patterns see https://www.ch40m1um.qjz9zk/developers/how-tos/chrome-frame-getting-started.''', }, { - 'name': 'RemoteAccessHostDebugOverridePolicies', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:25-47','chrome_os:42-47'], -@@ -2082,7 +2082,7 @@ + 'name': 'AdditionalLaunchParameters', +@@ -7449,7 +7449,7 @@ }, { - 'name': 'RemoteAccessHostAllowUiAccessForRemoteAssistance', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.win:55-'], -@@ -2100,7 +2100,7 @@ + 'name': 'ChromeFrameContentTypes', +- 'owners': ['tommi@chromium.org'], ++ 'owners': ['tommi@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -7470,7 +7470,7 @@ }, { - 'name': 'RemoteAccessHostAllowFileTransfer', -- 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'], -+ 'owners': ['jamiewalch@ch40m1um.qjz9zk', 'rkjnsn@ch40m1um.qjz9zk'], + 'name': 'ChromeOsLockOnIdleSuspend', +- 'owners': ['xiyuan@chromium.org', 'ultrotter@chromium.org'], ++ 'owners': ['xiyuan@ch40m1um.qjz9zk', 'ultrotter@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:74-'], -@@ -2159,7 +2159,7 @@ + 'supported_on': ['chrome_os:9-'], +@@ -7491,7 +7491,7 @@ }, { - 'name': 'PrintingAllowedColorModes', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], + 'name': 'ChromeOsMultiProfileUserBehavior', +- 'owners': ['xiyuan@chromium.org', 'sinhak@chromium.org', 'tellier@google.com', 'rsorokin@chromium.org', 'cros-oac@google.com'], ++ 'owners': ['xiyuan@ch40m1um.qjz9zk', 'sinhak@ch40m1um.qjz9zk', 'tellier@9oo91e.qjz9zk', 'rsorokin@ch40m1um.qjz9zk', 'cros-oac@9oo91e.qjz9zk'], 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2200,7 +2200,7 @@ +@@ -7545,7 +7545,7 @@ }, { - 'name': 'PrintingAllowedDuplexModes', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -2241,7 +2241,7 @@ + 'name': 'SecondaryGoogleAccountSigninAllowed', +- 'owners': ['sinhak@chromium.org', 'anastasiian@chromium.org'], ++ 'owners': ['sinhak@ch40m1um.qjz9zk', 'anastasiian@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:65-'], +@@ -7570,7 +7570,7 @@ }, { - 'name': 'PrintingAllowedPinModes', -- 'owners': ['nikitapodguzov@chromium.org', 'skau@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -2283,7 +2283,7 @@ + 'name': 'ForceLogoutUnauthenticatedUserEnabled', +- 'owners': ['solovey@google.com', 'sinhak@chromium.org'], ++ 'owners': ['solovey@9oo91e.qjz9zk', 'sinhak@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:81-'], +@@ -7590,7 +7590,7 @@ }, { - 'name': 'PrintingAllowedBackgroundGraphicsModes', -- 'owners': ['nikitapodguzov@chromium.org', 'skau@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'name': 'SecurityTokenSessionBehavior', +- 'owners': ['fabiansommer@chromium.org, emaxx@chromium.org'], ++ 'owners': ['fabiansommer@ch40m1um.qjz9zk, emaxx@ch40m1um.qjz9zk'], 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -2324,7 +2324,7 @@ +@@ -7626,7 +7626,7 @@ }, { - 'name': 'PrintingAllowedPageSizes', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], - 'type': 'dict', - 'schema': { - 'type': 'array', -@@ -2358,7 +2358,7 @@ + 'name': 'SecurityTokenSessionNotificationSeconds', +- 'owners': ['fabiansommer@chromium.org, emaxx@chromium.org'], ++ 'owners': ['fabiansommer@ch40m1um.qjz9zk, emaxx@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 }, + 'future_on': ['chrome_os'], +@@ -7642,7 +7642,7 @@ }, { - 'name': 'PrintingColorDefault', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -2393,7 +2393,7 @@ + 'name': 'TargetBlankImpliesNoOpener', +- 'owners': ['ericlaw@microsoft.com'], ++ 'owners': ['ericlaw@m1cr050ft.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:88-', 'chrome_os:88-', 'android:88-'], +@@ -7671,7 +7671,7 @@ + + This policy will be removed in $1Google Chrome version 95. + +- See https://chromestatus.com/feature/6140064063029248.''', ++ See https://ch40mestatus.qjz9zk/feature/6140064063029248.''', }, { - 'name': 'PrintingDuplexDefault', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -2434,7 +2434,7 @@ + 'name': 'InstantEnabled', +@@ -7703,7 +7703,7 @@ }, { - 'name': 'PrintingPinDefault', -- 'owners': ['nikitapodguzov@chromium.org', 'skau@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -2470,7 +2470,7 @@ + 'name': 'AppRecommendationZeroStateEnabled', +- 'owners': ['robsc@chromium.org', 'bartfab@chromium.org'], ++ 'owners': ['robsc@ch40m1um.qjz9zk', 'bartfab@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:75-'], +@@ -7909,7 +7909,7 @@ }, { - 'name': 'PrintingBackgroundGraphicsDefault', -- 'owners': ['nikitapodguzov@chromium.org', 'skau@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], - 'type': 'string-enum', + 'name': 'SecurityKeyPermitAttestation', +- 'owners': ['agl@chromium.org', 'martinkr@chromium.org'], ++ 'owners': ['agl@ch40m1um.qjz9zk', 'martinkr@ch40m1um.qjz9zk'], + 'tags': ['website-sharing'], + 'type': 'list', 'schema': { - 'type': 'string', -@@ -2505,7 +2505,7 @@ +@@ -7930,7 +7930,7 @@ }, { - 'name': 'PrintingSizeDefault', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], - 'type': 'dict', - 'schema': { - 'type': 'object', -@@ -2536,7 +2536,7 @@ + 'name': 'GCFUserDataDir', +- 'owners': ['grt@chromium.org'], ++ 'owners': ['grt@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome_frame:12-32'], +@@ -7946,7 +7946,7 @@ + + If you set this policy, $3Google Chrome Frame will use the provided directory. + +- See https://support.google.com/chrome/a?p=Supported_directory_variables for a list of variables that can be used. ++ See https://support.9oo91e.qjz9zk/chrome/a?p=Supported_directory_variables for a list of variables that can be used. + + If this setting is left not set the default profile directory will be used.''', + 'label': '''Set user data directory''', +@@ -8155,7 +8155,7 @@ + 'tags': ['filtering'], + 'desc': '''This policy is deprecated, please use the 'URLBlocklist' policy instead. + +- Setting the policy prevents webpages with prohibited URLs from loading. It provides a list of URL patterns that specify forbidden URLs. Leaving the policy unset means no URLs are prohibited in the browser. Format the URL pattern according to this format ( https://www.chromium.org/administrators/url-blacklist-filter-format ). Up to 1,000 exceptions can be defined in URLAllowlist. ++ Setting the policy prevents webpages with prohibited URLs from loading. It provides a list of URL patterns that specify forbidden URLs. Leaving the policy unset means no URLs are prohibited in the browser. Format the URL pattern according to this format ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). Up to 1,000 exceptions can be defined in URLAllowlist. + + From $1Google Chrome version 73, you can block javascript://* URLs. However, it affects only JavaScript entered in the address bar (or, for example, bookmarklets). In-page JavaScript URLs with dynamically loaded data aren't subject to this policy. For example, if you block example.com/abc, then example.com can still load example.com/abc using XMLHTTPRequest. + +@@ -8187,7 +8187,7 @@ + 'tags': [], + 'desc': '''This policy is deprecated, please use the 'URLAllowlist' policy instead. + +- Setting the policy provides access to the listed URLs, as exceptions to the URL blocklist. See that policy's description for the format of entries of this list. For example, setting URLBlocklist to * will block all requests, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://www.chromium.org/administrators/url-blacklist-filter-format ). The most specific filter determines if a URL is blocked or allowed. The allowlist takes precedence over blocklist. This policy is limited to 1,000 entries. ++ Setting the policy provides access to the listed URLs, as exceptions to the URL blocklist. See that policy's description for the format of entries of this list. For example, setting URLBlocklist to * will block all requests, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). The most specific filter determines if a URL is blocked or allowed. The allowlist takes precedence over blocklist. This policy is limited to 1,000 entries. + + This policy also allows enabling the automatic invocation by the browser of external application registered as protocol handlers for the listed protocols like "tel:" or "ssh:". + +@@ -8219,7 +8219,7 @@ + 'id': 736, + 'caption': '''Block access to a list of URLs''', + 'tags': ['filtering'], +- 'desc': '''Setting the policy prevents webpages with prohibited URLs from loading. It provides a list of URL patterns that specify forbidden URLs. Leaving the policy unset means no URLs are prohibited in the browser. Format the URL pattern according to this format ( https://www.chromium.org/administrators/url-blacklist-filter-format ). Up to 1,000 exceptions can be defined in URLAllowlist. ++ 'desc': '''Setting the policy prevents webpages with prohibited URLs from loading. It provides a list of URL patterns that specify forbidden URLs. Leaving the policy unset means no URLs are prohibited in the browser. Format the URL pattern according to this format ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). Up to 1,000 exceptions can be defined in URLAllowlist. + + From $1Google Chrome version 73, you can block javascript://* URLs. However, it affects only JavaScript entered in the address bar (or, for example, bookmarklets). In-page JavaScript URLs with dynamically loaded data aren't subject to this policy. For example, if you block example.com/abc, then example.com can still load example.com/abc using XMLHTTPRequest. + +@@ -8249,7 +8249,7 @@ + 'id': 737, + 'caption': '''Allow access to a list of URLs''', + 'tags': [], +- 'desc': '''Setting the policy provides access to the listed URLs, as exceptions to URLBlocklist. See that policy's description for the format of entries of this list. For example, setting URLBlocklist to * will block all requests, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://www.chromium.org/administrators/url-blacklist-filter-format ). The most specific filter determines if a URL is blocked or allowed. The URLAllowlist policy takes precedence over URLBlocklist. This policy is limited to 1,000 entries. ++ 'desc': '''Setting the policy provides access to the listed URLs, as exceptions to URLBlocklist. See that policy's description for the format of entries of this list. For example, setting URLBlocklist to * will block all requests, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). The most specific filter determines if a URL is blocked or allowed. The URLAllowlist policy takes precedence over URLBlocklist. This policy is limited to 1,000 entries. + + This policy also allows enabling the automatic invocation by the browser of external application registered as protocol handlers for the listed protocols like "tel:" or "ssh:". + +@@ -8260,7 +8260,7 @@ }, { - 'name': 'PrintingSendUsernameAndFilenameEnabled', -- 'owners': ['vkuzkokov@chromium.org'], -+ 'owners': ['vkuzkokov@ch40m1um.qjz9zk'], + 'name': 'PolicyAtomicGroupsEnabled', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:72-'], -@@ -2555,7 +2555,7 @@ + 'supported_on': ['chrome.*:78-', 'chrome_os:78-'], +@@ -8280,7 +8280,7 @@ }, { - 'name': 'PrintJobHistoryExpirationPeriod', -- 'owners': ['nikitapodguzov@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk'], - 'type': 'int', - 'schema': { 'type': 'integer', 'minimum': -1 }, - 'supported_on': ['chrome_os:79-'], -@@ -2577,7 +2577,7 @@ + 'name': 'PolicyListMultipleSourceMergeList', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -8308,7 +8308,7 @@ }, { - 'name': 'PrintingAPIExtensionsWhitelist', -- 'owners': ['nikitapodguzov@chromium.org'], -+ 'owners': ['nikitapodguzov@ch40m1um.qjz9zk'], - 'type': 'list', + 'name': 'PolicyDictionaryMultipleSourceMergeList', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], + 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -2598,7 +2598,7 @@ +@@ -8408,7 +8408,7 @@ + 'owners': ['file://components/policy/resources/OWNERS'], + 'type': 'string', + 'schema': { 'type': 'string' }, +- 'url_schema': 'https://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md', ++ 'url_schema': 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/components/onc/docs/onc_spec.md', + 'supported_on': ['chrome_os:16-'], + 'features': { + 'dynamic_refresh': True, +@@ -8426,7 +8426,7 @@ + 'owners': ['file://components/policy/resources/OWNERS'], + 'type': 'string', + 'schema': { 'type': 'string' }, +- 'url_schema': 'https://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md', ++ 'url_schema': 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/components/onc/docs/onc_spec.md', + 'supported_on': ['chrome_os:16-'], + 'device_only': True, + 'features': { +@@ -8600,7 +8600,7 @@ }, { - 'name': 'ForceSafeSearch', -- 'owners': ['sergiu@chromium.org', 'igorcov@chromium.org'], -+ 'owners': ['sergiu@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'name': 'CloudPrintSubmitEnabled', +- 'owners': ['file://printing/OWNERS', 'weili@chromium.org'], ++ 'owners': ['file://printing/OWNERS', 'weili@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:25-', 'chrome_os:25-', 'android:30-'], -@@ -2622,7 +2622,7 @@ + 'supported_on': ['chrome.*:17-'], +@@ -8672,7 +8672,7 @@ }, { - 'name': 'ForceGoogleSafeSearch', -- 'owners': ['treib@chromium.org', 'igorcov@chromium.org'], -+ 'owners': ['treib@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'name': 'PrintHeaderFooter', +- 'owners': ['nicolaso@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['nicolaso@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], -@@ -2643,7 +2643,7 @@ + 'supported_on': ['chrome_os:70-', 'chrome.*:70-'], +@@ -8691,7 +8691,7 @@ }, { - 'name': 'ForceYouTubeSafetyMode', -- 'owners': ['treib@chromium.org', 'igorcov@chromium.org'], -+ 'owners': ['treib@ch40m1um.qjz9zk', 'igorcov@ch40m1um.qjz9zk'], + 'name': 'DefaultPrinterSelection', +- 'owners': ['file://printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'type': 'string', + 'schema': { 'type': 'string' }, + 'validation_schema': { +@@ -8800,7 +8800,7 @@ + }, + { + 'name': 'EnableSha1ForLocalAnchors', +- 'owners': ['mattm@chromium.org', 'rsleevi@chromium.org'], ++ 'owners': ['mattm@ch40m1um.qjz9zk', 'rsleevi@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'], -@@ -2740,7 +2740,7 @@ - - If this policy is left not set, this will be enabled but the user will be able to change it. - -- See https://developers.google.com/safe-browsing for more info on Safe Browsing. -+ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing. - - This policy is available only on Windows instances that are joined to a Microsoft® Active Directory® domain. or Windows 10 Pro or Enterprise instances that enrolled for device management. - -@@ -2748,7 +2748,7 @@ + 'supported_on': ['chrome.*:54-71', 'chrome_os:54-71', 'android:54-71'], +@@ -9076,7 +9076,7 @@ }, { - 'name': 'SafeBrowsingProtectionLevel', -- 'owners': ['vakh@chromium.org', 'file://components/safe_browsing/OWNERS'], -+ 'owners': ['vakh@ch40m1um.qjz9zk', 'file://components/safe_browsing/OWNERS'], - 'type': 'int-enum', - 'schema': { - 'type': 'integer', -@@ -2794,7 +2794,7 @@ - - If this policy is left not set, Safe Browsing will operate in Standard Protection mode but users can change this setting. - -- See https://developers.google.com/safe-browsing for more info on Safe Browsing.''', -+ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing.''', + 'name': 'ReportDeviceUsers', +- 'owners': ['stepco@chromium.org', 'poromov@chromium.org'], ++ 'owners': ['stepco@ch40m1um.qjz9zk', 'poromov@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:32-'], +@@ -9096,7 +9096,7 @@ }, { - 'name': 'MetricsReportingEnabled', -@@ -2952,7 +2952,7 @@ + 'name': 'ReportDeviceHardwareStatus', +- 'owners': ['antrim@chromium.org'], ++ 'owners': ['antrim@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:42-'], +@@ -9116,7 +9116,7 @@ }, { - 'name': 'AutofillCreditCardEnabled', -- 'owners': ['caitkp@chromium.org', 'zmin@chromium.org'], -+ 'owners': ['caitkp@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'name': 'ReportDeviceSessionStatus', +- 'owners': ['antrim@chromium.org'], ++ 'owners': ['antrim@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': [ -@@ -3135,7 +3135,7 @@ + 'supported_on': ['chrome_os:42-'], +@@ -9182,7 +9182,7 @@ }, { - 'name': 'SyncTypesListDisabled', -- 'owners': ['pastarmovj@chromium.org', 'mastiz@chromium.org'], -+ 'owners': ['pastarmovj@ch40m1um.qjz9zk', 'mastiz@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -3193,14 +3193,14 @@ - - If you set this policy, $1Google Chrome will use the provided directory to store the roaming copy of the profiles if the RoamingProfileSupportEnabled policy has been enabled. If the RoamingProfileSupportEnabled policy is disabled or left unset the value stored in this policy is not used. - -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - - If this policy is left not set the default roaming profile path will be used.''', - 'label': '''Set the roaming profile directory''', + 'name': 'ReportDeviceOsUpdateStatus', +- 'owners': ['anqing@chromium.org'], ++ 'owners': ['anqing@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:79-'], +@@ -9204,7 +9204,7 @@ }, { - 'name': 'SigninAllowed', -- 'owners': ['akuegel@chromium.org', 'zmin@chromium.org'], -+ 'owners': ['akuegel@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'name': 'ReportDevicePowerStatus', +- 'owners': ['antrim@chromium.org'], ++ 'owners': ['antrim@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:27-', 'android:38-'], -@@ -3260,7 +3260,7 @@ - - If you set this policy, $1Google Chrome will use the provided directory regardless whether the user has specified the '--user-data-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because $1Google Chrome manages its contents. - -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - - If this policy is left not set the default profile path will be used and the user will be able to override it with the '--user-data-dir' command line flag.''', - 'label': '''Set user data directory''', -@@ -3283,7 +3283,7 @@ - - If you set this policy, $1Google Chrome will use the provided directory regardless whether the user has specified the '--disk-cache-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because $1Google Chrome manages its contents. - -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - - If this policy is left not set the default cache directory will be used and the user will be able to override it with the '--disk-cache-dir' command line flag.''', - 'label': '''Set disk cache directory''', -@@ -3336,7 +3336,7 @@ + 'supported_on': ['chrome_os:73-'], +@@ -9224,7 +9224,7 @@ }, { - 'name': 'DownloadRestrictions', -- 'owners': ['mad@chromium.org', 'zmin@chromium.org'], -+ 'owners': ['mad@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], - 'type': 'int-enum', - 'schema': { - 'type': 'integer', -@@ -3395,7 +3395,7 @@ - - Note that these restrictions apply to downloads triggered from web page content, as well as the 'download link...' context menu option. These restrictions do not apply to the save / download of the currently displayed page, nor does it apply to saving as PDF from the printing options. - -- See https://developers.google.com/safe-browsing for more info on Safe Browsing.''', -+ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing.''', - 'label': '''Download restrictions''', + 'name': 'ReportDeviceStorageStatus', +- 'owners': ['antrim@chromium.org'], ++ 'owners': ['antrim@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:73-'], +@@ -9244,7 +9244,7 @@ }, { -@@ -3417,7 +3417,7 @@ - - If you set this policy, $1Google Chrome will use the provided directory regardless whether the user has specified one or enabled the flag to be prompted for download location every time. - -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - - If this policy is left not set the default download directory will be used and the user will be able to change it.''', - 'label': '''Set download directory''', -@@ -3425,7 +3425,7 @@ + 'name': 'ReportDeviceBoardStatus', +- 'owners': ['antrim@chromium.org'], ++ 'owners': ['antrim@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:73-'], +@@ -9349,7 +9349,7 @@ }, { - 'name': 'SafeBrowsingForTrustedSourcesEnabled', -- 'owners': ['mad@chromium.org', 'zmin@chromium.org'], -+ 'owners': ['mad@ch40m1um.qjz9zk', 'zmin@ch40m1um.qjz9zk'], + 'name': 'ReportDeviceAppInfo', +- 'owners': ['mattme@google.com', 'file://components/policy/resources/OWNERS'], ++ 'owners': ['mattme@9oo91e.qjz9zk', 'file://components/policy/resources/OWNERS'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.win:61-'], -@@ -3470,7 +3470,7 @@ + 'supported_on': ['chrome_os:85-'], +@@ -9475,7 +9475,7 @@ }, { - 'name': 'CaptivePortalAuthenticationIgnoresProxy', -- 'owners': ['ultrotter@google.com', 'rsorokin@google.com'], -+ 'owners': ['ultrotter@9oo91e.qjz9zk', 'rsorokin@9oo91e.qjz9zk'], + 'name': 'ReportArcStatusEnabled', +- 'owners': ['phweiss@chromium.org'], ++ 'owners': ['phweiss@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:41-'], -@@ -3561,7 +3561,7 @@ - If you choose to use a .pac proxy script, you must specify the URL to the script in 'URL to a proxy .pac file'. - - For detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. - - If you enable this setting, $1Google Chrome and ARC-apps ignore all proxy-related options specified from the command line. - -@@ -3634,7 +3634,7 @@ - If you choose manual proxy settings, you can specify further options in 'Address or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps. - - For detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett. - - If you enable this setting, $1Google Chrome ignores all proxy-related options specified from the command line. - -@@ -3666,7 +3666,7 @@ - You should leave this policy not set if you have selected any other mode for setting proxy policies. - - For more options and detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', - 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', + 'supported_on': ['chrome_os:55-'], +@@ -9494,7 +9494,7 @@ }, { -@@ -3694,7 +3694,7 @@ - You should leave this policy not set if you have selected any other mode for setting proxy policies. - - For detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', - 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', + 'name': 'ReportCrostiniUsageEnabled', +- 'owners': ['aoldemeier@chromium.org', 'okalitova@chromium.org'], ++ 'owners': ['aoldemeier@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:70-'], +@@ -9553,7 +9553,7 @@ }, { -@@ -3722,7 +3722,7 @@ - You should leave this policy not set if you have selected any other mode for setting proxy policies. - - For more detailed examples, visit: -- https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', -+ https://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-setthttps://www.ch40m1um.qjz9zk/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.''', - 'label': '''Comma-separated list of proxy bypass rules''', - 'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the ProxyMode policy for more details.', - }, -@@ -3940,7 +3940,7 @@ - 'id': 305, - 'caption': '''Account type for HTTP Negotiate authentication''', - 'tags': [], -- 'desc': '''Specifies the account type of the accounts provided by the Android authentication app that supports HTTP Negotiate authentication (e.g. Kerberos authentication). This information should be available from the supplier of the authentication app. For more details see https://goo.gl/hajyfN. -+ 'desc': '''Specifies the account type of the accounts provided by the Android authentication app that supports HTTP Negotiate authentication (e.g. Kerberos authentication). This information should be available from the supplier of the authentication app. For more details see https://goo.gl.qjz9zk.qjz9zk/hajyfN. - - If no setting is provided, HTTP Negotiate authentication is disabled on Android.''', - }, -@@ -4043,7 +4043,7 @@ + 'name': 'LogUploadEnabled', +- 'owners': ['poromov@chromium.org', 'pbond@chromium.org'], ++ 'owners': ['poromov@ch40m1um.qjz9zk', 'pbond@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:46-'], +@@ -9586,11 +9586,11 @@ 'dynamic_refresh': True, - 'per_profile': True, }, -- 'example_value': ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.google.com/service/update2/crx', 'abcdefghijklmnopabcdefghijklmnop'], -+ 'example_value': ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.9oo91e.qjz9zk/service/update2/crx', 'abcdefghijklmnopabcdefghijklmnop'], - 'id': 34, - 'caption': '''Configure the list of force-installed apps and extensions''', - 'tags': ['full-admin-access'], -@@ -4063,9 +4063,9 @@ - - Note that the source code of any extension may be altered by users via Developer Tools (potentially rendering the extension dysfunctional). If this is a concern, the DeveloperToolsDisabled policy should be set. - -- Each list item of the policy is a string that contains an extension ID and, optionally, an "update" URL separated by a semicolon (;). The extension ID is the 32-letter string found e.g. on chrome://extensions when in developer mode. The "update" URL, if specified, should point to an Update Manifest XML document as described at https://developer.chrome.com/extensions/autoupdate. By default, the Chrome Web Store's update URL is used (which currently is "https://clients2.google.com/service/update2/crx"). Note that the "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension employ the update URL indicated in the extension's manifest. Note also that specifying the "update" URL explicitly was mandatory in $1Google Chrome versions up to and including 67. -+ Each list item of the policy is a string that contains an extension ID and, optionally, an "update" URL separated by a semicolon (;). The extension ID is the 32-letter string found e.g. on chrome://extensions when in developer mode. The "update" URL, if specified, should point to an Update Manifest XML document as described at https://developer.ch40me.qjz9zk/extensions/autoupdate. By default, the Chrome Web Store's update URL is used (which currently is "https://clients2.9oo91e.qjz9zk/service/update2/crx"). Note that the "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension employ the update URL indicated in the extension's manifest. Note also that specifying the "update" URL explicitly was mandatory in $1Google Chrome versions up to and including 67. - -- For example, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.google.com/service/update2/crx installs the extension with id aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa from the standard Chrome Web Store "update" URL. For more information about hosting extensions, see: https://developer.chrome.com/extensions/hosting. -+ For example, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;https://clients2.9oo91e.qjz9zk/service/update2/crx installs the extension with id aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa from the standard Chrome Web Store "update" URL. For more information about hosting extensions, see: https://developer.ch40me.qjz9zk/extensions/hosting. - - If this policy is left not set, no apps or extensions are installed automatically and the user can uninstall any app or extension in $1Google Chrome. - -@@ -4095,14 +4095,14 @@ - - Starting in $1Google Chrome 21, it is more difficult to install extensions, apps, and user scripts from outside the Chrome Web Store. Previously, users could click on a link to a *.crx file, and $1Google Chrome would offer to install the file after a few warnings. After $1Google Chrome 21, such files must be downloaded and dragged onto the $1Google Chrome settings page. This setting allows specific URLs to have the old, easier installation flow. - -- Each item in this list is an extension-style match pattern (see https://developer.chrome.com/extensions/match_patterns). Users will be able to easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (i.e. the referrer) must be allowed by these patterns. -+ Each item in this list is an extension-style match pattern (see https://developer.ch40me.qjz9zk/extensions/match_patterns). Users will be able to easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (i.e. the referrer) must be allowed by these patterns. - - ExtensionInstallBlacklist takes precedence over this policy. That is, an extension on the blacklist won't be installed, even if it happens from a site on this list.''', - 'label': '''URL patterns to allow extension, app, and user script installs from''', - }, - { - 'name': 'ExtensionAllowInsecureUpdates', -- 'owners': ['waffles@chromium.org', 'rdevlin.cronin@chromium.org'], -+ 'owners': ['waffles@ch40m1um.qjz9zk', 'rdevlin.cronin@ch40m1um.qjz9zk'], - 'type': 'main', 'deprecated': True, - 'schema': { 'type': 'boolean' }, -@@ -4255,7 +4255,7 @@ - }, - }, - }, -- 'url_schema': 'https://www.chromium.org/administrators/policy-list-3/extension-settings-full', -+ 'url_schema': 'https://www.ch40m1um.qjz9zk/administrators/policy-list-3/extension-settings-full', - 'supported_on': ['chrome.*:62-', 'chrome_os:62-'], - 'features': { - 'dynamic_refresh': True, -@@ -4308,7 +4308,7 @@ - - This policy controls multiple settings, including settings controlled by any existing extension-related policies. This policy will override any legacy policies if both are set. - -- This policy maps an extension ID or an update URL to its configuration. With an extension ID, configuration will be applied to the specified extension only. A default configuration can be set for the special ID "*", which will apply to all extensions that don't have a custom configuration set in this policy. With an update URL, configuration will be applied to all extensions with the exact update URL stated in manifest of this extension, as described at https://developer.chrome.com/extensions/autoupdate. -+ This policy maps an extension ID or an update URL to its configuration. With an extension ID, configuration will be applied to the specified extension only. A default configuration can be set for the special ID "*", which will apply to all extensions that don't have a custom configuration set in this policy. With an update URL, configuration will be applied to all extensions with the exact update URL stated in manifest of this extension, as described at https://developer.ch40me.qjz9zk/extensions/autoupdate. - - For Windows instances that are not joined to a Microsoft® Active Directory® domain, forced installation is limited to apps and extensions listed in the Chrome Web Store. - ''', -@@ -4354,7 +4354,7 @@ - - Disabling this setting or leaving it unset allows external extensions to be installed. - -- External extensions and their installation are documented at https://developer.chrome.com/apps/external_extensions. -+ External extensions and their installation are documented at https://developer.ch40me.qjz9zk/apps/external_extensions. - ''', - }, - { -@@ -4513,7 +4513,7 @@ - 'dynamic_refresh': True, - 'per_profile': True, - }, -- 'example_value': ['https://example.com', 'https://www.chromium.org'], -+ 'example_value': ['https://example.com', 'https://www.ch40m1um.qjz9zk'], - 'id': 38, - 'caption': '''URLs to open on startup''', - 'tags': [], -@@ -5272,7 +5272,7 @@ - }, - { - 'name': 'DefaultWebUsbGuardSetting', -- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], -+ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], - 'type': 'int-enum', - 'schema': { - 'type': 'integer', -@@ -5307,7 +5307,7 @@ - }, - { - 'name': 'WebUsbAllowDevicesForUrls', -- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], -+ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], - 'type': 'dict', - 'schema': { - 'type': 'array', -@@ -5339,7 +5339,7 @@ - }, - 'example_value': [{ - 'devices': [{'vendor_id': 1234, 'product_id': 5678}], -- 'urls': ['https://google.com', 'https://requesting.com,https://embedded.com'], -+ 'urls': ['https://9oo91e.qjz9zk', 'https://requesting.com,https://embedded.com'], - }], - 'id': 486, - 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.''', -@@ -5354,7 +5354,7 @@ - }, - { - 'name': 'DeviceLoginScreenWebUsbAllowDevicesForUrls', -- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], -+ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], - 'type': 'dict', - 'schema': { - 'type': 'array', -@@ -5387,7 +5387,7 @@ - }, - 'example_value': [{ - 'devices': [{'vendor_id': 1234, 'product_id': 5678}], -- 'urls': ['https://google.com', 'https://requesting.com,https://embedded.com'], -+ 'urls': ['https://9oo91e.qjz9zk', 'https://requesting.com,https://embedded.com'], - }], - 'id': 603, - 'caption': '''Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs on the login screen.''', -@@ -5400,7 +5400,7 @@ - }, - { - 'name': 'WebUsbAskForUrls', -- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], -+ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -5421,11 +5421,11 @@ - - URL patterns in this policy should not clash with ones configured via WebUsbBlockedForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'WebUsbBlockedForUrls', -- 'owners': ['reillyg@chromium.org', 'odejesush@chromium.org'], -+ 'owners': ['reillyg@ch40m1um.qjz9zk', 'odejesush@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -5446,7 +5446,7 @@ - - URL patterns in this policy should not clash with ones configured via WebUsbAskForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'AutoSelectCertificateForUrls', -@@ -5541,7 +5541,7 @@ - - If this policy is left not set, no auto-selection will be done for any site. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'CookiesAllowedForUrls', -@@ -5570,7 +5570,7 @@ - - See also policies 'CookiesBlockedForUrls' and 'CookiesSessionOnlyForUrls'. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'CookiesBlockedForUrls', -@@ -5599,7 +5599,7 @@ - - See also policies 'CookiesAllowedForUrls' and 'CookiesSessionOnlyForUrls'. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'CookiesSessionOnlyForUrls', -@@ -5632,7 +5632,7 @@ - - If the "RestoreOnStartup" policy is set to restore URLs from previous sessions this policy will not be respected and cookies will be stored permanently for those sites. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'ImagesAllowedForUrls', -@@ -5657,7 +5657,7 @@ - - Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'ImagesBlockedForUrls', -@@ -5682,7 +5682,7 @@ - - Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'JavaScriptAllowedForUrls', -@@ -5705,7 +5705,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'JavaScriptBlockedForUrls', -@@ -5728,7 +5728,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'KeygenAllowedForUrls', -@@ -5751,7 +5751,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'KeygenBlockedForUrls', -@@ -5774,11 +5774,11 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'LegacySameSiteCookieBehaviorEnabled', -- 'owners': [ 'chlily@chromium.org', ], -+ 'owners': [ 'chlily@ch40m1um.qjz9zk', ], - 'type': 'int-enum', - 'schema': { - 'type': 'integer', -@@ -5809,13 +5809,13 @@ - 'id': 623, - 'caption': '''Default legacy SameSite cookie behavior setting''', - 'tags': [], -- 'desc': '''Allows you to revert all cookies to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", and removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute. See https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. -+ 'desc': '''Allows you to revert all cookies to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", and removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute. See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. - - When this policy is not set, the default SameSite behavior for cookies that don't specify a SameSite attribute will depend on the user's personal configuration for the SameSite-by-default feature, which may be set by a field trial or by enabling or disabling the flag same-site-by-default-cookies flag.''', - }, - { - 'name': 'LegacySameSiteCookieBehaviorEnabledForDomainList', -- 'owners': [ 'chlily@chromium.org', ], -+ 'owners': [ 'chlily@ch40m1um.qjz9zk', ], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -5834,7 +5834,7 @@ - 'id': 624, - 'caption': '''Revert to legacy SameSite behavior for cookies on these sites''', +- 'example_value': [ 'madmax@managedchrome.com' ], ++ 'example_value': [ 'madmax@managedch40me.qjz9zk' ], + 'id': 122, + 'caption': '''Login user white list''', 'tags': [], -- 'desc': '''Cookies set for domains matching these patterns will revert to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", and removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute. See https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. -+ 'desc': '''Cookies set for domains matching these patterns will revert to legacy SameSite behavior. Reverting to legacy behavior causes cookies that don't specify a SameSite attribute to be treated as if they were "SameSite=None", and removes the requirement for "SameSite=None" cookies to carry the "Secure" attribute. See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/cookie-legacy-samesite-policies for full description. - - For cookies on domains not covered by the patterns specified here, or for all cookies if this policy is not set, the global default value will be used either from the LegacySameSiteCookieBehaviorEnabled policy, if it is set, or the user's personal configuration otherwise. - -@@ -5861,7 +5861,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise. +- 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedchrome.com. To allow arbitrary users on a domain, use entries of the form *@domain. ++ 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedch40me.qjz9zk. To allow arbitrary users on a domain, use entries of the form *@domain. -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'PluginsBlockedForUrls', -@@ -5884,7 +5884,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'PopupsAllowedForUrls', -@@ -5911,7 +5911,7 @@ + If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the DeviceAllowNewUsers policy to be configured appropriately. - If this policy is left not set the global default value will be used for all sites either from the 'DefaultPopupsSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'RegisteredProtocolHandlers', -@@ -5945,7 +5945,7 @@ - 'can_be_recommended': True, - 'can_be_mandatory' : False, +@@ -9613,11 +9613,11 @@ + 'features': { + 'dynamic_refresh': True, }, -- 'example_value': [{'protocol': 'mailto', 'url': 'https://mail.google.com/mail/?extsrc=mailto&url=%s', 'default': True}], -+ 'example_value': [{'protocol': 'mailto', 'url': 'https://mail.9oo91e.qjz9zk/mail/?extsrc=mailto&url=%s', 'default': True}], - 'id': 268, - 'caption': '''Register protocol handlers''', +- 'example_value': [ 'madmax@managedchrome.com' ], ++ 'example_value': [ 'madmax@managedch40me.qjz9zk' ], + 'id': 764, + 'caption': '''Login user allow list''', 'tags': [], -@@ -5979,7 +5979,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultPopupsSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'NotificationsAllowedForUrls', -@@ -6002,7 +6002,7 @@ - - If this policy is left not set the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'NotificationsBlockedForUrls', -@@ -6025,7 +6025,7 @@ +- 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedchrome.com. To allow arbitrary users on a domain, use entries of the form *@domain. ++ 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedch40me.qjz9zk. To allow arbitrary users on a domain, use entries of the form *@domain. - If this policy is left not set the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy if it is set, or the user's personal configuration otherwise. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', - }, - { - 'name': 'NativeMessagingBlacklist', -@@ -6105,7 +6105,7 @@ - }, - { - 'name': 'Disable3DAPIs', -- 'owners': ['kbr@chromium.org', 'zmo@chromium.org'], -+ 'owners': ['kbr@ch40m1um.qjz9zk', 'zmo@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:9-', 'chrome_os:11-'], -@@ -6147,7 +6147,7 @@ - }, - { - 'name': 'MaxInvalidationFetchDelay', -- 'owners': ['stepco@chromium.org', 'poromov@chromium.org'], -+ 'owners': ['stepco@ch40m1um.qjz9zk', 'poromov@ch40m1um.qjz9zk'], - 'type': 'int', - 'schema': { 'type': 'integer' }, - 'supported_on': ['chrome.*:30-', 'chrome_os:30-'], -@@ -6167,7 +6167,7 @@ + If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the DeviceAllowNewUsers policy to be configured appropriately. + If DeviceFamilyLinkAccountsAllowed is enabled, Family Link users will be allowed additionally to the accounts defined in this policy.''', +@@ -9794,7 +9794,7 @@ }, { - 'name': 'ChromeFrameRendererSettings', -- 'owners': ['tommi@chromium.org'], -+ 'owners': ['tommi@ch40m1um.qjz9zk'], + 'name': 'DeviceChannelDowngradeBehavior', +- 'owners': ['mpolzer@google.com'], ++ 'owners': ['mpolzer@9oo91e.qjz9zk'], 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -6216,7 +6216,7 @@ - - If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. - -- For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''', -+ For example patterns see https://www.ch40m1um.qjz9zk/developers/how-tos/chrome-frame-getting-started.''', - }, - { - 'name': 'RenderInHostList', -@@ -6238,7 +6238,7 @@ - - If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy. - -- For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''', -+ For example patterns see https://www.ch40m1um.qjz9zk/developers/how-tos/chrome-frame-getting-started.''', - }, - { - 'name': 'AdditionalLaunchParameters', -@@ -6280,7 +6280,7 @@ - }, - { - 'name': 'ChromeFrameContentTypes', -- 'owners': ['tommi@chromium.org'], -+ 'owners': ['tommi@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -6300,7 +6300,7 @@ - }, - { - 'name': 'ChromeOsLockOnIdleSuspend', -- 'owners': ['xiyuan@chromium.org', 'ultrotter@chromium.org'], -+ 'owners': ['xiyuan@ch40m1um.qjz9zk', 'ultrotter@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:9-'], -@@ -6325,7 +6325,7 @@ - }, - { - 'name': 'ChromeOsMultiProfileUserBehavior', -- 'owners': ['xiyuan@chromium.org', 'sinhak@chromium.org'], -+ 'owners': ['xiyuan@ch40m1um.qjz9zk', 'sinhak@ch40m1um.qjz9zk'], - 'type': 'string-enum', - 'schema': { - 'type': 'string', -@@ -6379,7 +6379,7 @@ - }, - { - 'name': 'SecondaryGoogleAccountSigninAllowed', -- 'owners': ['sinhak@chromium.org', 'anastasiian@chromium.org'], -+ 'owners': ['sinhak@ch40m1um.qjz9zk', 'anastasiian@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:65-'], -@@ -6404,7 +6404,7 @@ - }, - { - 'name': 'ForceLogoutUnauthenticatedUserEnabled', -- 'owners': ['solovey@google.com', 'sinhak@chromium.org'], -+ 'owners': ['solovey@9oo91e.qjz9zk', 'sinhak@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:81-'], -@@ -6452,7 +6452,7 @@ - }, - { - 'name': 'AppRecommendationZeroStateEnabled', -- 'owners': ['robsc@chromium.org', 'bartfab@chromium.org'], -+ 'owners': ['robsc@ch40m1um.qjz9zk', 'bartfab@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:75-'], -@@ -6647,7 +6647,7 @@ - }, - { - 'name': 'SecurityKeyPermitAttestation', -- 'owners': ['agl@chromium.org', 'martinkr@chromium.org'], -+ 'owners': ['agl@ch40m1um.qjz9zk', 'martinkr@ch40m1um.qjz9zk'], - 'tags': ['website-sharing'], - 'type': 'list', - 'schema': { -@@ -6668,7 +6668,7 @@ - }, - { - 'name': 'GCFUserDataDir', -- 'owners': ['grt@chromium.org'], -+ 'owners': ['grt@ch40m1um.qjz9zk'], - 'type': 'string', - 'schema': { 'type': 'string' }, - 'supported_on': ['chrome_frame:12-32'], -@@ -6683,7 +6683,7 @@ - - If you set this policy, $3Google Chrome Frame will use the provided directory. - -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used. - - If this setting is left not set the default profile directory will be used.''', - 'label': '''Set user data directory''', -@@ -6908,7 +6908,7 @@ - 'tags': ['filtering'], - 'desc': '''This policy prevents the user from loading web pages from blacklisted URLs. The blacklist provides a list of URL patterns that specify which URLs will be blacklisted. - -- A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format. -+ A URL pattern has to be formatted according to https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. - - Exceptions can be defined in the URL whitelist policy. These policies are limited to 1000 entries; subsequent entries will be ignored. - -@@ -6957,7 +6957,7 @@ - }, - { - 'name': 'PolicyAtomicGroupsEnabled', -- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], -+ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:78-', 'chrome_os:78-'], -@@ -6977,7 +6977,7 @@ - }, - { - 'name': 'PolicyListMultipleSourceMergeList', -- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], -+ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -7003,7 +7003,7 @@ - }, - { - 'name': 'PolicyDictionaryMultipleSourceMergeList', -- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], -+ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], - 'type': 'string-enum-list', - 'schema': { - 'type': 'array', -@@ -7074,7 +7074,7 @@ - 'owners': ['file://components/policy/resources/OWNERS'], - 'type': 'string', - 'schema': { 'type': 'string' }, -- 'url_schema': 'https://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md', -+ 'url_schema': 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/components/onc/docs/onc_spec.md', - 'supported_on': ['chrome_os:16-'], - 'features': { - 'dynamic_refresh': True, -@@ -7092,7 +7092,7 @@ - 'owners': ['file://components/policy/resources/OWNERS'], - 'type': 'string', - 'schema': { 'type': 'string' }, -- 'url_schema': 'https://chromium.googlesource.com/chromium/src/+/master/components/onc/docs/onc_spec.md', -+ 'url_schema': 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/components/onc/docs/onc_spec.md', - 'supported_on': ['chrome_os:16-'], - 'device_only': True, - 'features': { -@@ -7384,7 +7384,7 @@ - }, - { - 'name': 'PrintHeaderFooter', -- 'owners': ['nicolaso@chromium.org', 'pastarmovj@chromium.org'], -+ 'owners': ['nicolaso@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:70-', 'chrome.*:70-'], -@@ -7508,7 +7508,7 @@ - }, - { - 'name': 'EnableSha1ForLocalAnchors', -- 'owners': ['mattm@chromium.org', 'rsleevi@chromium.org'], -+ 'owners': ['mattm@ch40m1um.qjz9zk', 'rsleevi@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:54-71', 'chrome_os:54-71', 'android:54-71'], -@@ -7783,7 +7783,7 @@ - }, - { - 'name': 'ReportDeviceUsers', -- 'owners': ['stepco@chromium.org', 'poromov@chromium.org'], -+ 'owners': ['stepco@ch40m1um.qjz9zk', 'poromov@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:32-'], -@@ -7803,7 +7803,7 @@ - }, - { - 'name': 'ReportDeviceHardwareStatus', -- 'owners': ['antrim@chromium.org'], -+ 'owners': ['antrim@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:42-'], -@@ -7824,7 +7824,7 @@ - }, - { - 'name': 'ReportDeviceSessionStatus', -- 'owners': ['antrim@chromium.org'], -+ 'owners': ['antrim@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:42-'], -@@ -7893,7 +7893,7 @@ - }, - { - 'name': 'ReportDeviceOsUpdateStatus', -- 'owners': ['anqing@chromium.org'], -+ 'owners': ['anqing@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:79-'], -@@ -7915,7 +7915,7 @@ - }, - { - 'name': 'ReportDevicePowerStatus', -- 'owners': ['antrim@chromium.org'], -+ 'owners': ['antrim@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:73-'], -@@ -7936,7 +7936,7 @@ - }, - { - 'name': 'ReportDeviceStorageStatus', -- 'owners': ['antrim@chromium.org'], -+ 'owners': ['antrim@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:73-'], -@@ -7957,7 +7957,7 @@ - }, - { - 'name': 'ReportDeviceBoardStatus', -- 'owners': ['antrim@chromium.org'], -+ 'owners': ['antrim@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:73-'], -@@ -8084,7 +8084,7 @@ - }, - { - 'name': 'ReportArcStatusEnabled', -- 'owners': ['phweiss@chromium.org'], -+ 'owners': ['phweiss@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:55-'], -@@ -8107,7 +8107,7 @@ - }, - { - 'name': 'ReportCrostiniUsageEnabled', -- 'owners': ['aoldemeier@chromium.org', 'okalitova@chromium.org'], -+ 'owners': ['aoldemeier@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:70-'], -@@ -8174,7 +8174,7 @@ - }, - { - 'name': 'LogUploadEnabled', -- 'owners': ['poromov@chromium.org', 'pbond@chromium.org'], -+ 'owners': ['poromov@ch40m1um.qjz9zk', 'pbond@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:46-'], -@@ -8208,11 +8208,11 @@ - 'features': { - 'dynamic_refresh': True, - }, -- 'example_value': [ 'madmax@managedchrome.com' ], -+ 'example_value': [ 'madmax@managedch40me.qjz9zk' ], - 'id': 122, - 'caption': '''Login user white list''', - 'tags': [], -- 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedchrome.com. To allow arbitrary users on a domain, use entries of the form *@domain. -+ 'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form user@domain, such as madmax@managedch40me.qjz9zk. To allow arbitrary users on a domain, use entries of the form *@domain. - - If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the DeviceAllowNewUsers policy to be configured appropriately.''', - 'arc_support': 'This policy controls who may start a $2Chromium OS session. It does not prevent users from signing in to additional Google accounts within Android. If you want to prevent this, configure the Android-specific accountTypesWithManagementDisabled policy as part of ArcPolicy.', -@@ -8397,7 +8397,7 @@ - 'features': { +@@ -9867,7 +9867,7 @@ 'dynamic_refresh': True, }, + 'deprecated': True, - 'example_value': [ 'https://google.com', 'chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaa/' ], + 'example_value': [ 'https://9oo91e.qjz9zk', 'chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaa/' ], 'id': 137, 'caption': '''Load specified urls on demo login''', 'tags': [], -@@ -8496,7 +8496,7 @@ - 'features': { +@@ -9971,7 +9971,7 @@ 'dynamic_refresh': True, }, + 'deprecated': True, - 'example_value': [ '{ "extension-id": "khgabmflimjjbclkmljlpmgaleanedem", "update-url": "https://clients2.google.com/service/update2/crx" }' ], + 'example_value': [ '{ "extension-id": "khgabmflimjjbclkmljlpmgaleanedem", "update-url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" }' ], 'id': 135, 'caption': '''List of AppPack extensions''', 'tags': [], -@@ -8528,7 +8528,7 @@ +@@ -10003,7 +10003,7 @@ }, { 'name': 'DeviceAutoUpdateP2PEnabled', @@ -23318,7 +15709,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:31-'], -@@ -8782,7 +8782,7 @@ +@@ -10249,7 +10249,7 @@ }, { 'name': 'DeviceLocalAccountPromptForNetworkWhenOffline', @@ -23327,25 +15718,34 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:33-'], -@@ -8803,7 +8803,7 @@ +@@ -10268,7 +10268,7 @@ }, { 'name': 'DeviceLocalAccountManagedSessionEnabled', -- 'owners': ['isandrk@chromium.org', 'voit@chromium.org'], -+ 'owners': ['isandrk@ch40m1um.qjz9zk', 'voit@ch40m1um.qjz9zk'], +- 'owners': ['isandrk@chromium.org', 'file://components/policy/resources/OWNERS'], ++ 'owners': ['isandrk@ch40m1um.qjz9zk', 'file://components/policy/resources/OWNERS'], 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -8815,7 +8815,7 @@ - 'id': 463, +@@ -10282,7 +10282,7 @@ 'caption': '''Allow managed session on device''', 'tags': [], -- 'desc': '''If this policy is set to false, managed guest session will behave as documented in https://support.google.com/chrome/a/answer/3017014 - the standard "Public Session". -+ 'desc': '''If this policy is set to false, managed guest session will behave as documented in https://support.9oo91e.qjz9zk/chrome/a/answer/3017014 - the standard "Public Session". + 'desc': '''Note that this policy is deprecated and will be removed in $2Google Chrome OS version 88. Public sessions are no longer supported. Please use DeviceLocalAccounts to configure managed-guest sessions instead. +- If this policy is set to false, managed guest session will behave as documented in https://support.google.com/chrome/a/answer/3017014 - the standard "Public Session". ++ If this policy is set to false, managed guest session will behave as documented in https://support.9oo91e.qjz9zk/chrome/a/answer/3017014 - the standard "Public Session". If this policy is set to true or left unset, managed guest session will take on "Managed Session" behaviour which lifts many of the restrictions that are in place for regular "Public Sessions". -@@ -8938,13 +8938,13 @@ +@@ -10333,7 +10333,7 @@ + }, + { + 'name': 'ManagedGuestSessionPrivacyWarningsEnabled', +- 'owners': ['file://components/policy/resources/OWNERS', 'ayaelattar@chromium.org'], ++ 'owners': ['file://components/policy/resources/OWNERS', 'ayaelattar@ch40m1um.qjz9zk'], + 'device_only': True, + 'type': 'main', + 'schema': { 'type': 'boolean' }, +@@ -10428,13 +10428,13 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -23354,19 +15754,19 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 144, 'caption': '''List of pinned apps to show in the launcher''', 'tags': [], - 'desc': '''Lists the application identifiers $2Google Chrome OS shows as pinned apps in the launcher bar. + 'desc': '''Setting the policy fixes which application identifiers $2Google Chrome OS shows as pinned apps in the launcher bar, and users can't change them. -- Chrome Apps are specified by their Id, e.g. "pjkljhegncpnkpknbcohdijeoejaedia", Android Apps by their package name, e.g. "com.google.android.gm", and Web Apps are specified by the URL used in WebAppInstallForceList e.g. "https://google.com/maps". -+ Chrome Apps are specified by their Id, e.g. "pjkljhegncpnkpknbcohdijeoejaedia", Android Apps by their package name, e.g. "com.google.android.gm", and Web Apps are specified by the URL used in WebAppInstallForceList e.g. "https://9oo91e.qjz9zk/maps". +- Specify Chrome apps by their ID, such as pjkljhegncpnkpknbcohdijeoejaedia; Android apps by their package name, such as com.google.android.gm; and web apps by the URL used in WebAppInstallForceList, such as https://google.com/maps. ++ Specify Chrome apps by their ID, such as pjkljhegncpnkpknbcohdijeoejaedia; Android apps by their package name, such as com.google.android.gm; and web apps by the URL used in WebAppInstallForceList, such as https://9oo91e.qjz9zk/maps. - If this policy is configured, the set of applications is fixed and can't be changed by the user. + Leaving it unset lets users change the list of pinned apps in the launcher.''', + 'arc_support': 'This policy can also be used to pin Android apps.', +@@ -10482,11 +10482,11 @@ -@@ -8991,11 +8991,11 @@ + Setting the policy to Disabled or leaving it unset means users can choose to proceed to the flagged site after the warning appears. - If this setting is disabled or not configured then users can choose to proceed to the flagged site after being shown the warning. - -- See https://developers.google.com/safe-browsing for more info on Safe Browsing.''', -+ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing.''', +- See more about Safe Browsing ( https://developers.google.com/safe-browsing ).''', ++ See more about Safe Browsing ( https://developers.9oo91e.qjz9zk/safe-browsing ).''', }, { 'name': 'SafeBrowsingExtendedReportingOptInAllowed', @@ -23374,8 +15774,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['estark@ch40m1um.qjz9zk', 'meacer@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - # TODO(https://crbug.com/813107): Remove this policy in M85. -@@ -9014,7 +9014,7 @@ + 'supported_on': ['chrome.*:44-84', 'chrome_os:44-84'], +@@ -10503,7 +10503,7 @@ Setting this policy to false stops users from choosing to send some system information and page content to Google servers. If this setting is true or not configured, then users will be allowed to send some system information and page content to Safe Browsing to help detect dangerous apps and sites. @@ -23384,7 +15784,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, { 'name': 'SpellCheckServiceEnabled', -@@ -9059,7 +9059,7 @@ +@@ -10561,7 +10561,7 @@ }, { 'name': 'ExternalStorageReadOnly', @@ -23393,7 +15793,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 343, 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -9125,7 +9125,7 @@ +@@ -10620,7 +10620,7 @@ }, { 'name': 'AudioCaptureAllowedUrls', @@ -23402,16 +15802,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9144,7 +9144,7 @@ - origin of the requesting URL. If a match is found, access to audio - capture devices will be granted without prompt. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. +@@ -10637,7 +10637,7 @@ + 'tags': ['website-sharing'], + 'desc': '''Setting the policy means you specify the URL list whose patterns get matched to the security origin of the requesting URL. A match grants access to audio capture devices without prompt - NOTE: Until version 45, this policy was only supported in Kiosk mode.''', +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', }, -@@ -9173,7 +9173,7 @@ + { + 'name': 'VideoCaptureAllowed', +@@ -10661,7 +10661,7 @@ }, { 'name': 'VideoCaptureAllowedUrls', @@ -23420,16 +15820,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -9192,7 +9192,7 @@ - origin of the requesting URL. If a match is found, access to video - capture devices will be granted without prompt. - -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. +@@ -10678,7 +10678,7 @@ + 'tags': ['website-sharing'], + 'desc': '''Setting the policy means you specify the URL list whose patterns get matched to the security origin of the requesting URL. A match grants access to video capture devices without prompt - NOTE: Until version 45, this policy was only supported in Kiosk mode.''', +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', }, -@@ -9240,7 +9240,7 @@ + { + 'name': 'DisableScreenshots', +@@ -10718,7 +10718,7 @@ }, { 'name': 'SystemUse24HourClock', @@ -23438,7 +15838,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:30-'], -@@ -9262,7 +9262,7 @@ +@@ -10740,7 +10740,7 @@ }, { 'name': 'TouchVirtualKeyboardEnabled', @@ -23447,7 +15847,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:37-' ], -@@ -9304,7 +9304,7 @@ +@@ -10780,7 +10780,7 @@ }, { 'name': 'BuiltInDnsClientEnabled', @@ -23455,8 +15855,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['szym@ch40m1um.qjz9zk', 'pmarko@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:25-'], -@@ -9328,7 +9328,7 @@ + 'supported_on': [ +@@ -10806,7 +10806,7 @@ }, { 'name': 'DnsOverHttpsMode', @@ -23465,7 +15865,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum', 'schema': { 'type': 'string', -@@ -9379,7 +9379,7 @@ +@@ -10861,7 +10861,7 @@ }, { 'name': 'DnsOverHttpsTemplates', @@ -23473,8 +15873,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['dalyk@ch40m1um.qjz9zk', 'ericorth@ch40m1um.qjz9zk', 'bingler@ch40m1um.qjz9zk'], 'type': 'string', 'schema': { 'type': 'string' }, - 'supported_on': ['chrome_os:80-', 'chrome.*:80-'], -@@ -9501,7 +9501,7 @@ + 'supported_on': [ +@@ -10981,7 +10981,7 @@ }, { 'name': 'SystemFeaturesDisableList', @@ -23483,16 +15883,43 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string-enum-list', 'schema': { 'type': 'array', -@@ -10501,7 +10501,7 @@ +@@ -11043,7 +11043,7 @@ }, { - 'name': 'DeviceAllowRedeemChromeOsRegistrationOffers', -- 'owners': ['oscarpan@google.com', 'rsorokin@chromium.org'], -+ 'owners': ['oscarpan@9oo91e.qjz9zk', 'rsorokin@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:26-'], -@@ -10668,7 +10668,7 @@ + 'name': 'SystemFeaturesDisableMode', +- 'owners': ['anqing@chromium.org'], ++ 'owners': ['anqing@ch40m1um.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -11085,7 +11085,7 @@ + }, + { + 'name': 'FloatingAccessibilityMenuEnabled', +- 'owners': ['apotapchuk@chromium.org'], ++ 'owners': ['apotapchuk@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:84-'], +@@ -11170,7 +11170,7 @@ + 'id': 804, + 'name': 'FullscreenAlertEnabled', + 'caption': '''Enable fullscreen alert''', +- 'owners': ['zxdan@chromium.org'], ++ 'owners': ['zxdan@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': {'type': 'boolean'}, + 'supported_on': ['chrome_os:88-'], +@@ -12100,7 +12100,7 @@ + }, + { + 'name': 'DeviceAllowRedeemChromeOsRegistrationOffers', +- 'owners': ['oscarpan@google.com', 'rsorokin@chromium.org'], ++ 'owners': ['oscarpan@9oo91e.qjz9zk', 'rsorokin@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:26-'], +@@ -12248,7 +12248,7 @@ }, { 'name': 'DeviceLoginScreenAccessibilityShortcutsEnabled', @@ -23501,7 +15928,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -10693,7 +10693,7 @@ +@@ -12273,7 +12273,7 @@ }, { 'name': 'AccessibilityShortcutsEnabled', @@ -23510,7 +15937,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -10743,7 +10743,7 @@ +@@ -12317,7 +12317,7 @@ + }, + { + 'name': 'VirtualKeyboardFeatures', +- 'owners': ['anqing@chromium.org'], ++ 'owners': ['anqing@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'object', +@@ -12369,7 +12369,7 @@ }, { 'name': 'StickyKeysEnabled', @@ -23519,7 +15955,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -10768,7 +10768,7 @@ +@@ -12388,7 +12388,7 @@ }, { 'name': 'SelectToSpeakEnabled', @@ -23528,7 +15964,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:77-'], -@@ -10793,7 +10793,7 @@ +@@ -12413,7 +12413,7 @@ }, { 'name': 'DictationEnabled', @@ -23537,7 +15973,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -10818,7 +10818,7 @@ +@@ -12438,7 +12438,7 @@ }, { 'name': 'KeyboardFocusHighlightEnabled', @@ -23546,7 +15982,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -10845,7 +10845,7 @@ +@@ -12465,7 +12465,7 @@ }, { 'name': 'CursorHighlightEnabled', @@ -23555,7 +15991,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -10872,7 +10872,7 @@ +@@ -12492,7 +12492,7 @@ }, { 'name': 'CaretHighlightEnabled', @@ -23564,7 +16000,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -10899,7 +10899,7 @@ +@@ -12519,7 +12519,7 @@ }, { 'name': 'MonoAudioEnabled', @@ -23573,7 +16009,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -10926,7 +10926,7 @@ +@@ -12546,7 +12546,7 @@ }, { 'name': 'AutoclickEnabled', @@ -23582,7 +16018,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -11041,7 +11041,7 @@ +@@ -12653,7 +12653,7 @@ }, { 'name': 'DeviceLoginScreenLargeCursorEnabled', @@ -23591,7 +16027,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:78-'], -@@ -11092,7 +11092,7 @@ +@@ -12700,7 +12700,7 @@ }, { 'name': 'DeviceLoginScreenSpokenFeedbackEnabled', @@ -23600,7 +16036,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11143,7 +11143,7 @@ +@@ -12747,7 +12747,7 @@ }, { 'name': 'DeviceLoginScreenHighContrastEnabled', @@ -23609,7 +16045,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11194,7 +11194,7 @@ +@@ -12797,7 +12797,7 @@ }, { 'name': 'DeviceLoginScreenVirtualKeyboardEnabled', @@ -23618,7 +16054,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11219,7 +11219,7 @@ +@@ -12822,7 +12822,7 @@ }, { 'name': 'PrimaryMouseButtonSwitch', @@ -23627,7 +16063,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -11244,7 +11244,7 @@ +@@ -12847,7 +12847,7 @@ }, { 'name': 'DeviceLoginScreenPrimaryMouseButtonSwitch', @@ -23636,7 +16072,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:81-'], -@@ -11269,7 +11269,7 @@ +@@ -12872,7 +12872,7 @@ }, { 'name': 'SharedClipboardEnabled', @@ -23645,7 +16081,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-', 'chrome_os:79-', 'android:79-'], -@@ -11339,7 +11339,7 @@ +@@ -12942,7 +12942,7 @@ }, { 'name': 'DeviceLoginScreenScreenMagnifierType', @@ -23654,7 +16090,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -11386,7 +11386,7 @@ +@@ -12989,7 +12989,7 @@ }, { 'name': 'DeviceLoginScreenDictationEnabled', @@ -23663,7 +16099,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11411,7 +11411,7 @@ +@@ -13014,7 +13014,7 @@ }, { 'name': 'DeviceLoginScreenSelectToSpeakEnabled', @@ -23672,7 +16108,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11436,7 +11436,7 @@ +@@ -13039,7 +13039,7 @@ }, { 'name': 'DeviceLoginScreenCursorHighlightEnabled', @@ -23681,7 +16117,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11461,7 +11461,7 @@ +@@ -13064,7 +13064,7 @@ }, { 'name': 'DeviceLoginScreenCaretHighlightEnabled', @@ -23690,7 +16126,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11486,7 +11486,7 @@ +@@ -13089,7 +13089,7 @@ }, { 'name': 'DeviceLoginScreenMonoAudioEnabled', @@ -23699,7 +16135,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11513,7 +11513,7 @@ +@@ -13116,7 +13116,7 @@ }, { 'name': 'DeviceLoginScreenAutoclickEnabled', @@ -23708,7 +16144,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11540,7 +11540,7 @@ +@@ -13143,7 +13143,7 @@ }, { 'name': 'DeviceLoginScreenStickyKeysEnabled', @@ -23717,7 +16153,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11565,7 +11565,7 @@ +@@ -13168,7 +13168,7 @@ }, { 'name': 'DeviceLoginScreenKeyboardFocusHighlightEnabled', @@ -23726,7 +16162,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -11729,7 +11729,7 @@ +@@ -13324,7 +13324,7 @@ }, { 'name': 'ChromeVariations', @@ -23735,7 +16171,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -11773,7 +11773,7 @@ +@@ -13361,7 +13361,7 @@ + 'tags': [], + 'desc': '''Configuring this policy allows to specify which variations are allowed to be applied in $1Google Chrome. + +- Variations provide a means for offering modifications to $1Google Chrome without shipping a new version of the browser by selectively enabling or disabling already existing features. See https://support.google.com/chrome/a?p=Manage_the_Chrome_variations_framework for more information. ++ Variations provide a means for offering modifications to $1Google Chrome without shipping a new version of the browser by selectively enabling or disabling already existing features. See https://support.9oo91e.qjz9zk/chrome/a?p=Manage_the_Chrome_variations_framework for more information. + + Setting the VariationsEnabled (value 0), or leaving the policy not set allows all variations to be applied to the browser. + +@@ -13371,7 +13371,7 @@ }, { 'name': 'DeviceChromeVariations', @@ -23744,7 +16189,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -12104,20 +12104,20 @@ +@@ -13406,7 +13406,7 @@ + 'tags': [], + 'desc': '''Configuring this policy allows to specify which variations are allowed to be applied on an enterprise-managed $2Google Chrome OS device. + +- Variations provide a means for offering modifications to $2Google Chrome OS without shipping a new version by selectively enabling or disabling already existing features. See https://support.google.com/chrome/a?p=Manage_the_Chrome_variations_framework for more information. ++ Variations provide a means for offering modifications to $2Google Chrome OS without shipping a new version by selectively enabling or disabling already existing features. See https://support.9oo91e.qjz9zk/chrome/a?p=Manage_the_Chrome_variations_framework for more information. + + Setting the VariationsEnabled (value 0), or leaving the policy not set allows all variations to be applied to $2Google Chrome OS. + +@@ -13631,20 +13631,20 @@ "toplevel_name": "My managed bookmarks folder" }, { "name": "Google", @@ -23769,16 +16223,14 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli } ] } -@@ -12127,7 +12127,7 @@ +@@ -13652,13 +13652,13 @@ + 'id': 227, + 'caption': '''Managed Bookmarks''', 'tags': [], - 'desc': '''Configures a list of managed bookmarks. - -- The policy consists of a list of bookmarks whereas each bookmark is a dictionary containing the keys "name" and "url" which hold the bookmark's name and its target. A subfolder may be configured by defining a bookmark without an "url" key but with an additional "children" key which itself contains a list of bookmarks as defined above (some of which may be folders again). $1Google Chrome amends incomplete URLs as if they were submitted via the Omnibox, for example "google.com" becomes "https://google.com/". -+ The policy consists of a list of bookmarks whereas each bookmark is a dictionary containing the keys "name" and "url" which hold the bookmark's name and its target. A subfolder may be configured by defining a bookmark without an "url" key but with an additional "children" key which itself contains a list of bookmarks as defined above (some of which may be folders again). $1Google Chrome amends incomplete URLs as if they were submitted via the Omnibox, for example "9oo91e.qjz9zk" becomes "https://9oo91e.qjz9zk/". - - These bookmarks are placed in a folder that can't be modified by the user (but the user can choose to hide it from the bookmark bar). By default the folder name is "Managed bookmarks" but it can be customized by adding to the list of bookmarks a dictionary containing the key "toplevel_name" with the desired folder name as the value. +- 'desc': '''Setting the policy sets up a list of bookmarks where each one is a dictionary with the keys "name" and "url". These keys hold the bookmark's name and target. Admins can set up a subfolder by defining a bookmark without a "url" key, but with an additional "children" key. This key also has a list of bookmarks, some of which can also be folders. Chrome amends incomplete URLs as if they were submitted through the address bar. For example, "google.com" becomes "https://google.com/". ++ 'desc': '''Setting the policy sets up a list of bookmarks where each one is a dictionary with the keys "name" and "url". These keys hold the bookmark's name and target. Admins can set up a subfolder by defining a bookmark without a "url" key, but with an additional "children" key. This key also has a list of bookmarks, some of which can also be folders. Chrome amends incomplete URLs as if they were submitted through the address bar. For example, "9oo91e.qjz9zk" becomes "https://9oo91e.qjz9zk/". -@@ -12135,7 +12135,7 @@ + Users can't change the folders the bookmarks are placed in (though they can hide it from the bookmark bar). The default folder name for managed bookmarks is "Managed bookmarks" but it can be changed by adding a new sub-dictionary to the policy with a single key named "toplevel_name" with the desired folder name as its value. Managed bookmarks are not synced to the user account and extensions can't modify them.''', }, { 'name': 'DataCompressionProxyEnabled', @@ -23787,7 +16239,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:31-'], -@@ -12349,7 +12349,7 @@ +@@ -13862,7 +13862,7 @@ }, { 'name': 'BrowserGuestModeEnabled', @@ -23796,7 +16248,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:38-'], -@@ -12367,7 +12367,7 @@ +@@ -13880,7 +13880,7 @@ }, { 'name': 'BrowserGuestModeEnforced', @@ -23805,7 +16257,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:77-'], -@@ -12385,7 +12385,7 @@ +@@ -13898,7 +13898,7 @@ }, { 'name': 'BrowserAddPersonEnabled', @@ -23814,7 +16266,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:39-'], -@@ -12403,7 +12403,7 @@ +@@ -13916,7 +13916,7 @@ }, { 'name': 'ForceBrowserSignin', @@ -23823,7 +16275,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'deprecated': True, 'schema': { 'type': 'boolean' }, -@@ -12463,7 +12463,7 @@ +@@ -13977,7 +13977,7 @@ If the policy is set to "Enable browser sign-in," then the user is allowed to sign in to the browser and is automatically signed in to the browser when signed in to Google web services like Gmail. Being signed in to the browser means the user's account information will be kept by the browser. However, it does not mean that Chrome sync will be turned on per default; the user must separately opt-in to use this feature. Enabling this policy will prevent the user from turning off the setting that allows browser sign-in. To control the availability of Chrome sync, use the "SyncDisabled" policy. @@ -23832,16 +16284,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is not set then the user can decide if they want to enable the browser sign in option and use it as they see fit.''', }, -@@ -12625,7 +12625,7 @@ +@@ -14142,7 +14142,7 @@ - This policy allows certificates for the hostnames in the specified URLs to not be disclosed via Certificate Transparency. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used, but makes it harder to detect misissued certificates for those hosts. + Leaving the policy unset means that if certificates requiring disclosure through Certificate Transparency aren't disclosed, then $1Google Chrome doesn't trust those certificates. -- A URL pattern is formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format. However, because certificates are valid for a given hostname independent of the scheme, port, or path, only the hostname portion of the URL is considered. Wildcard hosts are not supported. -+ A URL pattern is formatted according to https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. However, because certificates are valid for a given hostname independent of the scheme, port, or path, only the hostname portion of the URL is considered. Wildcard hosts are not supported. - - If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.''', +- A URL pattern follows this format ( https://www.chromium.org/administrators/url-blacklist-filter-format ). However, because the validity of certificates for a given hostname is independent of the scheme, port, or path, $1Google Chrome only considers the hostname portion of the URL. Wildcard hosts aren't supported.''', ++ A URL pattern follows this format ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). However, because the validity of certificates for a given hostname is independent of the scheme, port, or path, $1Google Chrome only considers the hostname portion of the URL. Wildcard hosts aren't supported.''', }, -@@ -12748,7 +12748,7 @@ + { + 'name': 'CertificateTransparencyEnforcementDisabledForCas', +@@ -14258,7 +14258,7 @@ }, { 'name': 'ContextualSearchEnabled', @@ -23850,7 +16302,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ -@@ -12843,7 +12843,7 @@ +@@ -14362,7 +14362,7 @@ }, { 'name': 'SSLErrorOverrideAllowed', @@ -23859,7 +16311,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:44-', 'chrome_os:44-', 'android:44-'], -@@ -12920,7 +12920,7 @@ +@@ -14441,7 +14441,7 @@ }, { 'name': 'WelcomePageOnOSUpgradeEnabled', @@ -23868,7 +16320,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome.win:45-62'], 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -12938,7 +12938,7 @@ +@@ -14460,7 +14460,7 @@ }, { 'name': 'HardwareAccelerationModeEnabled', @@ -23877,7 +16329,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:46-'], -@@ -12956,7 +12956,7 @@ +@@ -14478,7 +14478,7 @@ }, { 'name': 'UnifiedDesktopEnabledByDefault', @@ -23886,7 +16338,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:47-'], -@@ -12979,7 +12979,7 @@ +@@ -14497,7 +14497,7 @@ }, { 'name': 'DisplayRotationDefault', @@ -23895,7 +16347,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13032,7 +13032,7 @@ +@@ -14542,7 +14542,7 @@ }, { 'name': 'ArcEnabled', @@ -23904,7 +16356,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:50-'], -@@ -13118,7 +13118,7 @@ +@@ -14620,7 +14620,7 @@ }, { 'name': 'AllowKioskAppControlChromeVersion', @@ -23913,7 +16365,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:51-'], -@@ -13144,7 +13144,7 @@ +@@ -14642,7 +14642,7 @@ }, { 'name': 'LoginAuthenticationBehavior', @@ -23922,7 +16374,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13180,7 +13180,7 @@ +@@ -14678,7 +14678,7 @@ }, { 'name': 'UsbDetachableWhitelist', @@ -23931,7 +16383,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -13217,7 +13217,7 @@ +@@ -14756,7 +14756,7 @@ }, { 'name': 'DeviceAllowBluetooth', @@ -23940,16 +16392,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:52-'], -@@ -13239,7 +13239,7 @@ +@@ -14776,7 +14776,7 @@ }, { 'name': 'SuppressUnsupportedOSWarning', - 'owners': ['grt@chromium.org'], + 'owners': ['grt@ch40m1um.qjz9zk'], 'caption': '''Suppress the unsupported OS warning''', - 'desc': '''Suppresses the warning that appears when $1Google Chrome is running on a computer or operating system that is no longer supported. + 'desc': '''Setting the policy to Enabled suppresses the warning that appears when $1Google Chrome is running on an unsupported computer or operating system. -@@ -13257,7 +13257,7 @@ +@@ -14794,7 +14794,7 @@ }, { 'name': 'DeviceQuirksDownloadEnabled', @@ -23958,7 +16410,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:51-'], -@@ -13280,7 +13280,7 @@ +@@ -14828,7 +14828,7 @@ }, { 'name': 'SystemTimezoneAutomaticDetection', @@ -23967,7 +16419,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13358,7 +13358,7 @@ +@@ -14900,7 +14900,7 @@ + }, + { + 'name': 'DeviceShowLowDiskSpaceNotification', +- 'owners': ['vsavu@chromium.org'], ++ 'owners': ['vsavu@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-'], +@@ -14934,7 +14934,7 @@ }, { 'name': 'NetworkThrottlingEnabled', @@ -23975,8 +16436,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['kirtika@ch40m1um.qjz9zk', 'pmarko@ch40m1um.qjz9zk'], 'device_only': True, 'caption': '''Enable throttling network bandwidth''', - 'desc': '''Allows enabling or disabling network throttling. -@@ -13398,7 +13398,7 @@ + 'desc': '''Setting the policy turns network throttling on or off. This means that the system is throttled to achieve the provided upload and download rates (in kbits/s). It applies to all users and interfaces on the device.''', +@@ -14969,7 +14969,7 @@ }, { 'name': 'DeviceWiFiFastTransitionEnabled', @@ -23984,8 +16445,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['matthewmwang@ch40m1um.qjz9zk'], 'device_only': True, 'caption': '''Enable 802.11r Fast Transition''', - 'desc': '''Allows enabling or disabling Fast Transition. -@@ -13421,7 +13421,7 @@ + 'desc': '''Setting the policy to Enabled means that Fast Transition is used when the wireless access point supports it. It applies to all users and interfaces on the device. +@@ -14988,7 +14988,7 @@ }, { 'name': 'DeviceWiFiAllowed', @@ -23993,17 +16454,17 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['apotapchuk@ch40m1um.qjz9zk'], 'device_only': True, 'caption': '''Enable WiFi''', - 'desc': ''' -@@ -13440,7 +13440,7 @@ + 'desc': '''Setting the policy to Disabled means $2Google Chrome OS turns off Wi-Fi, and users can't change it. +@@ -15007,7 +15007,7 @@ }, { 'name': 'DeviceDockMacAddressSource', - 'owners': ['lamzin@google.com'], + 'owners': ['lamzin@9oo91e.qjz9zk'], 'caption': '''Device MAC address source when docked''', - 'desc': ''' - Configures which MAC (media access control) address will be used when a dock is connected to the device. -@@ -13488,7 +13488,7 @@ + 'desc': '''Setting the policy lets the administrator change the MAC (media access control) address when connecting a device to the dock. When a dock is connected to some device models, by default, the device's designated dock's MAC address helps identify the device on Ethernet. + +@@ -15052,7 +15052,7 @@ }, { 'name': 'LoginVideoCaptureAllowedUrls', @@ -24012,7 +16473,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -13512,7 +13512,7 @@ +@@ -15076,7 +15076,7 @@ }, { 'name': 'DeviceLoginScreenExtensions', @@ -24021,7 +16482,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -13523,7 +13523,7 @@ +@@ -15087,7 +15087,7 @@ 'features': { 'dynamic_refresh': True, }, @@ -24030,7 +16491,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 336, 'caption': '''Configure the list of installed apps and extensions on the login screen''', 'tags': ['full-admin-access'], -@@ -13536,9 +13536,9 @@ +@@ -15100,9 +15100,9 @@ If an app or extension that previously had been force-installed is removed from this list, it is automatically uninstalled by $1Google Chrome. @@ -24042,7 +16503,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, { 'name': 'AllowScreenLock', -@@ -13558,7 +13558,7 @@ +@@ -15124,7 +15124,7 @@ }, { 'name': 'ArcCertificatesSyncMode', @@ -24051,7 +16512,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -13591,7 +13591,7 @@ +@@ -15157,7 +15157,7 @@ }, { 'name': 'AllowedDomainsForApps', @@ -24060,7 +16521,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:51-', 'chrome_os:51-', 'android:51-'], -@@ -13600,7 +13600,7 @@ +@@ -15166,7 +15166,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, @@ -24069,34 +16530,21 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 331, 'caption': '''Define domains allowed to access G Suite''', 'tags': ['filtering'], -@@ -13608,7 +13608,7 @@ +@@ -15176,11 +15176,11 @@ - If you define this setting, the user will only be able to access Google - Apps using accounts from the specified domains (note that to allow -- gmail.com/googlemail.com accounts, you should add "consumer_accounts" -+ 9ma1l.qjz9zk/9oo91email.qjz9zk accounts, you should add "consumer_accounts" - (without quotes) to the list of domains). + Users cannot change or override this setting. - This setting will prevent the user from logging in, and adding a Secondary -@@ -13619,14 +13619,14 @@ - access G Suite with any account. - - This policy causes the X-GoogApps-Allowed-Domains header to be appended to -- all HTTP and HTTPS requests to all google.com domains, as described in -- https://support.google.com/a/answer/1668854. -+ all HTTP and HTTPS requests to all 9oo91e.qjz9zk domains, as described in -+ https://support.9oo91e.qjz9zk/a/answer/1668854. - - Users cannot change or override this setting.''', +- Note: This policy causes the X-GoogApps-Allowed-Domains header to be appended to all HTTP and HTTPS requests to all google.com domains, as described in https://support.google.com/a/answer/1668854.''', ++ Note: This policy causes the X-GoogApps-Allowed-Domains header to be appended to all HTTP and HTTPS requests to all 9oo91e.qjz9zk domains, as described in https://support.9oo91e.qjz9zk/a/answer/1668854.''', }, { 'name': 'PacHttpsUrlStrippingEnabled', -- 'owners': ['eroman@chromium.org'], -+ 'owners': ['eroman@ch40m1um.qjz9zk'], +- 'owners': ['net-dev@chromium.org'], ++ 'owners': ['net-dev@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': [ 'chrome.*:52-74', 'chrome_os:52-74' ], -@@ -13755,7 +13755,7 @@ +@@ -15309,7 +15309,7 @@ }, { 'name': 'NTPContentSuggestionsEnabled', @@ -24105,7 +16553,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:54-'], -@@ -13775,7 +13775,7 @@ +@@ -15340,7 +15340,7 @@ }, { 'name': 'NTPCustomBackgroundEnabled', @@ -24114,7 +16562,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -13795,7 +13795,7 @@ +@@ -15371,7 +15371,7 @@ + }, + { + 'name': 'NTPCardsVisible', +- 'owners': ['danielms@chromium.org', 'tiborg@chromium.org', 'yyushkina@chromium.org'], ++ 'owners': ['danielms@ch40m1um.qjz9zk', 'tiborg@ch40m1um.qjz9zk', 'yyushkina@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:88-', 'chrome_os:88-'], +@@ -15410,7 +15410,7 @@ }, { 'name': 'WebRtcUdpPortRange', @@ -24123,7 +16580,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:54-', 'chrome_os:54-', 'android:54-'], -@@ -13813,7 +13813,7 @@ +@@ -15428,7 +15428,7 @@ }, { 'name': 'WebRtcLocalIpsAllowedUrls', @@ -24132,7 +16589,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -13868,7 +13868,7 @@ +@@ -15482,11 +15482,11 @@ If set to False, updates to components are disabled. However, some components are exempt from this policy: updates to any component that does not contain executable code, or does not significantly alter the behavior of the browser, or is critical for its security will not be disabled. Examples of such components include the certificate revocation lists and Safe Browsing data. @@ -24141,7 +16598,30 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, { 'name': 'NativePrinters', -@@ -13896,7 +13896,7 @@ +- 'owners': ['file://chromeos/printing/OWNERS', 'skau@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'skau@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -15510,7 +15510,7 @@ + 'properties': { + 'effective_model': { + 'type': 'string', +- 'description': 'This field must match one of the strings which represent a $2Google Chrome OS supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.google.com/chrome?p=noncloudprint.' ++ 'description': 'This field must match one of the strings which represent a $2Google Chrome OS supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.9oo91e.qjz9zk/chrome?p=noncloudprint.' + }, + 'autoconf': { + 'type': 'boolean', +@@ -15566,7 +15566,7 @@ + }, + { + 'name': 'Printers', +- 'owners': ['file://chromeos/printing/OWNERS', 'skau@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'skau@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -15590,7 +15590,7 @@ 'properties': { 'effective_model': { 'type': 'string', @@ -24150,43 +16630,151 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'autoconf': { 'type': 'boolean', -@@ -14076,7 +14076,7 @@ +@@ -15643,7 +15643,7 @@ + }, + { + 'name': 'NativePrintersBulkConfiguration', +- 'owners': ['file://chromeos/printing/OWNERS', 'luum@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'luum@ch40m1um.qjz9zk'], + 'id': 382, + 'type': 'external', + 'schema': { +@@ -15676,7 +15676,7 @@ + }, + { + 'name': 'PrintersBulkConfiguration', +- 'owners': ['file://chromeos/printing/OWNERS', 'luum@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'luum@ch40m1um.qjz9zk'], + 'id': 770, + 'type': 'external', + 'schema': { +@@ -15706,7 +15706,7 @@ + }, + { + 'name': 'NativePrintersBulkAccessMode', +- 'owners': ['file://chromeos/printing/OWNERS', 'zentaro@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'zentaro@ch40m1um.qjz9zk'], + 'id': 383, + 'supported_on': ['chrome_os:65-'], + 'type': 'int-enum', +@@ -15754,7 +15754,7 @@ + }, + { + 'name': 'PrintersBulkAccessMode', +- 'owners': ['file://chromeos/printing/OWNERS', 'zentaro@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'zentaro@ch40m1um.qjz9zk'], + 'id': 772, + 'supported_on': ['chrome_os:86-'], + 'type': 'int-enum', +@@ -15799,7 +15799,7 @@ + }, + { + 'name': 'NativePrintersBulkBlacklist', +- 'owners': ['file://chromeos/printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:65-'], + 'id': 384, + 'type': 'list', +@@ -15821,7 +15821,7 @@ + }, + { + 'name': 'PrintersBulkBlocklist', +- 'owners': ['file://chromeos/printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:86-'], + 'id': 779, + 'type': 'list', +@@ -15840,7 +15840,7 @@ + }, + { + 'name': 'NativePrintersBulkWhitelist', +- 'owners': ['file://chromeos/printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:65-'], + 'id': 385, + 'type': 'list', +@@ -15862,7 +15862,7 @@ + }, + { + 'name': 'PrintersBulkAllowlist', +- 'owners': ['file://chromeos/printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://chromeos/printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:86-'], + 'id': 780, + 'type': 'list', +@@ -15881,7 +15881,7 @@ }, { 'name': 'DeviceNativePrinters', -- 'owners': ['skau@chromium.org', 'nikitapodguzov@chromium.org'], -+ 'owners': ['skau@ch40m1um.qjz9zk', 'nikitapodguzov@ch40m1um.qjz9zk'], +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], 'id': 386, 'device_only': True, 'type': 'external', -@@ -14118,7 +14118,7 @@ +@@ -15919,7 +15919,7 @@ }, { 'name': 'DeviceNativePrintersAccessMode', -- 'owners': ['skau@chromium.org', 'nikitapodguzov@chromium.org'], -+ 'owners': ['skau@ch40m1um.qjz9zk', 'nikitapodguzov@ch40m1um.qjz9zk'], +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], 'id': 387, 'device_only': True, 'supported_on': ['chrome_os:73-'], -@@ -14160,7 +14160,7 @@ +@@ -15967,7 +15967,7 @@ }, { 'name': 'DeviceNativePrintersBlacklist', -- 'owners': ['skau@chromium.org', 'nikitapodguzov@chromium.org'], -+ 'owners': ['skau@ch40m1um.qjz9zk', 'nikitapodguzov@ch40m1um.qjz9zk'], +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], 'supported_on': ['chrome_os:73-'], 'device_only': True, 'id': 388, -@@ -14184,7 +14184,7 @@ +@@ -15989,7 +15989,7 @@ }, { 'name': 'DeviceNativePrintersWhitelist', -- 'owners': ['skau@chromium.org', 'nikitapodguzov@chromium.org'], -+ 'owners': ['skau@ch40m1um.qjz9zk', 'nikitapodguzov@ch40m1um.qjz9zk'], +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], 'supported_on': ['chrome_os:73-'], 'device_only': True, 'id': 389, -@@ -14259,7 +14259,7 @@ +@@ -16012,7 +16012,7 @@ + }, + { + 'name': 'DevicePrinters', +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], + 'id': 743, + 'device_only': True, + 'type': 'external', +@@ -16047,7 +16047,7 @@ + }, + { + 'name': 'DevicePrintersAccessMode', +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], + 'id': 733, + 'device_only': True, + 'supported_on': ['chrome_os:87-'], +@@ -16092,7 +16092,7 @@ + }, + { + 'name': 'DevicePrintersBlocklist', +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:87-'], + 'device_only': True, + 'id': 734, +@@ -16111,7 +16111,7 @@ + }, + { + 'name': 'DevicePrintersAllowlist', +- 'owners': ['skau@chromium.org', 'bmalcolm@chromium.org'], ++ 'owners': ['skau@ch40m1um.qjz9zk', 'bmalcolm@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:87-'], + 'device_only': True, + 'id': 735, +@@ -16184,7 +16184,7 @@ }, { 'name': 'MinimumRequiredChromeVersion', @@ -24195,16 +16783,25 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'supported_on': ['chrome_os:64-81'], 'device_only': True, 'type': 'string', -@@ -14285,7 +14285,7 @@ +@@ -16210,7 +16210,7 @@ }, { - 'name': 'MinimumChromeVersionEnforced', + 'name': 'DeviceMinimumVersion', - 'owners': ['snijhara@google.com'], + 'owners': ['snijhara@9oo91e.qjz9zk'], - 'supported_on': ['chrome_os:82-'], + 'supported_on': ['chrome_os:86-'], 'device_only': True, 'type': 'dict', -@@ -14490,7 +14490,7 @@ +@@ -16294,7 +16294,7 @@ + }, + { + 'name': 'DeviceMinimumVersionAueMessage', +- 'owners': ['snijhara@google.com', 'marcgrimme@chromium.org'], ++ 'owners': ['snijhara@9oo91e.qjz9zk', 'marcgrimme@ch40m1um.qjz9zk'], + 'supported_on': ['chrome_os:86-'], + 'device_only': True, + 'type': 'string', +@@ -16494,7 +16494,7 @@ }, { 'name': 'DeviceWallpaperImage', @@ -24213,7 +16810,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -14565,7 +14565,7 @@ +@@ -16569,7 +16569,7 @@ }, { 'name': 'DeviceLoginScreenSystemInfoEnforced', @@ -24222,7 +16819,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:79-'], -@@ -14588,7 +14588,7 @@ +@@ -16592,7 +16592,7 @@ }, { 'name': 'SmsMessagesAllowed', @@ -24231,7 +16828,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -14609,7 +14609,7 @@ +@@ -16613,7 +16613,7 @@ + }, + { + 'name': 'WifiSyncAndroidAllowed', +- 'owners': ['jonmann@chromium.org', 'cvandermerwe@google.com'], ++ 'owners': ['jonmann@ch40m1um.qjz9zk', 'cvandermerwe@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:89-'], +@@ -16636,7 +16636,7 @@ }, { 'name': 'SmartLockSigninAllowed', @@ -24240,7 +16846,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:71-'], -@@ -14630,7 +14630,7 @@ +@@ -16657,7 +16657,7 @@ }, { 'name': 'InstantTetheringAllowed', @@ -24249,7 +16855,43 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:60-'], -@@ -14651,7 +14651,7 @@ +@@ -16678,7 +16678,7 @@ + }, + { + 'name': 'PhoneHubAllowed', +- 'owners': ['khorimoto@google.com', 'vecore@chromium.org', 'better-together-dev@google.com'], ++ 'owners': ['khorimoto@9oo91e.qjz9zk', 'vecore@ch40m1um.qjz9zk', 'better-together-dev@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:89-'], +@@ -16699,7 +16699,7 @@ + }, + { + 'name': 'PhoneHubNotificationsAllowed', +- 'owners': ['khorimoto@google.com', 'vecore@chromium.org', 'better-together-dev@google.com'], ++ 'owners': ['khorimoto@9oo91e.qjz9zk', 'vecore@ch40m1um.qjz9zk', 'better-together-dev@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:89-'], +@@ -16719,7 +16719,7 @@ + }, + { + 'name': 'PhoneHubTaskContinuationAllowed', +- 'owners': ['khorimoto@google.com', 'vecore@chromium.org', 'better-together-dev@google.com'], ++ 'owners': ['khorimoto@9oo91e.qjz9zk', 'vecore@ch40m1um.qjz9zk', 'better-together-dev@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:89-'], +@@ -16739,7 +16739,7 @@ + }, + { + 'name': 'NearbyShareAllowed', +- 'owners': ['vecore@google.com', 'hansberry@chromium.org', 'better-together-dev@google.com'], ++ 'owners': ['vecore@9oo91e.qjz9zk', 'hansberry@ch40m1um.qjz9zk', 'better-together-dev@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'future_on': ['chrome_os'], +@@ -16760,7 +16760,7 @@ }, { 'name': 'BrowserNetworkTimeQueriesEnabled', @@ -24258,7 +16900,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:60-'], -@@ -14667,7 +14667,7 @@ +@@ -16789,7 +16789,7 @@ }, { 'name': 'DeviceSecondFactorAuthentication', @@ -24267,7 +16909,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14733,7 +14733,7 @@ +@@ -16832,7 +16832,7 @@ + }, + { + 'name': 'PrintPreviewUseSystemDefaultPrinter', +- 'owners': ['file://printing/OWNERS', 'thestig@chromium.org'], ++ 'owners': ['file://printing/OWNERS', 'thestig@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': [ +@@ -16864,7 +16864,7 @@ }, { 'name': 'DeviceEcryptfsMigrationStrategy', @@ -24276,7 +16927,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -14872,7 +14872,7 @@ +@@ -17003,7 +17003,7 @@ }, { 'name': 'NoteTakingAppsLockScreenWhitelist', @@ -24285,7 +16936,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15025,7 +15025,7 @@ +@@ -17033,7 +17033,7 @@ + }, + { + 'name': 'NoteTakingAppsLockScreenAllowlist', +- 'owners': ['tbarzic@chromium.org'], ++ 'owners': ['tbarzic@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -17183,7 +17183,7 @@ }, { 'name': 'CloudPolicyOverridesPlatformPolicy', @@ -24293,8 +16953,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['zmin@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean'}, - 'supported_on': ['chrome.*:75-'], -@@ -15046,7 +15046,7 @@ + 'supported_on': [ +@@ -17207,7 +17207,7 @@ }, { 'name': 'PromptForDownloadLocation', @@ -24303,7 +16963,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean'}, 'supported_on': ['chrome.*:64-', 'chrome_os:64-'], -@@ -15066,7 +15066,7 @@ +@@ -17225,7 +17225,7 @@ }, { 'name': 'UnaffiliatedArcAllowed', @@ -24312,7 +16972,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:64-'], -@@ -15086,7 +15086,7 @@ +@@ -17243,7 +17243,7 @@ + }, + { + 'name': 'DeviceArcDataSnapshotHours', +- 'owners': ['pbond@chromium.org', 'file://components/policy/resources/OWNERS'], ++ 'owners': ['pbond@ch40m1um.qjz9zk', 'file://components/policy/resources/OWNERS'], + 'type': 'dict', + 'schema': { + 'type': 'object', +@@ -17295,7 +17295,7 @@ }, { 'name': 'IsolateOrigins', @@ -24321,7 +16990,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:63-', 'chrome_os:63-'], -@@ -15112,7 +15112,7 @@ +@@ -17316,7 +17316,7 @@ }, { 'name': 'SitePerProcess', @@ -24330,7 +16999,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:63-', 'chrome_os:63-'], -@@ -15177,7 +15177,7 @@ +@@ -17381,7 +17381,7 @@ }, { 'name': 'IsolateOriginsAndroid', @@ -24339,7 +17008,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['android:68-'], -@@ -15206,7 +15206,7 @@ +@@ -17404,7 +17404,7 @@ }, { 'name': 'SitePerProcessAndroid', @@ -24348,7 +17017,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['android:68-'], -@@ -15261,7 +15261,7 @@ +@@ -17457,7 +17457,7 @@ }, { 'name': 'UnsafelyTreatInsecureOriginAsSecure', @@ -24357,7 +17026,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15308,7 +15308,7 @@ +@@ -17504,7 +17504,7 @@ }, { 'name': 'DefaultDownloadDirectory', @@ -24366,12 +17035,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:64-', 'chrome_os:64-'], -@@ -15328,11 +15328,11 @@ +@@ -17522,11 +17522,11 @@ - If you do not set this policy, $1Google Chrome will use its usual default directory (platform-specific). + Leaving the policy unset means Chrome uses its platform-specific default directory. -- See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.''', -+ See https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.''', +- Note: See a list of variables you can use ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).''', ++ Note: See a list of variables you can use ( https://www.ch40m1um.qjz9zk/administrators/policy-list-3/user-data-directory-variables ).''', }, { 'name': 'DeviceHostnameTemplate', @@ -24380,7 +17049,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome_os:65-'], -@@ -15355,7 +15355,7 @@ +@@ -17545,7 +17545,7 @@ }, { 'name': 'AbusiveExperienceInterventionEnforce', @@ -24389,7 +17058,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:65-', 'chrome_os:65-'], -@@ -15376,7 +15376,7 @@ +@@ -17574,7 +17574,7 @@ }, { 'name': 'SpellcheckLanguage', @@ -24398,7 +17067,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15407,7 +15407,7 @@ +@@ -17605,7 +17605,7 @@ }, { 'name': 'SpellcheckLanguageBlacklist', @@ -24407,7 +17076,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15438,7 +15438,7 @@ +@@ -17639,7 +17639,7 @@ + }, + { + 'name': 'SpellcheckLanguageBlocklist', +- 'owners': ['gujen@google.com'], ++ 'owners': ['gujen@9oo91e.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -17670,7 +17670,7 @@ }, { 'name': 'ThirdPartyBlockingEnabled', @@ -24416,7 +17094,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:65-'], -@@ -15456,7 +15456,7 @@ +@@ -17690,7 +17690,7 @@ }, { 'name': 'SpellcheckEnabled', @@ -24425,7 +17103,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:65-', 'chrome_os:65-'], -@@ -15478,7 +15478,7 @@ +@@ -17726,7 +17726,7 @@ }, { 'name': 'AdsSettingForIntrusiveAdsSites', @@ -24434,16 +17112,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -15514,7 +15514,7 @@ +@@ -17760,7 +17760,7 @@ }, { 'name': 'RestrictAccountsToPatterns', -- 'owners': ['bsazonov@chromium.org', 'file://src/components/signin/OWNERS'], -+ 'owners': ['bsazonov@ch40m1um.qjz9zk', 'file://src/components/signin/OWNERS'], +- 'owners': ['bsazonov@chromium.org', 'file://components/signin/OWNERS'], ++ 'owners': ['bsazonov@ch40m1um.qjz9zk', 'file://components/signin/OWNERS'], 'type': 'list', 'schema': { 'type': 'array', -@@ -15525,7 +15525,7 @@ +@@ -17771,7 +17771,7 @@ 'dynamic_refresh': True, 'per_profile': False, }, @@ -24452,7 +17130,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 410, 'caption': '''Restrict accounts that are visible in $1Google Chrome''', 'tags': [], -@@ -15539,7 +15539,7 @@ +@@ -17785,7 +17785,7 @@ }, { 'name': 'PasswordProtectionWarningTrigger', @@ -24461,7 +17139,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -15583,7 +15583,7 @@ +@@ -17834,7 +17834,7 @@ { 'id': 419, 'name': 'RelaunchNotification', @@ -24470,7 +17148,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -15618,7 +15618,7 @@ +@@ -17869,7 +17869,7 @@ { 'id': 420, 'name': 'RelaunchNotificationPeriod', @@ -24479,7 +17157,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -15657,7 +15657,7 @@ +@@ -17908,7 +17908,7 @@ }, { 'name': 'VirtualMachinesAllowed', @@ -24488,7 +17166,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:66-'], -@@ -15681,7 +15681,7 @@ +@@ -17927,7 +17927,7 @@ }, { 'name': 'CrostiniAllowed', @@ -24497,7 +17175,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -15702,7 +15702,7 @@ +@@ -17943,7 +17943,7 @@ }, { 'name': 'DeviceUnaffiliatedCrostiniAllowed', @@ -24506,7 +17184,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -15722,7 +15722,7 @@ +@@ -17959,7 +17959,7 @@ }, { 'name': 'CrostiniExportImportUIAllowed', @@ -24515,7 +17193,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -15738,7 +15738,7 @@ +@@ -17975,7 +17975,7 @@ }, { 'name': 'CrostiniRootAccessAllowed', @@ -24523,8 +17201,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['aoldemeier@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:77-'], -@@ -15758,7 +15758,7 @@ + 'future_on': ['chrome_os'], +@@ -17994,7 +17994,7 @@ }, { 'name': 'CrostiniAnsiblePlaybook', @@ -24533,7 +17211,34 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -15799,7 +15799,7 @@ +@@ -18034,7 +18034,7 @@ + }, + { + 'name': 'CrostiniArcAdbSideloadingAllowed', +- 'owners': ['janagrill@chromium.org', 'okalitova@chromium.org'], ++ 'owners': ['janagrill@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -18072,7 +18072,7 @@ + }, + { + 'name': 'DeviceCrostiniArcAdbSideloadingAllowed', +- 'owners': ['janagrill@chromium.org', 'okalitova@chromium.org'], ++ 'owners': ['janagrill@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], + 'device_only': True, + 'type': 'int-enum', + 'schema': { +@@ -18113,7 +18113,7 @@ + }, + { + 'name': 'CrostiniPortForwardingAllowed', +- 'owners': ['danielng@google.com'], ++ 'owners': ['danielng@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-'], +@@ -18133,7 +18133,7 @@ }, { 'name': 'SafeBrowsingWhitelistDomains', @@ -24542,7 +17247,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15825,7 +15825,7 @@ +@@ -18159,7 +18159,7 @@ + }, + { + 'name': 'SafeBrowsingAllowlistDomains', +- 'owners': ['bdea@chromium.org', 'nparker@chromium.org'], ++ 'owners': ['bdea@ch40m1um.qjz9zk', 'nparker@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -18182,7 +18182,7 @@ }, { 'name': 'PasswordProtectionLoginURLs', @@ -24551,17 +17265,17 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -15841,15 +15841,15 @@ - 'caption': '''Configure the list of enterprise login URLs where password protection service should capture fingerprint of password.''', +@@ -18197,15 +18197,15 @@ + 'id': 423, + 'caption': '''Configure the list of enterprise login URLs where password protection service should capture salted hashes of passwords.''', 'tags': [], - 'desc': '''Configure the list of enterprise login URLs (HTTP and HTTPS schemes only). Fingerprint of password will be captured on these URLs and used for password reuse detection. -- In order for $1Google Chrome to correctly capture password fingerprints, please make sure your login pages follow the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. -+ In order for $1Google Chrome to correctly capture password fingerprints, please make sure your login pages follow the guidelines on https://www.ch40m1um.qjz9zk/developers/design-documents/create-amazing-password-forms. - - If this setting is enabled, then password protection service will capture fingerprint of password on these URLs for password reuse detection purpose. -- If this setting is disabled or not set, then password protection service will only capture password fingerprint on https://accounts.google.com. -+ If this setting is disabled or not set, then password protection service will only capture password fingerprint on https://accounts.9oo91e.qjz9zk. - This policy is available only on Windows instances that are joined to a Microsoft® Active Directory® domain. or Windows 10 Pro or Enterprise instances that enrolled for device management.''', +- 'desc': '''Setting the policy sets the list of enterprise login URLs (HTTP and HTTPS protocols only). Password protection service will capture salted hashes of passwords on these URLs and use them for password reuse detection. For $1Google Chrome to correctly capture password salted hashes, ensure your sign-in pages follow these guidelines ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ). ++ 'desc': '''Setting the policy sets the list of enterprise login URLs (HTTP and HTTPS protocols only). Password protection service will capture salted hashes of passwords on these URLs and use them for password reuse detection. For $1Google Chrome to correctly capture password salted hashes, ensure your sign-in pages follow these guidelines ( https://www.ch40m1um.qjz9zk/developers/design-documents/create-amazing-password-forms ). + +- Turning this setting off or leaving it unset means the password protection service only captures the password salted hashes on https://accounts.google.com. ++ Turning this setting off or leaving it unset means the password protection service only captures the password salted hashes on https://accounts.9oo91e.qjz9zk. + + On Microsoft® Windows®, this functionality is only available on instances that are joined to a Microsoft® Active Directory® domain, running on Windows 10 Pro, or enrolled in Chrome Browser Cloud Management. On macOS, this functionality is only available on instances that are managed via MDM, or joined to a domain via MCX.''', }, { 'name': 'PasswordProtectionChangePasswordURL', @@ -24570,17 +17284,17 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:69-', 'chrome_os:69-'], -@@ -15862,15 +15862,15 @@ +@@ -18217,15 +18217,15 @@ + 'id': 424, 'caption': '''Configure the change password URL.''', 'tags': [], - 'desc': '''Configure the change password URL (HTTP and HTTPS schemes only). Password protection service will send users to this URL to change their password after seeing a warning in the browser. -- In order for $1Google Chrome to correctly capture the new password fingerprint on this change password page, please make sure your change password page follows the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms. -+ In order for $1Google Chrome to correctly capture the new password fingerprint on this change password page, please make sure your change password page follows the guidelines on https://www.ch40m1um.qjz9zk/developers/design-documents/create-amazing-password-forms. - - If this setting is enabled, then password protection service will send users to this URL to change their password after seeing a warning in the browser. -- If this setting is disabled or not set, then password protection service will send users to https://myaccount.google.com to change their password. -+ If this setting is disabled or not set, then password protection service will send users to https://myaccount.9oo91e.qjz9zk to change their password. - This policy is available only on Windows instances that are joined to a Microsoft® Active Directory® domain. or Windows 10 Pro or Enterprise instances that enrolled for device management.''', +- 'desc': '''Setting the policy sets the URL for users to change their password after seeing a warning in the browser. The password protection service sends users to the URL (HTTP and HTTPS protocols only) you designate through this policy. For $1Google Chrome to correctly capture the salted hash of the new password on this change password page, make sure your change password page follows these guidelines ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ). ++ 'desc': '''Setting the policy sets the URL for users to change their password after seeing a warning in the browser. The password protection service sends users to the URL (HTTP and HTTPS protocols only) you designate through this policy. For $1Google Chrome to correctly capture the salted hash of the new password on this change password page, make sure your change password page follows these guidelines ( https://www.ch40m1um.qjz9zk/developers/design-documents/create-amazing-password-forms ). + +- Turning the policy off or leaving it unset means the service sends users to https://myaccount.google.com to change their password. ++ Turning the policy off or leaving it unset means the service sends users to https://myaccount.9oo91e.qjz9zk to change their password. + + On Microsoft® Windows®, this functionality is only available on instances that are joined to a Microsoft® Active Directory® domain, running on Windows 10 Pro, or enrolled in Chrome Browser Cloud Management. On macOS, this functionality is only available on instances that are managed via MDM, or joined to a domain via MCX.''', }, { 'name': 'SafeBrowsingExtendedReportingEnabled', @@ -24588,13 +17302,14 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['bdea@ch40m1um.qjz9zk', 'nparker@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:66-', 'chrome_os:66-'], -@@ -15894,11 +15894,11 @@ + 'supported_on': ['chrome.*:66-', 'chrome_os:66-', 'android: 87-'], +@@ -18243,12 +18243,12 @@ - If this policy is left unset, the user will be able to change the setting and decide whether to send reports or not. + If you set this policy, users can't change it. If not set, users can decide whether to send reports or not. -- See https://developers.google.com/safe-browsing for more info on Safe Browsing.''', -+ See https://developers.9oo91e.qjz9zk/safe-browsing for more info on Safe Browsing.''', +- See more about Safe Browsing ( https://developers.google.com/safe-browsing ).''', ++ See more about Safe Browsing ( https://developers.9oo91e.qjz9zk/safe-browsing ).''', + 'arc_support': 'This policy is not supported within Arc.', }, { 'name': 'MachineLevelUserCloudPolicyEnrollmentToken', @@ -24603,7 +17318,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'supported_on': ['chrome.*:66-80'], -@@ -15917,7 +15917,7 @@ +@@ -18268,7 +18268,7 @@ }, { 'name': 'CloudManagementEnrollmentToken', @@ -24611,8 +17326,13 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['zmin@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk', 'rogerta@ch40m1um.qjz9zk'], 'type': 'string', 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:72-'], -@@ -15936,7 +15936,7 @@ + 'supported_on': [ +@@ -18286,11 +18286,11 @@ + 'tags': [], + 'desc': '''Setting the policy means $1Google Chrome tries to register itself with Chrome Browser Cloud Management. The value of this policy is an enrollment token you can retrieve from the Google Admin console. + +- See https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 for details.''', ++ See https://support.9oo91e.qjz9zk/chrome/a/answer/9301891?ref_topic=9301744 for details.''', }, { 'name': 'CloudManagementEnrollmentMandatory', @@ -24621,7 +17341,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:72-'], -@@ -15957,7 +15957,7 @@ +@@ -18307,11 +18307,11 @@ + + Setting the policy to Disabled or leaving it unset renders Chrome Browser Cloud Management optional and doesn't block $1Google Chrome launch process if failed. + +- Machine scope cloud policy enrollment on desktop uses this policy. See https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 for details.''', ++ Machine scope cloud policy enrollment on desktop uses this policy. See https://support.9oo91e.qjz9zk/chrome/a/answer/9301891?ref_topic=9301744 for details.''', }, { 'name': 'AutoplayAllowed', @@ -24630,7 +17355,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:66-', 'chrome.linux:66-', 'chrome.mac:66-', 'chrome_os:66-'], -@@ -15980,7 +15980,7 @@ +@@ -18331,7 +18331,7 @@ }, { 'name': 'AutoplayWhitelist', @@ -24639,9 +17364,23 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16005,11 +16005,11 @@ +@@ -18351,11 +18351,11 @@ - Note that if $1Google Chrome is running and this policy changes, it will be applied only to new opened tabs. Therefore some tabs might still observe the previous behavior. + Setting the policy lets videos play automatically (without user consent) with audio content in $1Google Chrome. If AutoplayAllowed policy is set to True, then this policy has no effect. If AutoplayAllowed is set to False, then any URL patterns set in this policy can still play. If this policy changes while $1Google Chrome is running, it only applies to newly opened tabs. + +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', + }, + { + 'name': 'AutoplayAllowlist', +- 'owners': ['fbeaufort@chromium.org', 'beccahughes@chromium.org'], ++ 'owners': ['fbeaufort@ch40m1um.qjz9zk', 'beccahughes@ch40m1um.qjz9zk'], + 'type': 'list', + 'schema': { + 'type': 'array', +@@ -18372,11 +18372,11 @@ + 'tags': [], + 'desc': '''Setting the policy lets videos play automatically (without user consent) with audio content in $1Google Chrome. If AutoplayAllowed policy is set to True, then this policy has no effect. If AutoplayAllowed is set to False, then any URL patterns set in this policy can still play. If this policy changes while $1Google Chrome is running, it only applies to newly opened tabs. - For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', + For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', @@ -24653,7 +17392,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:67-67', 'chrome_os:67-67'], -@@ -16024,13 +16024,13 @@ +@@ -18391,13 +18391,13 @@ 'tags': [], 'desc': '''Deprecated in M68. Use DefaultPopupsSetting instead. @@ -24669,7 +17408,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:67-'], -@@ -16090,7 +16090,7 @@ +@@ -18421,7 +18421,7 @@ + }, + { + 'name': 'UserPrintersAllowed', +- 'owners': ['valleau@chromium.org', 'skau@chromium.org'], ++ 'owners': ['valleau@ch40m1um.qjz9zk', 'skau@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-'], +@@ -18479,7 +18479,7 @@ }, { 'name': 'ChromeCleanupEnabled', @@ -24678,7 +17426,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:68-'], -@@ -16110,7 +16110,7 @@ +@@ -18499,7 +18499,7 @@ }, { 'name': 'ChromeCleanupReportingEnabled', @@ -24687,16 +17435,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:68-'], -@@ -16132,7 +16132,7 @@ +@@ -18521,7 +18521,7 @@ }, { 'name': 'AllowedLanguages', -- 'owners': ['hendrich@chromium.org', 'voit@chromium.org'], -+ 'owners': ['hendrich@ch40m1um.qjz9zk', 'voit@ch40m1um.qjz9zk'], +- 'owners': ['hendrich@chromium.org', 'file://components/policy/resources/OWNERS'], ++ 'owners': ['hendrich@ch40m1um.qjz9zk', 'file://components/policy/resources/OWNERS'], 'type': 'list', 'schema': { 'type': 'array', -@@ -16154,7 +16154,7 @@ +@@ -18545,7 +18545,7 @@ }, { 'name': 'AllowedInputMethods', @@ -24705,7 +17453,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16196,7 +16196,7 @@ +@@ -18604,7 +18604,7 @@ }, { 'name': 'UsageTimeLimit', @@ -24714,7 +17462,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -16459,7 +16459,7 @@ +@@ -18857,7 +18857,7 @@ }, { 'name': 'EnableSyncConsent', @@ -24723,7 +17471,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean'}, 'supported_on': ['chrome_os:66-'], -@@ -16583,7 +16583,7 @@ +@@ -18983,7 +18983,7 @@ { 'id': 454, 'name': 'PromotionalTabsEnabled', @@ -24732,7 +17480,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'tags': [], 'features': { 'dynamic_refresh': True, -@@ -16604,7 +16604,7 @@ +@@ -19002,7 +19002,7 @@ }, { 'name': 'SafeSitesFilterBehavior', @@ -24741,7 +17489,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -16641,7 +16641,7 @@ +@@ -19040,7 +19040,7 @@ }, { 'name': 'OverrideSecurityRestrictionsOnInsecureOrigin', @@ -24750,7 +17498,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16727,7 +16727,7 @@ +@@ -19109,7 +19109,7 @@ }, { 'name': 'TabFreezingEnabled', @@ -24758,8 +17506,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['catan-team@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], -@@ -16741,7 +16741,7 @@ + 'supported_on': ['chrome.*:79-79', 'chrome_os:79-79'], +@@ -19124,7 +19124,7 @@ 'tags': [], 'desc': '''Controls whether $1Google Chrome can freeze tabs that have been in the background for at least 5 minutes. @@ -24768,7 +17516,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If the policy is set to false, no tabs will be frozen.''', }, -@@ -16772,7 +16772,7 @@ +@@ -19151,7 +19151,7 @@ { 'id': 462, 'name': 'NetworkFileSharesAllowed', @@ -24777,7 +17525,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -16791,7 +16791,7 @@ +@@ -19166,7 +19166,7 @@ }, { 'name': 'WebRtcEventLogCollectionAllowed', @@ -24786,7 +17534,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:70-', 'chrome_os:70-'], -@@ -16812,7 +16812,7 @@ +@@ -19186,7 +19186,7 @@ }, { 'name': 'PowerSmartDimEnabled', @@ -24795,7 +17543,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:70-'], -@@ -16831,7 +16831,7 @@ +@@ -19204,7 +19204,7 @@ }, { 'name': 'CoalesceH2ConnectionsWithClientCertificatesForHosts', @@ -24804,7 +17552,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -16856,7 +16856,7 @@ +@@ -19229,7 +19229,7 @@ { 'id': 467, 'name': 'NetBiosShareDiscoveryEnabled', @@ -24813,7 +17561,23 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -16901,11 +16901,11 @@ +@@ -19267,12 +19267,12 @@ + 'per_profile': True, + }, + 'example_value': [{ +- 'origin': 'https://www.google.com', +- 'managed_configuration_url' : 'https://gstatic.google.com/configuration.json', ++ 'origin': 'https://www.9oo91e.qjz9zk', ++ 'managed_configuration_url' : 'https://gstatic.9oo91e.qjz9zk/configuration.json', + 'managed_configuration_hash' : 'asd891jedasd12ue9h' + }, { + 'origin': 'https://www.example.com', +- 'managed_configuration_url' : 'https://gstatic.google.com/configuration2.json', ++ 'managed_configuration_url' : 'https://gstatic.9oo91e.qjz9zk/configuration2.json', + 'managed_configuration_hash' : 'djio12easd89u12aws' + }], + 'id': 813, +@@ -19311,11 +19311,11 @@ 'per_profile': True, }, 'example_value': [{ @@ -24827,7 +17591,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'default_launch_container': 'tab' }], 'id': 468, -@@ -16919,7 +16919,7 @@ +@@ -19331,7 +19331,7 @@ { 'id': 470, 'name': 'ReportVersionData', @@ -24836,7 +17600,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -16941,7 +16941,7 @@ +@@ -19356,7 +19356,7 @@ { 'id': 471, 'name': 'ReportPolicyData', @@ -24845,7 +17609,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -16963,7 +16963,7 @@ +@@ -19381,7 +19381,7 @@ { 'id': 472, 'name': 'ReportMachineIDData', @@ -24854,7 +17618,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -16985,7 +16985,7 @@ +@@ -19405,7 +19405,7 @@ { 'id': 473, 'name': 'ReportUserIDData', @@ -24863,7 +17627,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -17007,7 +17007,7 @@ +@@ -19430,7 +19430,7 @@ { 'id': 499, 'name': 'ReportExtensionsAndPluginsData', @@ -24872,7 +17636,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -17029,7 +17029,7 @@ +@@ -19455,7 +19455,7 @@ { 'id': 500, 'name': 'ReportSafeBrowsingData', @@ -24881,7 +17645,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing'], -@@ -17051,7 +17051,7 @@ +@@ -19481,7 +19481,7 @@ { 'id': 608, 'name': 'CloudExtensionRequestEnabled', @@ -24890,7 +17654,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing', 'google-sharing'], -@@ -17076,7 +17076,7 @@ +@@ -19507,7 +19507,7 @@ { 'id': 493, 'name': 'CloudReportingEnabled', @@ -24899,7 +17663,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean' }, 'tags': ['admin-sharing', 'google-sharing'], -@@ -17099,7 +17099,7 @@ +@@ -19533,7 +19533,7 @@ }, { 'name': 'EnterpriseHardwarePlatformAPIEnabled', @@ -24908,7 +17672,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:71-', 'chrome_os:71-', 'android:71-'], -@@ -17117,7 +17117,7 @@ +@@ -19553,7 +19553,7 @@ }, { 'name': 'VpnConfigAllowed', @@ -24917,7 +17681,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:71-'], -@@ -17142,7 +17142,7 @@ +@@ -19572,7 +19572,7 @@ { 'id': 489, 'name': 'NTLMShareAuthenticationEnabled', @@ -24926,7 +17690,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': {'type': 'boolean', }, 'tags': [], -@@ -17163,7 +17163,7 @@ +@@ -19590,7 +19590,7 @@ }, { 'name': 'NetworkFileSharesPreconfiguredShares', @@ -24935,7 +17699,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'array', -@@ -17241,7 +17241,7 @@ +@@ -19675,7 +19675,7 @@ { 'id': 494, 'name': 'AlternativeBrowserPath', @@ -24944,7 +17708,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': {'type': 'string'}, 'features': { -@@ -17267,7 +17267,7 @@ +@@ -19693,7 +19693,7 @@ { 'id': 495, 'name': 'AlternativeBrowserParameters', @@ -24953,7 +17717,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17302,7 +17302,7 @@ +@@ -19724,7 +19724,7 @@ { 'id': 530, 'name': 'BrowserSwitcherChromePath', @@ -24962,7 +17726,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': {'type': 'string'}, 'features': { -@@ -17326,7 +17326,7 @@ +@@ -19744,7 +19744,7 @@ { 'id': 531, 'name': 'BrowserSwitcherChromeParameters', @@ -24971,7 +17735,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17359,7 +17359,7 @@ +@@ -19771,7 +19771,7 @@ { 'id': 496, 'name': 'BrowserSwitcherUrlList', @@ -24980,7 +17744,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17392,7 +17392,7 @@ +@@ -19798,7 +19798,7 @@ { 'id': 497, 'name': 'BrowserSwitcherUrlGreylist', @@ -24989,7 +17753,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -17423,7 +17423,7 @@ +@@ -19825,7 +19825,7 @@ { 'id': 498, 'name': 'BrowserSwitcherUseIeSitelist', @@ -24998,9 +17762,9 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -17440,12 +17440,12 @@ +@@ -19842,12 +19842,12 @@ - When this policy is set to true, $1Google Chrome reads Internet Explorer's SiteList to obtain the site list's URL. $1Google Chrome then downloads the site list from that URL, and applies the rules as if they had been configured with the BrowserSwitcherUrlList policy. + When this policy is false or unset, $1Google Chrome does not use Internet Explorer®'s SiteList policy as a source of rules for switching browsers. - For more information on Internet Explorer's SiteList policy: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', + For more information on Internet Explorer's SiteList policy: https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', @@ -25013,12 +17777,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'example_value': 'http://example.com/sitelist.xml', -@@ -17462,12 +17462,12 @@ +@@ -19862,12 +19862,12 @@ - When this policy is set to a valid URL, $1Google Chrome downloads the site list from that URL, and applies the rules as if they had been configured with the BrowserSwitcherUrlList policy. + Leaving it unset (or set to a invalid URL) means $1Google Chrome doesn't use the policy as a source of rules for switching browsers. -- For more information on Internet Explorer's SiteList policy: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', -+ For more information on Internet Explorer's SiteList policy: https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', +- Note: This policy points to an XML file in the same format as Internet Explorer®'s SiteList policy. This loads rules from an XML file, without sharing those rules with Internet Explorer®. Read more on Internet Explorer®'s SiteList policy ( https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode)''', ++ Note: This policy points to an XML file in the same format as Internet Explorer®'s SiteList policy. This loads rules from an XML file, without sharing those rules with Internet Explorer®. Read more on Internet Explorer®'s SiteList policy ( https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode)''', }, { 'id': 564, @@ -25028,12 +17792,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string' }, 'example_value': 'http://example.com/greylist.xml', -@@ -17486,12 +17486,12 @@ +@@ -19882,12 +19882,12 @@ - When this policy is set to a valid URL, $1Google Chrome downloads the site list from that URL, and applies the rules as if they had been configured with the BrowserSwitcherUrlGreylist policy. + Leaving it unset (or set to a invalid URL) means $1Google Chrome doesn't use the policy as a source of rules for not switching browsers. -- For more information on Internet Explorer's SiteList policy: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', -+ For more information on Internet Explorer's SiteList policy: https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode''', +- Note: This policy points to an XML file in the same format as Internet Explorer®'s SiteList policy. This loads rules from an XML file, without sharing those rules with Internet Explorer®. Read more on Internet Explorer®'s SiteList policy ( https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode )''', ++ Note: This policy points to an XML file in the same format as Internet Explorer®'s SiteList policy. This loads rules from an XML file, without sharing those rules with Internet Explorer®. Read more on Internet Explorer®'s SiteList policy ( https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode )''', }, { 'id': 524, @@ -25043,7 +17807,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer' }, 'example_value': 10000, -@@ -17511,7 +17511,7 @@ +@@ -19905,7 +19905,7 @@ { 'id': 517, 'name': 'BrowserSwitcherEnabled', @@ -25052,7 +17816,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -17533,7 +17533,7 @@ +@@ -19923,7 +19923,7 @@ { 'id': 519, 'name': 'BrowserSwitcherKeepLastChromeTab', @@ -25061,16 +17825,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': False, -@@ -17552,7 +17552,7 @@ - }, - { - 'name': 'DeviceDisplayResolution', -- 'owners': ['voit@chromium.org'], -+ 'owners': ['voit@ch40m1um.qjz9zk'], - 'type': 'dict', - 'schema': { - 'type': 'object', -@@ -17609,7 +17609,7 @@ +@@ -19981,7 +19981,7 @@ }, { 'name': 'PluginVmAllowed', @@ -25079,7 +17834,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:72-'], -@@ -17627,7 +17627,7 @@ +@@ -19999,7 +19999,7 @@ + }, + { + 'name': 'UserPluginVmAllowed', +- 'owners': ['okalitova@chromium.org', 'janagrill@chromium.org'], ++ 'owners': ['okalitova@ch40m1um.qjz9zk', 'janagrill@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:84-'], +@@ -20019,7 +20019,7 @@ }, { 'name': 'PluginVmLicenseKey', @@ -25088,7 +17852,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'sensitiveValue': True, -@@ -17646,7 +17646,7 @@ +@@ -20038,7 +20038,7 @@ + }, + { + 'name': 'PluginVmUserId', +- 'owners': ['traciechan@google.com', 'zatrudo@google.com'], ++ 'owners': ['traciechan@9oo91e.qjz9zk', 'zatrudo@9oo91e.qjz9zk'], + 'type': 'string', + 'schema': { + 'sensitiveValue': True, +@@ -20057,7 +20057,7 @@ }, { 'name': 'PluginVmImage', @@ -25097,7 +17870,34 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -17871,7 +17871,7 @@ +@@ -20088,7 +20088,7 @@ + }, + { + 'name': 'PluginVmDataCollectionAllowed', +- 'owners': ['okalitova@chromium.org', 'janagrill@chromium.org'], ++ 'owners': ['okalitova@ch40m1um.qjz9zk', 'janagrill@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-'], +@@ -20107,7 +20107,7 @@ + }, + { + 'name': 'PluginVmRequiredFreeDiskSpace', +- 'owners': ['okalitova@chromium.org', 'janagrill@chromium.org'], ++ 'owners': ['okalitova@ch40m1um.qjz9zk', 'janagrill@ch40m1um.qjz9zk'], + 'type': 'int', + 'schema': { + 'type': 'integer', +@@ -20312,7 +20312,7 @@ + }, + { + 'name': 'AssistantOnboardingMode', +- 'owners': ['xiaohuic@chromium.org', 'croissant-eng@google.com'], ++ 'owners': ['xiaohuic@ch40m1um.qjz9zk', 'croissant-eng@9oo91e.qjz9zk'], + 'type': 'string-enum', + 'schema': { + 'type': 'string', +@@ -20352,7 +20352,7 @@ }, { 'name': 'VoiceInteractionContextEnabled', @@ -25106,7 +17906,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -17890,7 +17890,7 @@ +@@ -20370,7 +20370,7 @@ }, { 'name': 'VoiceInteractionHotwordEnabled', @@ -25115,7 +17915,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -17911,7 +17911,7 @@ +@@ -20388,7 +20388,7 @@ + }, + { + 'name': 'VoiceInteractionQuickAnswersEnabled', +- 'owners': ['llin@google.com'], ++ 'owners': ['llin@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:84-88'], +@@ -20411,7 +20411,7 @@ }, { 'name': 'DeviceWilcoDtcAllowed', @@ -25124,7 +17933,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:74-'], -@@ -17931,7 +17931,7 @@ +@@ -20430,7 +20430,7 @@ }, { 'name': 'AllowPopupsDuringPageUnload', @@ -25132,13 +17941,13 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['avi@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:74-', 'chrome_os:74-', 'android:74-'], -@@ -17952,11 +17952,11 @@ + 'deprecated': True, +@@ -20450,11 +20450,11 @@ - This policy will be removed in Chrome 88. + This policy was removed in Chrome 88 and is ignored if set. -- See https://www.chromestatus.com/feature/5989473649164288 .''', -+ See https://www.ch40mestatus.qjz9zk/feature/5989473649164288 .''', +- See https://www.chromestatus.com/feature/5989473649164288.''', ++ See https://www.ch40mestatus.qjz9zk/feature/5989473649164288.''', }, { 'name': 'DeviceWilcoDtcConfiguration', @@ -25147,7 +17956,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'external', 'schema': { 'type': 'object', -@@ -17989,7 +17989,7 @@ +@@ -20483,7 +20483,7 @@ }, { 'name': 'DevicePowerPeakShiftEnabled', @@ -25156,7 +17965,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -18016,7 +18016,7 @@ +@@ -20504,7 +20504,7 @@ }, { 'name': 'DevicePowerPeakShiftBatteryThreshold', @@ -25165,7 +17974,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -18041,7 +18041,7 @@ +@@ -20527,7 +20527,7 @@ }, { 'name': 'DevicePowerPeakShiftDayConfig', @@ -25174,7 +17983,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -18113,7 +18113,7 @@ +@@ -20606,7 +20606,7 @@ }, { 'name': 'DeviceBootOnAcEnabled', @@ -25183,7 +17992,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -18140,7 +18140,7 @@ +@@ -20627,7 +20627,7 @@ }, { 'name': 'DeviceUsbPowerShareEnabled', @@ -25192,7 +18001,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -18187,7 +18187,7 @@ +@@ -20681,7 +20681,7 @@ }, { 'name': 'DeviceQuickFixBuildToken', @@ -25201,7 +18010,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'string', 'schema': { 'type': 'string', -@@ -18210,7 +18210,7 @@ +@@ -20704,7 +20704,7 @@ }, { 'name': 'SamlInSessionPasswordChangeEnabled', @@ -25210,7 +18019,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -18232,7 +18232,7 @@ +@@ -20741,7 +20741,7 @@ + }, + { + 'name': 'SamlLockScreenReauthenticationEnabled', +- 'owners': ['mslus@chromium.org', 'emaxx@chromium.org'], ++ 'owners': ['mslus@ch40m1um.qjz9zk', 'emaxx@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-'], +@@ -20760,7 +20760,7 @@ }, { 'name': 'UserFeedbackAllowed', @@ -25219,7 +18037,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -18253,7 +18253,7 @@ +@@ -20791,7 +20791,7 @@ }, { 'name': 'SamlPasswordExpirationAdvanceWarningDays', @@ -25228,7 +18046,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -18280,7 +18280,7 @@ +@@ -20818,7 +20818,7 @@ }, { 'name': 'DeviceAdvancedBatteryChargeModeEnabled', @@ -25237,7 +18055,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:75-'], -@@ -18307,7 +18307,7 @@ +@@ -20839,7 +20839,7 @@ }, { 'name': 'DeviceAdvancedBatteryChargeModeDayConfig', @@ -25246,7 +18064,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -18372,7 +18372,7 @@ +@@ -20906,7 +20906,7 @@ }, { 'name': 'DeviceBatteryChargeMode', @@ -25255,7 +18073,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -18429,7 +18429,7 @@ +@@ -20957,7 +20957,7 @@ }, { 'name': 'DeviceBatteryChargeCustomStartCharging', @@ -25264,7 +18082,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -18458,7 +18458,7 @@ +@@ -20980,7 +20980,7 @@ }, { 'name': 'DeviceBatteryChargeCustomStopCharging', @@ -25273,7 +18091,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -18487,7 +18487,7 @@ +@@ -21003,7 +21003,7 @@ }, { 'name': 'DeviceScheduledUpdateCheck', @@ -25282,7 +18100,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'dict', 'schema': { -@@ -18677,7 +18677,7 @@ +@@ -21189,7 +21189,7 @@ }, { 'name': 'CommandLineFlagSecurityWarningsEnabled', @@ -25291,7 +18109,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:76-'], -@@ -18697,7 +18697,7 @@ +@@ -21220,7 +21220,7 @@ }, { 'name': 'StartupBrowserWindowLaunchSuppressed', @@ -25300,7 +18118,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:76-'], -@@ -18785,7 +18785,7 @@ +@@ -21306,7 +21306,7 @@ + }, + { + 'name': 'DeviceExternalPrintServers', +- 'owners': ['mattme@google.com', 'file://chromeos/printing/OWNERS'], ++ 'owners': ['mattme@9oo91e.qjz9zk', 'file://chromeos/printing/OWNERS'], + 'type': 'external', + 'schema': { + 'type': 'object', +@@ -21355,7 +21355,7 @@ }, { 'name': 'VmManagementCliAllowed', @@ -25309,100 +18136,52 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:77-'], -@@ -18872,7 +18872,7 @@ - 'id': 583, - 'name': 'SendFilesForMalwareCheck', - 'type': 'int-enum', -- 'owners': ['drubery@chromium.org', 'chrome-safebrowsing-team@chromium.org'], -+ 'owners': ['drubery@ch40m1um.qjz9zk', 'chrome-safebrowsing-team@ch40m1um.qjz9zk'], - 'schema': { - 'type': 'integer', - 'enum': [0, 2, 3, 4], -@@ -18920,7 +18920,7 @@ +@@ -21433,7 +21433,7 @@ }, { - 'name': 'UnsafeEventsReportingEnabled', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'main', - 'schema': { - 'type': 'boolean', -@@ -18942,7 +18942,7 @@ - }, - { - 'name': 'BlockLargeFileTransfer', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'int-enum', + 'name': 'OnFileDownloadedEnterpriseConnector', +- 'owners': ['drubery@chromium.org', 'rogerta@chromium.org', 'mad@chromium.org', 'domfc@chromium.org'], ++ 'owners': ['drubery@ch40m1um.qjz9zk', 'rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk', 'domfc@ch40m1um.qjz9zk'], + 'type': 'dict', 'schema': { - 'type': 'integer', -@@ -18993,7 +18993,7 @@ + 'type': 'array', +@@ -21568,7 +21568,7 @@ }, { - 'name': 'DelayDeliveryUntilVerdict', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'int-enum', + 'name': 'OnFileAttachedEnterpriseConnector', +- 'owners': ['rogerta@chromium.org', 'mad@chromium.org', 'domfc@chromium.org'], ++ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk', 'domfc@ch40m1um.qjz9zk'], + 'type': 'dict', 'schema': { - 'type': 'integer', -@@ -19044,7 +19044,7 @@ + 'type': 'array', +@@ -21703,7 +21703,7 @@ }, { - 'name': 'AllowPasswordProtectedFiles', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'int-enum', + 'name': 'OnBulkDataEntryEnterpriseConnector', +- 'owners': ['rogerta@chromium.org', 'mad@chromium.org', 'domfc@chromium.org'], ++ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk', 'domfc@ch40m1um.qjz9zk'], + 'type': 'dict', 'schema': { - 'type': 'integer', -@@ -19095,7 +19095,7 @@ + 'type': 'array', +@@ -21834,7 +21834,7 @@ }, { - 'name': 'BlockUnsupportedFiletypes', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'int-enum', + 'name': 'OnSecurityEventEnterpriseConnector', +- 'owners': ['rogerta@chromium.org', 'mad@chromium.org', 'domfc@chromium.org'], ++ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk', 'domfc@ch40m1um.qjz9zk'], + 'type': 'dict', 'schema': { - 'type': 'integer', -@@ -19146,7 +19146,7 @@ + 'type': 'array', +@@ -21871,7 +21871,7 @@ }, { - 'name': 'CheckContentCompliance', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], + 'name': 'EnterpriseRealTimeUrlCheckMode', +- 'owners': ['xinghuilu@chromium.org', 'file://components/safe_browsing/OWNERS'], ++ 'owners': ['xinghuilu@ch40m1um.qjz9zk', 'file://components/safe_browsing/OWNERS'], 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -19197,7 +19197,7 @@ - }, - { - 'name': 'URLsToCheckComplianceOfDownloadedContent', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -19217,12 +19217,12 @@ - - If this policy is not set or set to an empty list of url patterns, no downloaded content is checked for sensitive data protection rule violations. - -- The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.chromium.org/administrators/url-blacklist-filter-format. -+ The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. - ''' - }, - { - 'name': 'URLsToNotCheckComplianceOfUploadedContent', -- 'owners': ['rogerta@chromium.org', 'mad@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'mad@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -19242,12 +19242,12 @@ - - If this policy is not set or set to an empty list of url patterns, all content is checked for sensitive data protection rule violations. - -- The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.chromium.org/administrators/url-blacklist-filter-format. -+ The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. - ''' +@@ -21913,7 +21913,7 @@ }, { 'name': 'RendererCodeIntegrityEnabled', @@ -25411,44 +18190,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.win:78-'], -@@ -19261,12 +19261,12 @@ - 'tags': ['system-security'], - 'desc': '''If this policy is enabled or left unset, then Renderer Code Integrity is enabled. This should only be disabled if compatibility issues are encountered with third party software that must run inside Chrome's renderer processes. - -- Disabling this policy has a detrimental effect on Chrome's security and stability as unknown and potentially hostile code will be allowed to load inside Chrome's renderer processes. See https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies for more info.''', -+ Disabling this policy has a detrimental effect on Chrome's security and stability as unknown and potentially hostile code will be allowed to load inside Chrome's renderer processes. See https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies for more info.''', - }, - { - # TODO(rogerta): Use a custom policy handler to show in chrome://policy that this policy depends on the state of SendFilesForMalwareCheck. - 'name': 'URLsToCheckForMalwareOfUploadedContent', -- 'owners': ['rogerta@chromium.org', 'drubery@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'drubery@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -19286,13 +19286,13 @@ - - If this policy is not set or set to an empty list of url patterns, no uploaded content is checked for malware. +@@ -21929,11 +21929,11 @@ -- The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.chromium.org/administrators/url-blacklist-filter-format. -+ The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. - ''' - }, - { - # TODO(rogerta): Use a custom policy handler to show in chrome://policy that this policy depends on the state of SendFilesForMalwareCheck. - 'name': 'URLsToNotCheckForMalwareOfDownloadedContent', -- 'owners': ['rogerta@chromium.org', 'drubery@chromium.org'], -+ 'owners': ['rogerta@ch40m1um.qjz9zk', 'drubery@ch40m1um.qjz9zk'], - 'type': 'list', - 'schema': { - 'type': 'array', -@@ -19312,12 +19312,12 @@ - - If this policy is not set or set to an empty list of url patterns, all downloaded content is checked for malware. + Setting the policy to Disabled has a detrimental effect on $1Google Chrome's security and stability as unknown and potentially hostile code can load inside $1Google Chrome's renderer processes. Only turn off the policy if there are compatibility issues with third-party software that must run inside $1Google Chrome's renderer processes. -- The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.chromium.org/administrators/url-blacklist-filter-format. -+ The URL patterns have the same format as the 'URLBlacklist' policy, which is documented at https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format. - ''' +- Note: Read more about Process mitigation policies ( https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies ).''', ++ Note: Read more about Process mitigation policies ( https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/design/sandbox.md#Process-mitigation-policies ).''', }, { 'name': 'HSTSPolicyBypassList', @@ -25457,7 +18204,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19339,7 +19339,7 @@ +@@ -21955,7 +21955,7 @@ }, { 'name': 'AllowSyncXHRInPageDismissal', @@ -25466,7 +18213,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:78-', 'chrome_os:78-', 'android:78-'], -@@ -19360,11 +19360,11 @@ +@@ -21976,11 +21976,11 @@ This policy will be removed in Chrome 88. @@ -25480,7 +18227,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int', 'schema': { 'type': 'integer', -@@ -19436,7 +19436,7 @@ +@@ -22052,7 +22052,7 @@ }, { 'name': 'CorsMitigationList', @@ -25489,7 +18236,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19454,19 +19454,19 @@ +@@ -22070,19 +22070,19 @@ 'tags': [], 'desc': '''Enable CORS check mitigations in the new CORS implementation, allowing Extensions to keep compatible behavior, and allowing $1Google Chrome to send specified headers without CORS checks. @@ -25503,7 +18250,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli - For details on CORS, visit: https://www.chromestatus.com/feature/5768642492891136. + For details on CORS, visit: https://www.ch40mestatus.qjz9zk/feature/5768642492891136. - Note that this policy will be removed in $1Google Chrome version 82.''' + Note that this policy was announced to be removed in $1Google Chrome version 82, but removed in version 84.''' }, { 'name': 'CorsLegacyModeEnabled', @@ -25511,17 +18258,26 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['toyoshim@ch40m1um.qjz9zk', 'yhirano@ch40m1um.qjz9zk', 'kinuko@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], -@@ -19487,7 +19487,7 @@ + 'supported_on': ['chrome.*:79-83', 'chrome_os:79-83'], +@@ -22103,7 +22103,7 @@ This policy will be removed after a couple of milestones. - For details on CORS, visit: https://www.chromestatus.com/feature/5768642492891136. + For details on CORS, visit: https://www.ch40mestatus.qjz9zk/feature/5768642492891136. - Note that this policy will be removed in $1Google Chrome version 82.''' + Note that this policy was announced to be removed in $1Google Chrome version 82, but removed in version 84.''' }, -@@ -19518,7 +19518,7 @@ +@@ -22162,7 +22162,7 @@ + }, + { + 'name': 'DeviceExternalPrintServersAllowlist', +- 'owners': ['mattme@google.com', 'file://chromeos/printing/OWNERS'], ++ 'owners': ['mattme@9oo91e.qjz9zk', 'file://chromeos/printing/OWNERS'], + 'future_on': ['chrome_os'], + # TODO(https://crbug.com/1100777): Remove |future|. + 'id': 731, +@@ -22189,7 +22189,7 @@ }, { 'name': 'ExternalProtocolDialogShowAlwaysOpenCheckbox', @@ -25530,7 +18286,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean', -@@ -19540,7 +19540,7 @@ +@@ -22222,7 +22222,7 @@ }, { 'name': 'DefaultInsecureContentSetting', @@ -25539,7 +18295,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -19575,7 +19575,7 @@ +@@ -22257,7 +22257,7 @@ }, { 'name': 'InsecureContentAllowedForUrls', @@ -25548,12 +18304,12 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19594,11 +19594,11 @@ +@@ -22276,11 +22276,11 @@ If this policy is left not set blockable mixed content will be blocked and optionally blockable mixed content will be upgraded, and users will be allowed to set exceptions to allow it for specific sites. -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { 'name': 'InsecureContentBlockedForUrls', @@ -25562,21 +18318,21 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'list', 'schema': { 'type': 'array', -@@ -19617,11 +19617,11 @@ +@@ -22299,11 +22299,11 @@ If this policy is left not set blockable mixed content will be blocked and optionally blockable mixed content will be upgraded, but users will be allowed to set exceptions to allow it for specific sites. -- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.''', -+ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns.''', +- For detailed information on valid url patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', ++ For detailed information on valid url patterns, please see https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/url-patterns. * is not an accepted value for this policy.''', }, { 'name': 'DeviceWebBasedAttestationAllowedUrls', -- 'owners': ['miersh@google.com', 'pmarko@chromium.com', 'file://chrome/browser/chromeos/login/OWNERS'], -+ 'owners': ['miersh@9oo91e.qjz9zk', 'pmarko@chromium.com', 'file://chrome/browser/chromeos/login/OWNERS'], +- 'owners': ['miersh@google.com', 'pmarko@chromium.org', 'file://chrome/browser/chromeos/login/OWNERS'], ++ 'owners': ['miersh@9oo91e.qjz9zk', 'pmarko@ch40m1um.qjz9zk', 'file://chrome/browser/chromeos/login/OWNERS'], 'device_only': True, 'type': 'list', 'schema': { -@@ -19645,11 +19645,11 @@ +@@ -22327,11 +22327,11 @@ URLs must have HTTPS scheme, e.g. "https://example.com". @@ -25590,7 +18346,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type' : 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome_os:80-'], -@@ -19667,7 +19667,7 @@ +@@ -22349,7 +22349,7 @@ }, { 'name': 'PerAppTimeLimits', @@ -25599,7 +18355,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'dict', 'schema': { 'type': 'object', -@@ -19794,7 +19794,7 @@ +@@ -22476,7 +22476,7 @@ }, { 'name': 'WebComponentsV0Enabled', @@ -25608,7 +18364,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -19816,7 +19816,7 @@ +@@ -22499,7 +22499,7 @@ }, { 'name': 'UseLegacyFormControls', @@ -25617,7 +18373,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'example_value': True, -@@ -19838,7 +19838,7 @@ +@@ -22522,7 +22522,7 @@ }, { 'name': 'ClickToCallEnabled', @@ -25626,7 +18382,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], -@@ -19850,7 +19850,7 @@ +@@ -22534,7 +22534,7 @@ 'id': 645, 'caption': '''Enable the Click to Call Feature''', 'tags': [], @@ -25635,7 +18391,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli If this policy is set to enabled, the capability of sending phone numbers to Android devices will be enabled for the Chrome user. -@@ -19862,7 +19862,7 @@ +@@ -22546,7 +22546,7 @@ }, { 'name': 'UserDataSnapshotRetentionLimit', @@ -25643,8 +18399,26 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['ydago@ch40m1um.qjz9zk', 'grt@ch40m1um.qjz9zk'], 'type': 'int', 'schema': { 'type': 'integer', 'minimum': 0 }, - 'supported_on': ['chrome.*:82-'], -@@ -19947,7 +19947,7 @@ + 'supported_on': ['chrome.*:83-'], +@@ -22632,7 +22632,7 @@ + }, + { + 'name': 'PrintRasterizationMode', +- 'owners': ['thestig@chromium.org', 'file://printing/OWNERS'], ++ 'owners': ['thestig@ch40m1um.qjz9zk', 'file://printing/OWNERS'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -22672,7 +22672,7 @@ + }, + { + 'name': 'DeletePrintJobHistoryAllowed', +- 'owners': ['jimmyxgong@chromium.org', 'file://printing/OWNERS'], ++ 'owners': ['jimmyxgong@ch40m1um.qjz9zk', 'file://printing/OWNERS'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-'], +@@ -22695,7 +22695,7 @@ }, { 'name': 'AmbientAuthenticationInPrivateModesEnabled', @@ -25653,7 +18427,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'int-enum', 'schema': { 'type': 'integer', -@@ -20022,7 +20022,7 @@ +@@ -22770,7 +22770,7 @@ }, { 'name': 'StricterMixedContentTreatmentEnabled', @@ -25662,7 +18436,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:80-', 'chrome_os:80-'], -@@ -20042,7 +20042,7 @@ +@@ -22792,7 +22792,7 @@ }, { 'name': 'PerAppTimeLimitsWhitelist', @@ -25671,7 +18445,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'id': 658, 'features': { 'dynamic_refresh': True, -@@ -20085,8 +20085,8 @@ +@@ -22836,8 +22836,8 @@ 'url_list': [ "chrome://*", "file://*", @@ -25682,7 +18456,27 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli ], 'app_list': [ { -@@ -20129,7 +20129,7 @@ +@@ -22866,7 +22866,7 @@ + }, + { + 'name': 'PerAppTimeLimitsAllowlist', +- 'owners': ['yilkal@chromium.org', 'cros-families-eng@google.com'], ++ 'owners': ['yilkal@ch40m1um.qjz9zk', 'cros-families-eng@9oo91e.qjz9zk'], + 'id': 762, + 'features': { + 'dynamic_refresh': True, +@@ -22909,8 +22909,8 @@ + 'url_list': [ + "chrome://*", + "file://*", +- "https://www.support.google.com", +- "https://www.policies.google.com" ++ "https://www.support.9oo91e.qjz9zk", ++ "https://www.policies.9oo91e.qjz9zk" + ], + 'app_list': [ + { +@@ -22967,7 +22967,7 @@ }, { 'name': 'ScreenCaptureAllowed', @@ -25691,16 +18485,16 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'type': 'main', 'schema': { 'type': 'boolean' }, 'supported_on': ['chrome.*:81-', 'chrome_os:81-'], -@@ -20169,7 +20169,7 @@ +@@ -23008,7 +23008,7 @@ }, { 'name': 'SystemProxySettings', - 'owners': ['acostinas@google.com', 'pmarko@chromium.org'], + 'owners': ['acostinas@9oo91e.qjz9zk', 'pmarko@ch40m1um.qjz9zk'], - 'supported_on': ['chrome_os:81-'], - 'future': True, + 'supported_on': ['chrome_os:87-'], 'device_only': True, -@@ -20209,7 +20209,7 @@ + 'id': 672, +@@ -23064,7 +23064,7 @@ }, { 'name': 'DeviceLoginScreenPrivacyScreenEnabled', @@ -25709,7 +18503,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli 'device_only': True, 'type': 'main', 'schema': { 'type': 'boolean' }, -@@ -20236,7 +20236,7 @@ If this policy is left unset, the privacy screen is disabled initially, but rema +@@ -23092,7 +23092,7 @@ If this policy is left unset, the privacy screen is disabled initially, but rema }, { 'name': 'PrivacyScreenEnabled', @@ -25717,8 +18511,8 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['lamzin@9oo91e.qjz9zk', 'gildekel@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome_os:82-'], -@@ -20394,7 +20394,7 @@ If set to False, $1Google Chrome will not + 'supported_on': ['chrome_os:83-'], +@@ -23261,7 +23261,7 @@ If set to False, $1Google Chrome will not }, { 'name': 'ScrollToTextFragmentEnabled', @@ -25726,8 +18520,231 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['dlibby@m1cr050ft.qjz9zk', 'bokan@ch40m1um.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:82-', 'chrome_os:82-', 'android:82-'], -@@ -20502,7 +20502,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + 'supported_on': ['chrome.*:83-', 'chrome_os:83-', 'android:83-'], +@@ -23282,7 +23282,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'LoginDisplayPasswordButtonEnabled', +- 'owners': ['tellier@google.com', 'rsorokin@chromium.org', 'cros-oac@google.com'], ++ 'owners': ['tellier@9oo91e.qjz9zk', 'rsorokin@ch40m1um.qjz9zk', 'cros-oac@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-'], +@@ -23351,7 +23351,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'IntensiveWakeUpThrottlingEnabled', +- 'owners': ['file://components/performance_manager/OWNERS', 'chrisha@google.com'], ++ 'owners': ['file://components/performance_manager/OWNERS', 'chrisha@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-', 'chrome.*:85-', 'android:85-'], +@@ -23389,7 +23389,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'BackForwardCacheEnabled', +- 'owners': ['chrome-bfcache@google.com'], ++ 'owners': ['chrome-bfcache@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['android:86-'], +@@ -23424,7 +23424,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'PinUnlockAutosubmitEnabled', +- 'owners': ['rrsilva@google.com', 'cros-oac@google.com'], ++ 'owners': ['rrsilva@9oo91e.qjz9zk', 'cros-oac@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-'], +@@ -23450,7 +23450,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'EmojiSuggestionEnabled', +- 'owners': ['myy@chromium.org', 'essential-inputs-team@google.com'], ++ 'owners': ['myy@ch40m1um.qjz9zk', 'essential-inputs-team@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-'], +@@ -23469,7 +23469,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'UserAgentClientHintsEnabled', +- 'owners': ['file://components/client_hints/OWNERS', 'yoavweiss@google.com'], ++ 'owners': ['file://components/client_hints/OWNERS', 'yoavweiss@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:84-', 'chrome.*:84-', 'android:84-'], +@@ -23492,7 +23492,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'SuggestedContentEnabled', +- 'owners': ['wrong@chromium.org', 'chrome-knowledge-eng@google.com'], ++ 'owners': ['wrong@ch40m1um.qjz9zk', 'chrome-knowledge-eng@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:85-'], +@@ -23514,7 +23514,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'ShowFullUrlsInAddressBar', +- 'owners': ['livvielin@chromium.org', 'enamelites@google.com'], ++ 'owners': ['livvielin@ch40m1um.qjz9zk', 'enamelites@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:86-', 'chrome.*:86-'], +@@ -23537,7 +23537,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'InsecureFormsWarningsEnabled', +- 'owners': ['carlosil@chromium.org', 'estark@chromium.org'], ++ 'owners': ['carlosil@ch40m1um.qjz9zk', 'estark@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:86-', 'chrome_os:86-', 'android:86-'], +@@ -23582,7 +23582,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'CCTToSDialogEnabled', +- 'owners': ['skym@chromium.org', 'wenyufu@chromium.org', 'twellington@chromium.org'], ++ 'owners': ['skym@ch40m1um.qjz9zk', 'wenyufu@ch40m1um.qjz9zk', 'twellington@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['android:86-86'], +@@ -23612,7 +23612,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'TosDialogBehavior', +- 'owners': ['skym@chromium.org', 'wenyufu@chromium.org', 'twellington@chromium.org'], ++ 'owners': ['skym@ch40m1um.qjz9zk', 'wenyufu@ch40m1um.qjz9zk', 'twellington@ch40m1um.qjz9zk'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', +@@ -23799,18 +23799,18 @@ If you disable this policy, web page scrolling to specific text fragments via UR + 'sources': { + 'urls': [ + 'salesforce.com', +- 'gmail.com', +- 'docs.google.com', +- 'drive.google.com', ++ '9ma1l.qjz9zk', ++ 'docs.9oo91e.qjz9zk', ++ 'drive.9oo91e.qjz9zk', + 'company.com' + ] + }, + 'destinations': { + 'urls': [ + 'salesforce.com', +- 'gmail.com', +- 'docs.google.com', +- 'drive.google.com', ++ '9ma1l.qjz9zk', ++ 'docs.9oo91e.qjz9zk', ++ 'drive.9oo91e.qjz9zk', + 'company.com' + ] + }, +@@ -23843,8 +23843,8 @@ If you disable this policy, web page scrolling to specific text fragments via UR + 'sources': { + 'urls': [ + 'salesforce.com', +- 'gmail.com', +- 'docs.google.com', ++ '9ma1l.qjz9zk', ++ 'docs.9oo91e.qjz9zk', + 'company.com' + ] + }, +@@ -23889,13 +23889,13 @@ If you disable this policy, web page scrolling to specific text fragments via UR + Notes: + - PRIVACY_SCREEN restriction doesn't block the ability to turn on privacy screen, but enforces it when the restriction class is set to BLOCK. + - Destinations cannot be empty in case one of the restrictions is CLIPBOARD, but they don't make any difference for the remaining restrictions. +- - Format the URL patterns according to this format ( https://www.chromium.org/administrators/url-blacklist-filter-format ). ++ - Format the URL patterns according to this format ( https://www.ch40m1um.qjz9zk/administrators/url-blacklist-filter-format ). + + If the policy is left not set, no restrictions will be applied.''', + }, + { + 'name': 'WebRtcAllowLegacyTLSProtocols', +- 'owners': ['hta@chromium.org', 'guidou@chromium.org'], ++ 'owners': ['hta@ch40m1um.qjz9zk', 'guidou@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:87-', 'chrome_os:87-'], +@@ -23928,7 +23928,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'MediaRecommendationsEnabled', +- 'owners': ['beccahughes@chromium.org', 'steimel@chromium.org', 'mlamouri@chromium.org'], ++ 'owners': ['beccahughes@ch40m1um.qjz9zk', 'steimel@ch40m1um.qjz9zk', 'mlamouri@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:87-', 'chrome_os:87-'], +@@ -23955,7 +23955,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'DeviceFamilyLinkAccountsAllowed', +- 'owners': ['agawronska@chromium.org', 'cros-families-eng@google.com'], ++ 'owners': ['agawronska@ch40m1um.qjz9zk', 'cros-families-eng@9oo91e.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:87-'], +@@ -23979,7 +23979,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'EduCoexistenceToSVersion', +- 'owners': ['agawronska@chromium.org', 'danan@chromium.org', 'yilkal@chromium.org', 'cros-families-eng@google.com'], ++ 'owners': ['agawronska@ch40m1um.qjz9zk', 'danan@ch40m1um.qjz9zk', 'yilkal@ch40m1um.qjz9zk', 'cros-families-eng@9oo91e.qjz9zk'], + 'type': 'string', + 'schema': { + 'type': 'string', +@@ -24004,7 +24004,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'BrowsingDataLifetime', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], + 'type': 'dict', + 'schema': { + 'type': 'array', +@@ -24061,7 +24061,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'LacrosAllowed', +- 'owners': ['igorcov@chromium.org', 'okalitova@chromium.org'], ++ 'owners': ['igorcov@ch40m1um.qjz9zk', 'okalitova@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:88-'], +@@ -24093,7 +24093,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'IntegratedWebAuthenticationAllowed', +- 'owners': ['acostinas@chromium.org', 'pmarko@chromium.org'], ++ 'owners': ['acostinas@ch40m1um.qjz9zk', 'pmarko@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:89-'], +@@ -24124,7 +24124,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'ClearBrowsingDataOnExitList', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], + 'type': 'string-enum-list', + 'schema': { + 'type': 'array', +@@ -24260,7 +24260,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR + }, + { + 'name': 'SigninInterceptionEnabled', +- 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], ++ 'owners': ['ydago@ch40m1um.qjz9zk', 'pastarmovj@ch40m1um.qjz9zk'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:89-'], +@@ -24383,7 +24383,7 @@ If you disable this policy, web page scrolling to specific text fragments via UR }, 'doc_banner': { 'desc': '''A banner shown at the top of the policy documentation''', @@ -25736,7 +18753,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_intro': { 'desc': '''Introduction text for the generated policy documentation''', -@@ -20510,13 +20510,13 @@ If you disable this policy, web page scrolling to specific text fragments via UR +@@ -24391,13 +24391,13 @@ If you disable this policy, web page scrolling to specific text fragments via UR These policies are strictly intended to be used to configure instances of $1Google Chrome internal to your organization. Use of these policies outside of your organization (for example, in a publicly distributed program) is considered malware and will likely be labeled as malware by Google and anti-virus vendors. @@ -25752,7 +18769,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_policy_in_atomic_group': { 'desc': '''Label notifying that a policy is part of an atomic policy group''', -@@ -20572,11 +20572,11 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -24469,11 +24469,11 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'doc_complex_policies_on_windows': { 'desc': '''Text pointing the user to a help article for complex policies on Windows''', @@ -25766,7 +18783,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'doc_legacy_single_line_label': { 'desc': '''A label for the legacy single-line textbox for a policy also has a more user-friendly multi-line textbox. See http://crbug/829328''', -@@ -20596,7 +20596,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -24493,7 +24493,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'doc_schema_description_link': { 'desc': '''Text pointing the user to the expanded documentation page for this policy, containing the information about schema and formatting.''', @@ -25775,19 +18792,28 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli }, 'deprecated_policy_group_caption': { 'desc': '''Localized name for the deprecated policies folder, for Microsoft's Group Policy Editor.''', -@@ -20608,7 +20608,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio +@@ -24505,7 +24505,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, 'deprecated_policy_desc': { 'desc': '''Description shared by all deprecated policies, in Microsoft Windows' Group Policy Editor.''', - 'text': '''This policy is deprecated. Its usage is discouraged. Read more at https://support.google.com/chrome/a/answer/7643500''' + 'text': '''This policy is deprecated. Its usage is discouraged. Read more at https://support.9oo91e.qjz9zk/chrome/a/answer/7643500''' }, + 'removed_policy_group_caption': { + 'desc': '''Localized name for the removed policies folder, for Microsoft's Group Policy Editor.''', +@@ -24517,7 +24517,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio + }, + 'removed_policy_desc': { + 'desc': '''Description shared by all removed policies, in Microsoft Windows' Group Policy Editor.''', +- 'text': '''This policy is removed. It is not compatible with this version of $1Google Chrome. Read more at https://support.google.com/chrome/a/answer/7643500''' ++ 'text': '''This policy is removed. It is not compatible with this version of $1Google Chrome. Read more at https://support.9oo91e.qjz9zk/chrome/a/answer/7643500''' + }, }, # Legacy device policies that don't have a 1:1 mapping between template and diff --git a/components/policy/resources/webui/policy_base.js b/components/policy/resources/webui/policy_base.js --- a/components/policy/resources/webui/policy_base.js +++ b/components/policy/resources/webui/policy_base.js -@@ -517,7 +517,7 @@ cr.define('policy', function() { +@@ -568,7 +568,7 @@ cr.define('policy', function() { name, link: knownPolicyNames === policyNames.chrome.policyNames && knownPolicyNamesSet.has(name) ? @@ -25817,7 +18843,7 @@ diff --git a/components/policy/test_support/policy_testserver.py b/components/po }, "recommended" : { } -@@ -142,14 +142,14 @@ SIGNING_KEYS = [ +@@ -153,14 +153,14 @@ SIGNING_KEYS = [ '/BdmZG+Ge4i4FTqYtInir5YFe611KXU/AveGhQGBIAXo4qYg1IqbVrvKBSU9dlI6Sl' '9TJJLbJ3LGaXuljgFhyMAl3gcy7ftC9MohEmwa+sc7y2mOAgYQ5SSmyAtQwQgAkX9J' '3+tfxjmoA/dg==', @@ -25834,7 +18860,7 @@ diff --git a/components/policy/test_support/policy_testserver.py b/components/po 'T0wXC5w3GXyovA09pyOLX7ui/NI603UfbZXYyTbHI7xtzCIaHVPH35Nx4zdqVrdsej' 'ErQ12yVLDDIJokY4Yl+/fj/zrkAPxThI+TNQ+jo0i+al05PuopfpzvCzIXiZBbkbyW' '3XfedxXP3IPN2XU2/3vX+ZXUNG6pxeETem64kGezkjkUraqnHw3JVzwJYHhpMcwdLP' -@@ -176,14 +176,14 @@ SIGNING_KEYS = [ +@@ -187,14 +187,14 @@ SIGNING_KEYS = [ '5LG+BODExrXXcGu/ubDlW4ivJFqfNUPQysqBXSMY2XCHPJDx3eECLGVVN/fFAWWgjM' 'HFObAriAt0b18cc9Nr0mAt4Qq1oDzWcAHCPHE+5dr8Uf46BUrMLJRNRKCY7rrsoIin' '9Be9gs3W+Aww==', @@ -25851,7 +18877,7 @@ diff --git a/components/policy/test_support/policy_testserver.py b/components/po 'o5MVSo4bRwIJ/aooGyXpRXsEsWPG8fNA2UTG8hgwnLYhNeJCCnLs/vW2vdp0URE8jn' 'qiG4N8KjbuiGw0rJtO1EygdLfpnMEtqYlFjrOie38sy92l/AwohXj6luYzMWL+FqDu' 'WQeXasjgyY4s9BOLQVDEnEj3pvqhrk/mXvMwUeXGpbxTNbWAd0C8BTZrGOwU/kIXxo' -@@ -1156,7 +1156,7 @@ class PolicyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): +@@ -1215,7 +1215,7 @@ class PolicyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): policy_data.settings_entity_id = msg.settings_entity_id policy_data.service_account_identity = policy.get( 'service_account_identity', @@ -25875,7 +18901,7 @@ diff --git a/components/policy/tools/generate_extension_admx.py b/components/pol diff --git a/components/policy/tools/syntax_check_policy_template_json.py b/components/policy/tools/syntax_check_policy_template_json.py --- a/components/policy/tools/syntax_check_policy_template_json.py +++ b/components/policy/tools/syntax_check_policy_template_json.py -@@ -440,7 +440,7 @@ class PolicyTemplateChecker(object): +@@ -763,7 +763,7 @@ class PolicyTemplateChecker(object): 'of the description, it is recommended to add a page under %s ' 'instead and provide a link to it.' % (POLICY_DESCRIPTION_LENGTH_SOFT_LIMIT, @@ -25941,10 +18967,52 @@ diff --git a/components/policy/tools/template_writers/writers/doc_writer.py b/co - No HTML and body tags. - Restricted set of element attributes: for example no 'class'. Because of the latter the output is styled using the 'style' +@@ -229,25 +229,25 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): +
    Windows (Windows clients):
    +
    + Software\Policies\Chromium\URLAllowlist\0 = "www.example.com" +- Software\Policies\Chromium\URLAllowlist\1 = "www.google.com" ++ Software\Policies\Chromium\URLAllowlist\1 = "www.9oo91e.qjz9zk" +
    +
    Windows (Chromium OS clients):
    +
    + Software\Policies\ChromiumOS\URLAllowlist\0 = "www.example.com" +- Software\Policies\ChromiumOS\URLAllowlist\1 = "www.google.com" ++ Software\Policies\ChromiumOS\URLAllowlist\1 = "www.9oo91e.qjz9zk" +
    +
    Android/Linux:
    +
    + [ + "www.example.com", +- "www.google.com" ++ "www.9oo91e.qjz9zk" + ] +
    +
    Mac:
    +
    + + www.example.com +- www.google.com ++ www.9oo91e.qjz9zk + +
    + +diff --git a/components/policy/tools/template_writers/writers/ios_app_config_writer.py b/components/policy/tools/template_writers/writers/ios_app_config_writer.py +--- a/components/policy/tools/template_writers/writers/ios_app_config_writer.py ++++ b/components/policy/tools/template_writers/writers/ios_app_config_writer.py +@@ -117,7 +117,7 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter): + def BeginTemplate(self): + self._app_config.attributes[ + 'xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance' +- schema_location = 'https://storage.googleapis.com/appconfig-media/appconfigschema.xsd' ++ schema_location = 'https://storage.9oo91eapis.qjz9zk/appconfig-media/appconfigschema.xsd' + self._app_config.attributes[ + 'xsi:noNamespaceSchemaLocation'] = schema_location + diff --git a/components/policy/tools/template_writers/writers/template_writer.py b/components/policy/tools/template_writers/writers/template_writer.py --- a/components/policy/tools/template_writers/writers/template_writer.py +++ b/components/policy/tools/template_writers/writers/template_writer.py -@@ -400,6 +400,6 @@ class TemplateWriter(object): +@@ -467,6 +467,6 @@ class TemplateWriter(object): url = policy['url_schema'] if (policy['type'] in ('dict', 'external') or 'validation_schema' in policy or 'description_schema' in policy): @@ -25952,27 +19020,18 @@ diff --git a/components/policy/tools/template_writers/writers/template_writer.py + url = ('https://cloud.9oo91e.qjz9zk/docs/chrome-enterprise/policies/?policy=' + policy['name']) return schema_description_link_text.replace('$6', url) if url else '' -diff --git a/components/previews/core/previews_experiments.cc b/components/previews/core/previews_experiments.cc ---- a/components/previews/core/previews_experiments.cc -+++ b/components/previews/core/previews_experiments.cc -@@ -253,7 +253,7 @@ GURL GetLitePagePreviewsDomainURL() { - DCHECK(variable_host.has_scheme()); - return variable_host; - } -- return GURL("https://litepages.googlezip.net/"); -+ return GURL("https://litepages.9oo91e21p.qjz9zk/"); - } +diff --git a/components/query_tiles/internal/tile_config.cc b/components/query_tiles/internal/tile_config.cc +--- a/components/query_tiles/internal/tile_config.cc ++++ b/components/query_tiles/internal/tile_config.cc +@@ -12,7 +12,7 @@ + namespace query_tiles { - bool IsInLitePageRedirectControl() { -@@ -292,7 +292,7 @@ GURL LitePageRedirectProbeURL() { - "full_probe_url")); - if (url.is_valid()) - return url; -- return GURL("https://litepages.googlezip.net/e2e_probe"); -+ return GURL("https://litepages.9oo91e21p.qjz9zk/e2e_probe"); - } + // Default base URL string for the Query Tiles server. +-constexpr char kDefaultBaseURL[] = "https://chromeupboarding-pa.googleapis.com"; ++constexpr char kDefaultBaseURL[] = "https://chromeupboarding-pa.9oo91eapis.qjz9zk"; - base::TimeDelta LitePageRedirectPreviewPreresolvePreconnectInterval() { + // Default URL string for GetQueryTiles RPC. + constexpr char kDefaultGetQueryTilePath[] = "/v1/querytiles"; diff --git a/components/quirks/quirks_client.cc b/components/quirks/quirks_client.cc --- a/components/quirks/quirks_client.cc +++ b/components/quirks/quirks_client.cc @@ -25985,27 +19044,6 @@ diff --git a/components/quirks/quirks_client.cc b/components/quirks/quirks_clien "/chromeos/M%d?"; const int kMaxServerFailures = 10; -diff --git a/components/rappor/proto/rappor_metric.proto b/components/rappor/proto/rappor_metric.proto ---- a/components/rappor/proto/rappor_metric.proto -+++ b/components/rappor/proto/rappor_metric.proto -@@ -6,7 +6,7 @@ - // Privacy-Preserving Ordinal Responses) system. - // - // For a full description of the rappor metrics, see --// http://www.chromium.org/developers/design-documents/rappor -+// http://www.ch40m1um.qjz9zk/developers/design-documents/rappor - - syntax = "proto2"; - -@@ -33,7 +33,7 @@ message RapporReports { - // The sequence of bits produced by random coin flips in - // RapporMetric::GetReport(). For a complete description of RAPPOR - // metrics, refer to the design document at: -- // http://www.chromium.org/developers/design-documents/rappor -+ // http://www.ch40m1um.qjz9zk/developers/design-documents/rappor - optional bytes bits = 2; - } - repeated Report report = 2; diff --git a/components/rappor/rappor_service_impl.cc b/components/rappor/rappor_service_impl.cc --- a/components/rappor/rappor_service_impl.cc +++ b/components/rappor/rappor_service_impl.cc @@ -26021,63 +19059,25 @@ diff --git a/components/rappor/rappor_service_impl.cc b/components/rappor/rappor diff --git a/components/resources/terms/terms_am.html b/components/resources/terms/terms_am.html --- a/components/resources/terms/terms_am.html +++ b/components/resources/terms/terms_am.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    የGoogle Chrome የአግልግሎት ስምምነት ውሎች

    -

    እነዚህ ውሎች ለሚሰራ የGoogle Chrome ኮድ ስሪት ተግባራዊ ይሆናሉ። የGoogle Chrome ሶርስ ኮድ በክፍት ሶርስ (Open source) ሶፍተዌር የፈቃድ ስምምነት ስር በዚህ chrome://credits ይገኛሉ።

    -

    1. ከGoogle ጋር ያለዎት ግንኙነት

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 ርስዎ በተለየ ሁኔታ ከGoogle ጋር የተለየ ስምምነት በማድረግ ካልተፈቀደልዎ በስተቀር፣ ለማንኛውም አላማ ግልጋሎቶቹን እንደገና ማምረት፣ ማባዛት፣ መቅዳት፣ መሸጥ፣ ማሻገር፣ ወይም እንደገና መሸጥ እንደማይችሉ ተስማምተዋል።

    -

    5.4 ማንኛውም በውሎች ስር ያሉትን ግዴታዎች ቢጥሱ እና ይህን ተከትሎ ሊከሰቱ ለሚችሉ ችግሮች (Googleን ሊጎዱ ለሚችሉ ማንኛውም ጥፋቶች) ሙሉ ኃላፊነት እንደሚወስዱ (Google ለርስዎ ወይም ለማንኛውም ሶስተኛ ወገን ጥፋት ማንኛውንም ኃላፊነት እንደማይወስድ) ተስማምተዋል።

    -

    6. ግላዊነት እና የርስዎ የግል መረጃ

    --

    6.1 የGoogleን የውሂብ አጠባበቅ ለሚመለከት መረጃ እባክዎን በhttp://www.google.com/privacy.html ያለውን የGoogle የግላዊነት ፖሊሲ ያንብቡ። ይህ ፖሊሲ ግልጋሎቶቹን ሲጠቀሙ Google የግል መረጃዎን እንዴት እንደሚይዝ፣ እና ግላዊነትዎን እንደሚጠብቅ ይገልፃል።

    -+

    6.1 የGoogleን የውሂብ አጠባበቅ ለሚመለከት መረጃ እባክዎን በhttp://www.9oo91e.qjz9zk/privacy.html ያለውን የGoogle የግላዊነት ፖሊሲ ያንብቡ። ይህ ፖሊሲ ግልጋሎቶቹን ሲጠቀሙ Google የግል መረጃዎን እንዴት እንደሚይዝ፣ እና ግላዊነትዎን እንደሚጠብቅ ይገልፃል።

    -

    6.2 የውሂብዎ አጠቃቀም በGoogle የግላዊነት ፖሊሲዎች መሰረት የሚካሄድ መሆኑን ተስማምተዋል።

    -

    7. በአገልግሎቶቹ ውስጥ ያሉ ይዘቶች

    -

    7.1 አገልግሎቶቹን በመጠቀመዎ ምክንያት ያገኟቸው መረጃዎች (እንደ ውሂብ ፋይሎች፣ የተጻፈ ጽሁፍ፣ የኮምፒውተር ሶፍትዌር፣ ሙዚቃ፣ የድምፅ ፋይሎች ወይም ሌላ ድምፆች፣ ፎቶዎች፣ ቪዲዮዎች ወይም ምስሎች) እነዚህ ይዘቶች ከመጡበት የመጀመሪያ ቦታ ያለው ሰው ላይ ሙሉ ኃላፊነት እንዳለ ተረድተዋል። እንደነዚህ ያሉ መረጃዎች ከታች እንደ “ይዘት” በሚል ተጠቅሰዋል።

    -

    7.2 አንድ የአገልግሎቶቹ ክፍል ሆኖ ለርስዎ የቀረበ ይዘት በአገልግሎቶቹ ውስጥ ያለ ነገር ግን በአገልግሎቶቹ ውስጥ ላሉ ማስታወቂያዎች እና የተደገፈ ይዘት ብቻ ያልተወሰነ፣ ይህን የዘት ለGoogle ባቀረቡ ደጋፊዎች ወይም አስታዋቂዎች (ወይም እነርሱን ለሚወክሉ ሌሎች ሰዎች ወይም ኩባንያዎች) አእምሮአዋዊ ባለቤትነት የተጠበቀ መሆኑን ማወቅ አለብዎ። በGoogle ወይም በዛ ይዘት ባለቤቶች በተለየ ስምምነት ይህን እንዲያደርጉ በግል ካልተነገርዎ በስተቀር፣ ይህን ይዘት (በሙሉም ሆነ በከፊል) ማሻሻል፣ ማከራየት፣ በሊዝ መሸጥ፣ ማዋስ፣ መሸጥ፣ ማሰራጨት ወይም አውጣቶ/ወስዶ ስራዎችን መፍጠር አይችሉም።

    --

    7.3 Google የማንኛውም አገልግሎትን ማንኛውም ወይም ሁሉንም ይዘት የቅድመ-ማጣራት፣ የመከለስ፣ የመለየት፣ የማጣራት፣ የማሻሻል፣ የመከልከል ወይም የማስወገድ መብትን (ያለምንም ግዴታ) ይጠብቃል። ለአንዳንድ አገልግሎቶች፣ Google ግልጽ የሆኑ የግብረ ስጋ ግንኙነት ይዘቶች ያላቸውን ለይቶ ለማውጣት መሳሪያዎችን ሊያቀርብ ይችላል። እነዚህ መሳሪያዎች የአስተማማኝ ፍለጋ/ሴፍሰርች አማራጭ ቅንጅቶችን ያካትታሉ (https://support.google.com/websearch/answer/510 ይመልከቱ)። ከዚህም በተጨማሪ በገበያ ላይ የሚገኙ የሚቃወሙዋቸውን ቁሳቁሶች ሊገድቡ የሚችሉ አገልግሎቶችና ሶፍትዌር አሉ።

    -+

    7.3 Google የማንኛውም አገልግሎትን ማንኛውም ወይም ሁሉንም ይዘት የቅድመ-ማጣራት፣ የመከለስ፣ የመለየት፣ የማጣራት፣ የማሻሻል፣ የመከልከል ወይም የማስወገድ መብትን (ያለምንም ግዴታ) ይጠብቃል። ለአንዳንድ አገልግሎቶች፣ Google ግልጽ የሆኑ የግብረ ስጋ ግንኙነት ይዘቶች ያላቸውን ለይቶ ለማውጣት መሳሪያዎችን ሊያቀርብ ይችላል። እነዚህ መሳሪያዎች የአስተማማኝ ፍለጋ/ሴፍሰርች አማራጭ ቅንጅቶችን ያካትታሉ (https://support.9oo91e.qjz9zk/websearch/answer/510 ይመልከቱ)። ከዚህም በተጨማሪ በገበያ ላይ የሚገኙ የሚቃወሙዋቸውን ቁሳቁሶች ሊገድቡ የሚችሉ አገልግሎቶችና ሶፍትዌር አሉ።

    -

    7.4 አገልግሎቶቹን በመጠቀምዎ ደስ የማይል፣ ነውረኛ ወይም የሚቃወሙት ይዘት ሊያጋጥምዎት ይችላል፣ በእንደዚህ ያለ ሁኔታ አገልግሎቶቹን የሚጠቀሙት በራስዎ ኃላፊነት መሆኑን ተርድተዋል።

    -

    7.5 አገልግሎቶቹን ሲጠቀሙ ለሚፈጥሩት፣ ለሚያስተላልፉት ወይም እንዲታይ ለሚያደርጉት ማንኛውንም ይዘትና በዚህም በሚወሰዱ እርምጃዎች ለሚከሰቱት ነገሮች (Google ሊደርሱበት የሚችሉ ማንኛውም ጥፋቶችን ወይም ጉዳቶችን ጨምሮ) ለብቻዎ ኃላፊነቱን ለመውሰድ ተስማምተዋል። (እንዲሁም Google ለርስዎ ወይም ለማንኛውም ሶስተኛ ወገን ኃላፊነት አይወስድም)።

    -

    8. የንብረት ባለቤትነት መብቶች

    -

    8.1 በአገልግሎቶቹ ውስጥ የተካተቱ ማንኛውንም የአእምሮዋዊ ንብረት መብቶችን ጨምሮ (መብቶቹ ተመዝግበው የነበረ ቢሆንም ባይሆንም፣ እና እነዚህ መብቶች በአለም ዙሪያ በየትም ቦታ የሚገኙ ቢሆንም) ሁሉንም ህጋዊ መብትን፣ ርዕስ እና ለአገልግሎቶቹ ወይም በአገልግሎቶቹ ፍላጎት ላይ Google (የGoogle ፈቃድ ያላቸው) ባለቤት መሆናቸውን በማረጋገጥ ተስማምተዋል።

    -

    8.2 ከGoogle በጽሁፍ ካልተስማሙ በስተቀር ማንኛውንም የGoogle የንግድ ስሞች፣ የንግድ ምልክቶች፣ የአገልግሎት ምልክቶች፣ አርማዎች፣ የጎራ ስሞች እና ሌላ የተለየ ልዩ አርማ ባህሪያትን ለመጠቀም የሚያስችል በውሎቹ ውስጥ መብት የሚሰጥዎት አንቀጽ የለም።

    --

    8.3 የትኛውንም እነዚህን ልዩ ባሀሪያት ለመጠቀም ከGoogle ጋር በተለየ የጽሁፍ ስምምነት ግልጽ የሆነ መብት ከተሰጠዎት፣ እንደዚህ ያሉ ባህሪያትን የሚጠቀሙት ለስምምነቱ፣ ለማንኛውንም ሊሰሩ የሚችሉ የውሎቹ ደንቦች እና ከጊዜ ወደጊዜ ለሚሻሻሉት የGoogle አርማ ባህሪይ አጠቃቀም መመሪያዎች ተገዢ እንደሆኑ ተስማምተዋል። እነዚህ መመሪያዎች በመስመር ላይ በዚህ http://www.google.com/permissions/guidelines.html (Google ከጊዜ ወደጊዜ ለዚህ አላማ በሚያቀርበው ሌላ URL ላይ) ሊታዩ ይችላሉ።

    -+

    8.3 የትኛውንም እነዚህን ልዩ ባሀሪያት ለመጠቀም ከGoogle ጋር በተለየ የጽሁፍ ስምምነት ግልጽ የሆነ መብት ከተሰጠዎት፣ እንደዚህ ያሉ ባህሪያትን የሚጠቀሙት ለስምምነቱ፣ ለማንኛውንም ሊሰሩ የሚችሉ የውሎቹ ደንቦች እና ከጊዜ ወደጊዜ ለሚሻሻሉት የGoogle አርማ ባህሪይ አጠቃቀም መመሪያዎች ተገዢ እንደሆኑ ተስማምተዋል። እነዚህ መመሪያዎች በመስመር ላይ በዚህ http://www.9oo91e.qjz9zk/permissions/guidelines.html (Google ከጊዜ ወደጊዜ ለዚህ አላማ በሚያቀርበው ሌላ URL ላይ) ሊታዩ ይችላሉ።

    -

    8.4 Google በእነዚህ ውሎች ስር ወይም ርስዎ አገልግሎቶቹን በመጠቀም በማንኛውም በሚያቀርቡት፣ በሚልኩት፣ በሚያስተላልፉት ወይም በሚያሳዩት እንዲሁም በዛ ይዘት የተካተቱ የአእምሮአዊ ባለቤትነት መብቶች (እነዚያ መብቶች የተመዘገቡም ሆነም አልሆነም፣ እና እነዚህ መብቶች በአለም ዙሪያ በየትኘውም ቦታ ያሉ ቢሆንም) ጨምሮ ላይ ከርስዎ (ወይም ከርስዎ ፍቃድ ከተሰጣቸው) ምንም መብት፣ ርዕስ ወይም ፍላጎት እንደማያገኝ አረጋግጦ ተስማምቷል። ከGoogle በጽሁፍ ካልተስማሙ በስተቀር እነዚያን መብቶች የመጠበቅና እነዚያን መብቶች የማስተግበር ኃላፊነት እንዳለብዎ እና Google ይህን ርሶዎን ወክሎ የማድረግ ግዴታ እንደሌለበት ተስማምተዋል።

    -

    8.5 ማንኛውም በአገልግሎቶቹ ውሰጥ የተካተቱ ወይም ያሉ የንብረት ባለቤትነት መብቶችን (የቅጂ መብትና የንግድ ምልክት ማስታወቂያዎችን ጨምሮ) እንደማያስወግዱ፣ ግልጽ እንዳይሆን እንደማይጋርዱ ወይም እንደማይለውጡ ተስማመተዋል።

    -

    8.6 ይህን እንዲያደርጉ ከGoogle በግልጽ በጽሁፍ ካልተፈቀደለዎ በስተቀር፣ አገልግሎቶቹን ሲጠቀሙ ምንም አይነት የንግድ ምልክት፣ የአገልግሎት ምልክት፣ የንግድ ስም፣ የማንኛውንም ኩባንያ ወይም ድርጅት አርማ በተመለከተ ለእነዚህ ምልክቶች፣ ስሞች ወይም አርማዎች ባለቤት ወይም ፍቃድ ያላቸው ተጠቃሚዎች ግራ መጋባትን ሊፈጥር ወይም እንዲፈጥር አድርገው እንዳይጠቀሙ ተስማምተዋል።

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (5) የይለፍ ቃልዎን ወይም የመለያዎን ዝርዝር የተጠበቀ እና አስተማማኝ አድርጎ መያዝ አለመቻል፤

    -

    14.2 GOOGLE አስተያየት ተሰጥቶት ወይም እንደእዚህ ላሉ ጥፋቶች ሊሆን የሚል መነሻ የሚያውቅ ቢሆንም ባይሆንም ከላይ በአንቀፅ 14.1 GOOGLE ለርስዎ ያለውን የተጠያቂነት ገደቦች የሚተገበሩ ይሆናል።

    -

    15. የቅጂ መብት እና የንግድ ምልክት ፓሊሲዎች

    --

    15.1 ተግባራዊ ከሆኑ አለም አቀፍ የአእምሮዋዊ ንብረት ህግ ( በዩናይተድ ስቴትስ፣ Digital Millennium Copyright Actን ጨምሮ) ለሚቃረኑ የቅጂ መብት ጥሰትን ለሚደግፉ ማታወቂያዎች መልስ መስጠት እና ተደጋጋሚ ጥሰቶችን የፈጸሙ መለያዎች ማቋረጥ የGoogle ፖሊሲ ነው። Google ፖሊሲን በተመለከተ ዝርዝር መረጃ በዚህ ይገኛል http://www.google.com/dmca.html።

    --

    15.2 የGoogleን የማስተዋወቅ ንግድ ጋር በተያያዘ Google የንግድ ምልከት አቤቱታዎችን መመሪያ ይሰራል። ይህን በተመለከተ ዝርዝር መረጃ በዚህ ይገኛል http://www.google.com/tm_complaint.html።

    -+

    15.1 ተግባራዊ ከሆኑ አለም አቀፍ የአእምሮዋዊ ንብረት ህግ ( በዩናይተድ ስቴትስ፣ Digital Millennium Copyright Actን ጨምሮ) ለሚቃረኑ የቅጂ መብት ጥሰትን ለሚደግፉ ማታወቂያዎች መልስ መስጠት እና ተደጋጋሚ ጥሰቶችን የፈጸሙ መለያዎች ማቋረጥ የGoogle ፖሊሲ ነው። Google ፖሊሲን በተመለከተ ዝርዝር መረጃ በዚህ ይገኛል http://www.9oo91e.qjz9zk/dmca.html።

    -+

    15.2 የGoogleን የማስተዋወቅ ንግድ ጋር በተያያዘ Google የንግድ ምልከት አቤቱታዎችን መመሪያ ይሰራል። ይህን በተመለከተ ዝርዝር መረጃ በዚህ ይገኛል http://www.9oo91e.qjz9zk/tm_complaint.html።

    -

    16. ማስታወቂያዎች

    -

    16.1 የተወሰኑ አገልግሎቶች ከማስታወቂያዎች በሚገኝ ገቢ ስለሚደገፉ ማስታወቂያዎች እና የማስታወቂያ ስራዎች ሊያሳያ ይችላሉ። እነዚህ ማስታወቂያዎች በአገልግሎቶቹ ውስጥ የተቀመጠ መረጃ ይዘት፣ በአገልግሎቶቹ በኩል የተሰሩ ጥያቄዎች ወይም ሌላ መረጃ ላይ ያተኮሩ ሊሆን ይችላሉ።

    -

    16.2 Google ምንም ሳያሳውቅዎት በአገልግሎቶቹ ላይ የማስተዋወቂያ መንገድ፣ ሰልት ወይም ስፋት ለለወጥ የተመለከቱ ናቸው።

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 Google ለእንደዚህ አይነት ውጫዊ ጣቢያዎች ወይም ንብረቶች መገኘት ኃላፊነት እንደሌለበት እና በነዚህ የድር ጣቢያዎች ወይም ንብረቶች ላይ ለሚገኙ ማንኛውም ማስታወቂያዎች፣ ምርቶች ወይም ሌላ ነገሮችን እንደማይደግፍ አረጋግጠው ተስማምተዋል።

    -

    17.3 ርስዎ አምጠውት ሊሆን በሚችለው በእነዚህ ውጫዊ ጣቢያዎች ወይም ንብረቶች መገኘት ምክንያት፣ ወይም ርስዎ በሙሉዕነታቸው፣ በትክክለኛነታቸው፣ እዛ ለመኖራቸው እምነት በጣሉበቸው በነዚህ የድር ጣቢያዎች ወይም ንብረቶች ላይ ለሚገኙ ማንኛውም ማስታወቂያዎች፣ ምርቶች ወይም ሌላ ነገሮች ምክንያት ለሚከሰቱ ማንኛውም ጥፋቶች ወይም ጉዳቶች Google ተጠያቂ እንደማይሆን አረጋግጠው ተስማምተዋል።

    -

    18. የስምምነት ውሎች ላይ የሚደረጉ ለውጦች

    --

    18.1 Google በአለምአቀፍ የስምምነት ውሎች ወይም በተጨማሪ የስምምነት ውሎች ላይ ከጊዜ ወደ ጊዜ ለውጦችን ሊያደርግ ይችላል። እነዚህ ለውጦች ሲደረጉ፣ Google በhttp://accounts.google.com/TOS?hl=en በሚገኘው የአለምአቀፍ የስምምነት ውሎች ላይ አዲስ ቅጂ ያሰፍራል እንዲሁም ማንኛውም አዲስ ተጨማሪ የስምምነት ውሎች ይህ ለውጥ በሚነካቸው ግልጋሎቶች ውስጥ ወይም በግልጋሎቶቹ አማካያነት እንዲገኝ ይደረጋል።

    -+

    18.1 Google በአለምአቀፍ የስምምነት ውሎች ወይም በተጨማሪ የስምምነት ውሎች ላይ ከጊዜ ወደ ጊዜ ለውጦችን ሊያደርግ ይችላል። እነዚህ ለውጦች ሲደረጉ፣ Google በhttp://accounts.9oo91e.qjz9zk/TOS?hl=en በሚገኘው የአለምአቀፍ የስምምነት ውሎች ላይ አዲስ ቅጂ ያሰፍራል እንዲሁም ማንኛውም አዲስ ተጨማሪ የስምምነት ውሎች ይህ ለውጥ በሚነካቸው ግልጋሎቶች ውስጥ ወይም በግልጋሎቶቹ አማካያነት እንዲገኝ ይደረጋል።

    -

    18.2 የአለምአቀፍ የስምምነት ውሎች ወይም የተጨማሪ የስምምነት ውሎች ለውጥ ከተደረገባቸው ቀን በኋላ ግልጋሎቶቹን የሚጠቀሙ ከሆነ፣ Google መጠቀምዎን የተሻሻሉትን የአለምአቀፍ የስምምነት ውሎች ወይም የተጨማሪ የስምምነት ውሎች እንደተቀበሉ አድርጎ ይቆጥረዋል፣ ይህንንም ተረድተው ተስማምተዋል።

    -

    19. አጠቃላይ ህጋዊ የስምምነት ውሎች

    -

    19.1 አንዳንድ ጊዜ ግልጋሎቶቹን ሲጠቀሙ፣ (ከግልጋሎቶቹ ጋር በተገኘ ወይም በእነርሱ ምክንያት) ግልጋሎትን ሊጠቀሙ ወይም አነስተኛ ሶፍትዌር ሲያወርዱ አልያም በሌላ ግለሰብ ወይም ኩባንያ የቀረቡ ሸቀጦች ሊሸምቱ ይችላሉ። እነዚህን ግልጋሎቶች፣ ሶፍትዌር ወይም ሸቀጦች መጠቀምዎ፣ በሚመለከተው ግለሰብ ወይም ኩባንያ እና በርስዎ መካከል በተለየ የስምምነት ውሎች ተገዢ ሊሆኑ ይችላሉ። ይህ ከሆነ፣ የስምምነት ውሎቹ ከእነዚህ ኩባንያዎች ወይም ግለሰቦች ጋር ያለዎትን ህጋዊ ግንኙነቶች አይነኩም።

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + ለመጨረሻ ጊዜ የተቀየረው፦ 01 ጃንዋሪ፣ 2021 +

    +

    +- Chrome ወይም Chrome OSን በመጠቀምዎ https://policies.google.com/terms ላይ በሚገኘው የGoogle አገልግሎት ውል እና በእነዚህ የGoogle Chrome እና Chrome OS ተጨማሪ አገልግሎት ውል ይስማማሉ። ++ Chrome ወይም Chrome OSን በመጠቀምዎ https://policies.9oo91e.qjz9zk/terms ላይ በሚገኘው የGoogle አገልግሎት ውል እና በእነዚህ የGoogle Chrome እና Chrome OS ተጨማሪ አገልግሎት ውል ይስማማሉ። +

    +

    +- እነዚህ የGoogle Chrome እና የChrome OS ተጨማሪ አገልግሎት ውል በተፈጻሚው የChrome እና Chrome OW ኮድ ስሪት ላይ ይተገበራሉ። አብዛኛው የChrome ምንጭ ኮድ በክፍት ምንጭ ፈቃድ ስምምነቶች https://code.google.com/chromium/terms.html ላይ ባሉ የክፍት ምንጭ ሶፍትዌር ፈቃድ ስምምነቶች መሠረት ከክፍያ ነጻ የሚገኝ ነው። ++ እነዚህ የGoogle Chrome እና የChrome OS ተጨማሪ አገልግሎት ውል በተፈጻሚው የChrome እና Chrome OW ኮድ ስሪት ላይ ይተገበራሉ። አብዛኛው የChrome ምንጭ ኮድ በክፍት ምንጭ ፈቃድ ስምምነቶች https://code.9oo91e.qjz9zk/chromium/terms.html ላይ ባሉ የክፍት ምንጭ ሶፍትዌር ፈቃድ ስምምነቶች መሠረት ከክፍያ ነጻ የሚገኝ ነው። +

    +

    + የእርስዎ የተወሰኑ የChrome እና Chrome OS ክፍሎችን መጠቀም ለሚከተሉት ደንቦች ተገዢ ነው፦ diff --git a/components/resources/terms/terms_ar.html b/components/resources/terms/terms_ar.html --- a/components/resources/terms/terms_ar.html +++ b/components/resources/terms/terms_ar.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - بنود الخدمة الإضافية لكل من متصفح Google Chrome و"نظام التشغيل Chrome" - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + تاريخ آخر تعديل: 1 كانون الثاني (يناير) 2021 +

    - يعني استخدامك لمتصفح Chrome أو "نظام التشغيل Chrome" موافقتك على بنود خدمة Google المتاحة على الرابط https://policies.google.com/terms وبنود الخدمة الإضافية لكل من متصفح Google Chrome و"نظام التشغيل Chrome". + يعني استخدامك لمتصفح Chrome أو "نظام التشغيل Chrome" موافقتك على بنود خدمة Google المتاحة على الرابط https://policies.9oo91e.qjz9zk/terms وبنود الخدمة الإضافية لكل من متصفح Google Chrome و"نظام التشغيل Chrome". @@ -26091,9 +19091,9 @@ diff --git a/components/resources/terms/terms_ar.html b/components/resources/ter diff --git a/components/resources/terms/terms_bg.html b/components/resources/terms/terms_bg.html --- a/components/resources/terms/terms_bg.html +++ b/components/resources/terms/terms_bg.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Допълнителни общи условия на Google Chrome и Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Последна промяна: 1 януари 2021 г. +

    - С използването на Chrome или Chrome OS приемате Общите условия на Google на адрес https://policies.google.com/terms и настоящите Допълнителни общи условия на Google Chrome и Chrome OS. + С използването на Chrome или Chrome OS приемате Общите условия на Google на адрес https://policies.9oo91e.qjz9zk/terms и настоящите Допълнителни общи условия на Google Chrome и Chrome OS. @@ -26107,63 +19107,25 @@ diff --git a/components/resources/terms/terms_bg.html b/components/resources/ter diff --git a/components/resources/terms/terms_bn.html b/components/resources/terms/terms_bn.html --- a/components/resources/terms/terms_bn.html +++ b/components/resources/terms/terms_bn.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome পরিষেবার চুক্তি

    -

    পরিষেবার এই চুক্তিগুলি Google Chrome –এর প্রয়োগযোগ্য কোড সংস্করণে প্রয়োজ্য হয়৷ Google Chrome এর উত্স কোড chrome://credits-এ মুক্ত উত্স সফটওয়্যার লাইসেন্সের অধীনে বিনামূল্যে উপলব্ধ৷

    -

    1. Google-এর সাথে আপনার সম্পর্ক

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 যদি না আপনাকে Google-এর সাথে পৃথক চুক্তিতে নির্দিষ্ট করে এটি করতে অনুমতি দেওয়া হয়, আপনি সম্মত হন যে আপনি এই পরিষেবাগুলি কোন উদ্দেশ্যেই পুনরুত্পাদন, নকল, অনুলিপি, বিক্রয়, ব্যবসায় বা পুনর্বিক্রয় করবেন না৷

    -

    5.4 আপনি সম্মত হন যে এই শর্তাদির অধীনে আপনার দায়িত্বের কোনও রূপ ভঙ্গের জন্য এবং এমন কোনও ভঙ্গের ফলে কোনওরূপ ক্ষতির জন্য (কোনও ক্ষতি বা খেসারত যা Google ভোগ করতে পারে) আপনি একাই (এবং Google-এর আপনার বা কোনও তৃতীয় পক্ষের জন্য কোনও রকম দায়িত্ব নেই) দায়ী৷

    -

    6. গোপনীয়তা এবং আপনার ব্যক্তিগত তথ্য

    --

    6.1 Google-এর ডেটা সুরক্ষা অনুশীলনগুলি সম্পর্কিত তথ্যের জন্য দয়া করে http://www.google.com/privacy.html এবং http://www.google.com/chrome/intl/en/privacy.html এ Google-এর গোপনীয়তা নীতিটি পড়ুন৷ Google কীভাবে আপনার ব্যক্তিগত তথ্য ব্যবহার করে এবং আপনি যখন পরিষেবাগুলি ব্যবহার করেন তখন কীভাবে আপনার গোপনীয়্তা রক্ষা করে এই নীতিটি তা ব্যাখ্যা করে৷

    -+

    6.1 Google-এর ডেটা সুরক্ষা অনুশীলনগুলি সম্পর্কিত তথ্যের জন্য দয়া করে http://www.9oo91e.qjz9zk/privacy.html এবং http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html এ Google-এর গোপনীয়তা নীতিটি পড়ুন৷ Google কীভাবে আপনার ব্যক্তিগত তথ্য ব্যবহার করে এবং আপনি যখন পরিষেবাগুলি ব্যবহার করেন তখন কীভাবে আপনার গোপনীয়্তা রক্ষা করে এই নীতিটি তা ব্যাখ্যা করে৷

    -

    6.2 আপনি Google-এর গোপনীয়তা নীতি অনুসারে আপনার ডেটা ব্যবহার করতে সম্মত হন৷

    -

    7. পরিষেবাগুলিতে সামগ্রী

    -

    7.1 আপনি বোঝেন যে আপনার পরিষেবাগুলি ব্যবহারের অংশ হিসাবে বা আপনার ব্যবহারের মাধ্যমে আপনার অ্যাক্সেস থাকতে পারে এমন সকল তথ্যে (ডেটা ফাইলসমূহ, লিখিত পাঠ্য, কম্পিউটার সফ্টওয়্যার, সঙ্গীত, অডিও ফাইল বা অন্য শব্দসমূহ, ফোটোগ্রাফ, ভিডিও বা অন্য চিত্রসমূহ) তা সেই ব্যক্তি যার কাছ থেকে ঐরূপ সামগ্রী এসেছে তার উপর একক দায়িত্ব বর্তায়৷ এমন সকল তথ্য নীচে “সামগ্রী” হিসাবে উল্লেখিত৷

    -

    7.2 পরিষেবার অঙ্গ হিসাবে আপনাকে সরবরাহিত সামগ্রীতে অন্তর্ভুক্ত তবে পরিষেবার বিজ্ঞাপন এবং পরিষেবার মধ্যে থাকা স্পনসর্ড সামগ্রী যার মালিক স্পনসর বা বিজ্ঞাপনদাতাগণ যারা Google-এক ঐ সামগ্রী সরবরাহ করে তা মেধাসম্পত্তি অধিকার দ্বারা সুরক্ষিত নাও থাকতে পারে তবে সীমাবদ্ধ নয়৷ যদি না আপনাকে Google বা এই সামগ্রীর মালিকের দ্বারা নির্দিষ্টভাবে পৃথক চুক্তির মাধ্যমে এই সামগ্রীকে (সম্পূর্ণ বা আংশিকভাবে) ঈষত সংশোধন, ভাড়া, লিজ. ঋণ, বিক্রয়, বিতরণ বা উত্পন্ন কার্য সৃষ্টি করতে বলা হয় আপনি তা করতে পারবেন না৷

    --

    7.3 Google যে কোনও পরিষেবা থেকে কোনও বা সমস্ত সামগ্রী প্রাক-স্ক্রীণ করার, পর্যালোচনা,পতাকাঙ্কিত, ফিল্টার, ঈষত সংশোধন, প্রত্যাখ্যান বা বাদ দেওয়ার অধিকারটি সংরক্ষণ করে (কিন্তু কোন দায়বদ্ধতা থাকবে না)৷ কিছু পরিষেবার জন্য, Google বিশদ যৌন সামগ্রী ফিল্টার আউট করতে সরঞ্জাম সরবরাহ করতে পারে৷ এই সরঞ্জামগুলির মধ্যে SafeSearch অগ্রাধিকার সেটিংসটি অন্তর্ভুক্ত (https://support.google.com/websearch/answer/510 দেখুন)৷ তদঅতিরিক্ত, যা আপনি আপত্তিকর হিসাবে মনে করেন সেই উপাদানগুলির অ্যাক্সেস সীমাবদ্ধ করতে বাণিজ্যিকভাবে পরিষেবা এবং সফটওয়্যার পাওয়া যায়৷

    -+

    7.3 Google যে কোনও পরিষেবা থেকে কোনও বা সমস্ত সামগ্রী প্রাক-স্ক্রীণ করার, পর্যালোচনা,পতাকাঙ্কিত, ফিল্টার, ঈষত সংশোধন, প্রত্যাখ্যান বা বাদ দেওয়ার অধিকারটি সংরক্ষণ করে (কিন্তু কোন দায়বদ্ধতা থাকবে না)৷ কিছু পরিষেবার জন্য, Google বিশদ যৌন সামগ্রী ফিল্টার আউট করতে সরঞ্জাম সরবরাহ করতে পারে৷ এই সরঞ্জামগুলির মধ্যে SafeSearch অগ্রাধিকার সেটিংসটি অন্তর্ভুক্ত (https://support.9oo91e.qjz9zk/websearch/answer/510 দেখুন)৷ তদঅতিরিক্ত, যা আপনি আপত্তিকর হিসাবে মনে করেন সেই উপাদানগুলির অ্যাক্সেস সীমাবদ্ধ করতে বাণিজ্যিকভাবে পরিষেবা এবং সফটওয়্যার পাওয়া যায়৷

    -

    7.4 আপনি বোঝেন যে এই পরিষেবাগুলি ব্যবহারের দ্বারা আপনি অসন্তোষজনক, অশোভন বা আপত্তিকর হিসাবে মনে করেন সেই সামগ্রীতে প্রকাশিত হতে পারেন এবং এর ফলে আপনি নিজের দায়িত্বে পরিষেবাগুলি ব্যবহার করেন৷

    -

    7.5 আপনি সম্মত হন যে পরিষেবাগুলি ব্যবহারের সময়ে এমন কোন লিখিত সামগ্রী যা আপনি তৈরি করেন, সংবাহিত করেন বা প্রদর্শন করেন এবং আপনার কোন কার্যের পরিণামের জন্য (কোনও ক্ষতি বা খেসারত যা Google ভোগ করতে পারে) আপনি একাই (এবং Google-এর আপনার বা কোনও তৃতীয় পক্ষের জন্য কোনও রকম দায়িত্ব নেই) দায়ী৷

    -

    8. স্বত্বাধিকারীর অধিকারসমূহ

    -

    8.1 আপনি স্বীকার করেন এবং সম্মত হন যে Google (বা Google-এর লাইসেন্স ধারক) পরিষেবাতে এবং পরিষেবার প্রতি সকল আইনি অধিকার, শিরোনাম এবং স্বার্থ তত্সহ কোন মেধা সম্পত্তির অধিকার যা পরিষেবাতে বর্তমান থাকে (সেই অধিকারগুলি নিবন্ধভুক্তি হবে বা হবে না, এবং বিশ্বের যে কোনও স্থানে এই অধিকারগুলি থাকতে পারে) তার মালিক৷

    -

    8.2 আপনি Google এর সাথে অন্যথায় সম্মত হওয়া ব্যতীত, শর্তগুলির কোনও কিছুই আপনাকে Google- এর ব্যবসায়িক নাম, ব্যবসায়িক চিহ্ন, পরিষেবার চিহ্ন, লোগো, ডোমেন নাম এবং অন্য স্বতন্ত্র্য ব্র্যান্ডের বৈশিষ্ট্যগুলি ব্যবহারের অধিকার দেয় না৷

    --

    8.3 আপনি যদি Google-এর সাথে পৃথক লিখিত চুক্তি অনুযায়ী এর মধ্যে যে কোনও একটি ব্র্যান্ড বৈশিষ্ট্য ব্যবহার করতে বর্ণিত অধিকারপ্রদত্ত হন, তারপরে আপনি সম্মত হন যে আপনার এমন বৈশিষ্ট্যগুলির ব্যবহার সেই চুক্তির সাথে মেনে চলবে, শর্তাদির কোনও প্রয়োগযোগ্য সংস্থান এবং Google-এর ব্র্যান্ড বৈশিষ্ট্য সময়ে সময়ে আপডেটেড হওয়া নির্দেশিকাগুলি ব্যবহার করবে৷ এই নির্দেশিকাগুলি অনলাইনে এখানে দেখতে পাওয়া যায় http://www.google.com/permissions/guidelines.html (বা এ রকম অন্য কোন URL-এ যা এই উদ্দেশ্যে Google সময়ে সময়ে সরবরাহ করতে পারে)৷

    -+

    8.3 আপনি যদি Google-এর সাথে পৃথক লিখিত চুক্তি অনুযায়ী এর মধ্যে যে কোনও একটি ব্র্যান্ড বৈশিষ্ট্য ব্যবহার করতে বর্ণিত অধিকারপ্রদত্ত হন, তারপরে আপনি সম্মত হন যে আপনার এমন বৈশিষ্ট্যগুলির ব্যবহার সেই চুক্তির সাথে মেনে চলবে, শর্তাদির কোনও প্রয়োগযোগ্য সংস্থান এবং Google-এর ব্র্যান্ড বৈশিষ্ট্য সময়ে সময়ে আপডেটেড হওয়া নির্দেশিকাগুলি ব্যবহার করবে৷ এই নির্দেশিকাগুলি অনলাইনে এখানে দেখতে পাওয়া যায় http://www.9oo91e.qjz9zk/permissions/guidelines.html (বা এ রকম অন্য কোন URL-এ যা এই উদ্দেশ্যে Google সময়ে সময়ে সরবরাহ করতে পারে)৷

    -

    8.4 Google স্বীকার করে এবং সম্মত হয় এই শর্তাদির অধীনে (আপনার বা আপনার লাইসেন্সরগণের থেকে) আপনার কাছ থেকে এতে কোন অধিকার, শিরোনাম বা স্বার্থ বা এমন কোন লিখিত সামগ্রীতে যা আপনি জমা করেন, পোস্ট করেন, সংবাহিত বা এতে বা এর মাধ্যমে পরিষেবাগুলি প্রদর্শন করেন, তত্সহ কোন মেধা সম্পত্তি অধিকার যা সেই লিখিত সামগ্রীতে উপস্থিত থাকে (সেই অধিকারগুলি নিবন্ধীকৃত থাকুক বা না থাকুক এবং বিশ্বের যেখানেই এই অধিকারগুলি বর্তমান থাকতে পারে) তা সমন্বিত নেই৷ যদি না আপনার সাথে Google-এর লিখিত সম্মতি হয়ে থাকে, আপনি সম্মত হন যে সেই সমস্ত অধিকার সুরক্ষিত এবং প্রয়োগ করতে দায়বদ্ধ এবং আপনার হয়ে Google-এর এগুলি করার কোন দায়বদ্ধতা নেই৷

    -

    8.5 আপনি সম্মত হন যে আপনি স্বত্বাধিকারীর অধিকারসমূহের বিজ্ঞপ্তির একটিও সরাবেন না, অস্পষ্ট বা পরিবর্তন করবেন না (কপিরাইট এবং ট্রেডমার্ক বিজ্ঞপ্তিসমূহসহ) যা পরিষেবাগুলির মধ্যে সংযুক্ত করে দেওয়া যেতে পারে বা এতেই সমন্বিত থাকে৷

    -

    8.6 যদি না আপনি Google দ্বারা লিখিত আকারে এটি করার জন্য অনুমতিপ্রাপ্ত হন, আপনি সম্মত হন যে এই পরিষেবাগুলি ব্যবহার করতে গিয়ে আপনি কোন কোম্পানি বা সংস্থার ট্রেড মার্ক, পরিষেবা চিহ্ন, ট্রেড নাম, লোগো এমন কোন ভাবে ব্যবহার করবেন না যাতে এই সমস্ত চিহ্নগুলি, নামগুলি বা লোগোগুলির মালিক বা অনুমোদিত ব্যবহারকারীদের সম্বন্ধে সংশয় সৃষ্টি করে৷

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) আপনার পাসওয়ার্ড বা অ্যাকাউন্টের বিশদ বিবরণ নিরাপদ এবং গোপনভাবে রাখার ব্যর্থতা;

    -

    14.2 Google-কে এমন উত্পন্ন ক্ষতির সম্ভাব্যতা সম্পর্কে পরামর্শ দেওয়া হয়েছে বা হয়নি বা ঔচিত্য সত্ত্বেও উপরের 14.1 অনুচ্ছেদে আপনার প্রতি Google-এর দায়ের সীমাবদ্ধতা প্রযোজ্য হবে৷

    -

    15. কপিরাইট এবং ট্রেডমার্ক নীতিসমূহ

    --

    15.1 অভিযোগ হওয়া কপিরাইট লঙ্ঘনের বিজ্ঞপ্তিগুলিকে প্রয়োগযোগ্য আন্তর্জাতিক মেধাসম্পত্তি আইন (তত্সহ, মার্কিন যুক্তরাষ্ট্রে, ডিজিট্যাল মিলেনিয়াম কপিরাইট অ্যাক্ট) অনুসারে প্রতিক্রিয়া জানানো এবং লঙ্ঘনের পুনরাবৃত্তি করা অ্যাকাউন্টগুলিকে বন্ধ করে দেওয়া Google-এর নীতি৷ Google-এর নীতির বিশদ এখানে পাওয়া যাবে http://www.google.com/dmca.html৷

    --

    15.2 Google এর বিজ্ঞাপন ব্যবসা সম্পর্কে একটি ট্রেড মার্ক অভিযোগ পদ্ধতি পরিচালনা করে, যার বিশদ বিবরণ এখানে পাওয়া যাবে http://www.google.com/tm_complaint.html৷

    -+

    15.1 অভিযোগ হওয়া কপিরাইট লঙ্ঘনের বিজ্ঞপ্তিগুলিকে প্রয়োগযোগ্য আন্তর্জাতিক মেধাসম্পত্তি আইন (তত্সহ, মার্কিন যুক্তরাষ্ট্রে, ডিজিট্যাল মিলেনিয়াম কপিরাইট অ্যাক্ট) অনুসারে প্রতিক্রিয়া জানানো এবং লঙ্ঘনের পুনরাবৃত্তি করা অ্যাকাউন্টগুলিকে বন্ধ করে দেওয়া Google-এর নীতি৷ Google-এর নীতির বিশদ এখানে পাওয়া যাবে http://www.9oo91e.qjz9zk/dmca.html৷

    -+

    15.2 Google এর বিজ্ঞাপন ব্যবসা সম্পর্কে একটি ট্রেড মার্ক অভিযোগ পদ্ধতি পরিচালনা করে, যার বিশদ বিবরণ এখানে পাওয়া যাবে http://www.9oo91e.qjz9zk/tm_complaint.html৷

    -

    16. বিজ্ঞাপনগুলি

    -

    16.1 কয়েকটি পরিষেবা বিজ্ঞাপনের আয় দ্বারা সমর্থিত এবং বিজ্ঞাপন এবং প্রচার প্রদর্শন করতে পারে৷ এই বিজ্ঞাপনগুলি পরিষেবাগুলিতে সঞ্চিত থাকা, পরিষেবাগুলির মাধ্যমে করা ক্যোয়ারী বা অন্যান্য তথ্য লক্ষ্য করে করা হতে পারে৷

    -

    16.2 পরিষেবাগুলিতে Google দ্বারা যে উপায়ে, মাধ্যমে এবং প্রসার পর্যন্ত বিজ্ঞাপন দেওয়া হয় তা আপনাকে নির্দিষ্ট বিজ্ঞপ্তি ব্যতীত পরিবর্তনসাপেক্ষ৷

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 আপনি স্বীকার করেন এবং সম্মত হন যে এমন কোন বাহ্যিক সাইটসমূহ বা রিসোর্সের উপলভ্যতার জন্য দায়বদ্ধ নয়, এবং এমন ওয়েব সাইটগুলি বা রিসোর্সের মাধ্যমে লভ্য কোন বিজ্ঞাপন, পণ্যসমূহ বা অন্য উপাদান প্রচার করে না৷

    -

    17.3 আপনি স্বীকার করেন এবং সম্মত হন যে কোন তৃতীয় পক্ষ দ্বারা বিকাশ করা কোন প্রয়োগের ব্যবহারের ফলে বা ব্যবহার করার অক্ষমতার ফলে, বা এমন প্রয়োগগুলির মাধ্যমে উপলভ্য কোন পণ্যসমূহের বা অন্য উপাদানগুলির উপস্থিতির ফলে বা আপনার সম্পূর্ণতা, নির্ভুলতা সম্পর্কিত কোন বিশ্বাসের ফলে আপনার হতে পারে এমন কোন লোকসান বা ক্ষতির জন্য Google দায়বদ্ধ নয়৷

    -

    18. শর্তাদিতে পরিবর্তন

    --

    18.1 Google সর্বজনীন শর্তাদি বা অতিরিক্ত শর্তাদিতে সময়ে সময়ে পরিবর্তন করতে পারে৷ এই পরিবর্তনগুলি করার সময়, Google এখানে সর্বজনীন শর্তাদির একটি নতুন অনুলিপি করবে http://accounts.google.com/TOS?hl=en এবং কোনও নতুন অতিরিক্ত শর্তাদি প্রভাবিত পরিষেবার মধ্যে বা মাধ্যমে আপনার কাছে উপলব্ধ করবে৷

    -+

    18.1 Google সর্বজনীন শর্তাদি বা অতিরিক্ত শর্তাদিতে সময়ে সময়ে পরিবর্তন করতে পারে৷ এই পরিবর্তনগুলি করার সময়, Google এখানে সর্বজনীন শর্তাদির একটি নতুন অনুলিপি করবে http://accounts.9oo91e.qjz9zk/TOS?hl=en এবং কোনও নতুন অতিরিক্ত শর্তাদি প্রভাবিত পরিষেবার মধ্যে বা মাধ্যমে আপনার কাছে উপলব্ধ করবে৷

    -

    18.2 আপনি বোঝেন এবং সম্মত হন যে আপনি যদি এই পরিষেবাগুলি সর্বজনীন শর্তাদি পরিবর্তন হয়ে যাওয়ার পরের কোন তারিখে ব্যবহার করেন Google আপনার ব্যবহারকে আধুনিকীকৃত সর্বজনীন শর্তাদি বা অতিরিক্ত শর্তাদির স্বীকার হিসাবে বিবেচনা করে৷

    -

    19. সাধারণ আইনি শর্তাদি

    -

    19.1 অনেক সময় আপনি যখন পরিষেবাগুলি ব্যবহার করেন, আপনি অন্য ব্যক্তি বা কোম্পানি দ্বারা সরবরাহিত (পরিষেবাগুলির ব্যবহারের ফলস্বরূপ, বা ব্যবহারের সাথে জড়িত) কোন পরিষেবা ব্যবহার করতে বা সফ্টওয়্যারের অংশ ডাউনলোড করতে বা জিনিস ক্রয় করতে পারেন৷ আপনার এই অন্য পরিষেবাগুলির, সফ্টওয়্যার বা বস্তুর ব্যবহার আপনি এবং সংশ্লিষ্ট কোম্পানি বা ব্যক্তির সাথে পৃথক শর্তাদি অনুসারে হতে পারে৷ যদি তাই হয়, শর্তাদি আপনার সাথে অন্য কোম্পানি বা ব্যক্তির আইনি সম্পর্ককে প্রভাবিত করে না৷ আপনার এই অন্য পরিষেবাগুলি, সফ্টওয়্যার বা বস্তুগুলির ব্যবহার আপনি এবং সংশ্লিষ্ট কোম্পানি বা ব্যক্তির মধ্যে পৃথক শর্তাদি অনুসারে হতে পারে৷ যদি তা হয়, তবে শর্তাদি এইগুলি সহ অন্য কোম্পানি বা ব্যক্তির সাথে আপনার আইনি সম্পর্কে কোন প্রভাব ফেলে না৷

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + শেষবার পরিবর্তন করা হয়েছে: ১ জানুয়ারি, ২০২১ +

    +

    +- Chrome বা Chrome OS ব্যবহার করার মাধ্যমে, আপনি https://policies.google.com/terms লিঙ্কে দেওয়া Google-এর পরিষেবার শর্তাবলী ও এই সূত্রে দেওয়া Google Chrome ও Chrome OS-এর অতিরিক্ত পরিষেবার শর্তাবলী মেনে চলার ব্যাপারে সম্মত হয়েছেন। ++ Chrome বা Chrome OS ব্যবহার করার মাধ্যমে, আপনি https://policies.9oo91e.qjz9zk/terms লিঙ্কে দেওয়া Google-এর পরিষেবার শর্তাবলী ও এই সূত্রে দেওয়া Google Chrome ও Chrome OS-এর অতিরিক্ত পরিষেবার শর্তাবলী মেনে চলার ব্যাপারে সম্মত হয়েছেন। +

    +

    +- Google Chrome ও Chrome OS-এর এই অতিরিক্ত পরিষেবার শর্তাবলী Chrome ও Chrome OS-এর চুক্তি নির্বাহকারী কোড ভার্সনের জন্য প্রযোজ্য হবে। Chrome-এর জন্য বেশির ভাগ সোর্স কোডই https://code.google.com/chromium/terms.html লিঙ্কে দেওয়া ওপেন সোর্স সফ্টওয়্যার লাইসেন্স চুক্তির অধীনে বিনামূল্যে পাওয়া যাবে। ++ Google Chrome ও Chrome OS-এর এই অতিরিক্ত পরিষেবার শর্তাবলী Chrome ও Chrome OS-এর চুক্তি নির্বাহকারী কোড ভার্সনের জন্য প্রযোজ্য হবে। Chrome-এর জন্য বেশির ভাগ সোর্স কোডই https://code.9oo91e.qjz9zk/chromium/terms.html লিঙ্কে দেওয়া ওপেন সোর্স সফ্টওয়্যার লাইসেন্স চুক্তির অধীনে বিনামূল্যে পাওয়া যাবে। +

    +

    + আপনি Chrome ও Chrome OS-এর যেসব নির্দিষ্ট উপাদান ব্যবহার করেন, তার জন্য আপনাকে নিচে উল্লিখিত শর্তাবলী মেনে চলতে হবে: diff --git a/components/resources/terms/terms_ca.html b/components/resources/terms/terms_ca.html --- a/components/resources/terms/terms_ca.html +++ b/components/resources/terms/terms_ca.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Condicions del servei addicionals de Google Chrome i Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Darrera modificació: 1 de gener de 2021 +

    - En utilitzar Chrome o Chrome OS, accepteu les Condicions del servei de Google, que podeu consultar a https://policies.google.com/terms, i aquestes Condicions del servei addicionals de Google Chrome i Chrome OS. + En utilitzar Chrome o Chrome OS, accepteu les Condicions del servei de Google, que podeu consultar a https://policies.9oo91e.qjz9zk/terms, i aquestes Condicions del servei addicionals de Google Chrome i Chrome OS. @@ -26177,9 +19139,9 @@ diff --git a/components/resources/terms/terms_ca.html b/components/resources/ter diff --git a/components/resources/terms/terms_cs.html b/components/resources/terms/terms_cs.html --- a/components/resources/terms/terms_cs.html +++ b/components/resources/terms/terms_cs.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Dodatečné smluvní podmínky prohlížeče Google Chrome a systému Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Naposledy upraveno: 1. ledna 2021 +

    - Používáním prohlížeče Chrome nebo systému Chrome OS vyjadřujete souhlas se smluvními podmínkami společnosti Google na adrese https://policies.google.com/terms a těmito dodatečnými smluvními podmínkami pro Google Chrome a Chrome OS. + Používáním prohlížeče Chrome nebo systému Chrome OS vyjadřujete souhlas se smluvními podmínkami společnosti Google na adrese https://policies.9oo91e.qjz9zk/terms a těmito dodatečnými smluvními podmínkami pro Google Chrome a Chrome OS. @@ -26193,9 +19155,9 @@ diff --git a/components/resources/terms/terms_cs.html b/components/resources/ter diff --git a/components/resources/terms/terms_da.html b/components/resources/terms/terms_da.html --- a/components/resources/terms/terms_da.html +++ b/components/resources/terms/terms_da.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Yderligere servicevilkår for Google Chrome og Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Sidst opdateret: 1. januar 2021 +

    - Når du bruger Chrome eller Chrome OS, accepterer du Googles servicevilkår, som kan findes på https://policies.google.com/terms, og disse yderligere servicevilkår for Google Chrome og Chrome OS. + Når du bruger Chrome eller Chrome OS, accepterer du Googles servicevilkår, som kan findes på https://policies.9oo91e.qjz9zk/terms, og disse yderligere servicevilkår for Google Chrome og Chrome OS. @@ -26209,9 +19171,9 @@ diff --git a/components/resources/terms/terms_da.html b/components/resources/ter diff --git a/components/resources/terms/terms_de.html b/components/resources/terms/terms_de.html --- a/components/resources/terms/terms_de.html +++ b/components/resources/terms/terms_de.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Zusätzliche Nutzungsbedingungen für Google Chrome und Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Letzte Änderung: 1. Januar 2021 +

    - Wenn Sie Chrome oder Chrome OS nutzen, stimmen Sie damit den Nutzungsbedingungen von Google unter https://policies.google.com/terms sowie diesen zusätzlichen Nutzungsbedingungen für Google Chrome und Chrome OS zu. + Wenn Sie Chrome oder Chrome OS nutzen, stimmen Sie damit den Nutzungsbedingungen von Google unter https://policies.9oo91e.qjz9zk/terms sowie diesen zusätzlichen Nutzungsbedingungen für Google Chrome und Chrome OS zu. @@ -26225,9 +19187,9 @@ diff --git a/components/resources/terms/terms_de.html b/components/resources/ter diff --git a/components/resources/terms/terms_el.html b/components/resources/terms/terms_el.html --- a/components/resources/terms/terms_el.html +++ b/components/resources/terms/terms_el.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Πρόσθετοι Όροι Παροχής Υπηρεσιών Google Chrome και Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Τελευταία τροποποίηση: 1η Ιανουαρίου 2021 +

    - Χρησιμοποιώντας το Chrome ή το Chrome OS, συμφωνείτε με τους Όρους Παροχής Υπηρεσιών της Google που μπορείτε να βρείτε στη διεύθυνση https://policies.google.com/terms και με τους Πρόσθετους Όρους Παροχής Υπηρεσιών του Google Chrome και του Chrome OS. + Χρησιμοποιώντας το Chrome ή το Chrome OS, συμφωνείτε με τους Όρους Παροχής Υπηρεσιών της Google που μπορείτε να βρείτε στη διεύθυνση https://policies.9oo91e.qjz9zk/terms και με τους Πρόσθετους Όρους Παροχής Υπηρεσιών του Google Chrome και του Chrome OS. @@ -26241,9 +19203,9 @@ diff --git a/components/resources/terms/terms_el.html b/components/resources/ter diff --git a/components/resources/terms/terms_en-GB.html b/components/resources/terms/terms_en-GB.html --- a/components/resources/terms/terms_en-GB.html +++ b/components/resources/terms/terms_en-GB.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome and Chrome OS additional Terms of Service - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Last modified: 01 January, 2021 +

    - By using Chrome or Chrome OS, you agree to the Google Terms of Service located at https://policies.google.com/terms and these Google Chrome and Chrome OS additional Terms of Service. + By using Chrome or Chrome OS, you agree to the Google Terms of Service located at https://policies.9oo91e.qjz9zk/terms and these Google Chrome and Chrome OS additional Terms of Service. @@ -26257,9 +19219,9 @@ diff --git a/components/resources/terms/terms_en-GB.html b/components/resources/ diff --git a/components/resources/terms/terms_en.html b/components/resources/terms/terms_en.html --- a/components/resources/terms/terms_en.html +++ b/components/resources/terms/terms_en.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome and Chrome OS Additional Terms of Service - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Last modified: 01 January, 2021 +

    - By using Chrome or Chrome OS, you agree to the Google Terms of Service located at https://policies.google.com/terms and these Google Chrome and Chrome OS Additional Terms of Service. + By using Chrome or Chrome OS, you agree to the Google Terms of Service located at https://policies.9oo91e.qjz9zk/terms and these Google Chrome and Chrome OS Additional Terms of Service. @@ -26273,9 +19235,9 @@ diff --git a/components/resources/terms/terms_en.html b/components/resources/ter diff --git a/components/resources/terms/terms_es-419.html b/components/resources/terms/terms_es-419.html --- a/components/resources/terms/terms_es-419.html +++ b/components/resources/terms/terms_es-419.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Condiciones del Servicio Adicionales de Google Chrome y el Sistema operativo Chrome - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Última modificación: 1 de enero de 2021 +

    - Al usar Chrome o el Sistema operativo Chrome, confirma que acepta las Condiciones del Servicio de Google (que se encuentran en https://policies.google.com/terms) y estas Condiciones del Servicio Adicionales de Google Chrome y el Sistema operativo Chrome. + Al usar Chrome o el Sistema operativo Chrome, confirma que acepta las Condiciones del Servicio de Google (que se encuentran en https://policies.9oo91e.qjz9zk/terms) y estas Condiciones del Servicio Adicionales de Google Chrome y el Sistema operativo Chrome. @@ -26289,9 +19251,9 @@ diff --git a/components/resources/terms/terms_es-419.html b/components/resources diff --git a/components/resources/terms/terms_es.html b/components/resources/terms/terms_es.html --- a/components/resources/terms/terms_es.html +++ b/components/resources/terms/terms_es.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Términos del Servicio Adicionales de Google Chrome y Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Última modificación: 1 de enero del 2021 +

    - Al utilizar Google Chrome o Chrome OS, aceptas los Términos del Servicio de Google disponibles en https://policies.google.com/terms y estos Términos del Servicio Adicionales de Google Chrome y Chrome OS. + Al utilizar Google Chrome o Chrome OS, aceptas los Términos del Servicio de Google disponibles en https://policies.9oo91e.qjz9zk/terms y estos Términos del Servicio Adicionales de Google Chrome y Chrome OS. @@ -26305,9 +19267,9 @@ diff --git a/components/resources/terms/terms_es.html b/components/resources/ter diff --git a/components/resources/terms/terms_et.html b/components/resources/terms/terms_et.html --- a/components/resources/terms/terms_et.html +++ b/components/resources/terms/terms_et.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome'i ja Chrome OS-i lisateenusetingimused - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Viimati muudetud: 1. jaanuar 2021 +

    - Kasutades Chrome'i või Chrome OS-i, nõustute Google'i teenusetingimustega, mis asuvad saidil https://policies.google.com/terms, ning Google Chrome'i ja Chrome OS-i lisateenusetingimustega. + Kasutades Chrome'i või Chrome OS-i, nõustute Google'i teenusetingimustega, mis asuvad saidil https://policies.9oo91e.qjz9zk/terms, ning Google Chrome'i ja Chrome OS-i lisateenusetingimustega. @@ -26321,9 +19283,9 @@ diff --git a/components/resources/terms/terms_et.html b/components/resources/ter diff --git a/components/resources/terms/terms_fa.html b/components/resources/terms/terms_fa.html --- a/components/resources/terms/terms_fa.html +++ b/components/resources/terms/terms_fa.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - شرایط خدمات تکمیلی Google Chrome و «سیستم‌عامل Chrome» - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + تاریخ آخرین تغییر: ۱ ژانویه ۲۰۲۱ +

    - درصورت استفاده از Chrome یا «سیستم‌عامل Chrome»، با «شرایط و ضوابط Google» موجود در https://policies.google.com/terms و این «شرایط خدمات تکمیلی» Google Chrome و «سیستم‌عامل Chrome» موافقت می‌کنید. + درصورت استفاده از Chrome یا «سیستم‌عامل Chrome»، با «شرایط و ضوابط Google» موجود در https://policies.9oo91e.qjz9zk/terms و این «شرایط خدمات تکمیلی» Google Chrome و «سیستم‌عامل Chrome» موافقت می‌کنید. @@ -26337,9 +19299,9 @@ diff --git a/components/resources/terms/terms_fa.html b/components/resources/ter diff --git a/components/resources/terms/terms_fi.html b/components/resources/terms/terms_fi.html --- a/components/resources/terms/terms_fi.html +++ b/components/resources/terms/terms_fi.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chromen ja Chrome-käyttöjärjestelmän lisäkäyttöehdot - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Muokattu viimeksi: 1.1.2021 +

    - Käyttämällä Chromea tai Chrome-käyttöjärjestelmää hyväksyt osoitteessa https://policies.google.com/terms olevat Googlen käyttöehdot sekä nämä Google Chromen ja Chrome-käyttöjärjestelmän lisäkäyttöehdot. + Käyttämällä Chromea tai Chrome-käyttöjärjestelmää hyväksyt osoitteessa https://policies.9oo91e.qjz9zk/terms olevat Googlen käyttöehdot sekä nämä Google Chromen ja Chrome-käyttöjärjestelmän lisäkäyttöehdot. @@ -26353,9 +19315,9 @@ diff --git a/components/resources/terms/terms_fi.html b/components/resources/ter diff --git a/components/resources/terms/terms_fil.html b/components/resources/terms/terms_fil.html --- a/components/resources/terms/terms_fil.html +++ b/components/resources/terms/terms_fil.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Mga Karagdagang Tuntunin ng Serbisyo ng Google Chrome at Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Huling binago: Enero 1, 2021 +

    - Sa paggamit sa Chrome o Chrome OS, sumasang-ayon ka sa Mga Tuntunin ng Serbisyo ng Google na makikita sa https://policies.google.com/terms at sa Mga Karagdagang Tuntunin ng Serbisyo ng Google Chrome at Chrome OS na ito. + Sa paggamit sa Chrome o Chrome OS, sumasang-ayon ka sa Mga Tuntunin ng Serbisyo ng Google na makikita sa https://policies.9oo91e.qjz9zk/terms at sa Mga Karagdagang Tuntunin ng Serbisyo ng Google Chrome at Chrome OS na ito. @@ -26369,9 +19331,9 @@ diff --git a/components/resources/terms/terms_fil.html b/components/resources/te diff --git a/components/resources/terms/terms_fr.html b/components/resources/terms/terms_fr.html --- a/components/resources/terms/terms_fr.html +++ b/components/resources/terms/terms_fr.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Dernière modification : 1er janvier 2021 +

    - En utilisant Chrome ou Chrome OS, vous acceptez les Conditions d'utilisation de Google disponibles sur https://policies.google.com/terms et les présentes Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS. + En utilisant Chrome ou Chrome OS, vous acceptez les Conditions d'utilisation de Google disponibles sur https://policies.9oo91e.qjz9zk/terms et les présentes Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS. @@ -26385,63 +19347,25 @@ diff --git a/components/resources/terms/terms_fr.html b/components/resources/ter diff --git a/components/resources/terms/terms_gu.html b/components/resources/terms/terms_gu.html --- a/components/resources/terms/terms_gu.html +++ b/components/resources/terms/terms_gu.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome સેવાની શરતો

    -

    આ સેવાની શરતો Google Chrome ના એક્ઝિક્યૂટેબલ કોડ વર્ઝન પર લાગુ થાય છે. Google Chrome માટે સ્રોત કોડ chrome://credits પર ઓપન સોર્સ સૉફ્ટવેર લાઇસેંસ હેઠળ નિઃશુલ્ક ઉપલબ્ધ છે.

    -

    1. Google સાથે આપનો સંબંધ

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 આપ સ્વીકારો છો કે, Google સાથેના એક અલગ કરાર દ્વારા આમ કરવા માટેની વિશિષ્ટ રૂપે પરવાનગી પ્રાપ્ત કર્યા સિવાય, આપ સેવાનું કોઈપણ હેતુ માટે પુનઃઉત્પાદન, ડુપ્લિકેટ, કૉપિ, વેચાણ, વેપાર અથવા પુનઃવેચાણ કરશો નહીં.

    -

    5.4 આપ સ્વીકારો છો કે, આપ શરતોની અંતર્ગત આપેલા કોઈપણ કરારના ભંગ માટે અને આવા કોઈપણ કરારભંગના પરિણામ માટે (કોઈપણ હાનિ કે નુકસાન કે જે Google ભોગવે તે સહિત) સંપૂર્ણપણે જવાબદાર (અને એ કે Google આપના કે કોઈ તૃતીય પક્ષ માટે જવાબદાર નથી) છો.

    -

    6. ગોપનીયતા અને આપની વ્યક્તિગત માહિતી

    --

    6.1 Google ની ડેટા સંરક્ષણ પ્રેક્ટિસિસ વિશે વધુ માહિતી માટે, કૃપા કરીને http://www.google.com/privacy.html અને http://www.google.com/chromeframe/intl/en/privacy.html પર Google ની ગોપનીયતા નીતિ વાંચો. આ નીતિ સ્પષ્ટ કરે છે કે Google તમારી વ્યક્તિગત માહિતીને કેવી રીતે લે છે, અને જ્યારે તમે સેવાઓનો ઉપયોગ કરો છો ત્યારે તમારી ગોપનીયતાનું કેવી રીતે રક્ષણ કરે છે.

    -+

    6.1 Google ની ડેટા સંરક્ષણ પ્રેક્ટિસિસ વિશે વધુ માહિતી માટે, કૃપા કરીને http://www.9oo91e.qjz9zk/privacy.html અને http://www.9oo91e.qjz9zk/chromeframe/intl/en/privacy.html પર Google ની ગોપનીયતા નીતિ વાંચો. આ નીતિ સ્પષ્ટ કરે છે કે Google તમારી વ્યક્તિગત માહિતીને કેવી રીતે લે છે, અને જ્યારે તમે સેવાઓનો ઉપયોગ કરો છો ત્યારે તમારી ગોપનીયતાનું કેવી રીતે રક્ષણ કરે છે.

    -

    6.2 Google ની ગોપનીયતા નીતિ અનુસાર આપના ડેટાના ઉપયોગને આપ સ્વીકારો છો.

    -

    7. સેવાઓમાં સામગ્રી

    -

    7.1 આપ સમજો છો કે બધી માહિતી (જેમ કે ડેટા ફાઇલો, લિખિત ટેક્સ્ટ, કમ્પ્યુટર સૉફ્ટવેર, સંગીત, ઑડિયો ફાઇલ્સ અથવા અન્ય સાઉન્ડ્સ, ફોટાઓ, વિડિઓ અથવા અન્ય છબીઓ) કે જે સેવાના એક ભાગ તરીકે અથવા તેના ઉપયોગ દ્વારા ઍક્સેસ કરી શકો છો, તેની સંપૂર્ણ જવાબદારી તે વ્યક્તિની છે જેણે આ સામગ્રી બનાવી છે. આ પ્રકારની બધી માહિતીને નીચે "સામગ્રી" તરીકે ઉલ્લેખિત કરવામાં આવેલ છે.

    -

    7.2 આપ વાકેફ હોવા જોઈએ કે સેવાનાં ભાગ રૂપે પ્રદર્શિત થતી સામગ્રી, સેવામાંની જાહેરાતો અને સેવામાંની પ્રાયોજિત સામગ્રી સહિત પરંતુ એટલે સુધી મર્યાદિત નહીં, તે સામગ્રીનાં પ્રાયોજક અથવા જાહેરાતકર્તા કે જેણે Google ને (અથવા તેના વતી કોઈ અન્ય વ્યક્તિઓ અથવા કંપનીઓ દ્વારા) આ સામગ્રી પૂરી પાડેલ છે, તેની બૌદ્ધિક સંપદા હકો દ્વારા સુરક્ષિત હોઈ શકે છે. જ્યાં સુધી આપને Google અથવા તે સામગ્રીનાં સ્વામી દ્વારા એવું કરવા માટે સ્પષ્ટ રૂપે, એક અલગ કરારમાં, કહેવામાં ન આવે ત્યા સુધી આપ આ સામગ્રી (સમગ્ર અથવા તેના કોઈ ભાગ) નું સંશોધન, ભાડું, લીઝ, લૉન, વેચાણ, વિતરણ અથવા તેના આધાર પર કોઈ વિગતવાર કાર્ય બનાવી શકતા નથી.

    --

    7.3 Google પાસે કોઈપણ સેવામાંની બધી કે કોઈપણ સામગ્રીને પ્રી-સ્ક્રિન, સમીક્ષા, ફ્લૅગ, ફિલ્ટર, સંશોધન, મનાઈ, અથવા કાઢી નાખવાનાં અધિકારો (પરંતુ તેવો કોઈ કરાર ન હોવો જોઈએ) અનામત છે. કેટલીક સેવાઓ માટે, Google વિશિષ્ટ લૈંગિક સામગ્રીને ફિલ્ટર આઉટ કરવા માટેના ઉપકરણો પૂરા પાડી શકે છે. આ ઉપકરણોમાં સુરક્ષિતશોધ પસંદગી સેટિંગ્સ રહેલી હોય છે (જુઓ :https://support.google.com/websearch/answer/510). તે ઉપરાંત, તેવા સૉફ્ટવેર અને સેવાઓ વાણિજ્યિક ધોરણે ઉપલબ્ધ છે જે સામગ્રીની ઍક્સેસને મર્યાદિત કરે છે જે આપને વાંધાજનક લાગતી હોય.

    -+

    7.3 Google પાસે કોઈપણ સેવામાંની બધી કે કોઈપણ સામગ્રીને પ્રી-સ્ક્રિન, સમીક્ષા, ફ્લૅગ, ફિલ્ટર, સંશોધન, મનાઈ, અથવા કાઢી નાખવાનાં અધિકારો (પરંતુ તેવો કોઈ કરાર ન હોવો જોઈએ) અનામત છે. કેટલીક સેવાઓ માટે, Google વિશિષ્ટ લૈંગિક સામગ્રીને ફિલ્ટર આઉટ કરવા માટેના ઉપકરણો પૂરા પાડી શકે છે. આ ઉપકરણોમાં સુરક્ષિતશોધ પસંદગી સેટિંગ્સ રહેલી હોય છે (જુઓ :https://support.9oo91e.qjz9zk/websearch/answer/510). તે ઉપરાંત, તેવા સૉફ્ટવેર અને સેવાઓ વાણિજ્યિક ધોરણે ઉપલબ્ધ છે જે સામગ્રીની ઍક્સેસને મર્યાદિત કરે છે જે આપને વાંધાજનક લાગતી હોય.

    -

    7.4 આપ સમજો છો કે સેવાના ઉપયોગ દ્વારા એવી સામગ્રી પ્રદર્શિત થઈ શકે છે કે જે આપને અપમાનકારક, અશિષ્ટ અથવા વાંધાજનક લાગે, આ સંદર્ભમાં, આપ સ્વયંના જોખમે આ સેવાઓનો ઉપયોગ કરો છો.

    -

    7.5 આપ સ્વીકારો છો કે સેવાઓનો ઉપયોગ કરવા દરમિયાન આપે બનાવેલ, સંચારિત કરેલ અથવા પ્રદર્શિત કરેલ સામગ્રી અને આપના આ રીતની ક્રિયાઓનાં પરિણામ (કોઈપણ હાનિ કે નુકસાન કે જે Google ભોગવે તે સહિત) માટે આપ સંપૂર્ણપણે જવાબદાર છો.

    -

    8. સ્વત્વાધારિત હકો

    -

    આપ સ્વીકારો છો કે Google (અથવા Google ના લાઇસેંસધારક) બધા કાનૂની હકો, ટાઇટલ અને સેવામાં અને સેવાનું હિત, સેવાઓમાં રહેલા કોઈપણ બૌદ્ધિક સંપદા હકો સહિત, (પછી ભલે તે હકો નોંધાયેલા હોય કે ન હોય, અને વિશ્વમાં ક્યાંય તે હકો અસ્તિત્વમાં હોય) નાં હકો ધરાવે છે.

    -

    8.2 Google સાથેની લિખિતમાં મંજૂરી સિવાય, કોઈપણ શરત આપને Google નાં કોઈપણ ટ્રેડ નામ, ટ્રેડ માર્ક્સ, સેવા ચિહ્નો, લોગો, ડોમેન નામ અને અન્ય વિશિષ્ટ બ્રાન્ડ સુવિધાઓનાં ઉપયોગનો અધિકાર આપતી નથી.

    --

    8.3 જો આપને આ બ્રાન્ડ સુવિધાઓમાંના કોઈપણમાં ઉપયોગ માટે Google દ્વારા એક અલગ લિખિત કરારમાં સ્પષ્ટ અધિકાર આપવામાં આવ્યો હોય, તો પછી આપ સ્વીકારો છો કે આવી કોઈ સુવિધાનો ઉપયોગ કરવા માટે તે કરાર, શરતોની કોઈ લાગુ જોગવાઈ અને સમય-સમયે Google ની બ્રાન્ડ સુવિધાઓનાં ઉપયોગનાં અપડેટ થતાં માર્ગદર્શનને અનુસરી શકો છો. આ દિશાનિર્દેશો ઑનલાઇન http://www.google.com/permissions/guidelines.html (અથવા અન્ય URL કે જે Google દ્વારા આ હેતુથી સમય-સમય પર પ્રદાન કરવામાં આવે છે) પર જોઈ શકાય છે.

    -+

    8.3 જો આપને આ બ્રાન્ડ સુવિધાઓમાંના કોઈપણમાં ઉપયોગ માટે Google દ્વારા એક અલગ લિખિત કરારમાં સ્પષ્ટ અધિકાર આપવામાં આવ્યો હોય, તો પછી આપ સ્વીકારો છો કે આવી કોઈ સુવિધાનો ઉપયોગ કરવા માટે તે કરાર, શરતોની કોઈ લાગુ જોગવાઈ અને સમય-સમયે Google ની બ્રાન્ડ સુવિધાઓનાં ઉપયોગનાં અપડેટ થતાં માર્ગદર્શનને અનુસરી શકો છો. આ દિશાનિર્દેશો ઑનલાઇન http://www.9oo91e.qjz9zk/permissions/guidelines.html (અથવા અન્ય URL કે જે Google દ્વારા આ હેતુથી સમય-સમય પર પ્રદાન કરવામાં આવે છે) પર જોઈ શકાય છે.

    -

    8.4 Google સ્વીકારે છે કે તે આ શરતો હેઠળ અથવા આપની સબમિટ, પોસ્ટ કરેલ, સંચારિત અથવા પ્રદર્શિત કરેલ સામગ્રી અથવા તે સામગ્રીમાં રહેલા કોઈ પણ બૌદ્ધિક સંપદા હકો (ભલે તે હકો નોંધાયા હોય કે નહીં અને તે હકો વિશ્વમાં ક્યાંય પણ અસ્તિત્વમાં હોય) સહિતની સેવાઓ મારફતે આપની પાસેથી (અથવા આપના લાઇસેંસરો) પાસેથી કોઈ પણ અધિકાર, માલિકી હક અથવા લાભ મેળવતું નથી. તમે સ્વીકાર્યું હોય અથવા Google સાથે લિખિત સંમત થયા હોવ એ સિવાય તમે સંમત થાઓ છો કે તમે તે હકોને સુરક્ષિત રાખવા અને અમલ કરવા માટે જવાબદાર છો અને એ કે તમારા વતી આવું કરવામાં Google ને કોઈ બંધન નથી.

    -

    8.5 આપ સ્વીકારો છો કે કોઈપણ માલિકી હકની સૂચનાઓ (કૉપિરાઇટ અને ટ્રેડ માર્ક સૂચનાઓ સહિત) ને કાઢી, છુપાવી કે બદલી શકતા નથી કે જે સેવાઓની અંતર્ગત ઉમેરેલ અથવા તેમાં રહેલ હોઈ શકે છે.

    -

    8.6 જો કે Google દ્વારા આપને લિખિતમાં તેમ કરવાની સ્પષ્ટ અધિકૃતતા આપવામાં આવી છે, તેમ છતાં આપ સ્વીકારો છો કે સેવાનાં ઉપયોગમાં, આપ કોઈ ટ્રેડમાર્ક, સેવા ચિહ્ન, ટ્રેડ નામ, કોઈ કંપની અથવા સંસ્થાના લોગોનો ઉપયોગ એ પ્રકારે કે હેતુપૂર્વક કરી શકતા નથી કે જેથી તેવા માર્ક્સ, નામ અથવા લોગોનાં અધિકૃત ઉપયોગકર્તાઓ અથવા માલિક વિશે ગૂંચવણનું કારણ બને.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (IV) આપના પાસવર્ડ અને એકાઉન્ટની વિગતોને સુરક્ષિત અને ગોપનીય રાખવામાં આપની નિષ્ફળતા;

    -

    14.2 GOOGLE ની ઉપર ફકરા 14.1 માંની આપના પ્રત્યેની મર્યાદાઓ આવા પ્રકારનાં કોઈપણ નુકસાન ઉદ્ભવે તેની સંભાવના માટે જાગ્રત હોય અથવા તે માટેની સલાહ આપતું હોય અથવા ન આપતું હોય તો પણ લાગુ થઈ શકે છે.

    -

    15. કૉપીરાઇટ અને ટ્રેડ માર્ક નીતિઓ

    --

    15.1 તે Google ની નીતિ છે કે કૉપીરાઇટ ઉલ્લંઘનનાં આરોપ કે જે લાગુ અંતરરાષ્ટ્રીય બૌદ્ધિક સંપદા કાયદાનું પાલન કરે છે (યુનાઇટેડ સ્ટેટ્સમાં, ડિજિટલ મિલેનિયમ કૉપીરાઇટ ધારા સહિત) તેની સૂચનાઓનો જવાબ આપવો અને વારંવાર ઉલ્લંઘન કરનારના ખાતાને બંધ કરવું. Google ની નીતિઓની વિગત http://www.google.com/dmca.html પર મળી શકે છે.

    --

    15.2 Google તેના જાહેરાત ઉદ્યોગનાં સંબંધમાં એક ટ્રેડમાર્ક કમ્પલેંટ પ્રોસીજર ચલાવે છે, જેની વિગતો આપ અહીં મેળવી શકો છો http://www.google.com/tm_complaint.html.

    -+

    15.1 તે Google ની નીતિ છે કે કૉપીરાઇટ ઉલ્લંઘનનાં આરોપ કે જે લાગુ અંતરરાષ્ટ્રીય બૌદ્ધિક સંપદા કાયદાનું પાલન કરે છે (યુનાઇટેડ સ્ટેટ્સમાં, ડિજિટલ મિલેનિયમ કૉપીરાઇટ ધારા સહિત) તેની સૂચનાઓનો જવાબ આપવો અને વારંવાર ઉલ્લંઘન કરનારના ખાતાને બંધ કરવું. Google ની નીતિઓની વિગત http://www.9oo91e.qjz9zk/dmca.html પર મળી શકે છે.

    -+

    15.2 Google તેના જાહેરાત ઉદ્યોગનાં સંબંધમાં એક ટ્રેડમાર્ક કમ્પલેંટ પ્રોસીજર ચલાવે છે, જેની વિગતો આપ અહીં મેળવી શકો છો http://www.9oo91e.qjz9zk/tm_complaint.html.

    -

    16. જાહેરાતો

    -

    16.1 કેટલીક સેવાઓ જાહેરાતોથી આવક દ્વારા સમર્થિત હોય છે અને જાહેરાતો અને પ્રમોશન પ્રદર્શિત કરી શકે છે. આ જાહેરાતો સેવાઓ પર સંગ્રહિત માહિતીની સામગ્રી, સેવાઓ દ્વારા થતા પ્રશ્નો અને અન્ય માહિતીને અનુલક્ષીને હોય છે.

    -

    16.2 સેવાઓ પર જાહેરાતોની પદ્ધતિ, મોડ અને તેની સમય મર્યાદા, આપને કોઈ વિશિષ્ટ સૂચના આપ્યા વગર બદલવામાં આવી શકે છે.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 તમે સ્વીકારો છો કે Google કોઈપણ બાહ્ય સાઇટ્સ અથવા સંસાધનોની ઉપલબ્ધતા માટે જવાબદાર નથી અને એવી વેબ સાઇટ્સ અથવા સંસાધનો પરની અથવા તરફની કોઈપણ જાહેરાત, ઉત્પાદનો અથવા અન્ય સામગ્રીનું સમર્થન કરતું નથી.

    -

    17.3 તમે સ્વીકારો છો કે Google એવી બાહ્ય સાઇટ્સ અથવા સંસાધનોની ઉપલબ્ધતાનાં પરિણામ રૂપે આપના દ્વારા થયેલી હાનિ કે નુકસાન અથવા એવી વેબ સાઇટ્સ અથવા સંસાધનો પર અથવા તેના દ્વારા ઉપલબ્ધ કરવામાં આવેલ જાહેરાત, ઉત્પાદનો અથવા અન્ય સામગ્રીની સમ્પૂર્ણતા, ચોકસાઈ અથવા અસ્તિત્વ પર તમારા દ્વારા વિશ્વાસ કર્યાનાં પરિણામે થયેલી હાનિ કે નુકસાન માટે જવાબદાર નથી.

    -

    18. શરતોમાં ફેરફાર

    --

    18.1 Google વૈશ્વિક શરતો અથવા વધારાની શરતોમાં સમય-સમયે ફેરફાર કરી શકે છે. જ્યારે આ ફેરફારો કરવામાં આવે, Google વૈશ્વિક શરતોની એક નવી કૉપિ બનાવશે જે http://www.google.com/chrome/intl/en/eula_text.html પર ઉપલબ્ધ રહેશે અને કોઈપણ વધારાની શરતો તેનાથી સંબંધિત સેવાઓ દ્વારા અથવા તેની અંતર્ગત આપને ઉપલબ્ધ કરાવવામાં આવશે.

    -+

    18.1 Google વૈશ્વિક શરતો અથવા વધારાની શરતોમાં સમય-સમયે ફેરફાર કરી શકે છે. જ્યારે આ ફેરફારો કરવામાં આવે, Google વૈશ્વિક શરતોની એક નવી કૉપિ બનાવશે જે http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html પર ઉપલબ્ધ રહેશે અને કોઈપણ વધારાની શરતો તેનાથી સંબંધિત સેવાઓ દ્વારા અથવા તેની અંતર્ગત આપને ઉપલબ્ધ કરાવવામાં આવશે.

    -

    18.2 આપ સ્વીકારો છો કે વૈશ્વિક શરતો અથવા વધારાની શરતોમાં ફેરફાર કર્યા પછીની તારીખથી આપ સેવાઓનો ઉપયોગ કરશો, તો Google તેને અપડેટેડ વૈશ્વિક શરતો અથવા વધારાની શરતોનો આપના દ્વારા સ્વીકાર માનશે.

    -

    19. સામાન્ય કાયદેસરની શરતો

    -

    19.1 કેટલીકવાર આપ જ્યારે સેવાનો ઉપયોગ કરો છો, ત્યારે આપ (પરિણામ રૂપે, કે સેવાનાં આપના ઉપયોગ દ્વારા) સેવાનો ઉપયોગ કરી શકો છો અથવા સૉફ્ટવેરનાં કોઈ ભાગને ડાઉનલોડ કરી શકો છો, અથવા કોઈ માલની ખરીદી કરી શકો છો, જે કોઈ અન્ય વ્યક્તિ અથવા કંપની દ્વારા આપવામાં આવી હોય. આ અન્ય સેવાઓ, સૉફ્ટવેર અથવા માલનો ઉપયોગ તેની સાથે જોડાયેલ અન્ય વ્યક્તિ અથવા કંપની અને આપની વચ્ચેની અલગ શરતોનો વિષય છે. જો આમ બને, તો આ શરતો, આપના અન્ય વ્યક્તિઓ અથવા કંપનીઓ સાથેના કાનૂની સંબંધો પર લાગુ થશે નહીં.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + છેલ્લે ફેરફાર કર્યાની તારીખ: 1 જાન્યુઆરી, 2021 +

    +

    +- Chrome અથવા Chrome OSનો ઉપયોગ કરીને, તમે https://policies.google.com/terms ખાતે દર્શાવેલી Google સેવાની શરતો અને આ Google Chrome અને Chrome OSની વધારાની સેવાની શરતો સાથે સંમત થાઓ છો. ++ Chrome અથવા Chrome OSનો ઉપયોગ કરીને, તમે https://policies.9oo91e.qjz9zk/terms ખાતે દર્શાવેલી Google સેવાની શરતો અને આ Google Chrome અને Chrome OSની વધારાની સેવાની શરતો સાથે સંમત થાઓ છો. +

    +

    +- આ Google Chrome અને Chrome OSની વધારાની સેવાની શરતો Chrome અને Chrome OSનાં અમલ કરવા યોગ્ય કોડ વર્ઝન પર લાગુ થાય છે. Chrome માટે મોટેભાગના સૉર્સ કોડ https://code.google.com/chromium/terms.html પર ઓપન સૉર્સ સૉફ્ટવેર લાઇસન્સના કરાર હેઠળ મફતમાં ઉપલબ્ધ છે. ++ આ Google Chrome અને Chrome OSની વધારાની સેવાની શરતો Chrome અને Chrome OSનાં અમલ કરવા યોગ્ય કોડ વર્ઝન પર લાગુ થાય છે. Chrome માટે મોટેભાગના સૉર્સ કોડ https://code.9oo91e.qjz9zk/chromium/terms.html પર ઓપન સૉર્સ સૉફ્ટવેર લાઇસન્સના કરાર હેઠળ મફતમાં ઉપલબ્ધ છે. +

    +

    + Chrome અને Chrome OSનાં અમુક ઘટકોનો તમારો ઉપયોગ નીચે આપેલી શરતોને આધીન છે: diff --git a/components/resources/terms/terms_he.html b/components/resources/terms/terms_he.html --- a/components/resources/terms/terms_he.html +++ b/components/resources/terms/terms_he.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - תנאים והגבלות נוספים של Google Chrome ו-Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + תאריך השינוי האחרון: 1 בינואר 2021 +

    - שימוש ב-Chrome או ב-Chrome OS מצידך מבטא את הסכמתך לתנאים ולהגבלות של Google, המפורטים בכתובת https://policies.google.com/terms, ולתנאים ולהגבלות הנוספים של Google Chrome ושל Chrome OS, המפורטים כאן. + שימוש ב-Chrome או ב-Chrome OS מצידך מבטא את הסכמתך לתנאים ולהגבלות של Google, המפורטים בכתובת https://policies.9oo91e.qjz9zk/terms, ולתנאים ולהגבלות הנוספים של Google Chrome ושל Chrome OS, המפורטים כאן. @@ -26455,9 +19379,9 @@ diff --git a/components/resources/terms/terms_he.html b/components/resources/ter diff --git a/components/resources/terms/terms_hi.html b/components/resources/terms/terms_hi.html --- a/components/resources/terms/terms_hi.html +++ b/components/resources/terms/terms_hi.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome और Chrome OS की सेवा की अतिरिक्त शर्तें - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + इस तारीख को अंतिम बार बदलाव किया गया था: 1 जनवरी, 2021 +

    - Chrome या Chrome OS इस्तेमाल करने का मतलब है कि आप https://policies.google.com/terms पर दी गई Google सेवा की शर्तों से सहमत हैं. इसका मतलब यह भी है कि आप Google Chrome और Chrome OS की सेवा की इन अतिरिक्त शर्तों से भी सहमत हैं. + Chrome या Chrome OS इस्तेमाल करने का मतलब है कि आप https://policies.9oo91e.qjz9zk/terms पर दी गई Google सेवा की शर्तों से सहमत हैं. इसका मतलब यह भी है कि आप Google Chrome और Chrome OS की सेवा की इन अतिरिक्त शर्तों से भी सहमत हैं. @@ -26471,9 +19395,9 @@ diff --git a/components/resources/terms/terms_hi.html b/components/resources/ter diff --git a/components/resources/terms/terms_hr.html b/components/resources/terms/terms_hr.html --- a/components/resources/terms/terms_hr.html +++ b/components/resources/terms/terms_hr.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Dodatni uvjeti pružanja usluge za Google Chrome i Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Zadnja izmjena: 1. siječnja 2021. +

    - Korištenjem Chromea ili OS Chromea prihvaćate Googleove uvjete pružanja usluge na https://policies.google.com/terms i ove Dodatne uvjete pružanja usluge za Google Chrome i OS Chrome. + Korištenjem Chromea ili OS Chromea prihvaćate Googleove uvjete pružanja usluge na https://policies.9oo91e.qjz9zk/terms i ove Dodatne uvjete pružanja usluge za Google Chrome i OS Chrome. @@ -26487,9 +19411,9 @@ diff --git a/components/resources/terms/terms_hr.html b/components/resources/ter diff --git a/components/resources/terms/terms_hu.html b/components/resources/terms/terms_hu.html --- a/components/resources/terms/terms_hu.html +++ b/components/resources/terms/terms_hu.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - A Google Chrome és a Chrome OS Kiegészítő Általános Szerződési Feltételei - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Legutóbbi módosítás: 2021. január 1. +

    - A Chrome vagy a Chrome OS használatával Ön elfogadja a https://policies.google.com/terms oldalon hozzáférhető Google Általános Szerződési Feltételeket, továbbá a Google Chrome és a Chrome OS jelen Kiegészítő Általános Szerződési Feltételeit. + A Chrome vagy a Chrome OS használatával Ön elfogadja a https://policies.9oo91e.qjz9zk/terms oldalon hozzáférhető Google Általános Szerződési Feltételeket, továbbá a Google Chrome és a Chrome OS jelen Kiegészítő Általános Szerződési Feltételeit. @@ -26503,9 +19427,9 @@ diff --git a/components/resources/terms/terms_hu.html b/components/resources/ter diff --git a/components/resources/terms/terms_id.html b/components/resources/terms/terms_id.html --- a/components/resources/terms/terms_id.html +++ b/components/resources/terms/terms_id.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Persyaratan Layanan Tambahan Google Chrome dan Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Terakhir diubah: 1 Januari 2021 +

    - Dengan menggunakan Chrome atau Chrome OS, Anda menyetujui Persyaratan Layanan Google yang ada di https://policies.google.com/terms serta Persyaratan Layanan Tambahan Google Chrome dan Chrome OS ini. + Dengan menggunakan Chrome atau Chrome OS, Anda menyetujui Persyaratan Layanan Google yang ada di https://policies.9oo91e.qjz9zk/terms serta Persyaratan Layanan Tambahan Google Chrome dan Chrome OS ini. @@ -26519,9 +19443,9 @@ diff --git a/components/resources/terms/terms_id.html b/components/resources/ter diff --git a/components/resources/terms/terms_it.html b/components/resources/terms/terms_it.html --- a/components/resources/terms/terms_it.html +++ b/components/resources/terms/terms_it.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Termini di servizio aggiuntivi di Google Chrome e Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Ultima modifica: 1° gennaio 2021 +

    - Con l'utilizzo di Chrome o Chrome OS, l'utente accetta i Termini di servizio di Google disponibili all'indirizzo https://policies.google.com/terms, nonché i presenti Termini di servizio aggiuntivi di Google Chrome e Chrome OS. + Con l'utilizzo di Chrome o Chrome OS, l'utente accetta i Termini di servizio di Google disponibili all'indirizzo https://policies.9oo91e.qjz9zk/terms, nonché i presenti Termini di servizio aggiuntivi di Google Chrome e Chrome OS. @@ -26535,9 +19459,9 @@ diff --git a/components/resources/terms/terms_it.html b/components/resources/ter diff --git a/components/resources/terms/terms_ja.html b/components/resources/terms/terms_ja.html --- a/components/resources/terms/terms_ja.html +++ b/components/resources/terms/terms_ja.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome および Chrome OS 追加利用規約 - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + 最終更新日: 2021 年 1 月 1 日 +

    - Chrome または Chrome OS を使用することにより、Google 利用規約 https://policies.google.com/terms と、この Google Chrome および Chrome OS 追加利用規約に同意したことになります。 + Chrome または Chrome OS を使用することにより、Google 利用規約 https://policies.9oo91e.qjz9zk/terms と、この Google Chrome および Chrome OS 追加利用規約に同意したことになります。 @@ -26551,63 +19475,25 @@ diff --git a/components/resources/terms/terms_ja.html b/components/resources/ter diff --git a/components/resources/terms/terms_kn.html b/components/resources/terms/terms_kn.html --- a/components/resources/terms/terms_kn.html +++ b/components/resources/terms/terms_kn.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome ಸೇವಾ ನಿಯಮಗಳು

    -

    ಈ ಸೇವೆಯ ನಿಯಮಗಳುGoogle Chrome ನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕೋಡ್ ಆವೃತ್ತಿಗೆ ಅನ್ವಯಿಸುತ್ತದೆ. Google Chrome ನ ಮೂಲ ಕೋಡ್ chrome://credits ನಲ್ಲಿ ತೆರೆದ ಮೂಲ ಸಾಫ್ಟ್‌ವೇರ್ ಪರವಾನಗಿ ಒಪ್ಪಂದದ ಅಡಿಯಲ್ಲಿ ಉಚಿತವಾಗಿ ಲಭ್ಯವಿದೆ.

    -

    1. Google ನೊಂದಿಗೆ ನಿಮ್ಮ ಸಂಬಂಧ

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 Google ನೊಂದಿಗೆ ಪ್ರತ್ಯೇಕ ಒಪ್ಪಂದದ ವಿನಹ, ಯಾವುದೇ ಉದ್ದೇಶಕ್ಕಾಗಿ ಸೇವೆಗಳ ಪುನರುತ್ಪಾದನೆ, ನಕಲು, ಪ್ರತಿ, ಮಾರಾಟ, ವ್ಯಾಪಾರ ಅಥವಾ ಮರು ಮಾರಾಟ ಮಾಡುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -

    5.4 ನಿಯಮಗಳಡಿಯಲ್ಲಿನ ನಿಮ್ಮ ಬದ್ಧತೆಗಳ ಉಲ್ಲಂಘನೆಗೆ ಮತ್ತು ಅದರಿಂದುಂಟಾದ ಯಾವುದೇ ಪರಿಣಾಮಗಳಿಗೆ ನೀವೇ ಜವಾಬ್ದಾರರು (ಮತ್ತು ನಿಮ್ಮ ಅಥವಾ ಇನ್ನಾವುದೇ ಮೂರನೇ ವ್ಯಕ್ತಿಯನ್ನು ಕುರಿತಂತೆ ಯಾವುದೇ ರೀತಿಯಿಂದಲೂ Google ಜವಾಬ್ದಾರಿ ಹೊಂದಿರುವುದಿಲ್ಲ ) ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -

    6. ಗೌಪ್ಯತೆ ಮತ್ತು ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ

    --

    6.1 Google ನ ಡೇಟಾ ರಕ್ಷಣಾ ಕ್ರಮಗಳ ಕುರಿತ ಮಾಹಿತಿಗಾಗಿ, ದಯವಿಟ್ಟು Google ನ ಗೌಪ್ಯತೆ ನೀತಿಯನ್ನು http://www.google.com/privacy.html ಮತ್ತು http://www.google.com/chrome/intl/en/privacy.html ರಲ್ಲಿ ಓದಿ. ನೀವು ಸೇವೆಗಳನ್ನು ಬಳಸುವಾಗ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು Google ಯಾವ ರೀತಿ ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ನಿಮ್ಮ ಗೌಪ್ಯತೆಗಳನ್ನು ಹೇಗೆ ರಕ್ಷಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಈ ನೀತಿ ವಿವರಿಸುತ್ತದೆ.

    -+

    6.1 Google ನ ಡೇಟಾ ರಕ್ಷಣಾ ಕ್ರಮಗಳ ಕುರಿತ ಮಾಹಿತಿಗಾಗಿ, ದಯವಿಟ್ಟು Google ನ ಗೌಪ್ಯತೆ ನೀತಿಯನ್ನು http://www.9oo91e.qjz9zk/privacy.html ಮತ್ತು http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html ರಲ್ಲಿ ಓದಿ. ನೀವು ಸೇವೆಗಳನ್ನು ಬಳಸುವಾಗ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು Google ಯಾವ ರೀತಿ ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ನಿಮ್ಮ ಗೌಪ್ಯತೆಗಳನ್ನು ಹೇಗೆ ರಕ್ಷಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಈ ನೀತಿ ವಿವರಿಸುತ್ತದೆ.

    -

    6.2 Googleನ ಗೌಪ್ಯತಾ ನೀತಿಗಳಿಗೆ ಅನುಸಾರವಾಗಿ ನಿಮ್ಮ ಡೇಟಾಗಳನ್ನು ಬಳಸಲು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -

    7. ಸೇವೆಗಳಲ್ಲಿರುವ ವಿಷಯ

    -

    7.1 ಸೇವೆಗಳ ಭಾಗವಾಗಿ, ಅಥವಾ ನಿಮ್ಮ ಬಳಕೆಯ ಮೂಲಕ ನೀವು ಪ್ರವೇಶಿಸಬೇಕಾಗುವ ಎಲ್ಲ ಮಾಹಿತಿಗಳು (ಡೇಟಾ ಫೈಲ್‌ಗಳು, ಲಿಖಿತ ಪಠ್ಯ, ಕಂಪ್ಯೂಟರ್ ಸಾಫ್ಟ್‌ವೇರ್, ಸಂಗೀತ, ಆಡಿಯೋ ಫೈಲ್‌ಗಳು ಅಥವಾ ಇತರ ಧ್ವನಿಗಳು, ಛಾಯಾಚಿತ್ರಗಳು, ವಿಡಿಯೋ ಅಥವಾ ಇತರ ಇಮೇಜ್‌ಗಳು), ಯಾವ ವ್ಯಕ್ತಿಯಿಂದ ಸೃಷ್ಟಿಯಾಗಿವೆಯೋ ಅವರೇ ಅದಕ್ಕೆ ಸಂಪೂರ್ಣ ಜವಾಬ್ದಾರರು ಎಂಬುದನ್ನು ನೀವು ತಿಳಿದಿದ್ದೀರಿ. ಅಂತಹ ಎಲ್ಲಾ ಮಾಹಿತಿಗಳನ್ನು "ವಿಷಯ" ಎಂಬುದಾಗಿ ಕೆಳಗೆ ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ .

    -

    7.2 ಸೇವೆಗಳಲ್ಲಿರುವ ಜಾಹೀರಾತುಗಳು ಮತ್ತು ಅಷ್ಟೇ ಅಲ್ಲದೇ ಸೇವೆಗಳ ಒಳಗಿನ, ಸೇವೆಗಳ ಒಂದು ಭಾಗವಾಗಿ ನಿಮಗೆ ಪರಿಚಯಿಸಲಾಗುವ ಇತರ ವಿಷಯಗಳು Google (ಅಥವಾ ಅವರ ಪರವಾಗಿ ಇತರ ವ್ಯಕ್ತಿಗಳು ಅಥವಾ ಕಂಪನಿಗಳು) ಗೆ ವಿಷಯವನ್ನು ಒದಗಿಸುವ ಪ್ರಾಯೋಜಕರು ಅಥವಾ ಜಾಹೀರಾತುಗಾರರ ವಶಕ್ಕೆ ಒಳಪಟ್ಟ ಬೌದ್ದಿಕ ಆಸ್ತಿಯ ಹಕ್ಕುಗಳಿಂದ ರಕ್ಷಿಸಲ್ಪಟ್ಟಿರುತ್ತವೆ, ಎಂದು ನೀವು ಅರಿತಿರಬೇಕು. ನಿಮಗೆ ನಿರ್ದಿಷ್ಟವಾಗಿ Google ನಿಂದ ಅಥವಾ ಆ ವಿಷಯದ ಮಾಲೀಕರಿಂದ ಪ್ರತ್ಯೇಕವಾದ ಒಪ್ಪಂದದಿಂದ ನೀವು ನಿರ್ದೇಶನವನ್ನು ಪಡೆಯದ ಹೊರತು ನೀವು ಈ ವಿಷಯವನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಸ ಉತ್ಪನ್ನವನ್ನು (ಪೂರ್ಣವಾಗಿ ಅಥವಾ ಒಂದು ಭಾಗವಾಗಿ)ಮಾರ್ಪಡಿಸುವಂತಿಲ್ಲ, ಅದನ್ನು ಬಾಡಿಗೆಗೆ ನೀಡುವುದು, ಗುತ್ತಿಗೆ, ಸಾಲ, ಮಾರಾಟ ಅಥವಾ ವಿತರಣೆ ಮಾಡುವಂತಿಲ್ಲ.

    --

    7.3 ಯಾವುದೇ ಸೇವೆಯಿಂದ ಯಾವುದೇ ಅಥವಾ ಎಲ್ಲಾ ವಿಷಯಗಳ ಪೂರ್ವಪ್ರದರ್ಶನ, ಪರಾಮರ್ಶೆ, ಫ್ಲ್ಯಾಗ್, ಫಿಲ್ಟರ್, ನವೀಕರಣ, ನಿರಾಕರಣೆ ಮಾಡುವ ಅಥವಾ ತೆಗೆದುಹಾಕುವ ಹಕ್ಕನ್ನು (ಆದರೆ, ಯಾವುದೇ ಬಾಧ್ಯತೆ ಹೊಂದದೇ) Google ಕಾಯ್ದಿರಿಸಿಕೊಂಡಿದೆ. ಕೆಲವೊಂದು ಸೇವೆಗಳಿಗೆ, ಲೈಂಗಿಕ ವಿಷಯಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು Google ಪರಿಕರಗಳನ್ನು ಒದಗಿಸಬಹುದು. ಈ ಪರಿಕರಗಳು ಸುರಕ್ಷಿತ ಹುಡುಕಾಟ ಆದ್ಯತಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿವೆ (https://support.google.com/websearch/answer/510 ನೋಡಿ). ಹೆಚ್ಚುವರಿಯಾಗಿ, ನಿಮಗೆ ಆಕ್ಷೇಪಣಾರ್ಹ ಎಂಬಂತೆ ಕಂಡುಬರುವ ವಸ್ತುಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಮಿತಿಗೊಳಿಸಲು ವಾಣಿಜ್ಯವಾಗಿ ಲಭ್ಯವಾಗುವ ಸೇವೆಗಳು ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್‌ಗಳಿವೆ.

    -+

    7.3 ಯಾವುದೇ ಸೇವೆಯಿಂದ ಯಾವುದೇ ಅಥವಾ ಎಲ್ಲಾ ವಿಷಯಗಳ ಪೂರ್ವಪ್ರದರ್ಶನ, ಪರಾಮರ್ಶೆ, ಫ್ಲ್ಯಾಗ್, ಫಿಲ್ಟರ್, ನವೀಕರಣ, ನಿರಾಕರಣೆ ಮಾಡುವ ಅಥವಾ ತೆಗೆದುಹಾಕುವ ಹಕ್ಕನ್ನು (ಆದರೆ, ಯಾವುದೇ ಬಾಧ್ಯತೆ ಹೊಂದದೇ) Google ಕಾಯ್ದಿರಿಸಿಕೊಂಡಿದೆ. ಕೆಲವೊಂದು ಸೇವೆಗಳಿಗೆ, ಲೈಂಗಿಕ ವಿಷಯಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು Google ಪರಿಕರಗಳನ್ನು ಒದಗಿಸಬಹುದು. ಈ ಪರಿಕರಗಳು ಸುರಕ್ಷಿತ ಹುಡುಕಾಟ ಆದ್ಯತಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿವೆ (https://support.9oo91e.qjz9zk/websearch/answer/510 ನೋಡಿ). ಹೆಚ್ಚುವರಿಯಾಗಿ, ನಿಮಗೆ ಆಕ್ಷೇಪಣಾರ್ಹ ಎಂಬಂತೆ ಕಂಡುಬರುವ ವಸ್ತುಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಮಿತಿಗೊಳಿಸಲು ವಾಣಿಜ್ಯವಾಗಿ ಲಭ್ಯವಾಗುವ ಸೇವೆಗಳು ಮತ್ತು ಸಾಫ್ಟ್‌ವೇರ್‌ಗಳಿವೆ.

    -

    7.4 ನೀವು ಸೇವೆಗಳನ್ನು ಬಳಸುವಾಗ ರೇಗಿಸುವಂತಹ, ಅಸಭ್ಯ ಅಥವಾ ಆಕ್ಷೇಪಣಾರ್ಹ ವಿಷಯಗಳಿಗೆ ನೀವು ತೆರೆದುಕೊಳ್ಳಬಹುದು, ಆ ರೀತಿ ಆದಲ್ಲಿ, ನೀವು ಸೇವೆಗಳನ್ನು ನಿಮ್ಮ ಸ್ವಂತ ಜವಾಬ್ದಾರಿಯಲ್ಲಿ ಬಳಸುತ್ತೀರೆಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು.

    -

    7.5 ಈ ಸೇವೆಗಳನ್ನು ಬಳಸಿ ರಚಿಸುವ ಯಾವುದೇ ವಿಷಯ, ಅದರ ಪ್ರಸಾರ ಅಥವಾ ಪ್ರದರ್ಶನಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು (ಮತ್ತು ನಿಮ್ಮ ಅಥವಾ ಇನ್ನಾವುದೇ ಮೂರನೇ ವ್ಯಕ್ತಿಯನ್ನು ಕುರಿತಂತೆ ಯಾವುದೇ ರೀತಿಯಿಂದಲೂ Google ಜವಾಬ್ದಾರಿ ಹೊಂದಿರುವುದಿಲ್ಲ) ನಿಮ್ಮ ಈ ಕ್ರಿಯೆಗಳಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ಪರಿಣಾಮಗಳಿಗೂ (Google ಅನುಭವಿಸುವ ಯಾವುದೇ ನಷ್ಟ ಅಥವಾ ಹಾನಿ ಒಳಗೊಂಡಂತೆ) ನೀವೇ ಹೊಣೆಗಾರರೆಂದು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -

    8. ಮಾಲೀಕತ್ವ ಹಕ್ಕುಗಳು

    -

    8.1 ಸೇವೆಗಳಲ್ಲಿ ಇರುವಂತಹ ಭೌತಿಕ ಆಸ್ತಿ ಹಕ್ಕುಗಳು (ಆ ಹಕ್ಕುಗಳು ನೋಂದಾಯಿಸಿರಬಹುದು ಅಥವಾ ಇಲ್ಲದಿರಬಹುದು, ಮತ್ತು ಆ ಹಕ್ಕು ಪ್ರಪಂಚದ ಯಾವ ಭಾಗದಲ್ಲಿಯಾದರೂ ಇರಬಹುದು) ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಕಾನೂನು ಹಕ್ಕುಗಳ, ಶೀರ್ಷಿಕೆಗಳ ಮತ್ತು ಹಿತಾಸಕ್ತಿಗಳನ್ನು Google (ಅಥವಾ Google ನ ಪರವಾನಿಗಿದಾರರು) ಹೊಂದಿದೆ ಎಂದು ನೀವು ಅಂಗೀಕರಿಸುತ್ತೀರಿ ಮತ್ತು ಒಪ್ಪುತ್ತೀರಿ.

    -

    8.2 ನೀವು Google ನೊಂದಿಗೆ ಲಿಖಿತ ಒಪ್ಪಂದ ಮಾಡಿಕೊಂಡಿರದಿದ್ದಲ್ಲಿ, ನಿಮಗೆ Google ನವರ ವ್ಯಾಪಾರ ಹೆಸರುಗಳು, ವ್ಯಾಪಾರ ಮುದ್ರೆ, ಸೇವಾ ಮುದ್ರೆ, ಲೋಗೋಗಳು, ಡೊಮೇನ್ ಹೆಸರುಗಳು ಮತ್ತು ಇತರ ವಿಶಿಷ್ಟ ಬ್ರ್ಯಾಂಡ್ ವೈಶಿಷ್ಯ್ಟಗಳನ್ನು ಬಳಸುವ ಹಕ್ಕು ಇರುವುದಿಲ್ಲ.

    --

    8.3 Google ನೊಂದಿಗೆ ಪ್ರತ್ಯೇಕವಾದ ಲಿಖಿತ ಒಪ್ಪಂದವೊಂದರಲ್ಲಿ ಇವುಗಳಲ್ಲಿ ಯಾವುದಾದರೊಂದು ಬ್ರ್ಯಾಂಡ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸಲು ವ್ಯಕ್ತವಾದ ಹಕ್ಕನ್ನು ನಿಮಗೆ ನೀಡಿದರೆ, ಅಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳ ಬಳಕೆಯು ಆ ಒಪ್ಪಂದದ, ನಿಯಮಗಳ ಅನ್ವಯಿತ ಸೌಲಭ್ಯಗಳ, ಮತ್ತು Google ನವರ ಬ್ರ್ಯಾಂಡ್ ವೈಶಿಷ್ಟ್ಯವು ಸಮಯಕ್ಕೆ ನವೀಕರಿಸಿದ ಮಾರ್ಗಸೂಚಿಗಳನ್ನು ಅನುವರ್ತಿಸುತ್ತದೆ ಎಂದು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ. ಈ ಮಾರ್ಗಸೂಚಿಗಳನ್ನು http://www.google.com/permissions/guidelines.html ರಲ್ಲಿ ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಬಹುದು (ಅಥವಾ ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ ಕಾಲಾನುಕ್ರಮಕ್ಕೆ ತಕ್ಕಂತೆ Google ಒದಗಿಸಬಹುದಾದಂತಹ ಇತರ URL ಗಳು)

    -+

    8.3 Google ನೊಂದಿಗೆ ಪ್ರತ್ಯೇಕವಾದ ಲಿಖಿತ ಒಪ್ಪಂದವೊಂದರಲ್ಲಿ ಇವುಗಳಲ್ಲಿ ಯಾವುದಾದರೊಂದು ಬ್ರ್ಯಾಂಡ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸಲು ವ್ಯಕ್ತವಾದ ಹಕ್ಕನ್ನು ನಿಮಗೆ ನೀಡಿದರೆ, ಅಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳ ಬಳಕೆಯು ಆ ಒಪ್ಪಂದದ, ನಿಯಮಗಳ ಅನ್ವಯಿತ ಸೌಲಭ್ಯಗಳ, ಮತ್ತು Google ನವರ ಬ್ರ್ಯಾಂಡ್ ವೈಶಿಷ್ಟ್ಯವು ಸಮಯಕ್ಕೆ ನವೀಕರಿಸಿದ ಮಾರ್ಗಸೂಚಿಗಳನ್ನು ಅನುವರ್ತಿಸುತ್ತದೆ ಎಂದು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ. ಈ ಮಾರ್ಗಸೂಚಿಗಳನ್ನು http://www.9oo91e.qjz9zk/permissions/guidelines.html ರಲ್ಲಿ ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಬಹುದು (ಅಥವಾ ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ ಕಾಲಾನುಕ್ರಮಕ್ಕೆ ತಕ್ಕಂತೆ Google ಒದಗಿಸಬಹುದಾದಂತಹ ಇತರ URL ಗಳು)

    -

    8.4 ಈ ನಿಯಮಗಳ ಪ್ರಕಾರ ನೀವು (ಅಥವಾ ನಿಮ್ಮ ಪರವಾನಗಿದಾರರು) ಯಾವುದೇ ಬೌದ್ಧಿಕ ಆಸ್ತಿ ಹಕ್ಕುಗಳು ಸೇರಿದಂತೆ ನೀವು ಸಲ್ಲಿಸಿದ, ಪೋಸ್ಟ್ ಮಾಡಿದ, ಪ್ರಸಾರ ಮತ್ತು ಪ್ರದರ್ಶನಗಳ ಮೇಲೆ Google ಯಾವುದೇ ಹಕ್ಕು, ಶೀರ್ಷಿಕೆ, ಅಥವಾ ಆಸಕ್ತಿಯನ್ನು ಹೊಂದಿಲ್ಲ ಎಂಬುದನ್ನು Google ತಿಳಿದಿದೆ ಮತ್ತು ಒಪ್ಪಿದೆ. (ಆ ಹಕ್ಕುಗಳು ನೋಂದಣಿ ಆಗಿದೆಯೋ ಅಥವಾ ಇಲ್ಲವೋ, ಮತ್ತು ಜಗತ್ತಿನ ಎಲ್ಲೇ ಆದರೂ ಆ ಹಕ್ಕುಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿರಬಹುದು) ಲಿಖಿತ ಒಪ್ಪಂದವಿಲ್ಲದಿದ್ದರೆ, ಆ ಹಕ್ಕುಗಳನ್ನು ರಕ್ಷಿಸಲು ಮತ್ತು ಅವುಗಳನ್ನು ಜಾರಿಗೆ ತರಲು ನೀವೇ ಜವಾಬ್ದಾರರು ಮತ್ತು ನಿಮ್ಮ ಪರವಾಗಿ ಅವುಗಳನ್ನು ರಕ್ಷಿಸಲು Google ಗೆ ಯಾವುದೇ ಭಾದ್ಯತೆಯಿಲ್ಲ ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -

    8.5 ನೀವು ಸೇವೆಗಳಲ್ಲಿ ಲಗತ್ತಿಸಿದ ಅಥವಾ ಸೇರಿಸಿರುವಂತಹ ಯಾವುದೇ ಮಾಲೀಕತ್ವ ಹಕ್ಕುಗಳ ಪ್ರಕಟಣೆಗಳನ್ನು (ಕೃತಿಸ್ವಾಮ್ಯ ಮತ್ತು ವ್ಯಾಪಾರ ಮುದ್ರೆ ಪ್ರಕಟಣೆಗಳನ್ನು ಒಳಗೊಂಡಂತೆ) ತೆಗೆದು ಹಾಕುವುದು, ಅಸ್ಪಷ್ಟಗೊಳಿಸುವುದು, ಮತ್ತು ಬದಲಾಯಿಸುವುದಾಗಲೀ ಮಾಡುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ.

    -

    8.6 ನೀವು Google ನಿಂದ ಲಿಖಿತವಾಗಿ ವ್ಯಕ್ತ ಅಧಿಕಾರ ಪಡೆಯದ ಹೊರತು, ನೀವು ಈ ಸೇವೆಯನ್ನು ಬಳಸುವುದರ ಮೂಲಕ, ಯಾವುದೇ ವ್ಯಾಪಾರ ಮುದ್ರೆ, ಸೇವಾ ಮುದ್ರೆ, ವ್ಯಾಪಾರ ಹೆಸರು, ಯಾವುದೇ ಕಂಪನಿ ಅಥವಾ ಸಂಸ್ಥೆಯ ಲೋಗೊಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ ಅಥವಾ ಅಂತಹ ಮುದ್ರೆಗಳು, ಹೆಸರುಗಳು ಅಥವಾ ಲೋಗೊಗಳನ್ನು ಬಳಸುವ ಮಾಲೀಕರು ಅಥವಾ ಅಧಿಕೃತ ಬಳಕೆದಾರರ ಕುರಿತು ಗೊಂದಲಕ್ಕೆ ಆಸ್ಪದ ನೀಡುವುದಿಲ್ಲವೆಂಬುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅಥವಾ ಖಾತೆಯ ವಿವರಗಳನ್ನು ಸುರಕ್ಷಿತ ಮತ್ತು ಗೌಪ್ಯವಾಗಿ ಕಾಪಾಡಿಕೊಳ್ಳಲು ನೀವು ವಿಫಲರಾದರೆ;

    -

    14.2 ಮೇಲಿರುವ ಪ್ಯಾರಾಗ್ರಾಫ್ 14.1 ರಲ್ಲಿರುವ GOOGLEನ ಬಾಧ್ಯತೆಯ ಮಿತಿಗಳು, GOOGLE ಗೆ ಸಲಹೆಮಾಡಿದ್ದರೂ ಅಥವಾ ಇಲ್ಲದಿದ್ದರೂ, ಅಥವಾ ಅಂತಹ ನಷ್ಟಗಳು ಆಗಬಹುದಾದ ಸಾಧ್ಯತೆಯ ಕುರಿತು ಎಚ್ಚರ ವಹಿಸಬಹುದಾಗಿತ್ತಾದರೂ ಅನ್ವಯಿಸುತ್ತದೆ.

    -

    15. ಕೃತಿಸ್ವಾಮ್ಯ ಮತ್ತು ವ್ಯಾಪಾರ ಮುದ್ರೆ ನೀತಿಗಳು

    --

    15.1 ಅನ್ವಯಿತ ಅಂತಾರಾಷ್ಟ್ರೀಯ ಬೌದ್ಧಿಕ ಆಸ್ತಿ ನಿಯಮದಂತೆ (ಯುನೈಟೆಡ್ ಸ್ಟೇಟ್ಸ್, ಡಿಜಿಟಲ್ ಮಿಲ್ಲೇನಿಯಂ ಕೃತಿಸ್ವಾಮ್ಯ ಕಾಯ್ದೆ ಒಳಗೊಂಡಂತೆ) ಕೃತಿಸ್ವಾಮ್ಯ ಉಲ್ಲಂಘನೆಯ ಆಪಾದನೆಯ ಪ್ರಕಟಣೆಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯೆ ನೀಡುವ ಮತ್ತು ಪುನರಾವರ್ತಿತ ಉಲ್ಲಂಘನೆಗಳ ಖಾತೆಗಳನ್ನು ನಿರ್ನಾಮ ಮಾಡುವುದು Google ನ ನೀತಿಯಾಗಿದೆ. Googleನ ನೀತಿಯ ವಿವರಗಳು http://www.google.com/dmca.html ನಲ್ಲಿ ದೊರೆಯುವುವು.

    --

    15.2 Google ನವರ ಜಾಹೀರಾತು ವ್ಯವಹಾರದಲ್ಲಿನ ವ್ಯಾಪಾರ ಮುದ್ರೆಯ ದೂರುಗಳ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯನಿರ್ವಹಣೆಯನ್ನು Google ಮಾಡುತ್ತದೆ, ಇವುಗಳ ವಿವರಗಳು http://www.google.com/tm_complaint.html ನಲ್ಲಿ ದೊರೆಯುವುವು.

    -+

    15.1 ಅನ್ವಯಿತ ಅಂತಾರಾಷ್ಟ್ರೀಯ ಬೌದ್ಧಿಕ ಆಸ್ತಿ ನಿಯಮದಂತೆ (ಯುನೈಟೆಡ್ ಸ್ಟೇಟ್ಸ್, ಡಿಜಿಟಲ್ ಮಿಲ್ಲೇನಿಯಂ ಕೃತಿಸ್ವಾಮ್ಯ ಕಾಯ್ದೆ ಒಳಗೊಂಡಂತೆ) ಕೃತಿಸ್ವಾಮ್ಯ ಉಲ್ಲಂಘನೆಯ ಆಪಾದನೆಯ ಪ್ರಕಟಣೆಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯೆ ನೀಡುವ ಮತ್ತು ಪುನರಾವರ್ತಿತ ಉಲ್ಲಂಘನೆಗಳ ಖಾತೆಗಳನ್ನು ನಿರ್ನಾಮ ಮಾಡುವುದು Google ನ ನೀತಿಯಾಗಿದೆ. Googleನ ನೀತಿಯ ವಿವರಗಳು http://www.9oo91e.qjz9zk/dmca.html ನಲ್ಲಿ ದೊರೆಯುವುವು.

    -+

    15.2 Google ನವರ ಜಾಹೀರಾತು ವ್ಯವಹಾರದಲ್ಲಿನ ವ್ಯಾಪಾರ ಮುದ್ರೆಯ ದೂರುಗಳ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯನಿರ್ವಹಣೆಯನ್ನು Google ಮಾಡುತ್ತದೆ, ಇವುಗಳ ವಿವರಗಳು http://www.9oo91e.qjz9zk/tm_complaint.html ನಲ್ಲಿ ದೊರೆಯುವುವು.

    -

    16. ಜಾಹೀರಾತುಗಳು

    -

    16.1 ಕೆಲವು ಸೇವೆಗಳನ್ನು ಜಾಹೀರಾತು ವರಮಾನ ಬೆಂಬಲದಿಂದ ನಡೆಸಲಾಗುತ್ತದೆ ಮತ್ತು ಜಾಹೀರಾತುಗಳು ಹಾಗೂ ಪ್ರಾಯೋಜಕತ್ವವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ . ಈ ಜಾಹೀರಾತುಗಳು ಸೇವೆಗಳಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ ಮಾಹಿತಿಯ ವಿಷಯವನ್ನು, ಸೇವೆಗಳ ಅಥವಾ ಇತರ ಮಾಹಿತಿಗಳ ಮೂಲಕ ಮಾಡಲಾದ ಪ್ರಶ್ನೆಗಳನ್ನು ಗುರಿಯಾಗಿಟ್ಟುಕೊಂಡಿರಬಹುದು.

    -

    16.2 ಸೇವೆಗಳಲ್ಲಿನ Google ನ ಜಾಹೀರಾತಿನ ವಿಧಾನ, ಮೋಡ್ ಮತ್ತು ಜಾಹೀರಾತಿನ ಹರವುಗಳು ನಿಮಗೆ ನಿರ್ದಿಷ್ಟ ಪ್ರಕಟಣೆಯನ್ನು ನೀಡದೆಯೇ ಬದಲಾಗಬಹುದು.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 ಅಂತಹ ಯಾವುದೇ ಬಾಹ್ಯ ಸೈಟ್‌ಗಳಿಗೆ ಅಥವಾ ಸಂಪನ್ಮೂಲಗಳ ಲಭ್ಯತೆಗೆ ಹಾಗೂ ಯಾವುದೇ ಜಾಹೀರಾತುಗಳಿಗೆ Google ಜವಾಬ್ದಾರವಲ್ಲ, ಹಾಗೂ ಅಂತಹ ವೆಬ್‌ಸೈಟ್‌ಗಳು ಅಥವಾ ಸಂಪನ್ಮೂಲಗಳಿಂದಿರುವ ಅಥವಾ ಲಭ್ಯವಾಗುವ ಉತ್ಪನ್ನಗಳು ಅಥವಾ ಇತರ ವಸ್ತುಗಳನ್ನು Google ಸಮರ್ಥಿಸುವುದಿಲ್ಲ ಎಂಬುವುದನ್ನು ನೀವು ಸಮ್ಮತಿಸುತ್ತೀರಿ ಮತ್ತು ಒಪ್ಪುತ್ತೀರಿ.

    -

    17.3 ಅಂತಹ ಬಾಹ್ಯ ಸೈಟ್‌ಗಳ ಅಥವಾ ಸಂಪನ್ಮೂಲಗಳ ಲಭ್ಯತೆಯ ಪರಿಣಾಮವಾಗಿ ಅಥವಾ ಅವುಗಳ ಪೂರ್ಣತೆ, ನಿಖರತೆ ಮತ್ತು ಜಾಹೀರಾತಿನ, ಉತ್ಪನ್ನಗಳ ಅಥವಾ ಇತರೆ ವಸ್ತುಗಳ ಅಸ್ತಿತ್ವದ ಕುರಿತಂತೆ ನೀವಿರಿಸಿದ ಭರವಸೆಯಿಂದಾಗಿ ನಿಮಗೆ ಯಾವುದೇ ನಷ್ಟ ಅಥವಾ ಹಾನಿ ಸಂಭವಿಸಿದಲ್ಲಿ Google ಇವುಗಳಿಗೆ ಹೊಣೆಗಾರಿಕೆ ಹೊಂದಿಲ್ಲ ಎಂಬದನ್ನು ನೀವು ಸಮ್ಮತಿಸುತ್ತೀರಿ ಮತ್ತು ಒಪ್ಪುತ್ತೀರಿ.

    -

    18. ನಿಯಮಗಳಿಗೆ ಬದಲಾವಣೆಗಳು

    --

    18.1 Google ಕಾಲಕಾಲಕ್ಕೆ ತಕ್ಕಂತೆ ಸಾರ್ವತ್ರಿಕ ನಿಯಮಗಳು ಮತ್ತು ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳನ್ನು ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಬಹುದು. ಈ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿದಾಗ, Google http://www.google.com/chrome/intl/en/eula_text.html ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಸಾರ್ವತ್ರಿಕ ನಿಯಮಗಳ ಹೊಸ ಪ್ರತಿಯನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದರ ಒಳಗೆ ಅಥವಾ ಪರಿಣಾಮಗೊಂಡ ಸೇವೆಗಳ ಮೂಲಕ ನಿಮಗೆ ಯಾವುದೇ ಹೊಸ ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳನ್ನು ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಲಾಗುತ್ತದೆ.

    -+

    18.1 Google ಕಾಲಕಾಲಕ್ಕೆ ತಕ್ಕಂತೆ ಸಾರ್ವತ್ರಿಕ ನಿಯಮಗಳು ಮತ್ತು ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳನ್ನು ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಬಹುದು. ಈ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿದಾಗ, Google http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಸಾರ್ವತ್ರಿಕ ನಿಯಮಗಳ ಹೊಸ ಪ್ರತಿಯನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದರ ಒಳಗೆ ಅಥವಾ ಪರಿಣಾಮಗೊಂಡ ಸೇವೆಗಳ ಮೂಲಕ ನಿಮಗೆ ಯಾವುದೇ ಹೊಸ ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳನ್ನು ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಲಾಗುತ್ತದೆ.

    -

    18.2 ಸಾರ್ವತ್ರಿಕ ನಿಯಮ ಹಾಗೂ ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳನ್ನು ಬದಲಿಸಿದ ನಂತರದ ದಿನದಲ್ಲಿ ನೀವು ಸೇವೆಗಳನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, Google ನಿಮ್ಮ ಬಳಕೆಯನ್ನು ನವೀಕರಿಸಿದ ಸಾರ್ವತ್ರಿಕ ನಿಯಮಗಳು ಅಥವಾ ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳ ಸಮ್ಮತಿಯೆಂಬಂತೆ ಪರಿಗಣಿಸುವುದು.

    -

    19. ಸಾಮಾನ್ಯ ಕಾನೂನು ನಿಯಮಗಳು

    -

    19.1 ಸೇವೆಗಳನ್ನು ಬಳಸುವ ಸಂದರ್ಭದಲ್ಲಿ , ನೀವು (ಸೇವೆಗಳನ್ನು ಬಳಸುವುದರ ಅಥವಾ ಅದರ ಪರಿಣಾಮವಾಗಿ) ಸೇವೆಯೊಂದನ್ನು ಬಳಸಬಹುದು ಅಥವಾ ಸಾಫ್ಟ್‌ವೇರ್‌ನ ಭಾಗವೊಂದನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಅಥವಾ ಸೇವೆಯನ್ನು, ಅಥವಾ ಇತರ ವ್ಯಕ್ತಿ ಅಥವಾ ಕಂಪನಿಯಿಂದ ಒದಗಿಸಲ್ಪಟ್ಟಂತಹ ಸರಕುಗಳನ್ನು ಖರೀದಿಸಬಹುದು. ಇಂತಹ ಇತರ ಸೇವೆಗಳ, ಸಾಫ್ಟ್‌ವೇರ್ ಅಥವಾ ಸರಕುಗಳ ನಿಮ್ಮ ಬಳಕೆ, ನಿಮ್ಮ ಮತ್ತು ಕಂಪನಿ ಅಥವಾ ಆ ವ್ಯಕ್ತಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಪ್ರತ್ಯೇಕ ನಿಯಮಕ್ಕೆ ಒಳಪಡುತ್ತದೆ. ಹಾಗಿದ್ದಲ್ಲಿ, ಇತರ ಕಂಪನಿಗಳೊಂದಿಗೆ ಮತ್ತು ವ್ಯಕ್ತಿಗಳೊಂದಿಗಿನ ನಿಮ್ಮ ಕಾನೂನು ಸಂಬಂಧದ ಮೇಲೆ ಈ ನಿಯಮಗಳು ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + ಕೊನೆಯದಾಗಿ ಮಾರ್ಪಡಿಸಿದ ದಿನಾಂಕ: 01 ಜನವರಿ 2021 +

    +

    +- Chrome ಅಥವಾ Chrome OS ಅನ್ನು ಬಳಸುವ ಮೂಲಕ, https://policies.google.com/terms ನಲ್ಲಿನ Google ಸೇವಾ ನಿಯಮಗಳು ಮತ್ತು ಈ Google Chrome ಮತ್ತು Chrome OS ನ ಹಚ್ಚುವರಿ ಸೇವಾ ನಿಯಮಗಳಿಗೆ ನೀವು ಸಮ್ಮತಿಸುತ್ತೀರಿ. ++ Chrome ಅಥವಾ Chrome OS ಅನ್ನು ಬಳಸುವ ಮೂಲಕ, https://policies.9oo91e.qjz9zk/terms ನಲ್ಲಿನ Google ಸೇವಾ ನಿಯಮಗಳು ಮತ್ತು ಈ Google Chrome ಮತ್ತು Chrome OS ನ ಹಚ್ಚುವರಿ ಸೇವಾ ನಿಯಮಗಳಿಗೆ ನೀವು ಸಮ್ಮತಿಸುತ್ತೀರಿ. +

    +

    +- ಈ Google Chrome ಮತ್ತು Chrome OS ನ ಹೆಚ್ಚುವರಿ ಸೇವಾ ನಿಯಮಗಳು, Chrome ಮತ್ತು Chrome OS ನ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಕೋಡ್ ಆವೃತ್ತಿಗೆ ಅನ್ವಯಿಸುತ್ತವೆ. ಓಪನ್ ಸೋರ್ಸ್ ಸಾಫ್ಟ್‌ವೇರ್ ಪರವಾನಗಿ ಒಪ್ಪಂದಗಳ ಅಡಿಯಲ್ಲಿ, Chrome ‌ನ ಬಹುಪಾಲು ಮೂಲ ಕೋಡ್ ಅನ್ನು https://code.google.com/chromium/terms.html ನಲ್ಲಿ ಉಚಿತವಾಗಿ ಪಡೆಯಬಹುದು. ++ ಈ Google Chrome ಮತ್ತು Chrome OS ನ ಹೆಚ್ಚುವರಿ ಸೇವಾ ನಿಯಮಗಳು, Chrome ಮತ್ತು Chrome OS ನ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಕೋಡ್ ಆವೃತ್ತಿಗೆ ಅನ್ವಯಿಸುತ್ತವೆ. ಓಪನ್ ಸೋರ್ಸ್ ಸಾಫ್ಟ್‌ವೇರ್ ಪರವಾನಗಿ ಒಪ್ಪಂದಗಳ ಅಡಿಯಲ್ಲಿ, Chrome ‌ನ ಬಹುಪಾಲು ಮೂಲ ಕೋಡ್ ಅನ್ನು https://code.9oo91e.qjz9zk/chromium/terms.html ನಲ್ಲಿ ಉಚಿತವಾಗಿ ಪಡೆಯಬಹುದು. +

    +

    + Chrome ಮತ್ತು Chrome OS ನ ಕೆಲವು ಘಟಕಗಳ ನಿಮ್ಮ ಬಳಕೆಯು ಈ ಕೆಳಗಿನ ನಿಯಮಗಳಿಗೆ ಒಳಪಟ್ಟಿರುತ್ತದೆ: diff --git a/components/resources/terms/terms_ko.html b/components/resources/terms/terms_ko.html --- a/components/resources/terms/terms_ko.html +++ b/components/resources/terms/terms_ko.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Chrome 및 Chrome OS 추가 서비스 약관 - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + 최종 수정: 2021년 1월 1일 +

    - Chrome 또는 Chrome OS를 사용하면 Google 서비스 약관(https://policies.google.com/terms) 및 다음 Chrome 및 Chrome OS 추가 서비스 약관에 동의하는 것으로 간주됩니다. + Chrome 또는 Chrome OS를 사용하면 Google 서비스 약관(https://policies.9oo91e.qjz9zk/terms) 및 다음 Chrome 및 Chrome OS 추가 서비스 약관에 동의하는 것으로 간주됩니다. @@ -26621,9 +19507,9 @@ diff --git a/components/resources/terms/terms_ko.html b/components/resources/ter diff --git a/components/resources/terms/terms_lt.html b/components/resources/terms/terms_lt.html --- a/components/resources/terms/terms_lt.html +++ b/components/resources/terms/terms_lt.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - „Google Chrome“ ir „Chrome“ OS papildomos paslaugų teikimo sąlygos - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Paskutinį kartą keista: 2021 m. sausio 1 d. +

    - Naudodami „Chrome“ arba „Chrome“ OS sutinkate su „Google“ paslaugų teikimo sąlygomis, pateiktomis adresu https://policies.google.com/terms, ir šiomis „Google Chrome“ bei „Chrome“ OS papildomomis paslaugų teikimo sąlygomis. + Naudodami „Chrome“ arba „Chrome“ OS sutinkate su „Google“ paslaugų teikimo sąlygomis, pateiktomis adresu https://policies.9oo91e.qjz9zk/terms, ir šiomis „Google Chrome“ bei „Chrome“ OS papildomomis paslaugų teikimo sąlygomis. @@ -26637,9 +19523,9 @@ diff --git a/components/resources/terms/terms_lt.html b/components/resources/ter diff --git a/components/resources/terms/terms_lv.html b/components/resources/terms/terms_lv.html --- a/components/resources/terms/terms_lv.html +++ b/components/resources/terms/terms_lv.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome un Chrome OS pakalpojumu sniegšanas papildu noteikumi - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Pēdējās izmaiņas: 2021. gada 1. janvārī +

    - Izmantojot pārlūkprogrammu Chrome vai operētājsistēmu Chrome OS, jūs piekrītat Google pakalpojumu sniegšanas noteikumiem, kas norādīti vietnē https://policies.google.com/terms, un šiem Google Chrome un Chrome OS pakalpojumu sniegšanas papildu noteikumiem. + Izmantojot pārlūkprogrammu Chrome vai operētājsistēmu Chrome OS, jūs piekrītat Google pakalpojumu sniegšanas noteikumiem, kas norādīti vietnē https://policies.9oo91e.qjz9zk/terms, un šiem Google Chrome un Chrome OS pakalpojumu sniegšanas papildu noteikumiem. @@ -26653,117 +19539,41 @@ diff --git a/components/resources/terms/terms_lv.html b/components/resources/ter diff --git a/components/resources/terms/terms_ml.html b/components/resources/terms/terms_ml.html --- a/components/resources/terms/terms_ml.html +++ b/components/resources/terms/terms_ml.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome സേവനനിബന്ധനകള്‍‌

    -

    ഈ സേവനനിബന്ധനകള്‍‌ Google Chrome ന്‍റെ നടപ്പാക്കാന്‍‌ കഴിയുന്ന കോഡ് പതിപ്പിന് ബാധകമാണ്. Google Chrome നായുള്ള ഉറവിട കോഡ് chrome://credits ലെ ഓപ്പണ്‍‌ സോഴ്‌സ് സോഫ്റ്റ്‌വെയര്‍‌ ലൈസന്‍‌സ് കരാറുകള്‍‌ക്ക് ചുവടെ സൌജന്യമായി ലഭ്യമാണ്.

    -

    1. Google മായുള്ള നിങ്ങളുടെ ബന്ധം

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 Google മായുള്ള ഒരു പ്രത്യേക കരാറില്‍ നിങ്ങളെ പ്രത്യേകമായി അനുവദിക്കാത്തപക്ഷം,യാതൊരു ഉദ്ദേശ്യത്തിനായും സേവനങ്ങള്‍‌ വീണ്ടും നിര്‍മിക്കുകയോ തനിപ്പകര്‍പ്പെടുക്കുകയോ പകര്‍ത്തുകയോ വില്‍‌ക്കുകയോ വിപണനം നടത്തുകയോ അല്ലെങ്കില്‍‌ പുനര്‍ വില്‍‌പ്പന നടത്തുകയോ ചെയ്യില്ലെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു.

    -

    5.4 ഉല്‍‌പ്പന്നത്തിന്‍റെ ഉപയോഗത്തിനും നിബന്ധനകള്‍ക്കും വ്യവസ്ഥകള്‍ക്കും കീഴിലുള്ള നിങ്ങളുടെ ബാധ്യതകളുടെ ലംഘനത്തിനും അതിന്‍റെ അനന്തര ഫലങ്ങള്‍ക്കും (Google ന് ഉണ്ടാകാവുന്ന ഏതൊരുതരത്തിലുമുള്ള നഷ്‌ടവും കേടുപാടുമടക്കം) നിങ്ങള്‍ മാത്രമായിരിക്കും ഉത്തരവാദപ്പെട്ടിരിക്കുകയെന്ന് (മാത്രമല്ല നിങ്ങളോടോ ഏതെങ്കിലും മൂന്നാം കക്ഷിയോടോ Google ന് ഒരു ഉത്തരവാദിത്വവും ഉണ്ടായിരിക്കുകയില്ലെന്നും) നിങ്ങള്‍ സമ്മതിക്കുന്നു.

    -

    6. നിങ്ങളുടെ സ്വകാര്യതയും സ്വകാര്യ വിവരങ്ങളും

    --

    6.1 Google ന്‍റെ ഡാറ്റ പരിരക്ഷണ രീതികളെക്കുറിച്ചുള്ള കൂടുതല്‍‌ വിവരങ്ങള്‍‌ക്ക്, http://www.google.com/privacy.html ലെയും http://www.google.com/chrome/intl/en/privacy.html ലെയും Google ന്‍റെ സ്വകാര്യതാ നയം ദയവായി വായിക്കുക. Google നിങ്ങളുടെ സ്വകാര്യ വിവരങ്ങളെ കൈകാര്യം ചെയ്യുന്നതെങ്ങനെയാണെന്നും, സേവനങ്ങള്‍‌ ഉപയോഗിക്കുമ്പോള്‍‌ നിങ്ങളുടെ സ്വകാര്യതയെ പരിരക്ഷിക്കുന്നതെങ്ങനെയെന്നും ഈ നയം വിശദമാക്കുന്നു.

    -+

    6.1 Google ന്‍റെ ഡാറ്റ പരിരക്ഷണ രീതികളെക്കുറിച്ചുള്ള കൂടുതല്‍‌ വിവരങ്ങള്‍‌ക്ക്, http://www.9oo91e.qjz9zk/privacy.html ലെയും http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html ലെയും Google ന്‍റെ സ്വകാര്യതാ നയം ദയവായി വായിക്കുക. Google നിങ്ങളുടെ സ്വകാര്യ വിവരങ്ങളെ കൈകാര്യം ചെയ്യുന്നതെങ്ങനെയാണെന്നും, സേവനങ്ങള്‍‌ ഉപയോഗിക്കുമ്പോള്‍‌ നിങ്ങളുടെ സ്വകാര്യതയെ പരിരക്ഷിക്കുന്നതെങ്ങനെയെന്നും ഈ നയം വിശദമാക്കുന്നു.

    -

    6.2 Google ന്‍റെ സ്വകാര്യതാ നയങ്ങള്‍‌ക്കനുസരിച്ച് നിങ്ങളുടെ ഡാറ്റ ഉപയോഗിക്കുമെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു.

    -

    7. സേവനങ്ങളിലെ ഉള്ളടക്കങ്ങള്‍‌

    -

    7.1 സേവനങ്ങളുടെ ഭാഗമായി അല്ലെങ്കില്‍‌ അത് നിങ്ങള്‍‌ ഉപയോഗിക്കുന്നതുവഴി നിങ്ങള്‍‌ക്ക് ആക്‍സസ്സ് ഉള്ള എല്ലാ വിവരങ്ങള്‍‌ക്കും (ഡാറ്റാ ഫയലുകള്‍‌, എഴുതിയ പാഠം, കമ്പ്യൂട്ട‌ര്‍‌ സോഫ്റ്റ്‌വെയര്‍‌, സംഗീത, ഓഡിയോ ഫയലുകള്‍‌ അല്ലെങ്കില്‍‌ മറ്റ് ശബ്‌ദങ്ങള്‍‌, ഫോട്ടോഗ്രാഫുകള്‍‌, വീഡിയോകള്‍‌ അല്ലെങ്കില്‍‌ മറ്റ് ചിത്രങ്ങള്‍‌ എന്നിവ പോലുള്ളവ) അത്തരം ഉള്ളടക്കം രൂപം കൊടുത്ത വ്യക്തി മാത്രമായിരിക്കും ഉത്തരവാദി എന്ന് നിങ്ങള്‍‌ മനസ്സിലാക്കുന്നു. അത്തരം എല്ലാ വിവരങ്ങളെയും ചുവടെ “ഉള്ളടക്കം” എന്ന് പരാമര്‍‌ശിച്ചിരിക്കുന്നു.

    -

    7.2 സേവനങ്ങളിലെ പരസ്യങ്ങളും സ്പോണ്‍സര്‍ ചെയ്ത ഉള്ളടക്കങ്ങളും അടക്കം എന്നാല്‍ അവയില്‍ പരിമിതപ്പെടാത്ത, സേവനങ്ങളുടെ ഭാഗമായി നിങ്ങള്‍ക്ക് നല്‍കിയ ഉള്ളടക്കം, അത്തരം ഉള്ളടക്കം Google ന് നല്‍കിയ സ്പോണ്‍സറുടെ അല്ലെങ്കില്‍ പരസ്യദാതാക്കളുടെ (അല്ലെങ്കില്‍ അവര്‍ക്ക് വേണ്ടിയുള്ള മറ്റ് വ്യക്തികളുടെയോ കമ്പനികളുടെയോ) ഉടമസ്ഥതയിലുള്ള ബൌദ്ധിക സ്വത്തവകാശത്തിന് കീഴില്‍ സംരക്ഷിക്കപ്പെടുമെന്ന് നിങ്ങള്‍ അറിഞ്ഞിരിക്കണം. Google അല്ലെങ്കില്‍‌ ഉള്ളടക്കത്തിന്‍റെ ഉടമകള്‍‌ നിങ്ങള്‍‌ക്ക് ഒരു പ്രത്യേക കരാറില്‍‌ അനുമതി നല്‍‌കിയിട്ടില്ലാത്തപക്ഷം നിങ്ങള്‍‌ ഈ ഉള്ളടക്കത്തെ (മുഴുവനായോ അല്ലെങ്കില്‍‌ ഭാഗികമായോ) അടിസ്ഥാനമാക്കി പരിഷ്‌ക്കരിക്കാനോ, വാടകയ്‌ക്ക് നല്‍‌കാനോ, പാട്ടത്തിന് നല്‍‌കാനോ, ലോണ്‍‌ നല്‍‌കാനോ, വില്‍‌ക്കാനോ വിതരണം ചെയ്യാനോ അല്ലെങ്കില്‍‌ വ്യുല്‍‌പ്പന്ന പ്രവര്‍‌ത്തനങ്ങള്‍‌ സൃഷ്‌ടിക്കാനോ പാടില്ല.

    --

    7.3 പ്രീ-സ്ക്രീന്‍ ചെയ്യുന്നതിനും, അവലോകനം നടത്തുന്നതിനും ഫ്ലാഗ് ചെയ്യുന്നതിനും, ഫില്‍റ്റര്‍‌‍ ചെയ്യുന്നതിനും പരിഷ്കരിക്കുന്നതിനും സേവനത്തില്‍‌ നിന്ന് ഏതെങ്കിലും അല്ലെങ്കില്‍ എല്ലാ ഉല്‍‌പ്പന്നങ്ങളും നീക്കം ചെയ്യുന്നതിനുമുള്ള അവകാശം (എന്നാല്‍ ബാധ്യതകളൊന്നുമില്ല) Google ല്‍ നിക്ഷിപ്തമാണ്. ചില സേവനങ്ങള്‍‌ക്കായി, സ്‌പഷ്‌ടമായ ലൈംഗിക ഉള്ളടക്കം നീക്കംചെയ്യുന്നതിന് Google ചില ഉപകരണങ്ങള്‍‌ നല്‍‌കാം. ഈ ഉപകരണങ്ങളില്‍‌ സുരക്ഷിത‌തിരയല്‍‌ മുന്‍‌ഗണന ക്രമീകരണങ്ങള്‍‌ അടങ്ങിയിരിക്കുന്നു ( https://support.google.com/websearch/answer/510 കാണുക). കൂടാതെ, നിങ്ങള്‍‌ ആക്ഷേപകരമെന്ന് കണ്ടെത്തിയേക്കാവുന്ന ഉല്‍‌പ്പന്നത്തിലേക്കുള്ള ആക്‍സസ്സ് പരിമിതപ്പെടുത്തുന്നതിന് വാണിജ്യപരമായി ലഭ്യമാകുന്ന സേവനങ്ങളും സോഫ്റ്റ്വെയറുമുണ്ട്.

    -+

    7.3 പ്രീ-സ്ക്രീന്‍ ചെയ്യുന്നതിനും, അവലോകനം നടത്തുന്നതിനും ഫ്ലാഗ് ചെയ്യുന്നതിനും, ഫില്‍റ്റര്‍‌‍ ചെയ്യുന്നതിനും പരിഷ്കരിക്കുന്നതിനും സേവനത്തില്‍‌ നിന്ന് ഏതെങ്കിലും അല്ലെങ്കില്‍ എല്ലാ ഉല്‍‌പ്പന്നങ്ങളും നീക്കം ചെയ്യുന്നതിനുമുള്ള അവകാശം (എന്നാല്‍ ബാധ്യതകളൊന്നുമില്ല) Google ല്‍ നിക്ഷിപ്തമാണ്. ചില സേവനങ്ങള്‍‌ക്കായി, സ്‌പഷ്‌ടമായ ലൈംഗിക ഉള്ളടക്കം നീക്കംചെയ്യുന്നതിന് Google ചില ഉപകരണങ്ങള്‍‌ നല്‍‌കാം. ഈ ഉപകരണങ്ങളില്‍‌ സുരക്ഷിത‌തിരയല്‍‌ മുന്‍‌ഗണന ക്രമീകരണങ്ങള്‍‌ അടങ്ങിയിരിക്കുന്നു ( https://support.9oo91e.qjz9zk/websearch/answer/510 കാണുക). കൂടാതെ, നിങ്ങള്‍‌ ആക്ഷേപകരമെന്ന് കണ്ടെത്തിയേക്കാവുന്ന ഉല്‍‌പ്പന്നത്തിലേക്കുള്ള ആക്‍സസ്സ് പരിമിതപ്പെടുത്തുന്നതിന് വാണിജ്യപരമായി ലഭ്യമാകുന്ന സേവനങ്ങളും സോഫ്റ്റ്വെയറുമുണ്ട്.

    -

    7.4 സേവനങ്ങള്‍‌ ഉപയോഗിക്കുന്നതിലൂടെ നിന്ദ്യവും ആശാസ്യമല്ലാത്തതും അല്ലെങ്കില്‍‌ ആക്ഷേപകരമായതുമായ ഉല്‍‌പ്പന്നങ്ങള്‍ നിങ്ങള്‍ കണ്ടേക്കാമെന്നും ഈ സാഹചര്യത്തില്‍‌ സ്വന്തം ഉത്തരവാദിത്തത്തിലാണ് നിങ്ങള്‍ സേവനങ്ങള്‍‌ ഉപയോഗിക്കുന്നതെന്നും മനസ്സിലാക്കുന്നു.

    -

    7.5 സേവനങ്ങള്‍‌ ഉപയോഗിക്കുന്ന സമയത്ത് നിങ്ങള്‍‌‌ സൃഷ്‌ടിക്കുന്ന, പ്രേക്ഷണം ചെയ്യുന്ന അല്ലെങ്കില്‍‌ പ്രദര്‍‌ശിപ്പിക്കുന്ന ഏതൊരു ഉല്‍‌പ്പന്നത്തിനും കൂടാതെ അങ്ങനെ ചെയ്യുന്നതിലൂടെ നിങ്ങളുടെ പ്രവര്‍‌ത്തനങ്ങളുടെ (Google നുണ്ടാകാവുന്ന ഏതെങ്കിലും നഷ്‌ടം അല്ലെങ്കില്‍‌ നാശനഷ്‌ടം ഉള്‍‌പ്പെടെ) പരിണിതഫലങ്ങള്‍‌ക്കും നിങ്ങള്‍‌ മാത്രം ഉത്തരവാദികളായിരിക്കുമെന്ന് സമ്മതിക്കുന്നു (Google ന് നിങ്ങളോടോ അല്ലെങ്കില്‍‌ ഏതെങ്കിലും മൂന്നാം കക്ഷിയോടോ ഒരു ഉത്തരവാദിത്തവും ഉണ്ടായിരിക്കില്ല).

    -

    8. ബൌദ്ധിക സ്വത്തവകാശങ്ങള്‍

    -

    8.1 സേവനങ്ങളിലും സേവനങ്ങളിലേക്കും ഉള്ള എല്ലാ നിയമാവകാ‍ശങ്ങളും പദവിയും താല്‍‌പ്പര്യവും, സേവനങ്ങളില്‍ നിലനില്‍ക്കുന്ന ഏതെങ്കിലും ബൌദ്ധിക സ്വത്തവകാശ നിയമങ്ങളുമടക്കം (ആ അവകാശങ്ങള്‍ രജിസ്റ്റര്‍ ചെയ്തതായാലും ഇല്ലെങ്കിലും കൂടാതെ ആ അവകാശങ്ങള്‍ ലോകത്തെവിടെ നിലവിലുണ്ടായാലും) Google ന് (അല്ലെങ്കില്‍ Google ന്‍റെ ലൈസന്‍സര്‍മാര്‍ക്ക്) സ്വന്തമാണെന്ന് നിങ്ങള്‍ സമ്മതിക്കുകയും അംഗീകരിക്കുകയും ചെയ്യുന്നു.

    -

    8.2 Google മായി രേഖാമൂലം നിങ്ങള്‍‌ അനുമതി നേടാത്ത സാഹചര്യത്തില്‍, നിബന്ധനകളില്‍ ഒന്നുംതന്നെ Google ന്‍റെ വ്യാപാരനാമങ്ങള്‍, വ്യാപാരമുദ്രകള്‍, സേവനമുദ്രകള്‍, ലോഗോകള്‍, ഡൊമെയ്‌ന്‍ നാമങ്ങള്‍, കൂടാതെ മറ്റ് വ്യതിരിക്ത ബ്രാന്‍ഡ് സവിശേഷതകള്‍ എന്നിവയിലേതെങ്കിലും ഉപയോഗിക്കാനുള്ള അവകാശം നിങ്ങള്‍ക്ക് നല്‍‌കുന്നില്ല.

    --

    8.3 ഈ ബ്രാന്‍ഡ് സവിശേഷതകളില്‍ ഏതെങ്കിലും ഉപയോഗിക്കാനുള്ള സ്‌പഷ്‌ടമായ അവകാശം Google മായി രേഖാമൂലമുള്ള പ്രത്യേക കരാറിലൂടെ നിങ്ങള്‍ക്ക് നല്‍കിയിട്ടുണ്ടെങ്കില്‍‍, അത്തരം സവിശേഷതകള്‍ നിങ്ങള്‍ ഉപയോഗിക്കുന്നത് ആ കരാര്‍ പ്രകാരവും, നിബന്ധനകളിലെ ഏത് പ്രായോഗിക വ്യവസ്ഥകള്‍‌ പ്രകാരവും ആയിരിക്കുമെന്നും, സമയാസമയങ്ങളില്‍ പുതുക്കുന്ന Google ന്‍റെ ബ്രാന്‍ഡ് സവിശേഷത ഉപയോഗത്തിന്‍റെ മാര്‍ഗ്ഗരേഖകള്‍ അനുസരിച്ചും ആയിരിക്കുമെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു. ഈ മാര്‍ഗ്ഗരേഖകള്‍ ഓണ്‍ലൈനായി http://www.google.com/permissions/guidelines.html ല്‍ കാണാന്‍‌ കഴിയും (അല്ലെങ്കില്‍ Google ഈ ആവശ്യത്തിനായി സമയാസമയങ്ങളില്‍ നല്‍കിയേക്കാവുന്നതുപോലുള്ള മറ്റ് URL ല്‍).

    -+

    8.3 ഈ ബ്രാന്‍ഡ് സവിശേഷതകളില്‍ ഏതെങ്കിലും ഉപയോഗിക്കാനുള്ള സ്‌പഷ്‌ടമായ അവകാശം Google മായി രേഖാമൂലമുള്ള പ്രത്യേക കരാറിലൂടെ നിങ്ങള്‍ക്ക് നല്‍കിയിട്ടുണ്ടെങ്കില്‍‍, അത്തരം സവിശേഷതകള്‍ നിങ്ങള്‍ ഉപയോഗിക്കുന്നത് ആ കരാര്‍ പ്രകാരവും, നിബന്ധനകളിലെ ഏത് പ്രായോഗിക വ്യവസ്ഥകള്‍‌ പ്രകാരവും ആയിരിക്കുമെന്നും, സമയാസമയങ്ങളില്‍ പുതുക്കുന്ന Google ന്‍റെ ബ്രാന്‍ഡ് സവിശേഷത ഉപയോഗത്തിന്‍റെ മാര്‍ഗ്ഗരേഖകള്‍ അനുസരിച്ചും ആയിരിക്കുമെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു. ഈ മാര്‍ഗ്ഗരേഖകള്‍ ഓണ്‍ലൈനായി http://www.9oo91e.qjz9zk/permissions/guidelines.html ല്‍ കാണാന്‍‌ കഴിയും (അല്ലെങ്കില്‍ Google ഈ ആവശ്യത്തിനായി സമയാസമയങ്ങളില്‍ നല്‍കിയേക്കാവുന്നതുപോലുള്ള മറ്റ് URL ല്‍).

    -

    ഈ കരാറിനുകീഴിലുള്ള അല്ലെങ്കില്‍‌ ഉള്ളടക്കത്തില്‍‌ നിലനില്‍‌ക്കുന്ന ഏതെങ്കിലും ബൌദ്ധിക സ്വത്തവകാശങ്ങളുള്‍‌പ്പെടെ (ഒരുപക്ഷേ ആ അവകാശങ്ങള്‍‌ രജിസ്റ്റര്‍‌ ചെയ്യേണ്ടതായിവന്നാലും ഇല്ലെങ്കിലും, അല്ലെങ്കില്‍‌ ലോകത്തെവിടെയെങ്കിലും അത്തരം അവകാശങ്ങള്‍‌ നിലവിലുണ്ടെങ്കിലും) നിങ്ങള്‍‌ സമര്‍‌പ്പിക്കുന്നതോ പോസ്റ്റുചെയ്യുന്നതോ പ്രേക്ഷണം ചെയ്യുന്നതോ അല്ലെങ്കില്‍‌ ഉല്‍‌പ്പന്നങ്ങളില്‍‌ പ്രദര്‍‌ശിപ്പിക്കുന്നതോ ആയ ഉള്ളടക്കത്തിന് ‍‌‌Google നിങ്ങളില്‍‌ നിന്നും (അല്ലെങ്കില്‍‌ നിങ്ങളുടെ ലൈസന്‍‌സര്‍‌മാരില്‍‌ നിന്നും) ഒരു അവകാശങ്ങളോ ഉടമസ്ഥാവകാശമോ അല്ലെങ്കില്‍‌ താല്‍‌പ്പര്യമോ കരസ്ഥമാക്കുന്നതല്ലെന്ന് മനസ്സിലാക്കുകയും അംഗീകരിക്കുകയും ചെയ്യുന്നു. Google മായി നിങ്ങള്‍‌ കരാറിലേര്‍‌പ്പെട്ടില്ലെങ്കില്‍‌, അത്തരം അവകാശങ്ങള്‍‌ പരിരക്ഷിക്കുന്നതിനും നടപ്പിലാക്കുന്നതിനും നിങ്ങള്‍‌ ഉത്തരവാദികളായിരിക്കുമെന്നും കൂടാ‍തെ അവ നിങ്ങളുടെ താല്‍‌പ്പര്യാര്‍‌ത്ഥം ചെയ്യുന്നതിന് Google ന് യാതൊരു നിയമബാദ്ധ്യതയും ഉണ്ടായിരിക്കുന്നതല്ല എന്നും നിങ്ങള്‍‌ സമ്മതിക്കുന്നു.

    -

    8.5 സേവനങ്ങളോട് അനുബന്ധിച്ചതോ അല്ലെങ്കില്‍‌ അതില്‍ അടങ്ങിയിരിക്കുന്നതോ ആയ ഏതെങ്കിലും ഉടമസ്ഥാവകാശ അറിയിപ്പുകള്‍ (പകര്‍പ്പവകാശ, വ്യാപാരമുദ്ര അറിയിപ്പുകള്‍ ഉള്‍പ്പെടെ) നീക്കംചെയ്യുകയോ അവ്യക്തമാക്കുകയോ അല്ലെങ്കില്‍ മാറ്റം വരുത്തുകയോ ചെയ്യില്ലെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു.

    -

    8.6 സേവനങ്ങള്‍ ഉപയോഗിക്കുമ്പോള്‍ വ്യാപാരമുദ്ര, സേവനമുദ്ര, വ്യാപാരനാമം ഏതെങ്കിലും കമ്പനിയുടെ അല്ലെങ്കില്‍ ഓര്‍ഗനൈസേഷന്‍റെ ലോഗോ എന്നിവ ഇത്തരം മുദ്രകളുടെയും നാമങ്ങളുടെയും അല്ലെങ്കില്‍ ലോഗോകളുടെയും ഉടമയെക്കുറിച്ചോ അല്ലെങ്കില്‍‌ അംഗീകൃത ഉപയോക്താവിനെക്കുറിച്ചോ ആശയക്കുഴപ്പത്തിന് ഇടയാക്കിയേക്കാവുന്നതോ അല്ലെങ്കില്‍ ആശയക്കുഴപ്പം ഉണ്ടാക്കാന്‍ ഉദ്ദേശിച്ചുകൊണ്ടോ, അങ്ങനെ ചെയ്യുന്നതിന് നിങ്ങളെ Google രേഖാമൂലം വ്യക്തമായി അധികാരപ്പെടുത്തിയിട്ടില്ലെങ്കില്‍‌ അവ ഉപയോഗിക്കുകയില്ലെന്ന് നിങ്ങള്‍ സമ്മതിക്കുന്നു.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) നിങ്ങളുടെ പാസ്‌വേഡ് അല്ലെങ്കില്‍ അക്കൌണ്ട് വിശദാംശങ്ങള്‍ സുരക്ഷിതവും അതീവരഹസ്യവുമായി സൂക്ഷിക്കുന്നതില്‍‌ നിങ്ങള്‍ക്കുണ്ടായ പരാജയം;

    -

    14.2 ഉണ്ടാകാന്‍ ഇടയുളള നഷ്‌ടങ്ങളെക്കുറിച്ച് GOOGLE ന് ഉപദേശം ലഭിച്ചാലും അല്ലെങ്കില്‍ അതിനെക്കുറിച്ച് അറിവുണ്ടെങ്കിലും മുകളിലെ ഖണ്ഡിക 14.1 ല്‍ പറഞ്ഞിരിക്കുന്നപോലുള്ള GOOGLE ന് നിങ്ങളോടുളള ബാ‍ധ്യതയുടെ പരിധി ബാധകമാവും.

    -

    15. പകര്‍‌പ്പവകാശ വ്യാപാരമുദ്രാ നയങ്ങള്‍‌

    --

    15.1 ബാധകമായ അന്താരാഷ്ട്ര ബൌദ്ധിക സ്വത്തവകാശ നിയമത്തിനനുസരിച്ച് (യുണൈറ്റഡ് സ്റ്റേറ്റ്സില്‍ ഉള്‍പ്പെടെയുളള Digital Millennium Copyright Act) ആരോപിതമായ പകര്‍പ്പവകാശ ലംഘന അറിയിപ്പുകളോട് പ്രതികരിക്കുക എന്നതും ലംഘനം ആവര്‍ത്തിക്കുന്ന അക്കൌണ്ടുകള്‍‌ അവസാനിപ്പിക്കുക എന്നതും Google ന്‍റെ നയമാണ്. Google ന്‍റെ നയത്തെക്കുറിച്ചുള്ള വിശദാംശങ്ങള്‍‌ http://www.google.com/dmca.html ല്‍‌ കണ്ടെത്താനാകും.

    --

    15.2 Google ന്‍റെ പരസ്യ വ്യാപാരം പ്രകാരം Google ഒരു വ്യാപാര മുദ്രാ പരാതി നടപടിക്രമം നടത്തുന്നു, ഇതിന്‍റെ വിശദാംശങ്ങള്‍ http://www.google.com/tm_complaint.html ല്‍ കണ്ടെത്താന്‍ കഴിയും.

    -+

    15.1 ബാധകമായ അന്താരാഷ്ട്ര ബൌദ്ധിക സ്വത്തവകാശ നിയമത്തിനനുസരിച്ച് (യുണൈറ്റഡ് സ്റ്റേറ്റ്സില്‍ ഉള്‍പ്പെടെയുളള Digital Millennium Copyright Act) ആരോപിതമായ പകര്‍പ്പവകാശ ലംഘന അറിയിപ്പുകളോട് പ്രതികരിക്കുക എന്നതും ലംഘനം ആവര്‍ത്തിക്കുന്ന അക്കൌണ്ടുകള്‍‌ അവസാനിപ്പിക്കുക എന്നതും Google ന്‍റെ നയമാണ്. Google ന്‍റെ നയത്തെക്കുറിച്ചുള്ള വിശദാംശങ്ങള്‍‌ http://www.9oo91e.qjz9zk/dmca.html ല്‍‌ കണ്ടെത്താനാകും.

    -+

    15.2 Google ന്‍റെ പരസ്യ വ്യാപാരം പ്രകാരം Google ഒരു വ്യാപാര മുദ്രാ പരാതി നടപടിക്രമം നടത്തുന്നു, ഇതിന്‍റെ വിശദാംശങ്ങള്‍ http://www.9oo91e.qjz9zk/tm_complaint.html ല്‍ കണ്ടെത്താന്‍ കഴിയും.

    -

    16. പരസ്യങ്ങള്‍‌

    -

    16.1 ചില സേവനങ്ങളെ പരസ്യ വരുമാനം പിന്തുണയ്‌ക്കുകയും പരസ്യങ്ങളെയും പ്രമോഷനുകളെയും പ്രദര്‍ശിപ്പിക്കുകയും ചെയ്യുന്നു. സേവനങ്ങളിലൂടെയോ മറ്റ് വിവരങ്ങളിലൂടെയോ നിര്‍മ്മിച്ച സേവനങ്ങളിലോ, അന്വേഷണങ്ങളിലോ സംഭരിച്ചിരിക്കുന്ന വിവരങ്ങളുടെ ഉള്ളടക്കത്തെ ഈ പരസ്യങ്ങള്‍ ലക്‍ഷ്യമാക്കാം.

    -

    16.2 Google സേവനങ്ങളില്‍ പരസ്യപ്പെടുത്തുന്നവയുടെ രൂപവലുപ്പങ്ങളെല്ലാം നിങ്ങളെ മുന്‍‌കൂട്ടിയറിയിക്കാതെയുള്ള മാറ്റങ്ങള്‍ക്ക് വിധേയമാണ്.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 അത്തരം ഏതെങ്കിലും ബാഹ്യ സൈറ്റുകള്‍ അല്ലെങ്കില്‍ ഉറവിടങ്ങള്‍ എന്നിവയുടെ ലഭ്യതയ്‌ക്ക് Google ഉത്തരവാദിയല്ലെന്നും അത്തരം ബാഹ്യ സൈറ്റുകളിലോ ഉറവിടങ്ങളിലോ ഉള്ളതോ ലഭ്യമായതോ ആയ ഏതെങ്കിലും പരസ്യം, ഉല്‍പ്പന്നങ്ങള്‍‍ അല്ലെങ്കില്‍‌ മറ്റ് മെറ്റീരിയലുകള്‍ എന്നിവ അംഗീകരിക്കുകയില്ലെന്നും നിങ്ങള്‍ സമ്മതിക്കുകയും അംഗീകരിക്കുകയും ചെയ്യുന്നു.

    -

    17.3 അത്തരം ബാഹ്യ സൈറ്റുകള്‍‌ അല്ലെങ്കില്‍‌ ഉറവിടങ്ങളുടെ ലഭ്യതയുടെ ഫലമായി, അല്ലെങ്കില്‍‌ അത്തരം വെബ് സൈറ്റുകളിലോ ഉറവിടങ്ങളിലോ ലഭ്യമായ ഏതെങ്കിലും പരസ്യത്തിന്‍റെയും പൂര്‍ണതയിലും, കൃത്യതയിലും, നിലനില്‍പ്പിലും നിങ്ങള്‍‌ സമര്‍പ്പിച്ച വിശ്വാസത്തിന്‍റെ ഫലമായി, നിങ്ങള്‍‌ കാരണം ഉണ്ടാകാവുന്ന ഏതെങ്കിലും നഷ്‌ടത്തിനോ അല്ലെങ്കില്‍‌ കേടുപാടിനോ Google ഉത്തരവാദിയായിരിക്കില്ലെന്നത് നിങ്ങള്‍‌ സമ്മതിക്കുകയും അംഗീകരിക്കുകയും ചെയ്യുന്നു.

    -

    18. നിബന്ധനകളിലെ മാറ്റങ്ങള്‍

    --

    18.1 സമയാസമയങ്ങളില്‍ ആഗോള നിബന്ധനകളിലോ അല്ലെങ്കില്‍‌ കൂടുതല്‍‌ നിബന്ധനകളിലോ Google മാറ്റങ്ങള്‍ വരുത്താം. ഈ മാറ്റങ്ങള്‍ വരുത്തുമ്പോള്‍, ആഗോള നിബന്ധനകളുടെ http://www.google.com/chrome/intl/en/eula_text.html ല്‍ ലഭ്യമാകുന്ന പുതിയ പകര്‍പ്പ് Google സൃഷ്‌ടിക്കുന്നു. കൂടാതെ ബാധകമായ സേവനങ്ങളില്‍‌ നിന്നോ അല്ലെങ്കില്‍‌ അതിലൂടെയോ പുതിയ കൂടുതല്‍‌ നിബന്ധനകള്‍‌ നിങ്ങള്‍ക്ക് ലഭ്യമാകും.

    -+

    18.1 സമയാസമയങ്ങളില്‍ ആഗോള നിബന്ധനകളിലോ അല്ലെങ്കില്‍‌ കൂടുതല്‍‌ നിബന്ധനകളിലോ Google മാറ്റങ്ങള്‍ വരുത്താം. ഈ മാറ്റങ്ങള്‍ വരുത്തുമ്പോള്‍, ആഗോള നിബന്ധനകളുടെ http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html ല്‍ ലഭ്യമാകുന്ന പുതിയ പകര്‍പ്പ് Google സൃഷ്‌ടിക്കുന്നു. കൂടാതെ ബാധകമായ സേവനങ്ങളില്‍‌ നിന്നോ അല്ലെങ്കില്‍‌ അതിലൂടെയോ പുതിയ കൂടുതല്‍‌ നിബന്ധനകള്‍‌ നിങ്ങള്‍ക്ക് ലഭ്യമാകും.

    -

    18.2 ആഗോള നിബന്ധനകളോ അധിക നിബന്ധനകളോ മാറ്റിയതിന് ശേഷമുള്ള തീയതിയില്‍ നിങ്ങള്‍ സേവനങ്ങള്‍ ഉപയോഗിക്കുകയാണെങ്കില്‍‌‍, അപ്‌ഡേറ്റുചെയ്‌ത ആഗോള നിബന്ധനകളോ കൂടുതല്‍‌ നിബന്ധനകളോ സ്വീകരിച്ചുവെന്ന രീതിയില്‍ Google നിങ്ങളുടെ ഉപയോഗത്തെ പരിഗണിക്കുമെന്ന് നിങ്ങള്‍ മനസ്സിലാക്കുകയും അംഗീകരിക്കുകയും ചെയ്യുന്നു.

    -

    19. പൊതുവായ നിയമ നിബന്ധനകള്‍‌

    -

    19.1 സേവനങ്ങള്‍ ഉപയോഗിക്കുമ്പോള്‍ ചിലപ്പോള്‍ (സേവനങ്ങളുടെ ഉപയോഗ ഫലമായോ അല്ലെങ്കില്‍ സേവനങ്ങള്‍ ഉപയോഗിക്കുന്നതിലൂടെയോ) നിങ്ങള്‍ മറ്റൊരു വ്യക്തിയോ കമ്പനിയോ നല്‍കിയിരിക്കുന്ന സേവനം ഉപയോഗിക്കുകയോ സോഫ്റ്റ്വെയറിന്‍റെ ഭാഗം ഡൌണ്‍ലോഡുചെയ്യുകയോ അല്ലെങ്കില്‍‌ സാധനങ്ങള്‍ വാങ്ങുകയോ ചെയ്തേക്കാം. ഈ മറ്റ് സേവനങ്ങളോ സോഫ്റ്റ്വെയറോ സാധനങ്ങളോ നിങ്ങള്‍ ഉപയോഗിക്കുന്നത് നിങ്ങളും കമ്പനിയുമായി അല്ലെങ്കില്‍ ബന്ധപ്പെട്ട വ്യക്തിയുമായി ഉള്ള പ്രത്യേക നിബന്ധനകള്‍‌ക്ക് വിധേയമായാകും. അങ്ങനെയെങ്കില്‍‍, ഇത്തരം മറ്റ് കമ്പനികളുമായോ വ്യക്തികളുമായോ നിങ്ങള്‍ക്കുള്ള നിയമപരമായ ബന്ധത്തെ നിബന്ധനകള്‍ ബാധിക്കില്ല.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + അവസാനം പരിഷ്‌ക്കരിച്ചത്: 2021 ജനുവരി 01 +

    +

    +- Chrome അല്ലെങ്കിൽ Chrome OS ഉപയോഗിക്കുന്നതിലൂടെ, https://policies.google.com/terms -ൽ ഉള്ള Google സേവന നിബന്ധനകളും ഈ Google Chrome, Chrome OS അധിക സേവന നിബന്ധനകളും നിങ്ങൾ അംഗീകരിക്കുന്നു. ++ Chrome അല്ലെങ്കിൽ Chrome OS ഉപയോഗിക്കുന്നതിലൂടെ, https://policies.9oo91e.qjz9zk/terms -ൽ ഉള്ള Google സേവന നിബന്ധനകളും ഈ Google Chrome, Chrome OS അധിക സേവന നിബന്ധനകളും നിങ്ങൾ അംഗീകരിക്കുന്നു. +

    +

    +- Chrome, Chrome OS എന്നിവയുടെ നിർവഹിക്കാൻ കഴിയുന്ന കോഡ് പതിപ്പിന് ഈ Google Chrome, Chrome OS അധിക സേവന നിബന്ധനകൾ ബാധകമാണ്. Chrome-നായുള്ള മിക്ക സോഴ്‌സ് കോഡും https://code.google.com/chromium/terms.html -ൽ ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയർ ലൈസൻസ് ഉടമ്പടി പ്രകാരം സൗജന്യമായി ലഭ്യമാണ്. ++ Chrome, Chrome OS എന്നിവയുടെ നിർവഹിക്കാൻ കഴിയുന്ന കോഡ് പതിപ്പിന് ഈ Google Chrome, Chrome OS അധിക സേവന നിബന്ധനകൾ ബാധകമാണ്. Chrome-നായുള്ള മിക്ക സോഴ്‌സ് കോഡും https://code.9oo91e.qjz9zk/chromium/terms.html -ൽ ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയർ ലൈസൻസ് ഉടമ്പടി പ്രകാരം സൗജന്യമായി ലഭ്യമാണ്. +

    +

    + Chrome, Chrome OS എന്നിവയുടെ ചില ഘടകങ്ങൾ നിങ്ങൾ ഉപയോഗിക്കുന്നത് ഇനിപ്പറയുന്ന നിബന്ധനകൾക്ക് വിധേയമാണ്: diff --git a/components/resources/terms/terms_mr.html b/components/resources/terms/terms_mr.html --- a/components/resources/terms/terms_mr.html +++ b/components/resources/terms/terms_mr.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome सेवा अटी

    -

    Google Chrome च्या कार्यवाहीयोग्य कोड आवृत्तीस या सेवा अटी लागू होतात. मुक्त स्रोत सॉफ्टवेअर परवाना करारा अंतर्गत chrome://credits येथे Google Chrome साठी स्रोत कोड विनामूल्य उपलब्ध आहे .

    -

    1. आपले Google बरोबरचे संबंध

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 Google कडून स्वतंत्र कराराद्वारे आपल्याला असे करण्याची परवानगी दिली जात नाही तोपर्यंत, आपण सहमत आहात की आपण कोणत्याही हेतूसाठी सेवेचे पुनरूत्पादन, डुप्लिकेट, कॉपी, विक्री, व्यापार किंवा पुनर्विक्री करणार नाही.

    -

    5.4 आपण सहमत आहात की अटींच्या अंतर्गत आपण केलेला कर्तव्य भंग आणि त्याच्या परिणामांसाठी (कोणत्याही प्रकारची हानी किंवा क्षति जी Google ला भोगावी लागू शकेल तिच्यासह) आपण स्वत: पूर्णपणे जवाबदार असाल (आणि Google आपण किंवा कोणत्याही तृतीय पक्षासाठी जवाबदार राहणार नाही)

    -

    6. गोपनीयता आणि आपली वैयक्तिक माहिती

    --

    6.1 Google च्या डेटा संरक्षण पद्धतींबद्दल माहितीसाठी, कृपया Google चे गोपनीयता धोरण http://www.google.com/privacy.html आणि http://www.google.com/chrome/intl/en/privacy.html येथे वाचा. आपण सेवा वापरता तेव्हा Google आपली वैयक्तिक माहिती कशी हाताळते आणि आपली गोपनीयता कशा प्रकारे संरक्षित करते हे, हे धोरण स्पष्ट करते.

    -+

    6.1 Google च्या डेटा संरक्षण पद्धतींबद्दल माहितीसाठी, कृपया Google चे गोपनीयता धोरण http://www.9oo91e.qjz9zk/privacy.html आणि http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html येथे वाचा. आपण सेवा वापरता तेव्हा Google आपली वैयक्तिक माहिती कशी हाताळते आणि आपली गोपनीयता कशा प्रकारे संरक्षित करते हे, हे धोरण स्पष्ट करते.

    -

    6.2 आपण आपला डेटा Google च्या गोपनीयता धोरणांनुसार वापरण्यास सहमत आहात.

    -

    7. सेवेतील सामग्री

    -

    7.1 आपण समजून घेतले आहे की आपण सेवेच्या वापराचा एक भाग म्हणून किंवा सेवेच्या वापराद्वारे प्रवेश केलेली सर्व माहिती (डेटा फाइल्स, लिखित मजकूर, संगणक सॉफ्टवेअर, संगीत, ऑडिओ फाइल्स किंवा इतर ध्वनी, फोटोग्राफ, व्हिडिओ किंवा इतर प्रतिमा यासारखी) ची संपूर्ण जबाबदारी त्या व्यक्तीची आहे जिने अशी सामग्री तयार केली आहे. अशी सर्व माहिती खाली “सामग्री” या रूपात अभिप्रेत आहे.

    -

    7.2 आपल्याला ज्ञात असले पाहिजे की सेवांचा भाग म्हणून आपल्यासमक्ष सेवेतील जाहिराती आणि सेवेतील प्रायोजित सामग्री सह प्रस्तुत सामग्री, परंतु या इतकेच मर्यादित नाही, बौद्धिक संपत्ती अधिकारांद्वारे संरक्षित असू शकेल जे Google ला ही सामग्री प्रदान करणार्‍या प्रायोजक किंवा जाहिरातदारांच्या (किंवा त्यांच्या वतीने अन्य व्यक्ती किंवा कंपनीच्या) मालकीचे असतील. Google किंवा त्या सामग्रीच्या मालकाकडून स्वतंत्र कराराद्वारे आपणांस असे करण्याची स्पष्ट परवानगी प्राप्त झालेली नसेल तोपर्यंत आपण त्यात सुधारणा करू, ती भाड्याने, भाडेपट्टीने देऊ, तीवर कर्ज देऊ, तिची विक्री, वितरण किंवा त्या सामग्रीवर (संपूर्ण किंवा आंशिक) आधारित व्युत्पन्न कार्ये तयार करू शकत नाही.

    --

    7.3 Google कोणत्याही सेवेतील सर्व किंवा कोणत्याही सामग्रीचे प्री-स्क्रीन्स, समीक्षा, फ्लॅग, फिल्टर, सुधारणा, मनाई, किंवा काढून टाकण्याचे अधिकार (परंतु तसे कराराद्वारे बंधनकारक नसू शकेल) राखून ठेवत आहे. काही सेवांसाठी, Google विशिष्ट लैंगिक सामग्री फिल्टर करण्यासाठी साधने उपलब्ध करुन देऊ शकते. या साधनांमध्ये सुरक्षितशोध प्राधान्य सेटिंग्जचा समावेश असतो (https://support.google.com/websearch/answer/510 पहा). या व्यतिरिक्त, येथे व्यावसायिक रूपात उपलब्ध अशा सेवा आणि सॉफ्टवेअर आहेत ज्या आपल्यास आपत्तीजनक वाटणार्‍या सामग्रीच्या प्रवेशावर मर्यादा घालू शकतात.

    -+

    7.3 Google कोणत्याही सेवेतील सर्व किंवा कोणत्याही सामग्रीचे प्री-स्क्रीन्स, समीक्षा, फ्लॅग, फिल्टर, सुधारणा, मनाई, किंवा काढून टाकण्याचे अधिकार (परंतु तसे कराराद्वारे बंधनकारक नसू शकेल) राखून ठेवत आहे. काही सेवांसाठी, Google विशिष्ट लैंगिक सामग्री फिल्टर करण्यासाठी साधने उपलब्ध करुन देऊ शकते. या साधनांमध्ये सुरक्षितशोध प्राधान्य सेटिंग्जचा समावेश असतो (https://support.9oo91e.qjz9zk/websearch/answer/510 पहा). या व्यतिरिक्त, येथे व्यावसायिक रूपात उपलब्ध अशा सेवा आणि सॉफ्टवेअर आहेत ज्या आपल्यास आपत्तीजनक वाटणार्‍या सामग्रीच्या प्रवेशावर मर्यादा घालू शकतात.

    -

    7.4 आपण समजून घेता की सेवा वापराद्वारे आपण असा सामग्रीस सामोरे जाल जी आपल्याला अपमानकारक, असभ्य किंवा आपत्तीजनक वाटू शकते, त्या संदर्भात, आपण स्वत:च्या जोखमीवर या सेवांचा वापर करीत आहात.

    -

    7.5 आपण सहमत आहात की सेवांचा वापर करताना आपण तयार, प्रसारित किंवा प्रदर्शित केलेल्या सामग्रीसाठी आणि तसे करण्यामुळे उद्भवणार्‍या सर्व परिणामांसाठी (Google ला भोगाव्या लागणार्‍या कोणत्याही हानी किंवा क्षतिसह) आपण संपूर्णतः जबाबदार आहात (आणि याकरिता Google आपल्यासाठी किंवा कोणत्याही तृतीय पक्षासाठी जबाबदार राहणार नाही).

    -

    8. मालकी हक्क

    -

    8.1 आपण स्वीकार करता आणि सहमत आहात की सर्व सेवांमधील सर्व कायदेशीर अधिकार, शीर्षक, हित, सेवांमध्ये असलेल्या कोणत्याही बौद्धिक संपत्ती अधिकारांसहित, (ते अधिकार नोंदणीकृत असतील किंवा नसतील आणि जगात कोठेही अस्तित्वात असतील) सर्व कायदेशीर अधिकार Google कडे (किंवा Google च्या परवाना प्रदात्यांकडे) राहतील.

    -

    8.2 Google द्वारा लिखित मंजूरी शिवाय, कोणतीही अट आपल्याला Google चे कोणतेही ट्रेडनेम, ट्रेडमार्क्स, सेवा चिन्ह, लोगो, डोमेन नाव आणि इतर विशिष्ट ब्रँड सुविधांच्या वापराचे अधिकार देत नाही.

    --

    8.3 या ब्रँड वैशिष्ट्यांमधील कशाच्याही वापरासाठी Google ने आपल्याला एखाद्या स्वतंत्र लिखित करारानुसार स्पष्ट अधिकार दिल्यानंतर आपण स्वीकारता की आपण या कोणत्याही वैशिष्ट्याचा वापर करण्यासाठी त्या कराराचे, अटींमध्ये नमूद लागू तरतूदी आणि वेळोवेळी Google च्या ब्रँड सुविधांच्या वापराबाबत अद्यतनित मार्गदर्शक तत्त्वांचे पालन कराल. ही मार्गदर्शक तत्त्वे http://www.google.com/permissions/guidelines.html येथे ऑनलाइन पाहता येतील (किंवा Google ने या कारणास्तव वेळोवेळी प्रदान केलेल्या अशा अन्य URL शोधा).

    -+

    8.3 या ब्रँड वैशिष्ट्यांमधील कशाच्याही वापरासाठी Google ने आपल्याला एखाद्या स्वतंत्र लिखित करारानुसार स्पष्ट अधिकार दिल्यानंतर आपण स्वीकारता की आपण या कोणत्याही वैशिष्ट्याचा वापर करण्यासाठी त्या कराराचे, अटींमध्ये नमूद लागू तरतूदी आणि वेळोवेळी Google च्या ब्रँड सुविधांच्या वापराबाबत अद्यतनित मार्गदर्शक तत्त्वांचे पालन कराल. ही मार्गदर्शक तत्त्वे http://www.9oo91e.qjz9zk/permissions/guidelines.html येथे ऑनलाइन पाहता येतील (किंवा Google ने या कारणास्तव वेळोवेळी प्रदान केलेल्या अशा अन्य URL शोधा).

    -

    8.4 Google स्वीकार करत आहे आणि सहमत आहे की त्यांना या अटींअंतर्गत आपण सादर, पोस्ट, प्रसारित किंवा प्रदर्शित केलेल्या कोणत्याही सामग्रीचा किंवा त्या सामग्रीतील कोणत्याही बौद्धिक संपत्ती अधिकारांच्या (ते अधिकार नोंदणीकृत असतील किंवा नसतील, आणि जगात कोठेही अस्तित्वात असतील) सेवेमार्फत आपल्या जवळ (किंवा आपल्या परवाना प्रदात्यांकडे) असलेल्या कोणत्याही अधिकारांचा, मालकी हक्क किंवा लाभ मिळवता येणार नाही. आपण स्वीकारले आहे किंवा Google सह लिखित अन्यथा करार केला असून आपण सहमत आहात की आपण ते अधिकार जतन करण्यासाठी आणि त्यांच्या अंमलबजावणीसाठी स्वत: जबाबदार आहात आणि आपल्यावर किंवा आपल्या वतीने तसे करण्यासाठी Google वर कोणतेही बंधन नाही.

    -

    8.5 आपण स्वीकारत आहात की सेवांसह जोडलेल्या किंवा सेवांमध्ये असलेल्या कोणत्याही प्रकारच्या मालकी हक्क सूचना (कॉपीराइट आणि ट्रेडमार्क सूचनांसहित), आपण काढू, अस्पष्ट करू किंवा बदलू शकत नाही.

    -

    8.6 आपण स्वीकारत आहात की Google द्वारा आपल्याला असे करण्यासाठी स्पष्ट लिखित अधिकृतता दिली जात नाही तोपर्यंत सेवा वापरताना आपण कोणताही ट्रेडमार्क, सेवा चिह्न, ट्रेड नेम, कोणत्याही कंपनीचा किंवा संघटनेच्या लोगो यांचा वापर अशा प्रकारे करणार नाही जो अशी चिन्हे, नावे किंवा लोगो यांचे अधिकृत मालक किंवा वापरकर्ते यांचेविषयी संदिग्धता निर्माण करेल.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) आपण आपला संकेतशब्द आणि खात्याचे तपशील सुरक्षित आणि गोपनीय ठेवण्यात अयशस्वी ठरल्यास;

    -

    14.2 उपरोक्त परिच्छेद क्र.14.1 मधील GOOGLE चे उत्तरदायित्व आणि आपल्या मर्यादांमध्ये नमूद कोणत्याही प्रकारचे नुकसान उद्भवण्याच्या शक्यतांविषयी आपण जागरूक आहात किंवा त्यासाठी GOOGLE ने सल्ला दिला किंवा दिला नाही तरीही त्या लागू होतील

    -

    15. कॉपीराइट आणि ट्रेडमार्क धोरणे

    --

    15.1 Google चे धोरण असे आहे की ते कॉपीराइट कायद्याच्या उल्लंघनाचे आरोप जर आंतरराष्ट्रीय बौद्धिक संपत्ती कायद्याचे पालन करणार्‍यांनी केले (यूनायटेड स्टेट्समधील, डिजिटल मिलेनियम कॉपीराइट कायद्यासहित) तर त्यांच्या सूचनांना उत्तर देतील आणि वारंवार उल्लंघन करणार्‍या खात्यास बंद करतील. Google च्या धोरणाचा तपशील येथे पाहता येईल http://www.google.com/dmca.html.

    --

    15.2 Google त्यांच्या जाहिरात उद्योगांच्या संदर्भात एक ट्रेडमार्क तक्रार प्रक्रिया चालवते, ज्याचा तपशील आपल्याला येथे पाहता येईल :http://www.google.com/tm_complaint.html.

    -+

    15.1 Google चे धोरण असे आहे की ते कॉपीराइट कायद्याच्या उल्लंघनाचे आरोप जर आंतरराष्ट्रीय बौद्धिक संपत्ती कायद्याचे पालन करणार्‍यांनी केले (यूनायटेड स्टेट्समधील, डिजिटल मिलेनियम कॉपीराइट कायद्यासहित) तर त्यांच्या सूचनांना उत्तर देतील आणि वारंवार उल्लंघन करणार्‍या खात्यास बंद करतील. Google च्या धोरणाचा तपशील येथे पाहता येईल http://www.9oo91e.qjz9zk/dmca.html.

    -+

    15.2 Google त्यांच्या जाहिरात उद्योगांच्या संदर्भात एक ट्रेडमार्क तक्रार प्रक्रिया चालवते, ज्याचा तपशील आपल्याला येथे पाहता येईल :http://www.9oo91e.qjz9zk/tm_complaint.html.

    -

    16. जाहिराती

    -

    16.1 काही सेवा जाहिरातींच्या महसूलाने समर्थित असतात आणि जाहिराती आणि प्रचारसामग्री प्रदर्शित करू शकतात. या जाहिराती सेवेवर संचयित माहितीमधील सामग्री, सेवेद्वारे केलेल्या क्वेरी किंवा इतर माहिती वर लक्ष्यित असू शकतात.

    -

    16.2 Google द्वारा सेवेवर केल्या जाणार्‍या जाहिरातींच्या पद्धती, मोड आणि मर्यादा आपल्याला कोणतीही विशेष सूचना न देता बदलल्या जाऊ शकतात.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 आपल्याला ज्ञात आहे आणि आपण मान्य करता की Google अशा कोणत्याही बाह्य साइट किंवा संसाधनांच्या उपलब्धतेसाठी जबाबदार नाही आणि अशा कोणत्याही वेबसाइट किंवा संसाधनावरील किंवा त्यांच्या तर्फे असलेल्या कोणत्याही जाहिराती, उत्पादने, किंवा इतर सामग्रीची पुष्टी करत नाही.

    -

    17.3 आपल्याला ज्ञात आहे आणि आपण मान्य करता की अशा कोणत्याही बाह्य साइट किंवा संसाधनांच्या उपलब्धतेमुळे आपल्याद्वारे उद्भवणार्‍या किंवा अशा वेबसाइट वा संसाधनांवर वा मध्ये उपलब्ध कोणतीही जाहिरात, उत्पादन किंवा सामग्रीची पूर्णता, अचूकता वा अस्तित्व यावर आपण ठेवलेल्या विश्वासामुळे उद्भवणार्‍या कोणत्याही हानी वा क्षतिकरिता Google उत्तरदायी नाही.

    -

    18. अटींमधील बदल

    --

    18.1 Google वेळोवेळी त्यांच्या सार्वभौम अटी आणि अतिरिक्त अटींमध्ये बदल करू शकते. जेव्हा असे बदल केले जातात तेव्हा, त्या सार्वभौम अटींची एक नवीन प्रत Google http://www.google.com/chrome/intl/en/eula_text.html येथे उपलब्ध करून देते आणि कोणत्याही नवीन अतिरिक्त अटी आपल्याला प्रभावित सेवेद्वारे, किंवा तिच्या माध्यमातून उपलब्ध करून दिल्या जातात.

    -+

    18.1 Google वेळोवेळी त्यांच्या सार्वभौम अटी आणि अतिरिक्त अटींमध्ये बदल करू शकते. जेव्हा असे बदल केले जातात तेव्हा, त्या सार्वभौम अटींची एक नवीन प्रत Google http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html येथे उपलब्ध करून देते आणि कोणत्याही नवीन अतिरिक्त अटी आपल्याला प्रभावित सेवेद्वारे, किंवा तिच्या माध्यमातून उपलब्ध करून दिल्या जातात.

    -

    18.2 आपण समजून घेता आणि स्वीकार करता की ज्या तारखेला या सार्वभौम अटी किंवा अतिरिक्त अटी बदलल्या जातील त्यानंतर आपण सेवांचा वापर केल्यास, आपण त्या सार्वभौम अटी किंवा अतिरिक्त अटींचा स्वीकार केला असल्याची वागणूक Google आपल्याला देईल.

    -

    19. सामान्य कायदेशीर अटी

    -

    19.1 काहीवेळा जेव्हा आपण सेवा वापरता तेव्हा, आपण (परीणामस्वरुप, किंवा आपल्या सेवा वापराशी संबंधित) एखादी सेवा वापरू किंवा सॉफ्टवेअरचा एखादा भाग डाउनलोड करू किंवा एखाद्या मालाची खरेदी करू शकता, जे कोणी इतर व्यक्ती किंवा कंपनीद्वारा प्रदान करण्यात आलेले असतात. आपला या इतर सेवा, सॉफ्टवेअर किंवा मालाचा वापर त्यांचेशी संबंधित असलेल्या इतर व्यक्ति किंवा कंपनी आणि आपण यांच्यातील विशिष्ट स्वतंत्र अटींचा विषय आहेत. असे असल्यास, या अटी, आपण आणि इतर व्यक्ती किंवा कंपनी यांच्या दरम्यान असलेल्या कायदेशीर संबंधांवर लागू होणार नाहीत.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + शेवटची केलेली सुधारणा: १ जानेवारी २०२१ +

    +

    +- Chrome किंवा Chrome OS वापरून, तुम्ही https://policies.google.com/terms येथे असलेल्या Google सेवा अटींना आणि या Google Chrome व Chrome OS अतिरिक्त सेवा अटींना सहमती दर्शवता. ++ Chrome किंवा Chrome OS वापरून, तुम्ही https://policies.9oo91e.qjz9zk/terms येथे असलेल्या Google सेवा अटींना आणि या Google Chrome व Chrome OS अतिरिक्त सेवा अटींना सहमती दर्शवता. +

    +

    +- या Google Chrome आणि Chrome OS अतिरिक्त सेवा अटी Chrome आणि Chrome OS यांच्या अंमलबजावणीक्षम कोड आवृत्त्यांना लागू होतात. Chrome साठी बहुतांश स्रोत कोड https://code.google.com/chromium/terms.html येथे मुक्त स्रोत परवाना करारनाम्याअंतर्गत विनाशुल्क उपलब्ध आहे. ++ या Google Chrome आणि Chrome OS अतिरिक्त सेवा अटी Chrome आणि Chrome OS यांच्या अंमलबजावणीक्षम कोड आवृत्त्यांना लागू होतात. Chrome साठी बहुतांश स्रोत कोड https://code.9oo91e.qjz9zk/chromium/terms.html येथे मुक्त स्रोत परवाना करारनाम्याअंतर्गत विनाशुल्क उपलब्ध आहे. +

    +

    + Chrome आणि Chrome OS च्या ठरावीक घटकांचा तुमचा वापर पुढील अटींच्या अधीन आहे: diff --git a/components/resources/terms/terms_nb.html b/components/resources/terms/terms_nb.html --- a/components/resources/terms/terms_nb.html +++ b/components/resources/terms/terms_nb.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Tilleggsvilkår for bruk av Google Chrome og Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Sist endret: 1. januar 2021 +

    - Ved å bruke Chrome eller Chrome OS godtar du Googles vilkår for bruk, som du finner på https://policies.google.com/terms, samt disse tilleggsvilkårene for bruk av Google Chrome og Chrome OS. + Ved å bruke Chrome eller Chrome OS godtar du Googles vilkår for bruk, som du finner på https://policies.9oo91e.qjz9zk/terms, samt disse tilleggsvilkårene for bruk av Google Chrome og Chrome OS. @@ -26777,9 +19587,9 @@ diff --git a/components/resources/terms/terms_nb.html b/components/resources/ter diff --git a/components/resources/terms/terms_nl.html b/components/resources/terms/terms_nl.html --- a/components/resources/terms/terms_nl.html +++ b/components/resources/terms/terms_nl.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Aanvullende servicevoorwaarden van Google Chrome en Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Laatst gewijzigd: 1 januari 2021 +

    - Als u Chrome of Chrome OS gebruikt, gaat u akkoord met de Servicevoorwaarden van Google die te vinden zijn op https://policies.google.com/terms en met deze Aanvullende servicevoorwaarden van Google Chrome en Chrome OS. + Als u Chrome of Chrome OS gebruikt, gaat u akkoord met de Servicevoorwaarden van Google die te vinden zijn op https://policies.9oo91e.qjz9zk/terms en met deze Aanvullende servicevoorwaarden van Google Chrome en Chrome OS. @@ -26793,9 +19603,9 @@ diff --git a/components/resources/terms/terms_nl.html b/components/resources/ter diff --git a/components/resources/terms/terms_pl.html b/components/resources/terms/terms_pl.html --- a/components/resources/terms/terms_pl.html +++ b/components/resources/terms/terms_pl.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Dodatkowe warunki korzystania z Google Chrome i Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Ostatnia zmiana: 1 stycznia 2021 r. +

    - Używając Chrome lub Chrome OS, użytkownik wyraża zgodę na Warunki korzystania z usług Google dostępne na stronie https://policies.google.com/terms oraz niniejsze Dodatkowe warunki korzystania z Google Chrome i Chrome OS. + Używając Chrome lub Chrome OS, użytkownik wyraża zgodę na Warunki korzystania z usług Google dostępne na stronie https://policies.9oo91e.qjz9zk/terms oraz niniejsze Dodatkowe warunki korzystania z Google Chrome i Chrome OS. @@ -26809,9 +19619,9 @@ diff --git a/components/resources/terms/terms_pl.html b/components/resources/ter diff --git a/components/resources/terms/terms_pt-BR.html b/components/resources/terms/terms_pt-BR.html --- a/components/resources/terms/terms_pt-BR.html +++ b/components/resources/terms/terms_pt-BR.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Termos de Serviço adicionais do Google Chrome e do Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Última modificação: 1º de janeiro de 2021 +

    - Ao usar o Chrome ou o Chrome OS, você concorda com os Termos de Serviço do Google localizados em https://policies.google.com/terms e com estes Termos de Serviço adicionais do Google Chrome e do Chrome OS. + Ao usar o Chrome ou o Chrome OS, você concorda com os Termos de Serviço do Google localizados em https://policies.9oo91e.qjz9zk/terms e com estes Termos de Serviço adicionais do Google Chrome e do Chrome OS. @@ -26825,9 +19635,9 @@ diff --git a/components/resources/terms/terms_pt-BR.html b/components/resources/ diff --git a/components/resources/terms/terms_pt-PT.html b/components/resources/terms/terms_pt-PT.html --- a/components/resources/terms/terms_pt-PT.html +++ b/components/resources/terms/terms_pt-PT.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Termos de Utilização Adicionais do Google Chrome e do Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Última modificação: 1 de janeiro de 2021 +

    - Ao utilizar o Chrome ou o Chrome OS, aceita os Termos de Utilização do Google localizados em https://policies.google.com/terms?hl=pt-PT e estes Termos de Utilização Adicionais do Google Chrome e do Chrome OS. + Ao utilizar o Chrome ou o Chrome OS, aceita os Termos de Utilização do Google localizados em https://policies.9oo91e.qjz9zk/terms?hl=pt-PT e estes Termos de Utilização Adicionais do Google Chrome e do Chrome OS. @@ -26841,9 +19651,9 @@ diff --git a/components/resources/terms/terms_pt-PT.html b/components/resources/ diff --git a/components/resources/terms/terms_ro.html b/components/resources/terms/terms_ro.html --- a/components/resources/terms/terms_ro.html +++ b/components/resources/terms/terms_ro.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Termenii și condițiile suplimentare pentru Google Chrome și Sistemul de operare Chrome - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Ultima modificare: 1 ianuarie 2021 +

    - Dacă folosești Chrome sau Sistemul de operare Chrome, ești de acord cu Termenii și condițiile Google de la https://policies.google.com/terms și cu acest set de Termeni și condiții suplimentare pentru Google Chrome și Sistemul de operare Chrome. + Dacă folosești Chrome sau Sistemul de operare Chrome, ești de acord cu Termenii și condițiile Google de la https://policies.9oo91e.qjz9zk/terms și cu acest set de Termeni și condiții suplimentare pentru Google Chrome și Sistemul de operare Chrome. @@ -26857,9 +19667,9 @@ diff --git a/components/resources/terms/terms_ro.html b/components/resources/ter diff --git a/components/resources/terms/terms_ru.html b/components/resources/terms/terms_ru.html --- a/components/resources/terms/terms_ru.html +++ b/components/resources/terms/terms_ru.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Дополнительные условия использования Chrome и Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Последнее изменение: 1 января 2021 г. +

    - Используя Chrome или Chrome OS, Вы принимаете Условия использования Google, опубликованные на странице https://policies.google.com/terms, а также настоящие Дополнительные условия использования Chrome и Chrome OS. + Используя Chrome или Chrome OS, Вы принимаете Условия использования Google, опубликованные на странице https://policies.9oo91e.qjz9zk/terms, а также настоящие Дополнительные условия использования Chrome и Chrome OS. @@ -26873,9 +19683,9 @@ diff --git a/components/resources/terms/terms_ru.html b/components/resources/ter diff --git a/components/resources/terms/terms_sk.html b/components/resources/terms/terms_sk.html --- a/components/resources/terms/terms_sk.html +++ b/components/resources/terms/terms_sk.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Dodatočné zmluvné podmienky prehliadača Chrome a systému Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Naposledy upravené: 1. januára 2021 +

    - Používaním prehliadača Chrome alebo systému Chrome OS vyjadrujete súhlas so zmluvnými podmienkami spoločnosti Google na adrese https://policies.google.com/terms a týmito dodatočnými zmluvnými podmienkami prehliadača Google Chrome a systému Chrome OS. + Používaním prehliadača Chrome alebo systému Chrome OS vyjadrujete súhlas so zmluvnými podmienkami spoločnosti Google na adrese https://policies.9oo91e.qjz9zk/terms a týmito dodatočnými zmluvnými podmienkami prehliadača Google Chrome a systému Chrome OS. @@ -26889,9 +19699,9 @@ diff --git a/components/resources/terms/terms_sk.html b/components/resources/ter diff --git a/components/resources/terms/terms_sl.html b/components/resources/terms/terms_sl.html --- a/components/resources/terms/terms_sl.html +++ b/components/resources/terms/terms_sl.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Dodatni pogoji za Google Chrome in Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Zadnja sprememba: 1. januar 2021 +

    - Z uporabo Chroma in sistema Chrome OS se strinjate z Googlovimi pogoji storitve, objavljenimi na https://policies.google.com/terms, in temi dodatnimi pogoji storitve za Google Chrome in Chrome OS. + Z uporabo Chroma in sistema Chrome OS se strinjate z Googlovimi pogoji storitve, objavljenimi na https://policies.9oo91e.qjz9zk/terms, in temi dodatnimi pogoji storitve za Google Chrome in Chrome OS. @@ -26905,9 +19715,9 @@ diff --git a/components/resources/terms/terms_sl.html b/components/resources/ter diff --git a/components/resources/terms/terms_sr.html b/components/resources/terms/terms_sr.html --- a/components/resources/terms/terms_sr.html +++ b/components/resources/terms/terms_sr.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Додатни услови коришћења услуге за Google Chrome и Chrome ОС - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Последња измена: 1. јануар 2021. +

    - Коришћењем Chrome-а или Chrome ОС-а прихватате Google услове коришћења услуге који се налазе на https://policies.google.com/terms и ове додатне услове коришћења услуге за Google Chrome и Chrome ОС. + Коришћењем Chrome-а или Chrome ОС-а прихватате Google услове коришћења услуге који се налазе на https://policies.9oo91e.qjz9zk/terms и ове додатне услове коришћења услуге за Google Chrome и Chrome ОС. @@ -26921,9 +19731,9 @@ diff --git a/components/resources/terms/terms_sr.html b/components/resources/ter diff --git a/components/resources/terms/terms_sv.html b/components/resources/terms/terms_sv.html --- a/components/resources/terms/terms_sv.html +++ b/components/resources/terms/terms_sv.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Ytterligare användarvillkor för Google Chrome och Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Senast ändrad: 1 januari 2021 +

    - Genom att använda Chrome eller Chrome OS godkänner du dessa ytterligare användarvillkor för Google Chrome och Chrome OS samt Googles användarvillkor, som finns här: https://policies.google.com/terms. + Genom att använda Chrome eller Chrome OS godkänner du dessa ytterligare användarvillkor för Google Chrome och Chrome OS samt Googles användarvillkor, som finns här: https://policies.9oo91e.qjz9zk/terms. @@ -26937,171 +19747,57 @@ diff --git a/components/resources/terms/terms_sv.html b/components/resources/ter diff --git a/components/resources/terms/terms_sw.html b/components/resources/terms/terms_sw.html --- a/components/resources/terms/terms_sw.html +++ b/components/resources/terms/terms_sw.html -@@ -13,7 +13,7 @@ body { font-family:Arial; font-size:13px; } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Sheria na Masharti ya Google Chrome

    -

    Sheria na Masharti haya yanatumika kwa toleo la hati fumbo la kutekelezwa la Google Chrome. Hati fumbo asili ya Google

    -

    1. Uhusiano wako na Google

    -@@ -41,18 +41,18 @@ body { font-family:Arial; font-size:13px; } -

    5.3 Isipokuwa uwe umeruhusiwa mahsusi kufanya hivyo katika mkataba tofauti na Google, unakubali kuwa hautanakili, kurudufu, kuuza, kufanya biashara au kuuza tena Huduma kwa madhumuni yoyote.

    -

    5.4 Unakubali kuwa unawajibika peke yako kwa (na kuwa Google haina wajibu wowote kwako au mtu mwingine kwa) ukiukaji wowote wa wajibu wako chini ya Masharti na kwa matokeo (ikiwemo hasara yoyote au uharibifu ambao utaikumba Google) ya ukiukaji wowote kama huo.

    -

    6. Faragha na maelezo yako ya kibinafsi

    --

    6.1 Kwa maelezo kuhusu desturi za Google za ulinzi wa data, tafadhali soma sera ya faragha ya Google kwenye http://www.google.com/privacy.html. Sera hii inaeleza desturi za Google za ulinzi wa data, na kulinda faragha yako unapotumia Huduma.

    -+

    6.1 Kwa maelezo kuhusu desturi za Google za ulinzi wa data, tafadhali soma sera ya faragha ya Google kwenye http://www.9oo91e.qjz9zk/privacy.html. Sera hii inaeleza desturi za Google za ulinzi wa data, na kulinda faragha yako unapotumia Huduma.

    -

    Unakubali kutumia data yako kulingana na sera za faragha za Google.

    -

    7. Maudhui katika Huduma

    -

    7.1 Unaelewa kuwa maelezo yoyote (kama vile faili za data, maandishi, programu za kompyuta, faili za sauti au sauti zinginezo, picha, video na picha zinginezo) ambazo unaweza kuzifikia kama sehemu ya, au kupitia matumizi yako ya, Huduma ni jukumu la mtu ambaye maudhui kama hayo yalitoka. Maelezo yote kama hayo yanaitwa “Maudhui” hapa chini.

    -

    7.2 Unastahili kufahamu kuwa maudhui yanayowasilishwa kwako kama sehemu ya Huduma, yakiwemo lakini sio tu matangazo katika Huduma na Maudhui yaliyodhaminiwa katika Huduma huenda yakawa yamelindwa na haki za uvumbuzi zinazomilikiwa na wadhamini au watangazaji wanaotoa Maudhui hayo kwa Google (au kutoka kwa mtu mwingine au kampuni kwa niaba yao). Hauruhusiwi kubadilisha, kukodisha, kupangisha, kuuza, kusambaza au kuunda kazi kutokana na Maudhui haya (aidha sehemu yake au yote) isipokuwa uwe umeelezwa mahsusi kuwa unaweza kufanya hivyo na Google au wanaomiliki Maudhui hayo, katika mkataba tofauti.

    --

    7.3 Google inahifadhi haki (lakini haiwajibiki) kukagua kwanza, kutathmini, kualamisha, kuchuja, kubadilisha, kukataa au kuondoa Maudhui yoyote au yote kutoka kwenye Huduma yoyote. Kwa baadhi ya Huduma, Google inaweza kutoa zana za kuchuja na kuondoa maudhui waziwazi ya ngono. Zana hizi ni pamoja na mipangilio ya mapendeleo ya SafeSearch (tazama https://support.google.com/websearch/answer/510). Zaidi ya hayo, kuna huduma na programu zinazouzwa za kuzuia mfiko kwa maudhui yanayokuchukiza.

    -+

    7.3 Google inahifadhi haki (lakini haiwajibiki) kukagua kwanza, kutathmini, kualamisha, kuchuja, kubadilisha, kukataa au kuondoa Maudhui yoyote au yote kutoka kwenye Huduma yoyote. Kwa baadhi ya Huduma, Google inaweza kutoa zana za kuchuja na kuondoa maudhui waziwazi ya ngono. Zana hizi ni pamoja na mipangilio ya mapendeleo ya SafeSearch (tazama https://support.9oo91e.qjz9zk/websearch/answer/510). Zaidi ya hayo, kuna huduma na programu zinazouzwa za kuzuia mfiko kwa maudhui yanayokuchukiza.

    -

    7.4 Unaelewa kuwa kwa kutumia Huduma unaweza kupokea Maudhui unayoyadhania kuwa ya kuchukiza, machafu au yasiyostahimilika na kuwa, katika swala hili, unatumia Huduma kwa thubutu yako mwenyewe.

    -

    7.5 Unakubali kuwa unawajibika peke yako kwa (na kuwa Google haina wajibu wowote kwako au mtu mwingine kwa) Maudhui yoyote utakayounda, kuwasilisha au kuonyesha unapotumia Huduma na kwa matokeo ya vitendo vyako (ikiwemo hasara yoyote au uharibifu ambao utaikumba Google) kwa kufanya hivyo.

    -

    8. Hakimilki mahsusi

    -

    8.1. Unatambua na kukubali kuwa Google (au watoa leseni wa Google) inamiliki haki zote za kisheria, milki na maslahi katika na kwa Huduma, zikiwemo hakimilki zozote za uvumbuzi zinazodumu katika Huduma (iwe haki hizo zimesajiliwa au la, na popote ulimwenguni ambapo haki hizo zinadumu).

    -

    8.2 Isipokuwa umekubaliana vinginevyo na Google kwa maandishi, hakuna chochote katika Masharti haya kinachokupatia haki ya kutumia majina ya biashara, chapa-biashara, alama za huduma, nembo au majina ya vikoa vya Google, au vipengele vyovyote mahsusi vya chapa ya biashara.

    --

    8.3 Ikiwa umepewa haki mahsusi na Google ya kutumia yoyote ya vipengele hivi katika mkataba tofauti ulioandikwa, basi unakubali kuwa matumizi yako ya kila kipengee kama hicho yatakuwa kulingana na mkataba huo, kanuni zozote za Masharti zinazotumika na miongozo ya Google ya matumizi ya vipengele vya chapa ya biashara kama inavyosasishwa mara kwa mara. Unaweza kutazama mwongozo huu kwenye wavuti hapa http://www.google.com/permissions/guidelines.html (au URL nyingineyo itakayotolewa na Google kwa madhumuni haya mara kwa mara).

    -+

    8.3 Ikiwa umepewa haki mahsusi na Google ya kutumia yoyote ya vipengele hivi katika mkataba tofauti ulioandikwa, basi unakubali kuwa matumizi yako ya kila kipengee kama hicho yatakuwa kulingana na mkataba huo, kanuni zozote za Masharti zinazotumika na miongozo ya Google ya matumizi ya vipengele vya chapa ya biashara kama inavyosasishwa mara kwa mara. Unaweza kutazama mwongozo huu kwenye wavuti hapa http://www.9oo91e.qjz9zk/permissions/guidelines.html (au URL nyingineyo itakayotolewa na Google kwa madhumuni haya mara kwa mara).

    -

    8.4 Google inatambua na kukubali kuwa haipati haki, milki au maslahi yoyote kutoka kwako (au watoa leseni wako) chini ya Masharti haya kwa Maudhui yoyote unayowasilisha, kuchapisha au kuonyesha kwenye, au kupitia Huduma, zikiwemo hakimilki zozote za uvumbuzi zinazodumu katika Maudhui hayo (iwe haki hizo zimesajiliwa au la, na popote ulimwenguni ambapo haki hizo zinadumu). Isipokuwa umekubaliana vingine na Google katika maandishi, unakubali kuwa unawajibika kulinda na kutekeleza haki hizo na kuwa Google haina wajibu wowote wa kufanya hivyo kwa niaba yako.

    -

    8.5 Unakubali kuwa hautaondoa, kuficha au kubadilisha ilani zozote za hakimilki mahsusi (zikiwemo ilani za hakimilki na chapa-biashara) ambazo zimeambatishwa au zilizo ndani ya Huduma.

    -

    8.6 Isipokuwa umepewa idhini mahsusi na Google kwa maandishi kufanya hivyo, unakubali kuwa katika kutumia Huduma, hautatumia chapa-biashara yoyote, alama za huduma, jina la biashara au nembo ya kampuni au shirika lolote kwa njia ambayo inaweza au inayonuiwa kuleta tashwishi kuhusu anayemiliki au mtumiaji aliyeidhinishwa wa alama, majina au nembo kama hizi.

    -@@ -96,8 +96,8 @@ body { font-family:Arial; font-size:13px; } -

    (V) KUSHINDWA KWAKO KUHIFADHI MAELEZO YA NENOSIRI LAKO NA AKAUNTI YAKO KWA USALAMA NA SIRI;

    -

    14.2 MIPAKA YA DHIMA YA GOOGLE KWAKO KATIKA AYA YA 14.1 HAPO JUU ITATUMIKA IKIWA GOOGLE IMEJULISHWA AU INGESTAHILI KUFAHAMU UWEZEKANO WA HASARA KAMA HIZO KUTOKEA AU LA.

    -

    15. Sera za hakimilki na chapa biashara

    --

    15.1 Ni sera ya Google kujibu arifa za ukiukaji wa hakimilki zinazotii sheria za hakimilki za kimataifa zinazohusika (ikiwemo, Marekani, Sheria ya Millennia ya Hakimilki Tarakinishi) na kufunga akaunti za wanaorudia ukiukaji. Maelezo ya sera ya Google yanaweza kupatikana kwenye http://www.google.com/dmca.html.

    --

    15.2 Google hutumia utaratibu wa malalamishi kuhusu chapa-biashara kuhusiana na shughuli za utangazaji za Google, maelezo yake ambayo yanapatikana http://www.google.com/tm_complaint.html.

    -+

    15.1 Ni sera ya Google kujibu arifa za ukiukaji wa hakimilki zinazotii sheria za hakimilki za kimataifa zinazohusika (ikiwemo, Marekani, Sheria ya Millennia ya Hakimilki Tarakinishi) na kufunga akaunti za wanaorudia ukiukaji. Maelezo ya sera ya Google yanaweza kupatikana kwenye http://www.9oo91e.qjz9zk/dmca.html.

    -+

    15.2 Google hutumia utaratibu wa malalamishi kuhusu chapa-biashara kuhusiana na shughuli za utangazaji za Google, maelezo yake ambayo yanapatikana http://www.9oo91e.qjz9zk/tm_complaint.html.

    -

    16. Matangazo

    -

    16.1 Baadhi ya Huduma zinadhaminiwa na mapato kutoka kwa matanagazo na zinaweza kuonyesha matangazo na kampeni za matangazo. Matangazo hayo yanaweza kuwa yanalenga maudhui ya maelezo yaliyohifadhiwa kwenye Huduma, hoja zilizoulizwa kupitia Huduma au maelezo mengineyo.

    -

    16.2 Mbinu, hali na kiwango cha matangazo kutoka kwa Google kwenye Huduma kinaweza kubadilika bila ilani mahsusi kwako.

    -@@ -107,7 +107,7 @@ body { font-family:Arial; font-size:13px; } -

    17.2 Unatambua na kukubali kuwa Google haiwajibiki kwa upatikanaji wa tovuti zozote au raslimali kama hizo za nje, na haiidhinishi matangazo, bidhaa au vitu vyovyote kwenye au vinavyopatikana kwenye tovuti au nyenzo hizo.

    -

    17.3 Unatambua na kukubali kuwa Google haiwajibiki kwa hasara au uharibifu wowote unaoweza kukupata wewe kwa sababau ya upatikanaji wa tovuti au raslimali hizo za nje, au kutokana nawe kutegemea kwa vyovyote ukamilifu, usahihi au uwepo wa matangazo, bidhaa au vitu vyoyvote kwenye, au kutoka kwa, tovuti au nyenzo kama hizo.

    -

    18. Mabadiliko kwa Masharti

    --

    18.1 Google inaweza kufanya mabadiliko kwa Masharti ya Kijumla au Masharti ya Ziada mara kwa mara. Mabadiliko hayo yanapofanywa, Google itatoa nakala mpya ya Masharti ya Kijumla kwenye http://accounts.google.com/TOS?hl=en na Masharti yoyote mapya ya Ziada yatatolewa kwako kutoka ndani, au kupitia, Huduma zilizoathirika.

    -+

    18.1 Google inaweza kufanya mabadiliko kwa Masharti ya Kijumla au Masharti ya Ziada mara kwa mara. Mabadiliko hayo yanapofanywa, Google itatoa nakala mpya ya Masharti ya Kijumla kwenye http://accounts.9oo91e.qjz9zk/TOS?hl=en na Masharti yoyote mapya ya Ziada yatatolewa kwako kutoka ndani, au kupitia, Huduma zilizoathirika.

    -

    18.2 Unaelewa na kukubali kuwa ikiwa utatumia Huduma baada ya tarehe Masharti ya Kijumla au Masharti ya Kijumla kubadilika, Google itachukulia matumizi yako kuwa kukubali kwa Sheria na Mashati au Masharti ya Ziada yaliyosasishwa.

    -

    19. Masharti ya kijumla ya kisheria

    -

    19.1 Wakati mwingine ukitumia Huduma, unaweza (kwa sababu ya, au kuhusiana na matumizi yako ya Huduma) kutumia huduma au kupakua programu, au kununua bidhaa, zinazotolewa na mtu au kampuni nyingine. Matumizi yako ya huduma, programu au bidhaa hizi zingine zinaweza kuwa chini ya masharti tofauti katika yako na kampuni au mtu anayehusika. Ikiwa ni hivyo, Masharti haya hayaathiri uhusiano wako wa kisheria na kampuni hizo au watu hao wengine.

    +@@ -19,10 +19,10 @@ body { font-family:Arial; font-size:13px; } + Mara ya mwisho kubadilishwa: 21 Januari 2021 +

    +

    +- Kwa kutumia Chrome au Mfumo wa Uendeshaji wa Chrome, unakubali Sheria na Masharti ya Google kwenye https://policies.google.com/terms na Sheria na Masharti haya ya Ziada ya Google Chrome na Mfumo wa Uendeshaji wa Chrome. ++ Kwa kutumia Chrome au Mfumo wa Uendeshaji wa Chrome, unakubali Sheria na Masharti ya Google kwenye https://policies.9oo91e.qjz9zk/terms na Sheria na Masharti haya ya Ziada ya Google Chrome na Mfumo wa Uendeshaji wa Chrome. +

    +

    +- Sheria na Masharti haya ya Ziada ya Chrome na Mfumo wa Uendeshaji wa Chrome yatatumika kwa misimbo inayoweza kutekelezwa ya matoleo ya Chrome na Mfumo wa Uendeshaji wa Chrome. Sehemu kubwa ya msimbo wa tovuti wa Chrome inapatikana bila malipo chini ya makubaliano ya leseni za programu huria kwenye https://code.google.com/chromium/terms.html. ++ Sheria na Masharti haya ya Ziada ya Chrome na Mfumo wa Uendeshaji wa Chrome yatatumika kwa misimbo inayoweza kutekelezwa ya matoleo ya Chrome na Mfumo wa Uendeshaji wa Chrome. Sehemu kubwa ya msimbo wa tovuti wa Chrome inapatikana bila malipo chini ya makubaliano ya leseni za programu huria kwenye https://code.9oo91e.qjz9zk/chromium/terms.html. +

    +

    + Utumiaji wako wa vipengele fulani vya Chrome na Mfumo wa Uendeshaji wa Chrome unategemea sheria na masharti yafuatayo: diff --git a/components/resources/terms/terms_ta.html b/components/resources/terms/terms_ta.html --- a/components/resources/terms/terms_ta.html +++ b/components/resources/terms/terms_ta.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome சேவை விதிமுறைகள்

    -

    Google Chrome இன் இயங்கும் குறியீட்டு பதிப்பிற்கு இந்த சேவை விதிமுறைகள் பொருந்தும். chrome://credits இல் உள்ள ஓப்பன் சோர்ஸ் மென்பொருள் உரிம ஒப்பந்தங்களின் கீழ் கட்டணம் இன்றி, Google Chrome க்கான மூல குறியீடு கிடைக்கும்.

    -

    1. Google உடனான உங்கள் உறவு

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 Google ஆல் முறையாக தனியான ஒப்பந்தத்தின் மூலம் அனுமதிக்கப்பட்டிருந்தால் தவிர, எந்தவொரு நோக்கத்திற்காகவும் சேவைகளை மீளுருவாக்கம், நகலாக்கம், விற்பனை, வணிகம் அல்லது மறுவிற்பனை செய்ய மாட்டீர்கள் என்பதை ஒப்புக்கொள்கிறீர்கள்.

    -

    5.4 விதிமுறைகள் மீறல்கள் அல்லது மீறல்களைச் சார்ந்து ஏற்படும் எந்த வகையான தொடர்விளைவுகள் (Google க்கு ஏற்படும் இழப்பு அல்லது நட்டம் ஆகியவற்றையும் சேர்த்து) ஆகியவற்றுக்கு நீங்கள் மட்டுமே (உங்களுக்கு அல்லது எந்த மூன்றாம் தரப்புக்கும் Google பொறுப்பாகாது) பொறுப்பாவீர்கள் என்பதை நீங்கள் ஒப்புக்கொள்கிறீர்கள்.

    -

    6. தனியுரிமை மற்றும் உங்கள் தனிப்பட்ட தகவல்கள்

    --

    6.1 Google இன் தரவு பாதுகாப்பு நடைமுறைகளைப் பற்றி அறிய, Google இன் தனியுரிமைக் கொள்கையை பின்வரும் முகவரியில் காண்க http://www.google.com/privacy.html மற்றும் http://www.google.com/chrome/intl/en/privacy.html. நீங்கள் சேவைகளைப் பயன்படுத்தும்போது உங்கள் தனிப்பட்ட தகவல்களை Google எவ்விதம் பராமரிக்கிறது என்பதையும், உங்கள் ரகசியத்தை எவ்விதம் பாதுகாக்கிறது என்பதையும் இந்தக் கொள்கை விவரிக்கிறது.

    -+

    6.1 Google இன் தரவு பாதுகாப்பு நடைமுறைகளைப் பற்றி அறிய, Google இன் தனியுரிமைக் கொள்கையை பின்வரும் முகவரியில் காண்க http://www.9oo91e.qjz9zk/privacy.html மற்றும் http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html. நீங்கள் சேவைகளைப் பயன்படுத்தும்போது உங்கள் தனிப்பட்ட தகவல்களை Google எவ்விதம் பராமரிக்கிறது என்பதையும், உங்கள் ரகசியத்தை எவ்விதம் பாதுகாக்கிறது என்பதையும் இந்தக் கொள்கை விவரிக்கிறது.

    -

    6.2 Google இன் தனியுரிமைக் கொள்கைகளுக்கு உட்பட்டு தரவைப் பயன்படுத்த ஒப்புக்கொள்கிறீர்கள்.

    -

    7. சேவைகளில் உள்ள உள்ளடக்கங்கள்

    -

    7.1 சேவையின் ஒரு பகுதியாக அல்லது சேவையின் மூலமாக நீங்கள் அணுகும் எல்லா தகவல்களும் (தரவு கோப்புகள், எழுதப்பட்ட உரைகள், கணினி மென்பொருள், இசை, ஒலிக்கோப்புகள் அல்லது மற்ற ஒலிகள், புகைப்படங்கள், வீடியோக்கள் அல்லது மற்ற படங்கள் போன்றவை) அவற்றை உருவாக்கிய நபரின் பொறுப்பிற்குரியது. இதன் பின் மேற்கூறிய விவரங்கள் "உள்ளடக்கம்" என குறிப்பிடப்படும்.

    -

    7.2 சேவைகளின் ஒரு பகுதியாக உங்களுக்கு வழங்கப்படும், சேவைகளிலுள்ள விளம்பரங்கள் மற்றும் சேவைகளுக்குள்ளே ஆதரிக்கப்படும் பிற உள்ளடக்கங்கள், அந்தந்த உள்ளடக்கங்களை Google க்கு வழங்கும் விளம்பரதாரர்கள் அல்லது வழங்குபவர்கள் (அல்லது அவர்கள் சார்பில் வழங்கும் நபர்களால் அல்லது நிறுவனங்களால்) அறிவுசார் சொத்துரிமையின் கீழ் பாதுகாக்கப்பட்டிருக்கலாம். இவ்வகை உள்ளடக்கங்களில் நீங்கள் மாற்றம், வாடகை, குத்தகை, விற்பனை, விநியோகம் அல்லது உள்ளடக்கங்களை சார்ந்து (முழுமையாக அல்லது பகுதியாக) சார்தயாரிப்புகள் உருவாக்குதல் ஆகியவற்றை தனியான ஒரு ஒப்பந்தத்தின் மூலம் Google அல்லது உள்ளடக்கத்தின் உரிமையாளர்களால் கேட்கப்பட்டிருந்தால் தவிர செய்யக் கூடாது.

    --

    7.3 எந்தவொரு சேவையிலிருந்தும் எந்த ஒரு அல்லது அனைத்து உள்ளடக்கத்தையும் முன்-திரையிடுவதற்கு, மதிப்பாய்வு செய்வதற்கு, கொடியிடுவதற்கு, திருத்துவதற்கு அல்லது நிராகரிப்பதற்கான உரிமை Google க்கு உள்ளது (ஆனால் அதற்கான நிர்பந்தம் இல்லை). சில சேவைகளில், வெளிப்படையான பாலியல் உள்ளடக்கத்தைத் தடுப்பதற்கு Google கருவிகளை வழங்கலாம். இந்த கருவிகள் பாதுகாப்பான தேடல் முன்னுரிமை அமைப்புகளையும் சேர்த்தது ( https://support.google.com/websearch/answer/510 ஐக் காண்க). கூடுதலாக, ஆட்சேபிக்கத்தக்க உள்ளடக்கம் என நீங்கள் அறியும் தகவலுக்கான அணுகலைக் கட்டுப்படுத்தும் சேவைகள் மற்றும் மென்பொருள் ஆகியவை வணிகரீதியில் கிடைக்கின்றன.

    -+

    7.3 எந்தவொரு சேவையிலிருந்தும் எந்த ஒரு அல்லது அனைத்து உள்ளடக்கத்தையும் முன்-திரையிடுவதற்கு, மதிப்பாய்வு செய்வதற்கு, கொடியிடுவதற்கு, திருத்துவதற்கு அல்லது நிராகரிப்பதற்கான உரிமை Google க்கு உள்ளது (ஆனால் அதற்கான நிர்பந்தம் இல்லை). சில சேவைகளில், வெளிப்படையான பாலியல் உள்ளடக்கத்தைத் தடுப்பதற்கு Google கருவிகளை வழங்கலாம். இந்த கருவிகள் பாதுகாப்பான தேடல் முன்னுரிமை அமைப்புகளையும் சேர்த்தது ( https://support.9oo91e.qjz9zk/websearch/answer/510 ஐக் காண்க). கூடுதலாக, ஆட்சேபிக்கத்தக்க உள்ளடக்கம் என நீங்கள் அறியும் தகவலுக்கான அணுகலைக் கட்டுப்படுத்தும் சேவைகள் மற்றும் மென்பொருள் ஆகியவை வணிகரீதியில் கிடைக்கின்றன.

    -

    7.4 சேவைகளைப் பயன்படுத்துவதன் மூலம் தவறான, நாகரீகமற்ற, அல்லது ஆட்சேபிக்கத்தக்க உள்ளடக்கத்தை நீங்கள் எதிர்கொள்ள நேரிடலாம் என்பதை புரிந்துகொண்டு, சொந்த விருப்பத்தின் பேரில்தான் சேவைகளைப் பயன்படுத்துகிறீர்கள்.

    -

    7.5 நீங்கள் சேவைகளைப் பயன்படுத்தும்போது உருவாக்கும், பகிர்ந்து கொள்ளும், அல்லது வெளிப்படுத்தும் உள்ளடக்கம் மற்றும் உங்கள் செயல்களினால் உருவாகும் தொடர் விளைவுகள் ஆகியவற்றுக்கு நீங்கள் மட்டுமே (Google க்கு ஏற்படும் இழப்பு அல்லது நட்டம் ஆகியவற்றையும் சேர்த்து) பொறுப்பாவீர்கள் என்பதை ஒப்புக்கொள்கிறீர்கள்.

    -

    8. உரிமையுடைமை உரிமைகள்

    -

    8.1 எல்லா சட்டரீதியான உரிமைகள், தலைப்புகள் மற்றும் சேவைகள் தொடர்பான விவரங்கள், சேவைகளைச் சார்ந்த அறிவுசார் சொத்துரிமைகள் (அவ்வுரிமைகள் பதிவு செய்யப்பட்டிருந்தால் அல்லது இல்லாவிட்டால் மற்றும் உலகின் எந்த இடத்திலும் இவ்வுரிமைகள் இருந்தாலும்) ஆகியவை Google (அல்லது Google இன் உரிமதாரர்கள்)க்கு சொந்தமானது என்பதை நீங்கள் அறிந்து ஒப்புக் கொள்கிறீர்கள்.

    -

    8.2 Google இன் எழுத்துப்பூர்வ அனுமதியின்றி, Google இன் வணிகப்பெயர்கள், வணிக முத்திரைகள், சேவை முத்திரைகள், லோகோக்கள், களப்பெயர்கள் அல்லது மற்ற தனிப்பட்ட தயாரிப்பு அம்சங்களைப் பயன்படுத்த விதிமுறைகளின் எந்த பகுதியும் உங்களுக்கு உரிமை அளிக்கவில்லை.

    --

    8.3 Google உங்களுக்கு இந்த தயாரிப்பு அம்சங்களில் ஏதேனும் ஒன்றைத் தனிப்பட்ட முறையில் பயன்படுத்துவதற்கான தனிப்பட்ட எழுத்துப்பூர்வ ஒப்பந்தத்தை வழங்கியிருந்தால், அந்த ஒப்பந்தம், பொருந்தக்கூடிய விதிமுறை மற்றும் Google இன் தயாரிப்பு அம்ச பயன்பாட்டு வழிகாட்டுதல்கள் ஆகியவற்றுக்கு இணங்கி அது போன்ற அம்சங்களைப் பயன்படுத்துவீர்கள் என ஒப்புக்கொள்கிறீர்கள். http://www.google.com/permissions/guidelines.html (அல்லது வெவ்வேறு நேரங்களில் இந்த நோக்கத்திற்காக Google வழங்கும் பிற URL முகவரிகளைப் பயன்படுத்திக்கொள்ளலாம்) முகவரியில் நீங்கள் இந்த வழிகாட்டுதல்களைக் காணலாம்.

    -+

    8.3 Google உங்களுக்கு இந்த தயாரிப்பு அம்சங்களில் ஏதேனும் ஒன்றைத் தனிப்பட்ட முறையில் பயன்படுத்துவதற்கான தனிப்பட்ட எழுத்துப்பூர்வ ஒப்பந்தத்தை வழங்கியிருந்தால், அந்த ஒப்பந்தம், பொருந்தக்கூடிய விதிமுறை மற்றும் Google இன் தயாரிப்பு அம்ச பயன்பாட்டு வழிகாட்டுதல்கள் ஆகியவற்றுக்கு இணங்கி அது போன்ற அம்சங்களைப் பயன்படுத்துவீர்கள் என ஒப்புக்கொள்கிறீர்கள். http://www.9oo91e.qjz9zk/permissions/guidelines.html (அல்லது வெவ்வேறு நேரங்களில் இந்த நோக்கத்திற்காக Google வழங்கும் பிற URL முகவரிகளைப் பயன்படுத்திக்கொள்ளலாம்) முகவரியில் நீங்கள் இந்த வழிகாட்டுதல்களைக் காணலாம்.

    -

    8.4 இந்த விதிமுறைகளின் கீழ் உள்ள சேவைகளில் நீங்கள் சமர்பிக்கும், அஞ்சல் செய்யும், பரிமாறும் அல்லது வெளியிடும் எந்த உள்ளடக்கத்திலும், தலைப்பு மற்றும் உங்களிடமிருந்து (அல்லது உங்கள் உரிமதாரரிடமிருந்து) விவரங்கள், அந்த உள்ளடக்கங்கள் தொடர்பான அறிவுசார் சொத்துரிமைகள் (அவ்வுரிமைகள் பதிவு செய்யப்பட்டிருந்தால் அல்லது இல்லாவிட்டால் மற்றும் உலகின் எந்த இடத்திலும் இவ்வுரிமைகள் இருந்தாலும்) ஆகியவற்றை Google வைத்திருக்கவில்லை என்பதை அறிந்துள்ளதுடன் ஒப்புக்கொள்கிறது. Google உடன் எழுத்துப்பூர்வமாக ஒப்புகொள்ளும் வரை, நீங்களே அந்த உரிமைகளைப் பாதுகாக்கவும் தொடரவும் வேண்டும், உங்கள் சார்பாக Google ஏதும் செய்ய இயலாது.

    -

    8.5 சேவைகளில் இணைக்கப்பட்டுள்ள அல்லது சேவைகளில் உள்ள எந்த உரிமையுடைமை உரிமை அறிக்கைகளை (பதிப்புரிமை மற்றும் வணிகமுத்திரை அறிக்கைகள் ஆகியவற்றையும் சேர்த்து) நீங்கள் நீக்கவோ, மறைக்கவோ, அல்லது மாற்றவோ மாட்டீர்கள் என்பதை ஒப்புக்கொள்கிறீர்கள்.

    -

    8.6 Google ஆல் வெளிப்படையாக எழுத்துபூர்வமாக அங்கீகரிக்கப்பட்டிருந்தால் தவிர நீங்கள் எந்த ஒரு நிறுவனம் அல்லது அமைப்பின் வணிகமுத்திரை, சேவை முத்திரை, வணிகப் பெயர், லோகோ ஆகியவற்றை பயன்படுத்தக் கூடாது, அவ்வாறு பயன்படுத்துதல் அவ்வகை முத்திரைகள், பெயர்கள் அல்லது லோகோக்களின் உரிமையாளர் அல்லது அங்கீகரிக்கப்பட்ட பயனரைப் பற்றிய குழப்பத்தை விளைவிக்கலாம்.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) உங்கள் கடவுச்சொல் அல்லது மற்ற கணக்கு தகவல்களைப் பாதுகாத்துக்கொள்ளத் தவறுதல்;

    -

    14.2 மேலே 14.1 -வது பத்தியில் உங்களுக்கு அளிக்கப்பட்ட GOOGLE பொறுப்பின் மீதான வரம்புகள் யாவும், முன்பே Google மூலம் அறிவுறுத்தப்பட்டாலும் அல்லது அறிவுறுத்தப்படவில்லை என்றாலும் அல்லது ஏதேனும் இழப்புகள் ஏற்படும் சூழல் உருவாகும்போது பொருந்தும்.

    -

    15. பதிப்புரிமை மற்றும் வர்த்தகக் குறியீட்டு கொள்கைகள்

    --

    15.1 சர்வதேச அறிவுசார் சொத்துரிமை சட்டத்தை (ஐக்கிய நாடுகளின் டிஜிட்டல் மில்லினியம் பதிப்புரிமை சட்டத்தையும் சேர்த்து) பின்பற்றாத சந்தேகத்துக்குரிய பதிப்புரிமை மீறல் தொடர்பான அறிக்கைகளுக்கு பதிலளிப்பது மேலும் மீண்டும் மீண்டும் இத்தகைய மீறலைச் செய்பவர்களின் கணக்கை முடிப்பது Google இன் கொள்கை ஆகும். Google கொள்கை தொடர்பான விவரங்கள் இங்கு உள்ளன: http://www.google.com/dmca.html.

    --

    15.2 Google விளம்பர வணிகத்தைச் சார்ந்து வணிக முத்திரை குற்றச்சாட்டு நடைமுறைகளை இயக்கி வருகிறது, இதன் தகவல்களை இங்கு காணலாம்:http://www.google.com/tm_complaint.html.

    -+

    15.1 சர்வதேச அறிவுசார் சொத்துரிமை சட்டத்தை (ஐக்கிய நாடுகளின் டிஜிட்டல் மில்லினியம் பதிப்புரிமை சட்டத்தையும் சேர்த்து) பின்பற்றாத சந்தேகத்துக்குரிய பதிப்புரிமை மீறல் தொடர்பான அறிக்கைகளுக்கு பதிலளிப்பது மேலும் மீண்டும் மீண்டும் இத்தகைய மீறலைச் செய்பவர்களின் கணக்கை முடிப்பது Google இன் கொள்கை ஆகும். Google கொள்கை தொடர்பான விவரங்கள் இங்கு உள்ளன: http://www.9oo91e.qjz9zk/dmca.html.

    -+

    15.2 Google விளம்பர வணிகத்தைச் சார்ந்து வணிக முத்திரை குற்றச்சாட்டு நடைமுறைகளை இயக்கி வருகிறது, இதன் தகவல்களை இங்கு காணலாம்:http://www.9oo91e.qjz9zk/tm_complaint.html.

    -

    16. விளம்பரங்கள்

    -

    16.1 விளம்பரப்படுத்தல் வருமானத்தின் மூலம் சில சேவைகள் ஆதரிக்கப்படுகின்றன மேலும் விளம்பரங்கள் மற்றும் தர உயர்வுகளின் மூலமாகவும் அவை காண்பிக்கப்படக்கூடும். சேவைகளில் சேமிக்கப்பட்டிருக்கக்கூடிய அல்லது பிற தகவலின் மூலம் எழுப்பப்பட்ட கேள்விகளில் சேமிக்கப்பட்டுள்ள தகவலின் உள்ளடக்கத்தை மையமாகக் கொண்டே இந்த விளம்பரங்கள் இருக்கக்கூடும்.

    -

    16.2 சேவைகளில் Google இன் விளம்பரங்களின் முறை, வடிவம் மற்றும் அளவு உங்களுக்கு தெரிவிக்கப்படாமலே மாற்றப்படலாம்.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 இது போன்ற வெளிப்புற வலைத்தளங்கள் அல்லது ஆதாரங்கள் ஆகியவை அணுகக் கிடைப்பதற்கு Google எவ்வகையிலும் பொறுப்பேற்காது என்பதையும், இவ்வகை வலைத் தளங்கள் அல்லது ஆதாரங்கள் ஆகியவற்றில் உள்ள அல்லது ஆகியவற்றிலிருந்து கிடைக்கும் விளம்பரங்கள், தயாரிப்புகள் அல்லது மற்றவைக்கு எவ்வித ஆதரவையும் Google வழங்கவில்லை என்பதையும் நீங்கள் அறிந்து ஒப்புக்கொள்கிறீர்கள்.

    -

    17.3 அவ்வகையான வெளித்தளங்கள் அல்லது தகவல் ஆதாரங்கள் ஆகியவற்றினால் நீங்கள் பெறக்கூடிய எவ்வகை இழப்பு அல்லது குறைபாடுக்கும் Google பொறுப்பாகாது என்பதையும், இவ்வகை வலைத்தளங்கள் அல்லது தகவல் ஆதாரங்கள் ஆகியவற்றில் உள்ள அல்லது ஆகியவற்றிலிருந்து கிடைக்கும் விளம்பரங்கள், தயாரிப்புகள் அல்லது மற்றவையின் முழுமை, துல்லியம் அல்லது இருப்பு ஆகியவற்றின் மீது நீங்கள் வைக்கும் எவ்வகை நம்பிக்கையின் காரணமாக நீங்கள் பெறக்கூடிய எவ்வகை இழப்பு அல்லது குறைபாடுக்கும் Google பொறுப்பாகாது என்பதையும் நீங்கள் அறிந்து அதனை ஒப்புக்கொள்கிறீர்கள்.

    -

    18. விதிமுறையில் மாற்றங்கள்

    --

    18.1 உலகளாவிய விதிமுறைகள் அல்லது கூடுதல் விதிமுறைகளில் அவ்வப்போது Google மாற்றங்களை செய்யலாம். இந்த மாற்றங்கள் செய்யப்படும்போது, http://www.google.com/chrome/intl/en/eula_text.html இல் வழங்கப்பட்டுள்ள உலகளாவிய விதிமுறைகளின் புதிய நகலை உருவாக்கும், புதிய கூடுதல் விதிமுறைகள் ஏதேனும் சேர்க்கப்பட்டால், அவை தொடர்பான சேவைகளில் அல்லது சேவைகளின் மூலமாக உங்களுக்குக் கிடைக்கும்.

    -+

    18.1 உலகளாவிய விதிமுறைகள் அல்லது கூடுதல் விதிமுறைகளில் அவ்வப்போது Google மாற்றங்களை செய்யலாம். இந்த மாற்றங்கள் செய்யப்படும்போது, http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html இல் வழங்கப்பட்டுள்ள உலகளாவிய விதிமுறைகளின் புதிய நகலை உருவாக்கும், புதிய கூடுதல் விதிமுறைகள் ஏதேனும் சேர்க்கப்பட்டால், அவை தொடர்பான சேவைகளில் அல்லது சேவைகளின் மூலமாக உங்களுக்குக் கிடைக்கும்.

    -

    18.2 உலகளாவிய விதிமுறைகள் அல்லது கூடுதல் விதிமுறைகளில் மாற்றங்கள் செய்யப்பட்ட தேதிக்குப் பின்னர் நீங்கள் சேவைகளைப் பயன்படுத்தினால், புதுப்பிக்கப்பட்ட உலகளாவிய விதிமுறைகள் அல்லது கூடுதல் விதிமுறைகளை நீங்கள் ஏற்றுக்கொண்டு பயன்படுத்துவதாக Google கருதும் என்பதை நீங்கள் புரிந்து ஒப்புக்கொள்கிறீர்கள்.

    -

    19. 19. பொது சட்ட விதிமுறைகள்

    -

    19.1 சில நேரங்களில் சேவைகளைப் பயன்படுத்தும்போது (பயன்படுத்துவதால், அல்லது சேவைகளை நீங்கள் பயன்படுத்துவதன் மூலமாக) வேறு நபர் அல்லது நிறுவனத்தின் மூலமாக வழங்கப்படும் சேவையைப் பயன்படுத்தவோ மென்பொருளைப் பதிவிறக்கம் செய்யவோ அல்லது பொருட்களை வாங்கவோ நேரிடலாம். இவ்வகை வெளி சேவைகளை, மென்பொருள்களை அல்லது பொருட்களைப் பயன்படுத்துவது உங்களுக்கும், தொடர்புடைய நிறுவனம் அல்லது நபருக்குமான தனியான விதிமுறைகள் மூலம் கையாளப்படலாம். அவ்வாறான நிலையில், உங்களுக்கும் மற்ற தனிநபர்கள் அல்லது நிறுவனங்களுக்குமான சட்டப்பூர்வ உறவை விதிமுறைகள் பாதிக்காது.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + கடைசியாக மாற்றியது: ஜனவரி 01, 2021 +

    +

    +- Chrome அல்லது Chrome OSஸைப் பயன்படுத்துவதன் மூலம், https://policies.google.com/terms என்ற தளத்திலுள்ள Google சேவை விதிமுறைகளையும் Google Chrome, Chrome OS ஆகியவை தொடர்பான கூடுதல் சேவை விதிமுறைகளையும் ஏற்கிறீர்கள். ++ Chrome அல்லது Chrome OSஸைப் பயன்படுத்துவதன் மூலம், https://policies.9oo91e.qjz9zk/terms என்ற தளத்திலுள்ள Google சேவை விதிமுறைகளையும் Google Chrome, Chrome OS ஆகியவை தொடர்பான கூடுதல் சேவை விதிமுறைகளையும் ஏற்கிறீர்கள். +

    +

    +- இந்த Google Chrome, Chrome OS ஆகியவற்றுக்கான கூடுதல் சேவை விதிமுறைகள், Chrome மற்றும் Chrome OSஸின் செயலாக்கக் குறியீட்டுப் பதிப்புக்குப் பொருந்தும். பெரும்பாலான Chrome மூலக் குறியீடுகள் https://code.google.com/chromium/terms.html என்ற தளத்தில் உள்ள ஓப்பன் சோர்ஸ் மென்பொருள் உரிம ஒப்பந்தங்கள் என்பதன் கீழ் இலவசமாகக் கிடைக்கும். ++ இந்த Google Chrome, Chrome OS ஆகியவற்றுக்கான கூடுதல் சேவை விதிமுறைகள், Chrome மற்றும் Chrome OSஸின் செயலாக்கக் குறியீட்டுப் பதிப்புக்குப் பொருந்தும். பெரும்பாலான Chrome மூலக் குறியீடுகள் https://code.9oo91e.qjz9zk/chromium/terms.html என்ற தளத்தில் உள்ள ஓப்பன் சோர்ஸ் மென்பொருள் உரிம ஒப்பந்தங்கள் என்பதன் கீழ் இலவசமாகக் கிடைக்கும். +

    +

    + பின்வரும் விதிமுறைகளுக்கு உட்பட்டே Chrome, Chrome OS ஆகியவற்றின் சில கூறுகளை உங்களால் பயன்படுத்த முடியும்: diff --git a/components/resources/terms/terms_te.html b/components/resources/terms/terms_te.html --- a/components/resources/terms/terms_te.html +++ b/components/resources/terms/terms_te.html -@@ -14,7 +14,7 @@ h2 { font-size:1em; margin-top:0 } - - - --

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.google.com/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.google.com/terms/update) and Additional Terms (https://www.google.com/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.google.com/terms/chromechanges#faq).

    -+

    We’re updating the terms of service for Chrome on March 31, 2020. The new terms will include Google’s Terms of Service and the Google Chrome and Chrome OS additional terms of service. Until then, the terms below continue to apply. See a summary of the key changes (https://policies.9oo91e.qjz9zk/terms/chromechanges) for more details.

    • See a preview of the new Terms (https://policies.9oo91e.qjz9zk/terms/update) and Additional Terms (https://www.9oo91e.qjz9zk/chrome/terms).

    If you don’t agree to our new Terms, you can find more information about your options in our Frequently Asked Questions (https://policies.9oo91e.qjz9zk/terms/chromechanges#faq).

    -

    Google Chrome సేవా నిబంధనలు

    -

    ఈ సేవా నిబంధనలు Google Chrome యొక్క ఆచరించదగ్గ కోడ్ సంస్కరణకు వర్తిస్తాయి. Google Chrome కోసం సోర్స్ కోడ్ chrome://credits వద్ద ఓపెన్ సోర్స్ సాఫ్ట్‌వేర్ లైసెన్స్ ఒప్పందం క్రింద ఉచితంగా అందుబాటులో ఉంటుంది.

    -

    1. Googleతో మీ సంబంధం

    -@@ -42,18 +42,18 @@ h2 { font-size:1em; margin-top:0 } -

    5.3 మీకు Google తో ప్రత్యేకించి విడిగా ఒప్పందం ఉంటే తప్ప, ఈ సేవలను మీరు ఏ ప్రయోజనం కోసమైనా సరే పునరుత్పత్తికి, నకలు, కాపీ, విక్రయించడం, వ్యాపారం లేదా పునఃవిక్రయం వంటివి చెయ్యడానికి పాల్పడరని మీరు అంగీకరిస్తున్నారు.

    -

    5.4 నిబంధనలలోని ఏ అనివార్య అంశాలనైనా మీరు ఉల్లంఘించిన పక్షంలో (Google మీకు లేక మూడవ పార్టీకి బాధ్యత వహించదని) మరియు అలాంటి ఉల్లంఘన కారణంగా ఎదురయ్యే ఫలితాలకు (Googleకు అసౌకర్యం కలిగించే విధంగా నష్టం, హానితో సహా) మీరే పూర్తి బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు.

    -

    6. గోప్యత మరియు మీ వ్యక్తిగత సమాచారం

    --

    6.1 Google యొక్క డేటా రక్షణ అభ్యాసాల గురించి మరింత సమాచారం కోసం, దయచేసి http://www.google.com/privacy.html మరియు http://www.google.com/chrome/intl/en/privacy.html వద్ద Google గోప్యతా విధానాన్ని చదవండి. మీ వ్యక్తిగత సమాచారాన్ని Google ఎలా పరిగణిస్తుందో మరియు మీ గోప్యతను ఎలా రక్షిస్తుందో ఈ విధానం వివరిస్తుంది.

    -+

    6.1 Google యొక్క డేటా రక్షణ అభ్యాసాల గురించి మరింత సమాచారం కోసం, దయచేసి http://www.9oo91e.qjz9zk/privacy.html మరియు http://www.9oo91e.qjz9zk/chrome/intl/en/privacy.html వద్ద Google గోప్యతా విధానాన్ని చదవండి. మీ వ్యక్తిగత సమాచారాన్ని Google ఎలా పరిగణిస్తుందో మరియు మీ గోప్యతను ఎలా రక్షిస్తుందో ఈ విధానం వివరిస్తుంది.

    -

    6.2 Google గోప్యతా విధానాలకు అనుగుణంగా మీరు మీ డేటాను ఉపయోగించడానికి అంగీకరిస్తున్నారు.

    -

    7. సేవల్లో ఉన్న కంటెంట్

    -

    7.1 మీరు ఉపయోగిస్తున్న సేవల్లో మీరు ప్రాప్తి చేసే మొత్తం సమాచారానికి (డేటా ఫైళ్ళు, వ్రాతపూర్వక టెక్స్ట్, కంప్యూటర్ సాఫ్ట్‌వేర్, సంగీతం, ఆడియో ఫైళ్లు లేదా ఇతర ధ్వనులు, ఫోటోగ్రాఫ్‌లు, వీడియోలు లేదా ఇతర చిత్రాలు వంటివి) కంటెంట్‌ను తయారుచేసిన వ్యక్తిదే పూర్తి బాధ్యత అని మీకు అర్థమైందని మీరు అంగీకరిస్తున్నారు. ఇటువంటి సమాచారం అంతా “కంటెంట్” పేరుతో క్రింద ప్రస్తావించబడింది.

    -

    7.2 మీకు సేవలలో భాగంగా సమర్పించిన కంటెంట్ ఆ కంటెంట్‌ను Googleకి సేవలలోని ప్రకటనలకు, సేవలలోని ప్రాయోజిత కంటెంట్‌కు పరిమితం కాకుండా Googleకు (లేదా ఇతర వ్యక్తులు లేదా వారి తరపు వ్యక్తుల ద్వారా) అందించిన ప్రాయోజకులు లేక ప్రకటనకర్తలకు స్వంతమైన మేధోసంపత్తి హక్కులచే రక్షించబడి ఉండవచ్చని మీరు తెలుసుకోవాలి. Google లేదా ఈ కంటెంట్ యజమానులు ఏదైనా విడి ఒప్పందంలో మీకు ప్రత్యేకించి చెప్పి ఉంటే తప్ప, ఈ కంటెంట్‌ను (మొత్తం లేదా భాగమైనా) ఆధారపడి ఉన్న విషయాలని మీరు సవరించడం, అద్దెకు ఇవ్వడం, లీజ్ కు ఇవ్వడం, అప్పుగా ఇవ్వడం, విక్రయించడం, పంపిణీ చేయడం లేదా సృష్టించడం వంటివి చేయలేరు.

    --

    7.3 ఏదైనా సేవ నుండి ఏదైనా లేదా మొత్తం కంటెంట్‌ను ముందస్తుగా స్క్రీన్ చేయడానికి, సమీక్షించడానికి, ఫ్లాగ్ చేయడానికి, ఫిల్టర్ చేయడానికి, సవరించడానికి, తిరస్కరించడానికి లేదా తీసివేయడానికి Google హక్కును (అయితే తప్పనిసరి నియమాలు లేవు) ఉంచుకుంటుంది. కొన్ని సేవలకు సంబంధించి, అభ్యంతరమైన లైంగిక కంటెంట్‌ను ఫిల్టర్ చెయ్యడానికి Google ఉపకరణాలను అందించవచ్చు. ఈ ఉపకరణాలు సురక్షిత శోధనా ప్రాధాన్యత సెట్టింగులను కలిగి ఉంటాయి (https://support.google.com/websearch/answer/510 చూడండి). అదనంగా, మీరు అభ్యంతరమైనదిగా కనుగొన్న కంటెంట్‌కు ప్రాప్తిని పరిమితం చెయ్యడానికి వాణిజ్యపరంగా ఎన్నో సేవలు మరియు సాఫ్ట్‌వేర్‌లు అందుబాటులో ఉన్నాయి.

    -+

    7.3 ఏదైనా సేవ నుండి ఏదైనా లేదా మొత్తం కంటెంట్‌ను ముందస్తుగా స్క్రీన్ చేయడానికి, సమీక్షించడానికి, ఫ్లాగ్ చేయడానికి, ఫిల్టర్ చేయడానికి, సవరించడానికి, తిరస్కరించడానికి లేదా తీసివేయడానికి Google హక్కును (అయితే తప్పనిసరి నియమాలు లేవు) ఉంచుకుంటుంది. కొన్ని సేవలకు సంబంధించి, అభ్యంతరమైన లైంగిక కంటెంట్‌ను ఫిల్టర్ చెయ్యడానికి Google ఉపకరణాలను అందించవచ్చు. ఈ ఉపకరణాలు సురక్షిత శోధనా ప్రాధాన్యత సెట్టింగులను కలిగి ఉంటాయి (https://support.9oo91e.qjz9zk/websearch/answer/510 చూడండి). అదనంగా, మీరు అభ్యంతరమైనదిగా కనుగొన్న కంటెంట్‌కు ప్రాప్తిని పరిమితం చెయ్యడానికి వాణిజ్యపరంగా ఎన్నో సేవలు మరియు సాఫ్ట్‌వేర్‌లు అందుబాటులో ఉన్నాయి.

    -

    7.4 మీరు ఈ సేవలను ఉపయోగించడం ద్వారా శిక్షార్హమైన, అశ్లీలమైన లేక అభ్యంతరకరమైన కంటెంట్‌ని మీరు చూడవచ్చని గ్రహించి, ఇందుకు సంబంధించి, మీ స్వంత పూచీతో సేవలను ఉపయోగిస్తున్నారని మీకు అర్ధమైనట్లు మీరు అంగీకరిస్తున్నారు.

    -

    7.5 మీరు ఈ సేవలను ఉపయోగిస్తున్నప్పుడు సృష్టించే, బదిలీ చేసే లేదా ప్రదర్శించే ఏదైనా కంటెంట్‌కు మరియు మీ చర్యల ద్వారా కలిగే ఫలితాలకు (Googleను దెబ్బతీసే నష్టం, ప్రమాదంతో సహా) మీరే పూర్తిగా బాధ్యులని (మరియు మీకు లేదా మూడవ పార్టీకి Google బాధ్యత వహించదని) మీరు అంగీకరిస్తున్నారు.

    -

    8. యాజమాన్య హక్కులు

    -

    8.1 సేవలలో ఉన్న ఏవైనా మేధోసంపత్తి హక్కులతో సహా (ఆ హక్కులు నమోదు చేయబడి ఉన్నా లేకున్నా మరియు ప్రపంచంలో ఈ హక్కులు ఎక్కడ ఉనికిలో ఉన్నా) సేవలకు సంబంధించిన అన్ని చట్టపరమైన హక్కులను, టైటిల్ మరియు వడ్డీలను Google (లేదా Google లైసెన్సర్లు) యాజమాన్యం కలిగి ఉంటాయని మీరు గుర్తించాలి మరియు అంగీకరించాలి.

    -

    8.2 మీరు Googleకు వ్రాతపూర్వకంగా మీ అంగీకారం తెలిపి ఉంటే తప్ప, Google వ్యాపార పేర్లు, వ్యాపార చిహ్నాలు, సేవా చిహ్నాలు, వ్యాపారచిహ్నాలు, డొమైన్ పేర్లు మరియు ఇతర విలక్షణమైన బ్రాండ్ లక్షణాలను ఉపయోగించడానికి ఈ నిబంధనలు మీకు హక్కు ఇవ్వవు.

    --

    8.3 మీకు బ్రాండ్ లక్షణాలలో వేటినైనా ఉపయోగించడానికి హక్కు Google ఒప్పందంలోని ప్రత్యేకంగా ఉన్నట్లయితే, అటువంటి లక్షణాలను మీరు ఉపయోగించడానికి, ఆ ఒప్పందానికి, నిబంధనల యొక్క వర్తించదగిన నియమాలకు కట్టుబడి ఉంటారని మీరు అంగీకరిస్తున్నారు. ఈ మార్గదర్శకాలను మీరు ఆన్‌లైన్‌లో http://www.google.com/permissions/guidelines.html (లేదా ఈ కారణంగా ఎప్పటికప్పుడు Google అందించే అటువంటి మరొక URL) వద్ద వీక్షించవచ్చు.

    -+

    8.3 మీకు బ్రాండ్ లక్షణాలలో వేటినైనా ఉపయోగించడానికి హక్కు Google ఒప్పందంలోని ప్రత్యేకంగా ఉన్నట్లయితే, అటువంటి లక్షణాలను మీరు ఉపయోగించడానికి, ఆ ఒప్పందానికి, నిబంధనల యొక్క వర్తించదగిన నియమాలకు కట్టుబడి ఉంటారని మీరు అంగీకరిస్తున్నారు. ఈ మార్గదర్శకాలను మీరు ఆన్‌లైన్‌లో http://www.9oo91e.qjz9zk/permissions/guidelines.html (లేదా ఈ కారణంగా ఎప్పటికప్పుడు Google అందించే అటువంటి మరొక URL) వద్ద వీక్షించవచ్చు.

    -

    8.4 ఈ క్రింది నిబంధనలను మరియు మీరు సమర్పించిన, పోస్ట్ చేసిన లేదా ప్రదర్శిస్తున్న కంటెంట్‌లో మరియు మేధోసంపత్తి హక్కులతో సహా సేవల ద్వారా (ఆ హక్కులు నమోదు చెయ్యబడి ఉన్నా లేకున్నా మరియు ప్రపంచంలో ఈ హక్కులు ఎక్కడ ఉనికిలో ఉన్నా) మీ నుండి (లేదా మీ లైసెన్సర్ల నుండి) ఏ హక్కును, టైటిల్‌ను లేక వడ్డీని పొందలేదని Google తెలియజేసి అంగీకరిస్తుంది. మీరు Googleకు వ్రాతపూర్వకంగా ఆమోదం తెలిపి ఉంటే తప్ప, ఆ హక్కులను రక్షించడంలో మరియు అమలు చేయడంలో మీదే బాధ్యత అని మరియు మీ తరపున Google బాధ్యత వహించబోదని మీరు అంగీకరిస్తున్నారు.

    -

    8.5 మీరు సేవల్లోని సూచనలను లేదా చేర్చిన కంటెంట్‌ను (కాపీరైట్ మరియు వ్యాపార చిహ్నం ఉన్న నోటీసులతో సహా) ఏదైనా యాజమాన్య హక్కుల నోటీసులను సవరించడం, తొలగించడం లేదా మెరుగుపర్చడం చెయ్యరని మీరు అంగీకరిస్తున్నారు.

    -

    8.6 అలా చెయ్యడానికి వ్రాతపూర్వకంగా Googleచే ప్రత్యేకంగా మీరు అధికారం పొంది ఉంటే తప్ప, సేవలను ఉపయోగించుకోవడంలో, అటువంటి చిహ్నాలు, పేర్లు లేదా వ్యాపారచిహ్నాల యజమాని లేదా అధీకృత వినియోగదారు గురించి గందరగోళం తలెత్తే రీతిలో ఏదైనా వ్యాపార చిహ్నం, సేవా చిహ్నం, వ్యాపార పేర్లు, ఏదైనా కంపెనీ లేదా సంస్థ యొక్క వ్యాపారచిహ్నాన్ని ఉపయోగించబోరని మీరు అంగీకరిస్తున్నారు.

    -@@ -98,8 +98,8 @@ h2 { font-size:1em; margin-top:0 } -

    (V) మీ పాస్వర్డ్ లేదా ఖాతా వివరాలను సురక్షితంగా మరియు గోప్యంగా ఉంచడంలో మీ వైఫల్యం;

    -

    14.2 ఇటువంటి నష్టాలు ఏవైనా ఎదురవుతాయని GOOGLEకు సలహా ఉన్నా లేకపోయినా లేదా అప్రమత్తంగా లేకపోయినా 14.1 పేరాలో మీపై GOOGLE బాధ్యతలకు సంబంధించిన పరిమితులు వర్తిస్తాయి.

    -

    15. కాపీరైట్ మరియు ట్రేడ్ మార్క్ విధానాలు

    --

    15.1 అంతర్జాతీయ మేధోసంపత్తి చట్టానికి (అమెరికాలో, Digital Millennium Copyright Actతో సహా) వర్తించే కాపీరైట్ ఉల్లంఘనలపై వచ్చిన ఆరోపణలకు స్పందించడం మరియు పదే పదే ఉల్లంఘనలకు పాల్పడే వారి ఖాతాలను రద్దుచేయడం అనేది Google యొక్క విధానం. Google గోప్యతా విధానం యొక్క వివరాలను http://www.google.com/dmca.htmlలో కనుగొనవచ్చు.

    --

    15.2 http://www.google.com/tm_complaint.htmlలో తమ ప్రకటనల వ్యాపారం, వివరాలకు సంబంధించి Google నిర్వహించే వ్యాపార చిహ్నం ఆరోపణల విధానాన్ని మీరు చదవవచ్చును.

    -+

    15.1 అంతర్జాతీయ మేధోసంపత్తి చట్టానికి (అమెరికాలో, Digital Millennium Copyright Actతో సహా) వర్తించే కాపీరైట్ ఉల్లంఘనలపై వచ్చిన ఆరోపణలకు స్పందించడం మరియు పదే పదే ఉల్లంఘనలకు పాల్పడే వారి ఖాతాలను రద్దుచేయడం అనేది Google యొక్క విధానం. Google గోప్యతా విధానం యొక్క వివరాలను http://www.9oo91e.qjz9zk/dmca.htmlలో కనుగొనవచ్చు.

    -+

    15.2 http://www.9oo91e.qjz9zk/tm_complaint.htmlలో తమ ప్రకటనల వ్యాపారం, వివరాలకు సంబంధించి Google నిర్వహించే వ్యాపార చిహ్నం ఆరోపణల విధానాన్ని మీరు చదవవచ్చును.

    -

    16. ప్రకటనలు

    -

    16.1 ప్రకటన యొక్క రాబడులచే కొన్ని సేవలు మద్దతివ్వబడుతున్నాయి మరియు ప్రకటనలు, ప్రమోషన్లను ప్రదర్శించవచ్చు. సేవలు లేదా ఇతర సమాచారం ద్వారా తయారు చెయ్యబడిన సేవలు, ప్రశ్నలలో నిల్వచెయ్యబడిన సమాచారం యొక్క కంటెంట్‌కు ఈ ప్రకటనలు లక్ష్యంగా ఉండవచ్చు.

    -

    16.2 సేవల్లో Google ద్వారా ప్రకటించబడిన శైలి, రీతి, పరిధి అనేవి మీకు నిర్దిష్ట నోటీసు ఇవ్వకుండానే మార్చడం జరుగుతుంది.

    -@@ -109,7 +109,7 @@ h2 { font-size:1em; margin-top:0 } -

    17.2 అటువంటి బాహ్య సైట్‌లు లేదా వనరుల లభ్యత పట్ల Googleకు బాధ్యత లేదని మరియు అలాంటి వెబ్‌సైట్‌లు లేక వనరుల నుండి ఎలాంటి ప్రకటనలు, ఉత్పత్తులు లేక ఇతర సామగ్రిని అది ఆమోదించదని మీరు గ్రహించి, అంగీకరిస్తున్నారు.

    -

    17.3 అటువంటి బాహ్య సైట్‌లు లేదా వనరుల లభ్యత ఫలితంగా లేక అటువంటి సైట్‌లు లేదా వనరుల నుండి లభ్యమయ్యే ఏదైనా ప్రకటన, ఉత్పత్తులు లేక ఇతర సామగ్రి యొక్క సంపూర్తి, నిర్దిష్టత లేదా ఉనికికి సంబంధించి మీ విశ్వసనీయత ఫలితంగా జరిగే ఎలాంటి నష్టాలకు Google బాధ్యత వహించదని మీరు గ్రహించి, అంగీకరిస్తున్నారు.

    -

    18. నిబంధనలలో మార్పులు

    --

    18.1 ఎప్పటికప్పుడు యూనివర్సల్ నిబంధనల లేదా అదనపు నిబంధనల్లో Google మార్పులు చెయ్యవచ్చు. ఈ మార్పులు చేసినప్పుడు, http://www.google.com/chrome/intl/en/eula_text.html వద్ద లభించే యూనివర్శల్ నిబంధనల యొక్క క్రొత్త కాపీని Google తయారు చేస్తుంది మరియు ప్రభావిత సేవల ద్వారా ఏవైనా క్రొత్త అదనపు నిబంధనలు మీకు అందుబాటులోకి వస్తాయి.

    -+

    18.1 ఎప్పటికప్పుడు యూనివర్సల్ నిబంధనల లేదా అదనపు నిబంధనల్లో Google మార్పులు చెయ్యవచ్చు. ఈ మార్పులు చేసినప్పుడు, http://www.9oo91e.qjz9zk/chrome/intl/en/eula_text.html వద్ద లభించే యూనివర్శల్ నిబంధనల యొక్క క్రొత్త కాపీని Google తయారు చేస్తుంది మరియు ప్రభావిత సేవల ద్వారా ఏవైనా క్రొత్త అదనపు నిబంధనలు మీకు అందుబాటులోకి వస్తాయి.

    -

    18.2 యూనివర్సల్ నిబంధనలు మరియు అదనపు నిబంధనలు మారిన తేదీ తర్వాత మీరు సేవలను ఉపయోగిస్తే, నవీకరించబడిన యూనివర్సల్ నిబంధనలు లేదా అదనపు నిబంధనలను మీరు ఆమోదిస్తున్నట్లుగా Google భావిస్తుందని గ్రహించి, అంగీకరిస్తున్నారు.

    -

    19. సాధారణ చట్టపరమైన నిబంధనలు

    -

    19.1 మీరు సేవలను ఉపయోగించిన కొన్నిసార్లు, మీరు (సేవలను మీరు ఉపయోగించడం ద్వారా లేదా దాని ఫలితంగా) సర్వీస్‌ను ఉపయోగించవచ్చు లేదా సాఫ్ట్‌వేర్ భాగాన్ని డౌన్‌లోడ్ చేయవచ్చు లేదా మరొక వ్యక్తి లేదా కంపెనీ ద్వారా అందించిన వస్తువులను కొనుగోలు చేయవచ్చు. ఈ సేవలు, సాఫ్ట్‌వేర్ లేదా వస్తువులను మీరు ఉపయోగించడం మీకు మరియు సంబంధిత కంపెనీ లేక వ్యక్తికి మధ్య ప్రత్యేక నిబంధనలకు లోబడి ఉంటుంది. ఇలా అయితే, ఈ ఇతర కంపెనీలు లేదా వ్యక్తులతో మీ చట్టపరమైన సంబంధాన్ని నిబంధనలు వ్యతిరేకించవు.

    +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + చివరగా సవరించినది: 01 జనవరి, 2021 +

    +

    +- మీరు Chrome లేదా Chrome OSను ఉపయోగించడం ద్వారా https://policies.google.com/terms లింక్‌లోని Google సేవా నిబంధనలకు, అలాగే ఈ Google Chrome, Chrome OS అదనపు సేవా నిబంధనలకు అంగీకరిస్తారు. ++ మీరు Chrome లేదా Chrome OSను ఉపయోగించడం ద్వారా https://policies.9oo91e.qjz9zk/terms లింక్‌లోని Google సేవా నిబంధనలకు, అలాగే ఈ Google Chrome, Chrome OS అదనపు సేవా నిబంధనలకు అంగీకరిస్తారు. +

    +

    +- ఈ Google Chrome, Chrome OS అదనపు సేవా నిబంధనలు అనేవి Chrome, Chrome OS యొక్క అమలు చేయదగిన కోడ్ వెర్షన్‌కు వర్తిస్తాయి. Chromeకు సంబంధించిన చాలా వరకు సోర్స్ కోడ్, ఓపెన్ సోర్స్ సాప్ట్‌వేర్ లైసెన్స్ ఒప్పందాల ప్రకారం ఎటువంటి ఛార్జీ లేకుండా ఉచితంగా https://code.google.com/chromium/terms.html లింక్‌లో అందుబాటులో ఉంచబడుతుంది. ++ ఈ Google Chrome, Chrome OS అదనపు సేవా నిబంధనలు అనేవి Chrome, Chrome OS యొక్క అమలు చేయదగిన కోడ్ వెర్షన్‌కు వర్తిస్తాయి. Chromeకు సంబంధించిన చాలా వరకు సోర్స్ కోడ్, ఓపెన్ సోర్స్ సాప్ట్‌వేర్ లైసెన్స్ ఒప్పందాల ప్రకారం ఎటువంటి ఛార్జీ లేకుండా ఉచితంగా https://code.9oo91e.qjz9zk/chromium/terms.html లింక్‌లో అందుబాటులో ఉంచబడుతుంది. +

    +

    + Chrome, Chrome OSలలోని నిర్దిష్ట కాంపొనెంట్‌లను మీరు వినియోగించే విధానం కింది నిబంధనలకు కట్టుబడి ఉండాలి: diff --git a/components/resources/terms/terms_th.html b/components/resources/terms/terms_th.html --- a/components/resources/terms/terms_th.html +++ b/components/resources/terms/terms_th.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - ข้อกำหนดในการให้บริการเพิ่มเติมของ Google Chrome และ Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + แก้ไขล่าสุด: 1 มกราคม 2021 +

    - การใช้ Chrome หรือ Chrome OS หมายความว่า คุณยอมรับข้อกำหนดในการให้บริการของ Google ซึ่งอยู่ที่ https://policies.google.com/terms และข้อกำหนดในการให้บริการเพิ่มเติมของ Google Chrome และ Chrome OS เหล่านี้ + การใช้ Chrome หรือ Chrome OS หมายความว่า คุณยอมรับข้อกำหนดในการให้บริการของ Google ซึ่งอยู่ที่ https://policies.9oo91e.qjz9zk/terms และข้อกำหนดในการให้บริการเพิ่มเติมของ Google Chrome และ Chrome OS เหล่านี้ @@ -27115,9 +19811,9 @@ diff --git a/components/resources/terms/terms_th.html b/components/resources/ter diff --git a/components/resources/terms/terms_tr.html b/components/resources/terms/terms_tr.html --- a/components/resources/terms/terms_tr.html +++ b/components/resources/terms/terms_tr.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome ve Chrome OS Ek Hizmet Şartları - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Son değiştirilme tarihi: 1 Ocak 2021 +

    - Chrome veya Chrome OS'u kullanarak https://policies.google.com/terms adresinde bulunan Google Hizmet Şartları'nı ve bu Google Chrome ile Chrome OS Ek Hizmet Şartları'nı kabul etmiş olursunuz. + Chrome veya Chrome OS'u kullanarak https://policies.9oo91e.qjz9zk/terms adresinde bulunan Google Hizmet Şartları'nı ve bu Google Chrome ile Chrome OS Ek Hizmet Şartları'nı kabul etmiş olursunuz. @@ -27131,9 +19827,9 @@ diff --git a/components/resources/terms/terms_tr.html b/components/resources/ter diff --git a/components/resources/terms/terms_uk.html b/components/resources/terms/terms_uk.html --- a/components/resources/terms/terms_uk.html +++ b/components/resources/terms/terms_uk.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Додаткові умови використання Google Chrome і ОС Chrome - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Востаннє оновлено 1 січня 2021 року +

    - Використовуючи Chrome або ОС Chrome, ви погоджуєтесь із Загальними положеннями та умовами Google на сторінці https://policies.google.com/terms і цими Додатковими умовами використання Google Chrome та ОС Chrome. + Використовуючи Chrome або ОС Chrome, ви погоджуєтесь із Загальними положеннями та умовами Google на сторінці https://policies.9oo91e.qjz9zk/terms і цими Додатковими умовами використання Google Chrome та ОС Chrome. @@ -27147,9 +19843,9 @@ diff --git a/components/resources/terms/terms_uk.html b/components/resources/ter diff --git a/components/resources/terms/terms_vi.html b/components/resources/terms/terms_vi.html --- a/components/resources/terms/terms_vi.html +++ b/components/resources/terms/terms_vi.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Điều khoản dịch vụ bổ sung của Google Chrome và Chrome OS - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + Lần sửa đổi gần đây nhất: Ngày 1 tháng 1 năm 2021 +

    - Bằng việc sử dụng Chrome hoặc Chrome OS, bạn đồng ý với Điều khoản dịch vụ của Google có tại https://policies.google.com/terms cũng như các Điều khoản dịch vụ bổ sung sau đây của Google Chrome và Chrome OS. + Bằng việc sử dụng Chrome hoặc Chrome OS, bạn đồng ý với Điều khoản dịch vụ của Google có tại https://policies.9oo91e.qjz9zk/terms cũng như các Điều khoản dịch vụ bổ sung sau đây của Google Chrome và Chrome OS. @@ -27163,9 +19859,9 @@ diff --git a/components/resources/terms/terms_vi.html b/components/resources/ter diff --git a/components/resources/terms/terms_zh-CN.html b/components/resources/terms/terms_zh-CN.html --- a/components/resources/terms/terms_zh-CN.html +++ b/components/resources/terms/terms_zh-CN.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome 和 Chrome 操作系统附加服务条款 - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + 上次修改时间:2021 年 1 月 1 日 +

    - 使用 Chrome 或 Chrome 操作系统即表示您同意接受《Google 服务条款》(全文请见 https://policies.google.com/terms)以及这些 Google Chrome 和 Chrome 操作系统附加服务条款。 + 使用 Chrome 或 Chrome 操作系统即表示您同意接受《Google 服务条款》(全文请见 https://policies.9oo91e.qjz9zk/terms)以及这些 Google Chrome 和 Chrome 操作系统附加服务条款。 @@ -27179,9 +19875,9 @@ diff --git a/components/resources/terms/terms_zh-CN.html b/components/resources/ diff --git a/components/resources/terms/terms_zh-TW.html b/components/resources/terms/terms_zh-TW.html --- a/components/resources/terms/terms_zh-TW.html +++ b/components/resources/terms/terms_zh-TW.html -@@ -17,10 +17,10 @@ h2 { font-size:1em; margin-top:0 } - Google Chrome 和 Chrome 作業系統的《附加服務條款》 - +@@ -20,10 +20,10 @@ h2 { font-size:1em; margin-top:0 } + 上次修改日期:2021 年 1 月 1 日 +

    - 使用 Chrome 或 Chrome 作業系統,即表示您同意 https://policies.google.com/terms 所述的《Google 服務條款》,以及 Google Chrome 和 Chrome 作業系統的《附加服務條款》。 + 使用 Chrome 或 Chrome 作業系統,即表示您同意 https://policies.9oo91e.qjz9zk/terms 所述的《Google 服務條款》,以及 Google Chrome 和 Chrome 作業系統的《附加服務條款》。 @@ -27192,10 +19888,22 @@ diff --git a/components/resources/terms/terms_zh-TW.html b/components/resources/

    您使用 Chrome 和 Chrome 作業系統的特定元件時,應遵守下列條款的規定: +diff --git a/components/safe_browsing/content/browser/client_side_detection_service.cc b/components/safe_browsing/content/browser/client_side_detection_service.cc +--- a/components/safe_browsing/content/browser/client_side_detection_service.cc ++++ b/components/safe_browsing/content/browser/client_side_detection_service.cc +@@ -53,7 +53,7 @@ const int ClientSideDetectionService::kNegativeCacheIntervalDays = 1; + const int ClientSideDetectionService::kPositiveCacheIntervalMinutes = 30; + + const char ClientSideDetectionService::kClientReportPhishingUrl[] = +- "https://sb-ssl.google.com/safebrowsing/clientreport/phishing"; ++ "https://sb-ssl.9oo91e.qjz9zk/safebrowsing/clientreport/phishing"; + + struct ClientSideDetectionService::ClientPhishingReportInfo { + std::unique_ptr loader; diff --git a/components/safe_browsing/content/password_protection/password_protection_service.cc b/components/safe_browsing/content/password_protection/password_protection_service.cc --- a/components/safe_browsing/content/password_protection/password_protection_service.cc +++ b/components/safe_browsing/content/password_protection/password_protection_service.cc -@@ -50,7 +50,7 @@ namespace { +@@ -47,7 +47,7 @@ namespace { // Keys for storing password protection verdict into a DictionaryValue. const int kRequestTimeoutMs = 10000; const char kPasswordProtectionRequestUrl[] = @@ -27204,18 +19912,17 @@ diff --git a/components/safe_browsing/content/password_protection/password_prote } // namespace -@@ -66,9 +66,9 @@ PasswordProtectionService::PasswordProtectionService( - - common_spoofed_domains_ = { - "login.live.com" -- "facebook.com", -+ "f8c3b00k.qjz9zk", - "box.com", -- "google.com", -+ "9oo91e.qjz9zk", - "paypal.com", - "apple.com", - "yahoo.com", +@@ -61,8 +61,8 @@ PasswordProtectionServiceBase::PasswordProtectionServiceBase( + if (history_service) + history_service_observation_.Observe(history_service); + +- common_spoofed_domains_ = {"login.live.com", "facebook.com", "box.com", +- "google.com", "paypal.com", "apple.com", ++ common_spoofed_domains_ = {"login.live.com", "f8c3b00k.qjz9zk", "box.com", ++ "9oo91e.qjz9zk", "paypal.com", "apple.com", + "yahoo.com", "adobe.com", "amazon.com", + "linkedin.com"}; + } diff --git a/components/safe_browsing/content/triggers/trigger_util.cc b/components/safe_browsing/content/triggers/trigger_util.cc --- a/components/safe_browsing/content/triggers/trigger_util.cc +++ b/components/safe_browsing/content/triggers/trigger_util.cc @@ -27228,18 +19935,18 @@ diff --git a/components/safe_browsing/content/triggers/trigger_util.cc b/compone base::StartsWith(frame_url.path_piece(), "/safeframe", base::CompareCase::SENSITIVE); } -diff --git a/components/safe_browsing/core/browser/safe_browsing_token_fetcher.cc b/components/safe_browsing/core/browser/safe_browsing_token_fetcher.cc ---- a/components/safe_browsing/core/browser/safe_browsing_token_fetcher.cc -+++ b/components/safe_browsing/core/browser/safe_browsing_token_fetcher.cc -@@ -21,7 +21,7 @@ namespace safe_browsing { - - namespace { - --const char kAPIScope[] = "https://www.googleapis.com/auth/chrome-safe-browsing"; -+const char kAPIScope[] = "https://www.9oo91eapis.qjz9zk/auth/chrome-safe-browsing"; +diff --git a/components/safe_browsing/core/browser/safe_browsing_token_fetcher.h b/components/safe_browsing/core/browser/safe_browsing_token_fetcher.h +--- a/components/safe_browsing/core/browser/safe_browsing_token_fetcher.h ++++ b/components/safe_browsing/core/browser/safe_browsing_token_fetcher.h +@@ -10,7 +10,7 @@ + namespace safe_browsing { - const int kTimeoutDelaySeconds = 5 * 60; + constexpr char kAPIScope[] = +- "https://www.googleapis.com/auth/chrome-safe-browsing"; ++ "https://www.9oo91eapis.qjz9zk/auth/chrome-safe-browsing"; + // This interface is used to fetch access tokens for communcations with Safe + // Browsing. It asynchronously returns an access token for the current account diff --git a/components/safe_browsing/core/common/safebrowsing_constants.cc b/components/safe_browsing/core/common/safebrowsing_constants.cc --- a/components/safe_browsing/core/common/safebrowsing_constants.cc +++ b/components/safe_browsing/core/common/safebrowsing_constants.cc @@ -27252,18 +19959,6 @@ diff --git a/components/safe_browsing/core/common/safebrowsing_constants.cc b/co const char kCustomCancelReasonForURLLoader[] = "SafeBrowsing"; -diff --git a/components/safe_browsing/core/db/metadata.proto b/components/safe_browsing/core/db/metadata.proto ---- a/components/safe_browsing/core/db/metadata.proto -+++ b/components/safe_browsing/core/db/metadata.proto -@@ -10,7 +10,7 @@ option optimize_for = LITE_RUNTIME; - package safe_browsing; - - // Everything below this comment was copied from the page --// , -+// , - // section "Full Hash Metadata". - - // Metadata for the goog-malware-shavar list. diff --git a/components/safe_browsing/core/db/v4_protocol_manager_util.cc b/components/safe_browsing/core/db/v4_protocol_manager_util.cc --- a/components/safe_browsing/core/db/v4_protocol_manager_util.cc +++ b/components/safe_browsing/core/db/v4_protocol_manager_util.cc @@ -27285,82 +19980,22 @@ diff --git a/components/safe_browsing/core/db/v4_protocol_manager_util.cc b/comp std::string Unescape(const std::string& url) { std::string unescaped_str(url); -diff --git a/components/safe_browsing/core/proto/csd.proto b/components/safe_browsing/core/proto/csd.proto ---- a/components/safe_browsing/core/proto/csd.proto -+++ b/components/safe_browsing/core/proto/csd.proto -@@ -17,7 +17,7 @@ - // headers and bodies. - // - // If you want to change this protocol definition or you have questions --// regarding its format please contact chrome-anti-phishing@googlegroups.com. -+// regarding its format please contact chrome-anti-phishing@9oo91egroups.qjz9zk. - - syntax = "proto2"; - -@@ -230,7 +230,7 @@ message LoginReputationClientRequest { - // Not a sign-in user. - NOT_SIGNED_IN = 0; - -- // User signed in with @gmail.com, or @googlemail.com account. -+ // User signed in with @9ma1l.qjz9zk, or @9oo91email.qjz9zk account. - GMAIL = 1; - - // User signed in with a G Suite account. -@@ -271,7 +271,7 @@ message LoginReputationClientRequest { - // User signed in with a dasher account. - GSUITE = 1; - -- // User signed in with @gmail.com, or @googlemail.com account. -+ // User signed in with @9ma1l.qjz9zk, or @9oo91email.qjz9zk account. - GMAIL = 2; - - // Password used for Enterprise login on an Enterprise login page. -@@ -353,7 +353,7 @@ message LoginReputationClientResponse { - // hosting sites (e.g., geocities.com), we further divide the domains. - // - // Examples: -- // www.google.com/foo/bar?param=val -> google.com -+ // www.9oo91e.qjz9zk/foo/bar?param=val -> 9oo91e.qjz9zk - // www.geocities.com/foo/bar.html -> geocities.com/foo - // adwords.blogspot.com/index.html -> adwords.blogspot.com - // -@@ -1260,7 +1260,7 @@ message ClientSafeBrowsingReportRequest { - // Native implementation of Safe Browsing API v4 protocol. - PVER4_NATIVE = 2; - // Android SafetyNet API. -- // https://developer.android.com/training/safetynet/safebrowsing.html -+ // https://developer.8n6r01d.qjz9zk/training/safetynet/safebrowsing.html - ANDROID_SAFETYNET = 3; - // Flywheel (data compression service). - FLYWHEEL = 4; -diff --git a/components/safe_browsing/core/proto/realtimeapi.proto b/components/safe_browsing/core/proto/realtimeapi.proto ---- a/components/safe_browsing/core/proto/realtimeapi.proto -+++ b/components/safe_browsing/core/proto/realtimeapi.proto -@@ -80,7 +80,7 @@ message RTLookupResponse { - - // The returned cache expression applies to all URLs covered by it. See - // the following for how covering works: -- // https://developers.google.com/safe-browsing/v4/urls-hashing e.g. -+ // https://developers.9oo91e.qjz9zk/safe-browsing/v4/urls-hashing e.g. - // "test.com/foo1" of type COVERING_MATCH will not apply to - // "test.com/foo2" or "test.com/", but will apply to "test.com/foo1/bar2" - // and "baz.test.com/foo1". diff --git a/components/safe_browsing/core/realtime/url_lookup_service.cc b/components/safe_browsing/core/realtime/url_lookup_service.cc --- a/components/safe_browsing/core/realtime/url_lookup_service.cc +++ b/components/safe_browsing/core/realtime/url_lookup_service.cc -@@ -35,7 +35,7 @@ namespace safe_browsing { - namespace { +@@ -103,7 +103,7 @@ bool RealTimeUrlLookupService::CanCheckSafeBrowsingDb() const { - const char kRealTimeLookupUrlPrefix[] = -- "https://safebrowsing.google.com/safebrowsing/clientreport/realtime"; -+ "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/clientreport/realtime"; - - const size_t kMaxFailuresToEnforceBackoff = 3; + GURL RealTimeUrlLookupService::GetRealTimeLookupUrl() const { + return GURL( +- "https://safebrowsing.google.com/safebrowsing/clientreport/realtime"); ++ "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/clientreport/realtime"); + } + net::NetworkTrafficAnnotationTag diff --git a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc --- a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc +++ b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc -@@ -30,7 +30,7 @@ namespace safe_search_api { +@@ -29,7 +29,7 @@ namespace safe_search_api { namespace { const char kSafeSearchApiUrl[] = @@ -27381,39 +20016,17 @@ diff --git a/components/safe_search_api/stub_url_checker.cc b/components/safe_se std::string BuildResponse(bool is_porn) { base::DictionaryValue dict; -diff --git a/components/security_interstitials/content/android/java/src/org/chromium/components/security_interstitials/CaptivePortalHelper.java b/components/security_interstitials/content/android/java/src/org/chromium/components/security_interstitials/CaptivePortalHelper.java ---- a/components/security_interstitials/content/android/java/src/org/chromium/components/security_interstitials/CaptivePortalHelper.java -+++ b/components/security_interstitials/content/android/java/src/org/chromium/components/security_interstitials/CaptivePortalHelper.java -@@ -22,7 +22,7 @@ import java.lang.reflect.Method; - @JNINamespace("security_interstitials") - public class CaptivePortalHelper { - private static final String DEFAULT_PORTAL_CHECK_URL = -- "http://connectivitycheck.gstatic.com/generate_204"; -+ "http://connectivitycheck.95tat1c.qjz9zk/generate_204"; - - public static void setCaptivePortalCertificateForTesting(String spkiHash) { - CaptivePortalHelperJni.get().setCaptivePortalCertificateForTesting(spkiHash); -diff --git a/components/security_interstitials/content/cert_logger.proto b/components/security_interstitials/content/cert_logger.proto ---- a/components/security_interstitials/content/cert_logger.proto -+++ b/components/security_interstitials/content/cert_logger.proto -@@ -4,7 +4,7 @@ - // - // This protobuffer is intended to store reports from Chrome users of - // certificate errors. A report will be sent from Chrome when it gets --// e.g. a certificate for google.com that chains up to a root CA not expected by -+// e.g. a certificate for 9oo91e.qjz9zk that chains up to a root CA not expected by - // Chrome for that origin, such as DigiNotar (compromised in July 2011), or - // other pinning errors such as a blacklisted cert in the chain, or - // (when opted in) other certificate validation errors like an expired -@@ -15,7 +15,7 @@ - // done on the client's input data. - // - // This should be kept in sync with the internal Google copy when updated. --// Contact security-enamel@chromium.org if you have questions. -+// Contact security-enamel@ch40m1um.qjz9zk if you have questions. +diff --git a/components/safety_check/url_constants.cc b/components/safety_check/url_constants.cc +--- a/components/safety_check/url_constants.cc ++++ b/components/safety_check/url_constants.cc +@@ -7,6 +7,6 @@ + namespace safety_check { - syntax = "proto2"; + const char kConnectivityCheckUrl[] = +- "https://connectivitycheck.gstatic.com/generate_204"; ++ "https://connectivitycheck.95tat1c.qjz9zk/generate_204"; + } // namespace safety_check diff --git a/components/security_interstitials/content/ssl_blocking_page.h b/components/security_interstitials/content/ssl_blocking_page.h --- a/components/security_interstitials/content/ssl_blocking_page.h +++ b/components/security_interstitials/content/ssl_blocking_page.h @@ -27426,13 +20039,25 @@ diff --git a/components/security_interstitials/content/ssl_blocking_page.h b/com // This class is responsible for showing/hiding the interstitial page that is // shown when a certificate error happens. +diff --git a/components/security_interstitials/core/browser/resources/interstitial_large.js b/components/security_interstitials/core/browser/resources/interstitial_large.js +--- a/components/security_interstitials/core/browser/resources/interstitial_large.js ++++ b/components/security_interstitials/core/browser/resources/interstitial_large.js +@@ -239,7 +239,7 @@ function setupEvents() { + loadTimeData.getString('lookalikeRequestHostname') + + ' could be fake or fraudulent.\n\n' + + 'If you believe this is shown in error please visit ' + +- 'https://bugs.chromium.org/p/chromium/issues/entry?' + ++ 'https://bugs.ch40m1um.qjz9zk/p/chromium/issues/entry?' + + 'template=Safety+Tips+Appeals'); + } + diff --git a/components/security_interstitials/core/controller_client.cc b/components/security_interstitials/core/controller_client.cc --- a/components/security_interstitials/core/controller_client.cc +++ b/components/security_interstitials/core/controller_client.cc -@@ -21,7 +21,7 @@ const char kOptInLink[] = "optInLink"; - const char kPrivacyLinkHtml[] = - "%s"; +@@ -21,7 +21,7 @@ const char kDisplayEnhancedProtectionMessage[] = + "displayEnhancedProtectionMessage"; + const char kOptInLink[] = "optInLink"; + const char kEnhancedProtectionMessage[] = "enhancedProtectionMessage"; -const char kHelpCenterUrl[] = "https://support.google.com/chrome/"; +const char kHelpCenterUrl[] = "https://support.9oo91e.qjz9zk/chrome/"; @@ -27441,7 +20066,7 @@ diff --git a/components/security_interstitials/core/controller_client.cc b/compo diff --git a/components/security_interstitials/core/safe_browsing_loud_error_ui.cc b/components/security_interstitials/core/safe_browsing_loud_error_ui.cc --- a/components/security_interstitials/core/safe_browsing_loud_error_ui.cc +++ b/components/security_interstitials/core/safe_browsing_loud_error_ui.cc -@@ -23,11 +23,11 @@ namespace { +@@ -25,11 +25,11 @@ namespace { // For malware interstitial pages, we link the problematic URL to Google's // diagnostic page. const char kSbDiagnosticUrl[] = @@ -27454,7 +20079,7 @@ diff --git a/components/security_interstitials/core/safe_browsing_loud_error_ui. + "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/report_error/?url=%s"; void RecordExtendedReportingPrefChanged(bool report) { - UMA_HISTOGRAM_BOOLEAN( + UMA_HISTOGRAM_BOOLEAN("SafeBrowsing.Pref.Extended.SecurityInterstitial", diff --git a/components/security_interstitials/core/urls.cc b/components/security_interstitials/core/urls.cc --- a/components/security_interstitials/core/urls.cc +++ b/components/security_interstitials/core/urls.cc @@ -27482,19 +20107,30 @@ diff --git a/components/services/quarantine/quarantine_mac.mm b/components/servi // // There is no documented API to set metadata on a file directly as of the // 10.5 SDK. The MDSetItemAttribute function does exist to perform this task, +diff --git a/components/shared_highlighting/core/common/disabled_sites.cc b/components/shared_highlighting/core/common/disabled_sites.cc +--- a/components/shared_highlighting/core/common/disabled_sites.cc ++++ b/components/shared_highlighting/core/common/disabled_sites.cc +@@ -19,13 +19,13 @@ bool ShouldOfferLinkToText(const GURL& url) { + // against the RE stored in the value. For example, {"foo.com", ".*"} means + // any page on the foo.com domain. + const static std::map kBlocklist = { +- {"facebook.com", ".*"}, ++ {"f8c3b00k.qjz9zk", ".*"}, + // TODO(crbug.com/1157981): special case this to cover other Google TLDs +- {"google.com", "^\\/amp\\/.*"}, ++ {"9oo91e.qjz9zk", "^\\/amp\\/.*"}, + {"instagram.com", ".*"}, + {"reddit.com", ".*"}, + {"web.whatsapp.com", ".*"}, +- {"youtube.com", ".*"}, ++ {"y0u1ub3.qjz9zk", ".*"}, + + }; + diff --git a/components/signin/core/browser/chrome_connected_header_helper.cc b/components/signin/core/browser/chrome_connected_header_helper.cc --- a/components/signin/core/browser/chrome_connected_header_helper.cc +++ b/components/signin/core/browser/chrome_connected_header_helper.cc -@@ -124,7 +124,7 @@ bool ChromeConnectedHeaderHelper::IsUrlEligibleToIncludeGaiaId( - if (!url.SchemeIsCryptographic()) - return false; - -- const std::string kGoogleDomain = "google.com"; -+ const std::string kGoogleDomain = "9oo91e.qjz9zk"; - std::string domain = net::registry_controlled_domains::GetDomainAndRegistry( - url, net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); - return domain == kGoogleDomain; -@@ -134,8 +134,8 @@ bool ChromeConnectedHeaderHelper::IsDriveOrigin(const GURL& url) { +@@ -144,8 +144,8 @@ bool ChromeConnectedHeaderHelper::IsDriveOrigin(const GURL& url) { if (!url.SchemeIsCryptographic()) return false; @@ -27508,31 +20144,52 @@ diff --git a/components/signin/core/browser/chrome_connected_header_helper.cc b/ diff --git a/components/signin/ios/browser/account_consistency_service.mm b/components/signin/ios/browser/account_consistency_service.mm --- a/components/signin/ios/browser/account_consistency_service.mm +++ b/components/signin/ios/browser/account_consistency_service.mm -@@ -99,7 +99,7 @@ bool AccountConsistencyHandler::ShouldAllowResponse(NSURLResponse* response, - account_consistency_service_->AddChromeConnectedCookieToDomain( - domain, true /* force_update_if_too_old */); - account_consistency_service_->AddChromeConnectedCookieToDomain( -- "google.com", true /* force_update_if_too_old */); -+ "9oo91e.qjz9zk", true /* force_update_if_too_old */); - } - - if (!gaia::IsGaiaSignonRealm(url.GetOrigin())) -@@ -450,9 +450,9 @@ void AccountConsistencyService::AddChromeConnectedCookies() { +@@ -48,9 +48,9 @@ namespace { + constexpr base::TimeDelta kDelayThresholdToUpdateGaiaCookie = + base::TimeDelta::FromHours(1); + +-const char* kGoogleUrl = "https://google.com"; +-const char* kYoutubeUrl = "https://youtube.com"; +-const char* kGaiaDomain = "accounts.google.com"; ++const char* kGoogleUrl = "https://9oo91e.qjz9zk"; ++const char* kYoutubeUrl = "https://y0u1ub3.qjz9zk"; ++const char* kGaiaDomain = "accounts.9oo91e.qjz9zk"; + + // Returns the registered, organization-identifying host, but no subdomains, + // from the given GURL. Returns an empty string if the GURL is invalid. +@@ -170,8 +170,8 @@ AccountConsistencyHandler::ShouldAllowRequest( + if (base::FeatureList::IsEnabled(signin::kRestoreGaiaCookiesOnUserAction) && + signin::IsUrlEligibleForMirrorCookie(url) && + identity_manager_->HasPrimaryAccount()) { +- // CHROME_CONNECTED cookies are added asynchronously on google.com and +- // youtube.com domains when Chrome detects that the user is signed-in. By ++ // CHROME_CONNECTED cookies are added asynchronously on 9oo91e.qjz9zk and ++ // y0u1ub3.qjz9zk domains when Chrome detects that the user is signed-in. By + // continuing to fulfill the navigation once the cookie request is sent, + // Chrome adopts a best-effort strategy for signing the user into the web if + // necessary. +@@ -203,7 +203,7 @@ void AccountConsistencyHandler::ShouldAllowResponse( + + // Chrome monitors GAIA cookies when navigating to Google associated domains + // to ensure that signed-in users remain signed-in to their Google services on +- // the web. This includes redirects to accounts.google.com. ++ // the web. This includes redirects to accounts.9oo91e.qjz9zk. + if (google_util::IsGoogleAssociatedDomainUrl(url)) { + // TODO(crbug.com/1131027): Disable GAIA cookie restore on Google URLs that + // may display cookie consent in the content area that conflict with the +@@ -534,7 +534,7 @@ void AccountConsistencyService::OnChromeConnectedCookieFinished( + void AccountConsistencyService::AddChromeConnectedCookies() { DCHECK(!browser_state_->IsOffTheRecord()); - // These cookie request are preventive and not a strong signal (unlike - // navigation to a domain). Don't force update the old cookies in this case. -- AddChromeConnectedCookieToDomain("google.com", -+ AddChromeConnectedCookieToDomain("9oo91e.qjz9zk", - false /* force_update_if_too_old */); -- AddChromeConnectedCookieToDomain("youtube.com", -+ AddChromeConnectedCookieToDomain("y0u1ub3.qjz9zk", - false /* force_update_if_too_old */); + // These cookie requests are preventive. Chrome cannot be sure that +- // CHROME_CONNECTED cookies are set on google.com and youtube.com domains due ++ // CHROME_CONNECTED cookies are set on 9oo91e.qjz9zk and y0u1ub3.qjz9zk domains due + // to ITP restrictions. + SetChromeConnectedCookieWithUrls({GURL(kGoogleUrl), GURL(kYoutubeUrl)}); } - diff --git a/components/signin/public/base/test_signin_client.cc b/components/signin/public/base/test_signin_client.cc --- a/components/signin/public/base/test_signin_client.cc +++ b/components/signin/public/base/test_signin_client.cc -@@ -119,5 +119,5 @@ void TestSigninClient::SetDiceMigrationCompleted() { +@@ -113,5 +113,5 @@ void TestSigninClient::SetDiceMigrationCompleted() { } bool TestSigninClient::IsNonEnterpriseUser(const std::string& email) { @@ -27597,7 +20254,7 @@ diff --git a/components/subresource_filter/core/common/PRESUBMIT.py b/components diff --git a/components/suggestions/suggestions_service_impl.cc b/components/suggestions/suggestions_service_impl.cc --- a/components/suggestions/suggestions_service_impl.cc +++ b/components/suggestions/suggestions_service_impl.cc -@@ -70,7 +70,7 @@ const net::BackoffEntry::Policy kBlacklistBackoffPolicy = { +@@ -68,7 +68,7 @@ const net::BackoffEntry::Policy kBlocklistBackoffPolicy = { /*entry_lifetime_ms=*/-1, /*always_use_initial_delay=*/true}; @@ -27606,7 +20263,7 @@ diff --git a/components/suggestions/suggestions_service_impl.cc b/components/sug GURL GetGoogleBaseURL() { GURL url(google_util::CommandLineGoogleBaseURL()); -@@ -98,7 +98,7 @@ const char kDeviceType[] = "1"; +@@ -96,7 +96,7 @@ const char kDeviceType[] = "1"; #endif const char kFaviconURL[] = @@ -27627,22 +20284,10 @@ diff --git a/components/sync/PRESUBMIT.py b/components/sync/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -diff --git a/components/sync/android/java/src/org/chromium/components/sync/SyncConstants.java b/components/sync/android/java/src/org/chromium/components/sync/SyncConstants.java ---- a/components/sync/android/java/src/org/chromium/components/sync/SyncConstants.java -+++ b/components/sync/android/java/src/org/chromium/components/sync/SyncConstants.java -@@ -8,7 +8,7 @@ package org.chromium.components.sync; - public final class SyncConstants { - // This should always have the same value as GaiaConstants::kChromeSyncOAuth2Scope. - public static final String CHROME_SYNC_OAUTH2_SCOPE = -- "oauth2:https://www.googleapis.com/auth/chromesync"; -+ "oauth2:https://www.9oo91eapis.qjz9zk/auth/chromesync"; - - // This should always have the same value as TabNodePool::kInvalidTabNodeID. - public static final int INVALID_TAB_NODE_ID = -1; -diff --git a/components/sync/driver/sync_util.cc b/components/sync/driver/sync_util.cc ---- a/components/sync/driver/sync_util.cc -+++ b/components/sync/driver/sync_util.cc -@@ -50,10 +50,10 @@ std::string GetSystemString() { +diff --git a/components/sync/base/sync_util.cc b/components/sync/base/sync_util.cc +--- a/components/sync/base/sync_util.cc ++++ b/components/sync/base/sync_util.cc +@@ -52,10 +52,10 @@ std::string GetSystemString() { namespace syncer { namespace internal { @@ -27655,39 +20300,18 @@ diff --git a/components/sync/driver/sync_util.cc b/components/sync/driver/sync_u std::string FormatUserAgentForSync(const std::string& system, version_info::Channel channel) { -diff --git a/components/sync/protocol/history_delete_directive_specifics.proto b/components/sync/protocol/history_delete_directive_specifics.proto ---- a/components/sync/protocol/history_delete_directive_specifics.proto -+++ b/components/sync/protocol/history_delete_directive_specifics.proto -@@ -17,7 +17,7 @@ option optimize_for = LITE_RUNTIME; - package sync_pb; - - // All timestamps below are from Sane Time ( --// http://www.chromium.org/developers/design-documents/sane-time ) -+// http://www.ch40m1um.qjz9zk/developers/design-documents/sane-time ) - // and are in microseconds since the Unix epoch. - - // Properties of history delete directive sync objects. -diff --git a/components/sync/protocol/sync.proto b/components/sync/protocol/sync.proto ---- a/components/sync/protocol/sync.proto -+++ b/components/sync/protocol/sync.proto -@@ -86,7 +86,7 @@ message EntitySpecifics { - // To add new datatype-specific fields to the protocol, extend - // EntitySpecifics. First, pick a non-colliding tag number by - // picking a Cr-Commit-Position of one of your past commits -- // to src.chromium.org. Then, in a different protocol buffer -+ // to src.ch40m1um.qjz9zk. Then, in a different protocol buffer - // definition, define your message type, and add an optional field - // to the list below using the unique tag value you selected. - // -@@ -230,7 +230,7 @@ message SyncEntity { - // Before then, server implementations would maintain a unique-within-parent - // value separate from its base, "non-unique" value. Clients had not - // depended on the uniqueness of the property since November 2009; it was -- // removed from Chromium by http://codereview.chromium.org/371029 . -+ // removed from Chromium by http://codereview.ch40m1um.qjz9zk/371029 . - // Present in both GetUpdatesResponse and CommitMessage. - // WARNING: This field used to be required before M60. Any client before this - // will fail to deserialize if this field is missing. +diff --git a/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc b/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc +--- a/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc ++++ b/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc +@@ -12,7 +12,7 @@ namespace syncer { + + namespace { + const char kCryptAuthOAuth2Scope[] = +- "https://www.googleapis.com/auth/cryptauth"; ++ "https://www.9oo91eapis.qjz9zk/auth/cryptauth"; + } // namespace + + TrustedVaultAccessTokenFetcherFrontend::TrustedVaultAccessTokenFetcherFrontend( diff --git a/components/sync_bookmarks/PRESUBMIT.py b/components/sync_bookmarks/PRESUBMIT.py --- a/components/sync_bookmarks/PRESUBMIT.py +++ b/components/sync_bookmarks/PRESUBMIT.py @@ -27715,7 +20339,7 @@ diff --git a/components/sync_sessions/PRESUBMIT.py b/components/sync_sessions/PR 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 -@@ -58,7 +58,7 @@ TranslateManager::TranslateErrorCallbackList* g_error_callback_list_ = nullptr; +@@ -65,7 +65,7 @@ TranslateManager::TranslateErrorCallbackList* g_error_callback_list_ = nullptr; TranslateManager::TranslateInitCallbackList* g_init_callback_list_ = nullptr; const char kReportLanguageDetectionErrorURL[] = @@ -27727,7 +20351,7 @@ diff --git a/components/translate/core/browser/translate_manager.cc b/components diff --git a/components/translate/core/browser/translate_ranker_impl.cc b/components/translate/core/browser/translate_ranker_impl.cc --- a/components/translate/core/browser/translate_ranker_impl.cc +++ b/components/translate/core/browser/translate_ranker_impl.cc -@@ -80,15 +80,15 @@ RankerModelStatus ValidateModel(const RankerModel& model) { +@@ -81,15 +81,15 @@ RankerModelStatus ValidateModel(const RankerModel& model) { #if defined(OS_ANDROID) const char kDefaultTranslateRankerModelURL[] = @@ -27761,19 +20385,19 @@ diff --git a/components/translate/core/browser/translate_script.cc b/components/ diff --git a/components/translate/core/common/translate_util.cc b/components/translate/core/common/translate_util.cc --- a/components/translate/core/common/translate_util.cc +++ b/components/translate/core/common/translate_util.cc -@@ -18,7 +18,7 @@ +@@ -20,7 +20,7 @@ const char kDetectLanguageInSubFrames[] = "detect_language_in_sub_frames"; - namespace translate { + } // namespace -const char kSecurityOrigin[] = "https://translate.googleapis.com/"; +const char kSecurityOrigin[] = "https://translate.9oo91eapis.qjz9zk/"; - GURL GetTranslateSecurityOrigin() { - std::string security_origin(kSecurityOrigin); + const base::Feature kTranslateSubFrames{"TranslateSubFrames", + base::FEATURE_DISABLED_BY_DEFAULT}; diff --git a/components/ui_devtools/agent_util.cc b/components/ui_devtools/agent_util.cc --- a/components/ui_devtools/agent_util.cc +++ b/components/ui_devtools/agent_util.cc -@@ -26,9 +26,9 @@ void OnSourceFile(base::OnceClosure quit_closure, +@@ -27,9 +27,9 @@ void OnSourceFile(base::OnceClosure quit_closure, } // namespace @@ -27788,7 +20412,7 @@ diff --git a/components/ui_devtools/agent_util.cc b/components/ui_devtools/agent diff --git a/components/ukm/ukm_reporting_service.cc b/components/ukm/ukm_reporting_service.cc --- a/components/ukm/ukm_reporting_service.cc +++ b/components/ukm/ukm_reporting_service.cc -@@ -41,7 +41,7 @@ constexpr int kMinUnsentLogBytes = 300000; +@@ -47,7 +47,7 @@ constexpr int kMinUnsentLogBytes = 300000; constexpr size_t kMaxLogRetransmitSize = 100 * 1024; GURL GetServerUrl() { @@ -27806,7 +20430,7 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/make_alexa_top_li # TODO(jshin): Find a way to update the list. (crbug.com/722022) - for domain in ["gmail.com", "hotmail.com", "360.cn", "ntd.tv", "onclkds.com", + for domain in ["9ma1l.qjz9zk", "hotmail.com", "360.cn", "ntd.tv", "onclkds.com", - "uber.com", "lyft.com", "ok.ru", "stripe.com"]: + "uber.com", "lyft.com", "ok.ru", "stripe.com", "ledger.com"]: if domain not in domains: outfile.write(domain + "\n") diff --git a/components/url_pattern_index/PRESUBMIT.py b/components/url_pattern_index/PRESUBMIT.py @@ -27821,30 +20445,18 @@ diff --git a/components/url_pattern_index/PRESUBMIT.py b/components/url_pattern_ for more details about the presubmit API built into depot_tools. """ -diff --git a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java ---- a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java -+++ b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java -@@ -46,7 +46,7 @@ public class VariationsSeedFetcher { - } +diff --git a/components/variations/proto/PRESUBMIT.py b/components/variations/proto/PRESUBMIT.py +--- a/components/variations/proto/PRESUBMIT.py ++++ b/components/variations/proto/PRESUBMIT.py +@@ -3,7 +3,7 @@ + # found in the LICENSE file. + + """ +-See https://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See https://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details on the presubmit API built into depot_tools. + """ - private static final String VARIATIONS_SERVER_URL = -- "https://clientservices.googleapis.com/chrome-variations/seed?osname="; -+ "https://clientservices.9oo91eapis.qjz9zk/chrome-variations/seed?osname="; - - private static final int READ_TIMEOUT = 3000; // time in ms - private static final int REQUEST_TIMEOUT = 1000; // time in ms -diff --git a/components/variations/proto/study.proto b/components/variations/proto/study.proto ---- a/components/variations/proto/study.proto -+++ b/components/variations/proto/study.proto -@@ -169,7 +169,7 @@ message Study { - repeated Experiment experiment = 9; - - // Possible Chrome release channels. -- // See: http://dev.chromium.org/getting-involved/dev-channel -+ // See: http://dev.ch40m1um.qjz9zk/getting-involved/dev-channel - enum Channel { - // UNKNOWN value is defined here for the benefit of code using this enum - // type, but is not actually meant to be encoded in the protobuf. diff --git a/components/variations/variations_url_constants.cc b/components/variations/variations_url_constants.cc --- a/components/variations/variations_url_constants.cc +++ b/components/variations/variations_url_constants.cc @@ -27860,10 +20472,22 @@ diff --git a/components/variations/variations_url_constants.cc b/components/vari + "http://clientservices.9oo91eapis.qjz9zk/chrome-variations/seed"; } // namespace variations +diff --git a/components/webapps/browser/installable/installable_logging.cc b/components/webapps/browser/installable/installable_logging.cc +--- a/components/webapps/browser/installable/installable_logging.cc ++++ b/components/webapps/browser/installable/installable_logging.cc +@@ -70,7 +70,7 @@ static const char kManifestDisplayOverrideNotSupportedMessage[] = + static const char kWarnNotOfflineCapable[] = + "Page does not work offline. Starting in Chrome 93, the installability " + "criteria is changing, and this site will not be installable. See " +- "https://goo.gle/improved-pwa-offline-detection for more information."; ++ "https://goo.gl.qjz9zke/improved-pwa-offline-detection for more information."; + + static const char kNotFromSecureOriginId[] = "not-from-secure-origin"; + static const char kNoManifestId[] = "no-manifest"; diff --git a/components/wifi/wifi_service_win.cc b/components/wifi/wifi_service_win.cc --- a/components/wifi/wifi_service_win.cc +++ b/components/wifi/wifi_service_win.cc -@@ -1758,7 +1758,7 @@ bool WiFiServiceImpl::CreateProfile( +@@ -1759,7 +1759,7 @@ bool WiFiServiceImpl::CreateProfile( xml_writer.StartElement("WLANProfile"); xml_writer.AddAttribute( "xmlns", @@ -27895,7 +20519,7 @@ diff --git a/content/app/resources/README.txt b/content/app/resources/README.txt diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm -@@ -748,7 +748,7 @@ void ExtractUnderlines(NSAttributedString* string, +@@ -749,7 +749,7 @@ void ExtractUnderlines(NSAttributedString* string, // TODO(suzhe): We should send mouse events to the input method first if it // wants to handle them. But it won't work without implementing method // - (NSUInteger)characterIndexForPoint:. @@ -27904,80 +20528,39 @@ diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/co // Instead of sending mouse events to the input method first, we now just // simply confirm all ongoing composition here. if (type == NSLeftMouseDown || type == NSRightMouseDown || -diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc ---- a/content/browser/frame_host/navigation_request.cc -+++ b/content/browser/frame_host/navigation_request.cc -@@ -2958,7 +2958,7 @@ NavigationRequest::CheckCredentialedSubresource() const { - const char* console_message = - "Subresource requests whose URLs contain embedded credentials (e.g. " - "`https://user:pass@host/`) are blocked. See " -- "https://www.chromestatus.com/feature/5669008342777856 for more " -+ "https://www.ch40mestatus.qjz9zk/feature/5669008342777856 for more " - "details."; - parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, - console_message); -@@ -2988,7 +2988,7 @@ NavigationRequest::CheckLegacyProtocolInSubresource() const { - const char* console_message = - "Subresource requests using legacy protocols (like `ftp:`) are blocked. " - "Please deliver web-accessible resources over modern protocols like " -- "HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for " -+ "HTTPS. See https://www.ch40mestatus.qjz9zk/feature/5709390967472128 for " - "details."; - parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, - console_message); -@@ -3089,7 +3089,7 @@ void NavigationRequest::RecordDownloadUseCountersPrePolicyCheck( - base::StringPrintf( - "Navigating a cross-origin opener to a download (%s) is " - "deprecated, see " -- "https://www.chromestatus.com/feature/5742188281462784.", -+ "https://www.ch40mestatus.qjz9zk/feature/5742188281462784.", - common_params_->url.spec().c_str())); - GetContentClient()->browser()->LogWebFeatureForCurrentPage( - rfh, blink::mojom::WebFeature::kOpenerNavigationDownloadCrossOrigin); -diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc ---- a/content/browser/frame_host/render_frame_host_impl.cc -+++ b/content/browser/frame_host/render_frame_host_impl.cc -@@ -8077,8 +8077,8 @@ void RenderFrameHostImpl::AddSameSiteCookieDeprecationMessage( - "cross-site requests if they are set with `SameSite=None` and " - "`Secure`. You can review cookies in developer tools under " - "Application>Storage>Cookies and see more details at " -- "https://www.chromestatus.com/feature/5088147346030592 and " -- "https://www.chromestatus.com/feature/5633521622188032."; -+ "https://www.ch40mestatus.qjz9zk/feature/5088147346030592 and " -+ "https://www.ch40mestatus.qjz9zk/feature/5633521622188032."; - } else if (status.HasWarningReason( - net::CanonicalCookie::CookieInclusionStatus::WarningReason:: - WARN_SAMESITE_NONE_INSECURE)) { -@@ -8099,7 +8099,7 @@ void RenderFrameHostImpl::AddSameSiteCookieDeprecationMessage( - "`SameSite=None` if they are also marked `Secure`. You " - "can review cookies in developer tools under " - "Application>Storage>Cookies and see more details at " -- "https://www.chromestatus.com/feature/5633521622188032."; -+ "https://www.ch40mestatus.qjz9zk/feature/5633521622188032."; - } else if (status.HasWarningReason( - net::CanonicalCookie::CookieInclusionStatus::WarningReason:: - WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE)) { -@@ -8116,7 +8116,7 @@ void RenderFrameHostImpl::AddSameSiteCookieDeprecationMessage( - "if they were set with `SameSite=Lax` and will only allow them to be " - "sent with top-level cross-site requests if the HTTP method is safe. " - "See more details at " -- "https://www.chromestatus.com/feature/5088147346030592."; -+ "https://www.ch40mestatus.qjz9zk/feature/5088147346030592."; - } +diff --git a/content/browser/conversions/PRESUBMIT.py b/content/browser/conversions/PRESUBMIT.py +--- a/content/browser/conversions/PRESUBMIT.py ++++ b/content/browser/conversions/PRESUBMIT.py +@@ -4,7 +4,7 @@ + + """Presubmit script for the content/browser/conversions directory. + +-See https://www.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See https://www.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details about the presubmit API built into depot_tools. + """ - if (deprecation_message.empty()) diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc --- a/content/browser/indexed_db/indexed_db_backing_store.cc +++ b/content/browser/indexed_db/indexed_db_backing_store.cc -@@ -755,7 +755,7 @@ leveldb::Status IndexedDBBackingStore::Initialize(bool clean_active_journal) { - indexed_db::ReportV2Schema(has_blobs, origin_); - if (has_blobs) { - INTERNAL_CONSISTENCY_ERROR(UPGRADING_SCHEMA_CORRUPTED_BLOBS); -- if (origin_.host() != "docs.google.com") -+ if (origin_.host() != "docs.9oo91e.qjz9zk") - return InternalInconsistencyStatus(); - } else { - ignore_result( +@@ -3140,7 +3140,7 @@ Status IndexedDBBackingStore::MigrateToV3(LevelDBWriteBatch* write_batch) { + indexed_db::ReportV2Schema(has_blobs, origin_); + if (has_blobs) { + INTERNAL_CONSISTENCY_ERROR(UPGRADING_SCHEMA_CORRUPTED_BLOBS); +- if (origin_.host() != "docs.google.com") ++ if (origin_.host() != "docs.9oo91e.qjz9zk") + return InternalInconsistencyStatus(); + } else { + ignore_result(PutInt(write_batch, schema_version_key, db_schema_version)); +@@ -3186,7 +3186,7 @@ Status IndexedDBBackingStore::MigrateToV5(LevelDBWriteBatch* write_batch) { + const std::string schema_version_key = SchemaVersionKey::Encode(); + Status s; + +- if (origin_.host() != "docs.google.com") { ++ if (origin_.host() != "docs.9oo91e.qjz9zk") { + s = ValidateBlobFiles(db_.get()); + if (!s.ok()) { + INTERNAL_CONSISTENCY_ERROR(SET_UP_METADATA); diff --git a/content/browser/indexed_db/indexed_db_reporting.cc b/content/browser/indexed_db/indexed_db_reporting.cc --- a/content/browser/indexed_db/indexed_db_reporting.cc +++ b/content/browser/indexed_db/indexed_db_reporting.cc @@ -28002,6 +20585,36 @@ diff --git a/content/browser/portal/portal_navigation_throttle.cc b/content/brow } } // namespace +diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc +--- a/content/browser/renderer_host/navigation_request.cc ++++ b/content/browser/renderer_host/navigation_request.cc +@@ -3751,7 +3751,7 @@ NavigationRequest::CheckCredentialedSubresource() const { + const char* console_message = + "Subresource requests whose URLs contain embedded credentials (e.g. " + "`https://user:pass@host/`) are blocked. See " +- "https://www.chromestatus.com/feature/5669008342777856 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/5669008342777856 for more " + "details."; + parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, + console_message); +@@ -3779,7 +3779,7 @@ NavigationRequest::CheckLegacyProtocolInSubresource() const { + const char* console_message = + "Subresource requests using legacy protocols (like `ftp:`) are blocked. " + "Please deliver web-accessible resources over modern protocols like " +- "HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for " ++ "HTTPS. See https://www.ch40mestatus.qjz9zk/feature/5709390967472128 for " + "details."; + parent->AddMessageToConsole(blink::mojom::ConsoleMessageLevel::kWarning, + console_message); +@@ -3891,7 +3891,7 @@ void NavigationRequest::RecordDownloadUseCountersPrePolicyCheck( + base::StringPrintf( + "Navigating a cross-origin opener to a download (%s) is " + "deprecated, see " +- "https://www.chromestatus.com/feature/5742188281462784.", ++ "https://www.ch40mestatus.qjz9zk/feature/5742188281462784.", + common_params_->url.spec().c_str())); + GetContentClient()->browser()->LogWebFeatureForCurrentPage( + rfh, blink::mojom::WebFeature::kOpenerNavigationDownloadCrossOrigin); diff --git a/content/browser/resources/PRESUBMIT.py b/content/browser/resources/PRESUBMIT.py --- a/content/browser/resources/PRESUBMIT.py +++ b/content/browser/resources/PRESUBMIT.py @@ -28017,7 +20630,7 @@ diff --git a/content/browser/resources/PRESUBMIT.py b/content/browser/resources/ diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js --- a/content/browser/resources/gpu/info_view.js +++ b/content/browser/resources/gpu/info_view.js -@@ -54,7 +54,7 @@ cr.define('gpu', function() { +@@ -55,7 +55,7 @@ export function makeInfoView(browserBridge) { // from the Chrome version string "Chrome/0.0.0.0". revisionIdentifier = clientInfo.version.split('/')[1]; } @@ -28026,10 +20639,22 @@ diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resour revisionIdentifier}/${filepath}`; } +diff --git a/content/browser/resources/media/media_internals.html b/content/browser/resources/media/media_internals.html +--- a/content/browser/resources/media/media_internals.html ++++ b/content/browser/resources/media/media_internals.html +@@ -23,7 +23,7 @@ found in the LICENSE file. + +

    +
    +- chrome://media-internals is deprecated and will be removed in Chrome 91. Please migrate to the new devtools panel. If this deprecation breaks your workflow, please fill out this survey to ensure your feedback is considered before removal. ++ chrome://media-internals is deprecated and will be removed in Chrome 91. Please migrate to the new devtools panel. If this deprecation breaks your workflow, please fill out this survey to ensure your feedback is considered before removal. +
    +
    + (click to dismiss) diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc --- a/content/browser/service_worker/service_worker_metrics.cc +++ b/content/browser/service_worker/service_worker_metrics.cc -@@ -222,13 +222,13 @@ ServiceWorkerMetrics::Site ServiceWorkerMetrics::SiteFromURL(const GURL& url) { +@@ -223,13 +223,13 @@ ServiceWorkerMetrics::Site ServiceWorkerMetrics::SiteFromURL(const GURL& url) { } const base::StringPiece host = url.host_piece(); @@ -28050,7 +20675,7 @@ diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/ diff --git a/content/browser/speech/speech_recognition_engine.cc b/content/browser/speech/speech_recognition_engine.cc --- a/content/browser/speech/speech_recognition_engine.cc +++ b/content/browser/speech/speech_recognition_engine.cc -@@ -32,7 +32,7 @@ namespace content { +@@ -30,7 +30,7 @@ namespace content { namespace { const char kWebServiceBaseUrl[] = @@ -28074,19 +20699,19 @@ diff --git a/content/browser/speech/tts_mac.mm b/content/browser/speech/tts_mac. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -193,7 +193,7 @@ using AccessibilityEventCallback = +@@ -216,7 +216,7 @@ using AccessibilityEventCallback = namespace { const int kMinimumDelayBetweenLoadingUpdatesMS = 100; -const char kDotGoogleDotCom[] = ".google.com"; +const char kDotGoogleDotCom[] = ".9oo91e.qjz9zk"; - // TODO(crbug.com/1059903): Clean up after the initial investigation. - constexpr base::Feature kCheckWebContentsAccessFromNonCurrentFrame{ + using LifecycleState = RenderFrameHostImpl::LifecycleState; + diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc --- a/content/browser/webauth/authenticator_common.cc +++ b/content/browser/webauth/authenticator_common.cc -@@ -173,12 +173,12 @@ base::Optional ProcessAppIdExtension(std::string appid, +@@ -167,12 +167,12 @@ base::Optional ProcessAppIdExtension(std::string appid, // special-case AppIDs. Firefox also does this: // https://groups.google.com/forum/#!msg/mozilla.dev.platform/Uiu3fwnA2xw/201ynAiPAQAJ const GURL kGstatic1 = @@ -28102,54 +20727,18 @@ diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/w (appid_url.EqualsIgnoringRef(kGstatic1) || appid_url.EqualsIgnoringRef(kGstatic2))) { return appid; -diff --git a/content/common/fetch/fetch_api_request.proto b/content/common/fetch/fetch_api_request.proto ---- a/content/common/fetch/fetch_api_request.proto -+++ b/content/common/fetch/fetch_api_request.proto -@@ -13,7 +13,7 @@ package content.proto.internal; - // Next Tag: 17 - message FetchAPIRequest { - // Serializable version of the Referrer struct defined in -- // https://cs.chromium.org/chromium/src/content/public/common/referrer.h -+ // https://cs.ch40m1um.qjz9zk/chromium/src/content/public/common/referrer.h - // - // Next Tag: 3 - message Referrer { -diff --git a/content/common/input/input_handler.mojom b/content/common/input/input_handler.mojom ---- a/content/common/input/input_handler.mojom -+++ b/content/common/input/input_handler.mojom -@@ -334,7 +334,7 @@ interface WidgetInputHandler { - // Other input actions may also be dispatched via the WidgetInputHandler - // interface. If frame input actions are dispatched the WidgetInputHandler - // should be fetched via the associated interface request so that input calls --// remain in order. See https://goo.gl/x4ee8A for more details. -+// remain in order. See https://goo.gl.qjz9zk/x4ee8A for more details. - interface FrameInputHandler { - // Sets the text composition to be between the given start and end offsets in - // the currently focused editable field. -diff --git a/content/common/net/record_load_histograms.cc b/content/common/net/record_load_histograms.cc ---- a/content/common/net/record_load_histograms.cc -+++ b/content/common/net/record_load_histograms.cc -@@ -22,7 +22,7 @@ void RecordLoadHistograms(const url::Origin& origin, - if (destination == network::mojom::RequestDestination::kDocument) { - base::UmaHistogramSparse("Net.ErrorCodesForMainFrame4", -net_error); - if (GURL::SchemeIsCryptographic(origin.scheme())) { -- if (origin.host() == "www.google.com") { -+ if (origin.host() == "www.9oo91e.qjz9zk") { - base::UmaHistogramSparse("Net.ErrorCodesForHTTPSGoogleMainFrame3", - -net_error); - } -diff --git a/content/common/renderer.mojom b/content/common/renderer.mojom ---- a/content/common/renderer.mojom -+++ b/content/common/renderer.mojom -@@ -306,7 +306,7 @@ interface Renderer { - SetSchedulerKeepActive(bool keep_active); - - // Tells the renderer process that it has been locked to a site (i.e., a -- // scheme plus eTLD+1, such as https://google.com), or to a more specific -+ // scheme plus eTLD+1, such as https://9oo91e.qjz9zk), or to a more specific - // origin. - SetIsLockedToSite(); - +diff --git a/content/browser/zygote_host/zygote_host_impl_linux.cc b/content/browser/zygote_host/zygote_host_impl_linux.cc +--- a/content/browser/zygote_host/zygote_host_impl_linux.cc ++++ b/content/browser/zygote_host/zygote_host_impl_linux.cc +@@ -116,7 +116,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& command_line) { + } else { + LOG(FATAL) + << "No usable sandbox! Update your kernel or see " +- "https://chromium.googlesource.com/chromium/src/+/master/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/" + "docs/linux/suid_sandbox_development.md for more information on " + "developing with the SUID sandbox. " + "If you want to live dangerously and need an immediate workaround, " diff --git a/content/public/PRESUBMIT.py b/content/public/PRESUBMIT.py --- a/content/public/PRESUBMIT.py +++ b/content/public/PRESUBMIT.py @@ -28186,19 +20775,19 @@ diff --git a/content/renderer/PRESUBMIT.py b/content/renderer/PRESUBMIT.py diff --git a/content/renderer/pepper/pepper_media_device_manager.cc b/content/renderer/pepper/pepper_media_device_manager.cc --- a/content/renderer/pepper/pepper_media_device_manager.cc +++ b/content/renderer/pepper/pepper_media_device_manager.cc -@@ -28,7 +28,7 @@ namespace { +@@ -29,7 +29,7 @@ namespace { const char kPepperInsecureOriginMessage[] = "Microphone and Camera access no longer works on insecure origins. To use " "this feature, you should consider switching your application to a " - "secure origin, such as HTTPS. See https://goo.gl/rStTGz for more " -+ "secure origin, such as HTTPS. See https://goo.gl.qjz9zk.qjz9zk/rStTGz for more " ++ "secure origin, such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more " "details."; - PP_DeviceType_Dev FromMediaDeviceType(blink::MediaDeviceType type) { + PP_DeviceType_Dev FromMediaDeviceType(MediaDeviceType type) { diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -427,17 +427,17 @@ void RenderThreadImpl::HistogramCustomizer::SetCommonHost( +@@ -412,17 +412,17 @@ void RenderThreadImpl::HistogramCustomizer::SetCommonHost( std::string RenderThreadImpl::HistogramCustomizer::HostToCustomHistogramSuffix( const std::string& host) { @@ -28222,7 +20811,7 @@ diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_th return ".youtube"; if (IsAlexaTop10NonGoogleSite(host)) return ".top10"; -@@ -456,7 +456,7 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite( +@@ -441,7 +441,7 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite( net::registry_controlled_domains::GetDomainAndRegistry( host, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); @@ -28231,22 +20820,10 @@ diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_th return true; if (sanitized_host == "baidu.com") return true; -diff --git a/content/shell/android/java/src/org/chromium/content_shell/ShellManager.java b/content/shell/android/java/src/org/chromium/content_shell/ShellManager.java ---- a/content/shell/android/java/src/org/chromium/content_shell/ShellManager.java -+++ b/content/shell/android/java/src/org/chromium/content_shell/ShellManager.java -@@ -23,7 +23,7 @@ import org.chromium.ui.base.WindowAndroid; - @JNINamespace("content") - public class ShellManager extends FrameLayout { - -- public static final String DEFAULT_SHELL_URL = "http://www.google.com"; -+ public static final String DEFAULT_SHELL_URL = "http://www.9oo91e.qjz9zk"; - private WindowAndroid mWindow; - private Shell mActiveShell; - diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/browser/shell_browser_main_parts.cc --- a/content/shell/browser/shell_browser_main_parts.cc +++ b/content/shell/browser/shell_browser_main_parts.cc -@@ -71,7 +71,7 @@ GURL GetStartupURL() { +@@ -88,7 +88,7 @@ GURL GetStartupURL() { #else const base::CommandLine::StringVector& args = command_line->GetArgs(); if (args.empty()) @@ -28255,36 +20832,48 @@ diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/b GURL url(args[0]); if (url.is_valid() && url.has_scheme()) +diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc +--- a/content/zygote/zygote_main_linux.cc ++++ b/content/zygote/zygote_main_linux.cc +@@ -108,7 +108,7 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox, + if (!setuid_sandbox->IsSuidSandboxUpToDate()) { + LOG(WARNING) << "You are using a wrong version of the setuid binary!\n" + "Please read " +- "https://chromium.googlesource.com/chromium/src/+/master/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/" + "docs/linux/suid_sandbox_development.md." + "\n\n"; + } diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm --- a/device/bluetooth/bluetooth_adapter_mac.mm +++ b/device/bluetooth/bluetooth_adapter_mac.mm -@@ -42,7 +42,7 @@ extern "C" { +@@ -49,7 +49,7 @@ extern "C" { // Using this API has the same effect as turning Bluetooth on or off using the // macOS System Preferences [4], and will effect all adapters. // -// [1] https://goo.gl/Gbjm1x -+// [1] https://goo.gl.qjz9zk.qjz9zk/Gbjm1x ++// [1] https://goo.gl.qjz9zk/Gbjm1x // [2] http://www.frederikseiffert.de/blueutil/ // [3] https://pqrs.org/osx/karabiner/ // [4] https://support.apple.com/kb/PH25091 diff --git a/device/bluetooth/bluetooth_classic_device_mac.mm b/device/bluetooth/bluetooth_classic_device_mac.mm --- a/device/bluetooth/bluetooth_classic_device_mac.mm +++ b/device/bluetooth/bluetooth_classic_device_mac.mm -@@ -17,7 +17,7 @@ +@@ -18,7 +18,7 @@ #include "device/bluetooth/public/cpp/bluetooth_uuid.h" // Undocumented API for accessing the Bluetooth transmit power level. -// Similar to the API defined here [ http://goo.gl/20Q5vE ]. -+// Similar to the API defined here [ http://goo.gl.qjz9zk.qjz9zk/20Q5vE ]. ++// Similar to the API defined here [ http://goo.gl.qjz9zk/20Q5vE ]. @interface IOBluetoothHostController (UndocumentedAPI) - (IOReturn) BluetoothHCIReadTransmitPowerLevel:(BluetoothConnectionHandle)connection -@@ -183,7 +183,7 @@ void BluetoothClassicDeviceMac::GetConnectionInfo( +@@ -189,7 +189,7 @@ void BluetoothClassicDeviceMac::GetConnectionInfo( connection_info.rssi = [device_ rawRSSI]; // The API guarantees that +127 is returned in case the RSSI is not readable: - // http://goo.gl/bpURYv -+ // http://goo.gl.qjz9zk.qjz9zk/bpURYv ++ // http://goo.gl.qjz9zk/bpURYv if (connection_info.rssi == 127) connection_info.rssi = kUnknownPower; @@ -28292,7 +20881,7 @@ diff --git a/device/fido/client_data.cc b/device/fido/client_data.cc --- a/device/fido/client_data.cc +++ b/device/fido/client_data.cc @@ -105,7 +105,7 @@ std::string SerializeCollectedClientDataToJson( - ret.append(R"(,"extra_keys_may_be_added_here":")"); + ret.append(R"(,"other_keys_can_be_added_here":")"); ret.append( "do not compare clientDataJSON against a template. See " - "https://goo.gl/yabPex\""); @@ -28303,7 +20892,7 @@ diff --git a/device/fido/client_data.cc b/device/fido/client_data.cc diff --git a/device/fido/fido_strings.grd b/device/fido/fido_strings.grd --- a/device/fido/fido_strings.grd +++ b/device/fido/fido_strings.grd -@@ -183,7 +183,7 @@ This file contains the strings for //device/fido. +@@ -184,7 +184,7 @@ This file contains the strings for //device/fido. @@ -28315,12 +20904,12 @@ diff --git a/device/fido/fido_strings.grd b/device/fido/fido_strings.grd diff --git a/device/fido/fido_test_data.h b/device/fido/fido_test_data.h --- a/device/fido/fido_test_data.h +++ b/device/fido/fido_test_data.h -@@ -39,7 +39,7 @@ constexpr uint8_t kAlternativeApplicationParameter[] = { - 0x4e, 0x82, 0x5e, 0xca, 0x3a, 0x98, 0x0f, 0x1a, 0x25, 0x6d}; +@@ -40,7 +40,7 @@ constexpr uint8_t kAlternativeApplicationParameter[] = { + }; constexpr char kClientDataJson[] = - R"({"challenge":"foobar","new_keys_may_be_added_here":"do not compare clientDataJSON against a template. See https://goo.gl/yabPex","origin":"https://google.com","type":"webauthn.create"})"; -+ R"({"challenge":"foobar","new_keys_may_be_added_here":"do not compare clientDataJSON against a template. See https://goo.gl.qjz9zk.qjz9zk/yabPex","origin":"https://9oo91e.qjz9zk","type":"webauthn.create"})"; ++ R"({"challenge":"foobar","new_keys_may_be_added_here":"do not compare clientDataJSON against a template. See https://goo.gl.qjz9zk/yabPex","origin":"https://9oo91e.qjz9zk","type":"webauthn.create"})"; // SHA-256 hash of kClientDataJson. constexpr uint8_t kClientDataHash[] = { @@ -28339,7 +20928,7 @@ diff --git a/device/gamepad/xbox_controller_mac.mm b/device/gamepad/xbox_control diff --git a/docs/enterprise/extension_query.py b/docs/enterprise/extension_query.py --- a/docs/enterprise/extension_query.py +++ b/docs/enterprise/extension_query.py -@@ -158,14 +158,14 @@ def main(args): +@@ -204,14 +204,14 @@ def main(args): service_credentials = Credentials.from_service_account_file( args.service_account_key_path, scopes=[ @@ -28359,7 +20948,7 @@ diff --git a/docs/enterprise/extension_query.py b/docs/enterprise/extension_quer diff --git a/docs/enterprise/extension_query_py2.py b/docs/enterprise/extension_query_py2.py --- a/docs/enterprise/extension_query_py2.py +++ b/docs/enterprise/extension_query_py2.py -@@ -169,14 +169,14 @@ def main(args): +@@ -210,14 +210,14 @@ def main(args): service_credentials = Credentials.from_service_account_file( args.service_account_key_path, scopes=[ @@ -28388,22 +20977,10 @@ diff --git a/extensions/browser/PRESUBMIT.py b/extensions/browser/PRESUBMIT.py for more details on the presubmit API built into depot_tools. """ -diff --git a/extensions/browser/api/crash_report_private/crash_report_private_api.cc b/extensions/browser/api/crash_report_private/crash_report_private_api.cc ---- a/extensions/browser/api/crash_report_private/crash_report_private_api.cc -+++ b/extensions/browser/api/crash_report_private/crash_report_private_api.cc -@@ -31,7 +31,7 @@ base::Time g_last_called_time; - base::Clock* g_clock = base::DefaultClock::GetInstance(); - - #if defined(GOOGLE_CHROME_BUILD) --constexpr char kCrashEndpointUrl[] = "https://clients2.google.com/cr/report"; -+constexpr char kCrashEndpointUrl[] = "https://clients2.9oo91e.qjz9zk/cr/report"; - #else - constexpr char kCrashEndpointUrl[] = ""; - #endif diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/extensions/browser/api/web_request/web_request_permissions.cc --- a/extensions/browser/api/web_request/web_request_permissions.cc +++ b/extensions/browser/api/web_request/web_request_permissions.cc -@@ -193,7 +193,7 @@ bool IsSensitiveGoogleClientUrl(const extensions::WebRequestInfo& request) { +@@ -200,7 +200,7 @@ bool IsSensitiveGoogleClientUrl(const extensions::WebRequestInfo& request) { // TODO(battre) Merge this, CanExtensionAccessURL and // PermissionsData::CanAccessPage into one function. @@ -28412,7 +20989,7 @@ diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/ext static constexpr char kClient[] = "clients"; constexpr size_t kGoogleComLength = base::size(kGoogleCom) - 1; constexpr size_t kClientLength = base::size(kClient) - 1; -@@ -333,7 +333,7 @@ bool WebRequestPermissions::HideRequest( +@@ -341,7 +341,7 @@ bool WebRequestPermissions::HideRequest( extension_urls::IsBlacklistUpdateUrl(url) || extension_urls::IsSafeBrowsingUrl(url::Origin::Create(url), url.path_piece()) || @@ -28439,7 +21016,7 @@ diff --git a/extensions/browser/suggest_permission_util.cc b/extensions/browser/ diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc --- a/extensions/browser/updater/extension_downloader.cc +++ b/extensions/browser/updater/extension_downloader.cc -@@ -95,10 +95,10 @@ const char kNotFromWebstoreInstallSource[] = "notfromwebstore"; +@@ -94,10 +94,10 @@ const char kNotFromWebstoreInstallSource[] = "notfromwebstore"; const char kDefaultInstallSource[] = ""; const char kReinstallInstallSource[] = "reinstall"; @@ -28463,7 +21040,7 @@ diff --git a/extensions/browser/updater/safe_manifest_parser.cc b/extensions/bro + "http://www.9oo91e.qjz9zk/update2/response"; void ReportError(ParseUpdateManifestCallback callback, - const std::string& error) { + const ManifestParseFailure& failure) { diff --git a/extensions/common/api/PRESUBMIT.py b/extensions/common/api/PRESUBMIT.py --- a/extensions/common/api/PRESUBMIT.py +++ b/extensions/common/api/PRESUBMIT.py @@ -28597,8 +21174,8 @@ diff --git a/extensions/common/api/networking_private.idl b/extensions/common/ap // API is only valid if called from a browser or app associated with the // primary user. See the Open Network Configuration (ONC) documentation for // descriptions of properties: --// -+// +-// ++// // src/components/onc/docs/onc_spec.html, or the -// -// Open Network Configuration page at chromium.org. @@ -28657,7 +21234,7 @@ diff --git a/extensions/common/api/socket.idl b/extensions/common/api/socket.idl // will not RECEIVE the loopback packets; while on Unix-like systems, the // applications with loopback off will not SEND the loopback packets to - // other applications on the same host. See MSDN: http://goo.gl/6vqbj -+ // other applications on the same host. See MSDN: http://goo.gl.qjz9zk.qjz9zk/6vqbj ++ // other applications on the same host. See MSDN: http://goo.gl.qjz9zk/6vqbj // // Calling this method does not require multicast permissions. // @@ -28702,7 +21279,7 @@ diff --git a/extensions/common/api/sockets_udp.idl b/extensions/common/api/socke // will not RECEIVE the loopback packets; while on Unix-like systems, the // applications with loopback off will not SEND the loopback packets to - // other applications on the same host. See MSDN: http://goo.gl/6vqbj -+ // other applications on the same host. See MSDN: http://goo.gl.qjz9zk.qjz9zk/6vqbj ++ // other applications on the same host. See MSDN: http://goo.gl.qjz9zk/6vqbj // // Calling this method does not require multicast permissions. // @@ -28721,7 +21298,7 @@ diff --git a/extensions/common/csp_validator.cc b/extensions/common/csp_validato diff --git a/extensions/common/extension_urls.cc b/extensions/common/extension_urls.cc --- a/extensions/common/extension_urls.cc +++ b/extensions/common/extension_urls.cc -@@ -30,9 +30,9 @@ bool IsSourceFromAnExtension(const base::string16& source) { +@@ -26,9 +26,9 @@ bool IsSourceFromAnExtension(const base::string16& source) { namespace extension_urls { @@ -28733,7 +21310,7 @@ diff --git a/extensions/common/extension_urls.cc b/extensions/common/extension_u GURL GetWebstoreLaunchURL() { extensions::ExtensionsClient* client = extensions::ExtensionsClient::Get(); -@@ -103,9 +103,9 @@ bool IsBlacklistUpdateUrl(const GURL& url) { +@@ -86,9 +86,9 @@ bool IsBlacklistUpdateUrl(const GURL& url) { } bool IsSafeBrowsingUrl(const url::Origin& origin, base::StringPiece path) { @@ -28749,7 +21326,7 @@ diff --git a/extensions/common/extension_urls.cc b/extensions/common/extension_u diff --git a/extensions/common/manifest_constants.cc b/extensions/common/manifest_constants.cc --- a/extensions/common/manifest_constants.cc +++ b/extensions/common/manifest_constants.cc -@@ -553,7 +553,7 @@ const char kInvalidManifestVersion[] = +@@ -498,7 +498,7 @@ const char kInvalidManifestVersion[] = "zero."; const char kInvalidManifestVersionOld[] = "The 'manifest_version' key must be present and set to * (without quotes). " @@ -28757,7 +21334,7 @@ diff --git a/extensions/common/manifest_constants.cc b/extensions/common/manifes + "See developer.ch40me.qjz9zk/*/manifestVersion.html for details."; const char kInvalidMatch[] = "Invalid value for 'content_scripts[*].matches[*]': *"; - const char kInvalidMatchAboutBlank[] = + const char kInvalidMatchCount[] = diff --git a/extensions/common/permissions/PRESUBMIT.py b/extensions/common/permissions/PRESUBMIT.py --- a/extensions/common/permissions/PRESUBMIT.py +++ b/extensions/common/permissions/PRESUBMIT.py @@ -28787,7 +21364,7 @@ diff --git a/extensions/strings/extensions_strings.grd b/extensions/strings/exte diff --git a/google_apis/drive/drive_api_url_generator.cc b/google_apis/drive/drive_api_url_generator.cc --- a/google_apis/drive/drive_api_url_generator.cc +++ b/google_apis/drive/drive_api_url_generator.cc -@@ -84,10 +84,10 @@ DriveApiUrlGenerator::~DriveApiUrlGenerator() { +@@ -85,10 +85,10 @@ DriveApiUrlGenerator::~DriveApiUrlGenerator() { } const char DriveApiUrlGenerator::kBaseUrlForProduction[] = @@ -28803,7 +21380,7 @@ diff --git a/google_apis/drive/drive_api_url_generator.cc b/google_apis/drive/dr diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_fetcher.cc --- a/google_apis/gaia/gaia_auth_fetcher.cc +++ b/google_apis/gaia/gaia_auth_fetcher.cc -@@ -626,7 +626,7 @@ void GaiaAuthFetcher::StartMergeSession(const std::string& uber_token, +@@ -627,7 +627,7 @@ void GaiaAuthFetcher::StartMergeSession(const std::string& uber_token, // know what sessions already exist in the browser. The fetcher needs to be // created such that it sends the cookies with the request, which is // different from all other requests the fetcher can make. @@ -28812,7 +21389,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_ std::string query = MakeMergeSessionQuery(uber_token, external_cc_result, continue_url, source_); net::NetworkTrafficAnnotationTag traffic_annotation = -@@ -778,7 +778,7 @@ void GaiaAuthFetcher::StartListAccounts() { +@@ -779,7 +779,7 @@ void GaiaAuthFetcher::StartListAccounts() { })"); CreateAndStartGaiaFetcher( " ", // To force an HTTP POST. @@ -28840,7 +21417,7 @@ diff --git a/google_apis/gaia/gaia_auth_util.cc b/google_apis/gaia/gaia_auth_uti diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constants.cc --- a/google_apis/gaia/gaia_constants.cc +++ b/google_apis/gaia/gaia_constants.cc -@@ -25,55 +25,55 @@ const char kSyncService[] = "chromiumsync"; +@@ -25,66 +25,66 @@ const char kSyncService[] = "chromiumsync"; const char kRemotingService[] = "chromoting"; // OAuth scopes. @@ -28868,6 +21445,11 @@ diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constant - "https://www.googleapis.com/auth/chromesync_playpen"; + "https://www.9oo91eapis.qjz9zk/auth/chromesync_playpen"; + // OAuth2 scope for access to Kid Management API. + const char kKidManagementOAuth2Scope[] = +- "https://www.googleapis.com/auth/kid.management"; ++ "https://www.9oo91eapis.qjz9zk/auth/kid.management"; + // OAuth2 scope for parental consent logging for secondary account addition. const char kKidManagementPrivilegedOAuth2Scope[] = - "https://www.googleapis.com/auth/kid.management.privileged"; @@ -28909,12 +21491,21 @@ diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constant -const char kClearCutOAuth2Scope[] = "https://www.googleapis.com/auth/cclog"; +const char kClearCutOAuth2Scope[] = "https://www.9oo91eapis.qjz9zk/auth/cclog"; + // OAuth scope for FCM, the Firebase Cloud Messaging service. + const char kFCMOAuthScope[] = +- "https://www.googleapis.com/auth/firebase.messaging"; ++ "https://www.9oo91eapis.qjz9zk/auth/firebase.messaging"; + + // OAuth scope for access to Tachyon api. +-const char kTachyonOAuthScope[] = "https://www.googleapis.com/auth/tachyon"; ++const char kTachyonOAuthScope[] = "https://www.9oo91eapis.qjz9zk/auth/tachyon"; + // Used to mint uber auth tokens when needed. const char kGaiaSid[] = "sid"; diff --git a/google_apis/gaia/gaia_oauth_client.cc b/google_apis/gaia/gaia_oauth_client.cc --- a/google_apis/gaia/gaia_oauth_client.cc +++ b/google_apis/gaia/gaia_oauth_client.cc -@@ -168,7 +168,7 @@ void GaiaOAuthClient::Core::GetTokensFromAuthCode( +@@ -169,7 +169,7 @@ void GaiaOAuthClient::Core::GetTokensFromAuthCode( trigger: "This request is triggered when a Chrome service requires an " "access token and a refresh token (e.g. Cloud Print, Chrome Remote " @@ -28923,7 +21514,7 @@ diff --git a/google_apis/gaia/gaia_oauth_client.cc b/google_apis/gaia/gaia_oauth "/OAuth2 for more information about the Google implementation of " "the OAuth 2.0 protocol." data: -@@ -319,9 +319,9 @@ void GaiaOAuthClient::Core::GetTokenInfo(const std::string& qualifier, +@@ -320,9 +320,9 @@ void GaiaOAuthClient::Core::GetTokenInfo(const std::string& qualifier, "The response is a dictionary of response values. The provided " "access token may have any scope, and basic results will be " "returned: issued_to, audience, scope, expires_in, access_type. In " @@ -28938,7 +21529,7 @@ diff --git a/google_apis/gaia/gaia_oauth_client.cc b/google_apis/gaia/gaia_oauth diff --git a/google_apis/gaia/gaia_urls.cc b/google_apis/gaia/gaia_urls.cc --- a/google_apis/gaia/gaia_urls.cc +++ b/google_apis/gaia/gaia_urls.cc -@@ -16,11 +16,11 @@ +@@ -23,11 +23,11 @@ namespace { // Gaia service constants @@ -28957,7 +21548,7 @@ diff --git a/google_apis/gaia/gaia_urls.cc b/google_apis/gaia/gaia_urls.cc diff --git a/google_apis/gcm/base/mcs_util.cc b/google_apis/gcm/base/mcs_util.cc --- a/google_apis/gcm/base/mcs_util.cc +++ b/google_apis/gcm/base/mcs_util.cc -@@ -43,7 +43,7 @@ static_assert(base::size(kProtoNames) == kNumProtoTypes, +@@ -44,7 +44,7 @@ static_assert(base::size(kProtoNames) == kNumProtoTypes, "Proto Names Must Include All Tags"); const char kLoginId[] = "chrome-"; @@ -28969,7 +21560,7 @@ diff --git a/google_apis/gcm/base/mcs_util.cc b/google_apis/gcm/base/mcs_util.cc diff --git a/google_apis/gcm/engine/gservices_settings.cc b/google_apis/gcm/engine/gservices_settings.cc --- a/google_apis/gcm/engine/gservices_settings.cc +++ b/google_apis/gcm/engine/gservices_settings.cc -@@ -29,12 +29,12 @@ const char kRegistrationURLKey[] = "gcm_registration_url"; +@@ -30,12 +30,12 @@ const char kRegistrationURLKey[] = "gcm_registration_url"; const int64_t kDefaultCheckinInterval = 2 * 24 * 60 * 60; // seconds = 2 days. const int64_t kMinimumCheckinInterval = 12 * 60 * 60; // seconds = 12 hours. @@ -28997,18 +21588,6 @@ diff --git a/google_apis/gcm/engine/mcs_client.cc b/google_apis/gcm/engine/mcs_c // MCS status message types. // TODO(zea): handle these at the GCMClient layer. -diff --git a/google_apis/gcm/protocol/mcs.proto b/google_apis/gcm/protocol/mcs.proto ---- a/google_apis/gcm/protocol/mcs.proto -+++ b/google_apis/gcm/protocol/mcs.proto -@@ -113,7 +113,7 @@ message LoginRequest { - } - required string id = 1; // Must be present ( proto required ), may be empty - // string. -- // mcs.android.com. -+ // mcs.8n6r01d.qjz9zk. - required string domain = 2; - // Decimal android ID - required string user = 3; diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc --- a/google_apis/gcm/tools/mcs_probe.cc +++ b/google_apis/gcm/tools/mcs_probe.cc @@ -29024,7 +21603,7 @@ diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_prob diff --git a/google_apis/google_api_keys.cc b/google_apis/google_api_keys.cc --- a/google_apis/google_api_keys.cc +++ b/google_apis/google_api_keys.cc -@@ -103,7 +103,7 @@ +@@ -110,7 +110,7 @@ namespace google_apis { const char kAPIKeysDevelopersHowToURL[] = @@ -29036,7 +21615,7 @@ diff --git a/google_apis/google_api_keys.cc b/google_apis/google_api_keys.cc diff --git a/google_update/google_update_idl.idl b/google_update/google_update_idl.idl --- a/google_update/google_update_idl.idl +++ b/google_update/google_update_idl.idl -@@ -774,7 +774,7 @@ interface IBrowserHttpRequest2 : IUnknown { +@@ -902,7 +902,7 @@ interface IBrowserHttpRequest2 : IUnknown { // @param request_headers HTTP request headers, if any. Can be NULL. // @param response_headers_needed HTTP response headers that are needed. // Should be one of the values listed here: @@ -29120,7 +21699,7 @@ diff --git a/gpu/command_buffer/PRESUBMIT.py b/gpu/command_buffer/PRESUBMIT.py diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm --- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm +++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm -@@ -341,7 +341,7 @@ class SharedImageRepresentationDawnIOSurface +@@ -163,7 +163,7 @@ class SharedImageRepresentationDawnIOSurface WGPUTexture texture_ = nullptr; WGPUTextureFormat wgpu_format_; @@ -29141,6 +21720,18 @@ diff --git a/gpu/config/PRESUBMIT.py b/gpu/config/PRESUBMIT.py for more details on the presubmit API built into depot_tools. """ +diff --git a/gpu/config/gpu_control_list_format.txt b/gpu/config/gpu_control_list_format.txt +--- a/gpu/config/gpu_control_list_format.txt ++++ b/gpu/config/gpu_control_list_format.txt +@@ -28,7 +28,7 @@ + // a) only specify device IDs; + // b) specify one device ID, associate with multiple revisions; + // c) specify k device IDs, associate with k device revisions. +-// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/identifiers-for-pci-devices ++// https://docs.m1cr050ft.qjz9zk/en-us/windows-hardware/drivers/install/identifiers-for-pci-devices + // 6. "multi_gpu_style" is a string, valid values include: + // a) "optimus": NVIDIA dual GPU + // b) "amd_switchable": AMD dual GPU diff --git a/gpu/ipc/common/PRESUBMIT.py b/gpu/ipc/common/PRESUBMIT.py --- a/gpu/ipc/common/PRESUBMIT.py +++ b/gpu/ipc/common/PRESUBMIT.py @@ -29173,22 +21764,10 @@ diff --git a/headless/lib/browser/protocol/headless_handler.cc b/headless/lib/br Response::ServerError("Command is only supported with " "--run-all-compositor-stages-before-draw, see " - "https://goo.gl/3zHXhB for more info.")); -+ "https://goo.gl.qjz9zk.qjz9zk/3zHXhB for more info.")); ++ "https://goo.gl.qjz9zk/3zHXhB for more info.")); return; } -diff --git a/headless/lib/dom_tree_extraction_expected_nodes.txt b/headless/lib/dom_tree_extraction_expected_nodes.txt ---- a/headless/lib/dom_tree_extraction_expected_nodes.txt -+++ b/headless/lib/dom_tree_extraction_expected_nodes.txt -@@ -425,7 +425,7 @@ - { - "attributes": [ { - "name": "href", -- "value": "https://www.google.com" -+ "value": "https://www.9oo91e.qjz9zk" - } ], - "backendNodeId": "?", - "boundingBox": { diff --git a/headless/lib/resources/devtools_discovery_page.html b/headless/lib/resources/devtools_discovery_page.html --- a/headless/lib/resources/devtools_discovery_page.html +++ b/headless/lib/resources/devtools_discovery_page.html @@ -29213,6 +21792,27 @@ diff --git a/infra/config/PRESUBMIT.py b/infra/config/PRESUBMIT.py for more details on the presubmit API built into depot_tools. """ +@@ -134,7 +134,7 @@ def CheckOutagesConfigOnCommit(input_api, output_api): + '{} with a reason.') + .format(_IGNORE_OUTAGE_FOOTER), + ('For more information on outages configuration, ' +- 'see https://chromium.googlesource.com/chromium/src/+/refs/heads/master/infra/config/outages'), ++ 'see https://chromium.9oo91esource.qjz9zk/chromium/src/+/refs/heads/master/infra/config/outages'), + ])), + ] + +diff --git a/infra/config/scripts/PRESUBMIT.py b/infra/config/scripts/PRESUBMIT.py +--- a/infra/config/scripts/PRESUBMIT.py ++++ b/infra/config/scripts/PRESUBMIT.py +@@ -3,7 +3,7 @@ + # found in the LICENSE file. + """PRESUBMIT for scripts. + +-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details on the presubmit API built into depot_tools. + """ + diff --git a/ios/PRESUBMIT.py b/ios/PRESUBMIT.py --- a/ios/PRESUBMIT.py +++ b/ios/PRESUBMIT.py @@ -29245,10 +21845,31 @@ diff --git a/ios/build/bots/scripts/PRESUBMIT.py b/ios/build/bots/scripts/PRESUB for more details about the presubmit API built into depot_tools. """ +diff --git a/ios/build/bots/scripts/result_sink_util.py b/ios/build/bots/scripts/result_sink_util.py +--- a/ios/build/bots/scripts/result_sink_util.py ++++ b/ios/build/bots/scripts/result_sink_util.py +@@ -33,7 +33,7 @@ def compose_test_result(test_id, status, expected, test_log=None, tags=None): + + Returns: + A dict of test results with input information, confirming to +- https://source.chromium.org/chromium/infra/infra/+/master:go/src/go.chromium.org/luci/resultdb/sink/proto/v1/test_result.proto ++ https://source.ch40m1um.qjz9zk/chromium/infra/infra/+/master:go/src/go.ch40m1um.qjz9zk/luci/resultdb/sink/proto/v1/test_result.proto + """ + assert status in VALID_STATUSES, ( + '%s is not a valid status (one in %s) for ResultSink.' % +@@ -122,7 +122,7 @@ class ResultSinkClient(object): + + Args: + test_result: (dict) Confirming to protocol defined in +- https://source.chromium.org/chromium/infra/infra/+/master:go/src/go.chromium.org/luci/resultdb/sink/proto/v1/test_result.proto ++ https://source.ch40m1um.qjz9zk/chromium/infra/infra/+/master:go/src/go.ch40m1um.qjz9zk/luci/resultdb/sink/proto/v1/test_result.proto + """ + if not self.sink: + return diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py --- a/ios/build/bots/scripts/run.py +++ b/ios/build/bots/scripts/run.py -@@ -55,7 +55,7 @@ class Runner(): +@@ -56,7 +56,7 @@ class Runner(): Args: xcode_build_version: (string) Xcode build version to install. mac_toolchain_cmd: (string) Path to mac_toolchain command to install Xcode @@ -29260,7 +21881,7 @@ diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py diff --git a/ios/build/bots/scripts/standard_json_util.py b/ios/build/bots/scripts/standard_json_util.py --- a/ios/build/bots/scripts/standard_json_util.py +++ b/ios/build/bots/scripts/standard_json_util.py -@@ -13,7 +13,7 @@ class StdJson(): +@@ -16,7 +16,7 @@ class StdJson(): def __init__(self, **kwargs): """Module for storing the results in standard JSON format. @@ -29269,15 +21890,27 @@ diff --git a/ios/build/bots/scripts/standard_json_util.py b/ios/build/bots/scrip """ self.tests = OrderedDict() +diff --git a/ios/build/bots/scripts/xcode_util.py b/ios/build/bots/scripts/xcode_util.py +--- a/ios/build/bots/scripts/xcode_util.py ++++ b/ios/build/bots/scripts/xcode_util.py +@@ -38,7 +38,7 @@ def install(mac_toolchain, xcode_build_version, xcode_path): + Args: + xcode_build_version: (string) Xcode build version to install. + mac_toolchain: (string) Path to mac_toolchain command to install Xcode +- See https://chromium.googlesource.com/infra/infra/+/master/go/src/infra/cmd/mac_toolchain/ ++ See https://chromium.9oo91esource.qjz9zk/infra/infra/+/master/go/src/infra/cmd/mac_toolchain/ + xcode_path: (string) Path to install the contents of Xcode.app. + + Raises: diff --git a/ios/build/chrome_build.gni b/ios/build/chrome_build.gni --- a/ios/build/chrome_build.gni +++ b/ios/build/chrome_build.gni -@@ -27,7 +27,7 @@ declare_args() { +@@ -50,7 +50,7 @@ declare_args() { # Value of the encryption export compliance code. See "Cryptography and # U.S. Export Compliance" in "Submitting the App to App Review" in the - # Apple developer documentation (https://goo.gl/yv1xEF). -+ # Apple developer documentation (https://goo.gl.qjz9zk.qjz9zk/yv1xEF). ++ # Apple developer documentation (https://goo.gl.qjz9zk/yv1xEF). ios_encryption_export_compliance_code = "" # List of plist templates to merge when generating chrome Info.plist. @@ -29293,7 +21926,7 @@ diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/st Cleared Chromium data -@@ -221,7 +221,7 @@ locale. The strings in this file are specific to iOS. +@@ -242,7 +242,7 @@ locale. The strings in this file are specific to iOS. Data from Chromium sync @@ -29302,7 +21935,7 @@ diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/st Clear your Chromium data from this device? -@@ -230,7 +230,7 @@ locale. The strings in this file are specific to iOS. +@@ -251,7 +251,7 @@ locale. The strings in this file are specific to iOS. You are signing in with an account managed by $1doe.com and giving its administrator control over your Chromium data. Your data will become permanently tied to this account. Signing out of Chromium will delete your data from this device, but it will remain stored in your Google Account. @@ -29323,7 +21956,7 @@ diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/a Cleared Chrome data -@@ -221,7 +221,7 @@ locale. The strings in this file are specific to iOS. +@@ -242,7 +242,7 @@ locale. The strings in this file are specific to iOS. Data from Chrome sync @@ -29332,7 +21965,7 @@ diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/a Clear your Chrome data from this device? -@@ -230,7 +230,7 @@ locale. The strings in this file are specific to iOS. +@@ -251,7 +251,7 @@ locale. The strings in this file are specific to iOS. You are signing in with an account managed by $1doe.com and giving its administrator control over your Chrome data. Your data will become permanently tied to this account. Signing out of Chrome will delete your data from this device, but it will remain stored in your Google Account. @@ -29344,7 +21977,7 @@ diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/a diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd -@@ -355,7 +355,7 @@ locale. The strings in this file are specific to iOS. +@@ -370,7 +370,7 @@ locale. The strings in this file are specific to iOS. Current Webpage is on Incognito @@ -29353,7 +21986,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Bandwidth -@@ -523,7 +523,7 @@ locale. The strings in this file are specific to iOS. +@@ -544,7 +544,7 @@ locale. The strings in this file are specific to iOS. You won't be signed out of your Google Account. @@ -29362,7 +21995,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios This clears synced data from all devices. Saved site settings will not be deleted and may reflect your browsing habits. BEGIN_LINKLearn moreEND_LINK -@@ -534,8 +534,8 @@ locale. The strings in this file are specific to iOS. +@@ -555,8 +555,8 @@ locale. The strings in this file are specific to iOS. Ok, got it @@ -29373,17 +22006,17 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios All Time -@@ -672,7 +672,7 @@ locale. The strings in this file are specific to iOS. +@@ -706,7 +706,7 @@ locale. The strings in this file are specific to iOS. By signing out, your bookmarks, history, passwords, and other Chrome data will no longer be synced to your Google Account. -Because your account is managed by $1google.com, your Chrome data will be deleted from this device when signing out. Your synced data will remain in your Google Account. +Because your account is managed by $19oo91e.qjz9zk, your Chrome data will be deleted from this device when signing out. Your synced data will remain in your Google Account. - + This will sign you out, turn off sync, and clear all Chrome data from this device. Your synced data will remain in your Google Account. -@@ -825,7 +825,7 @@ Because your account is managed by $1google.com$1google.com - Your Google Account may have other forms of browsing history at BEGIN_LINKhistory.google.comEND_LINK. @@ -29391,7 +22024,16 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Password -@@ -1127,7 +1127,7 @@ Handoff must also be enabled in the General section of Settings, and your device +@@ -1070,7 +1070,7 @@ Because your account is managed by $1google.com + +- Remove account $1janedoe@google.com? ++ Remove account $1janedoe@9oo91e.qjz9zk? + + + Remove +@@ -1282,7 +1282,7 @@ Handoff must also be enabled in the General section of Settings, and your device Continue @@ -29400,7 +22042,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Add existing data to $1john@doe.com. -@@ -1265,7 +1265,7 @@ Handoff must also be enabled in the General section of Settings, and your device +@@ -1488,7 +1488,7 @@ While in incognito, sites can't use cookies to see your browsing activity across Privacy Notice @@ -29409,7 +22051,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Page load progress bar, $120% loaded. -@@ -1307,7 +1307,7 @@ Handoff must also be enabled in the General section of Settings, and your device +@@ -1539,7 +1539,7 @@ While in incognito, sites can't use cookies to see your browsing activity across Added to Reading List @@ -29418,16 +22060,16 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Available offline -@@ -1475,7 +1475,7 @@ Handoff must also be enabled in the General section of Settings, and your device - To export passwords, you must first set a passcode on your device. +@@ -1787,7 +1787,7 @@ Follow the steps below: + Turned off by your organization. - View and manage saved passwords at BEGIN_LINKpasswords.google.comEND_LINK + View and manage saved passwords at BEGIN_LINKpasswords.9oo91e.qjz9zkEND_LINK - - Copied -@@ -1780,12 +1780,12 @@ To change this setting, BEGIN_LINKreset sync + Check Passwords +@@ -2226,12 +2226,12 @@ To change this setting, BEGIN_LINKreset sync @@ -29442,7 +22084,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios Your data was encrypted with your sync passphrase on $2Sept 1, 2012. Enter it to start sync. -@@ -2000,7 +2000,7 @@ Your data was encrypted with your sync passphrase on $2Sept +@@ -2490,7 +2490,7 @@ Your data was encrypted with your sync passphrase on $2Sept Help @@ -29454,7 +22096,7 @@ diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/BUILD.gn --- a/ios/chrome/browser/autofill/BUILD.gn +++ b/ios/chrome/browser/autofill/BUILD.gn -@@ -240,7 +240,7 @@ bundle_data("unit_tests_bundle_data") { +@@ -241,7 +241,7 @@ bundle_data("unit_tests_bundle_data") { "//components/test/data/autofill/heuristics/input/049_register_ebay.com.html", "//components/test/data/autofill/heuristics/input/050_register_ecomm.dell.com.html", "//components/test/data/autofill/heuristics/input/051_register_epson.com.html", @@ -29463,7 +22105,7 @@ diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/ "//components/test/data/autofill/heuristics/input/053_register_gymboree.com.html", "//components/test/data/autofill/heuristics/input/054_register_hotels.com.html", "//components/test/data/autofill/heuristics/input/055_register_imdb.com.html", -@@ -398,7 +398,7 @@ bundle_data("unit_tests_bundle_data") { +@@ -417,7 +417,7 @@ bundle_data("unit_tests_bundle_data") { "//components/test/data/autofill/heuristics/output/049_register_ebay.com.out", "//components/test/data/autofill/heuristics/output/050_register_ecomm.dell.com.out", "//components/test/data/autofill/heuristics/output/051_register_epson.com.out", @@ -29499,16 +22141,13 @@ diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_removal_contr diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chrome_url_constants.cc --- a/ios/chrome/browser/chrome_url_constants.cc +++ b/ios/chrome/browser/chrome_url_constants.cc -@@ -75,43 +75,43 @@ const char* const kChromeHostURLs[] = { +@@ -80,41 +80,41 @@ const char* const kChromeHostURLs[] = { const size_t kNumberOfChromeHostURLs = base::size(kChromeHostURLs); const char kSyncGoogleDashboardURL[] = - "https://www.google.com/settings/chrome/sync/"; + "https://www.9oo91e.qjz9zk/settings/chrome/sync/"; --const char kManageYourGoogleAccountURL[] = "https://myaccount.google.com/"; -+const char kManageYourGoogleAccountURL[] = "https://myaccount.9oo91e.qjz9zk/"; - const char kPageInfoHelpCenterURL[] = - "https://support.google.com/chrome?p=ui_security_indicator&ios=1"; + "https://support.9oo91e.qjz9zk/chrome?p=ui_security_indicator&ios=1"; @@ -29556,10 +22195,31 @@ diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chr const char kReadingListReferrerURL[] = "chrome://do_not_consider_for_most_visited/reading_list"; +@@ -122,4 +122,4 @@ const char kReadingListReferrerURL[] = + const char kChromeUIAboutNewTabURL[] = "about://newtab/"; + + const char kManagementLearnMoreURL[] = +- "https://support.google.com/chrome/?p=is_chrome_managed"; ++ "https://support.9oo91e.qjz9zk/chrome/?p=is_chrome_managed"; +diff --git a/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm b/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm +--- a/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm ++++ b/ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_tab_helper.mm +@@ -33,9 +33,9 @@ bool IsNptUrl(const GURL& url) { + (url.SchemeIs(url::kAboutScheme) && + (url.path() == "//newtab" || url.path() == "//newtab/")); + } +-// Returns true if navigation URL host is google.com or www.google.com. ++// Returns true if navigation URL host is 9oo91e.qjz9zk or www.9oo91e.qjz9zk. + bool IsGoogleUrl(const GURL& url) { +- return url.host() == "google.com" || url.host() == "www.google.com"; ++ return url.host() == "9oo91e.qjz9zk" || url.host() == "www.9oo91e.qjz9zk"; + } + + // Returns true if event that was sequentially emitted |count| times should be diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm -@@ -294,7 +294,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { +@@ -275,7 +275,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, flags_ui::kOsIos, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -29568,10 +22228,19 @@ diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/ {"wallet-service-use-sandbox", flag_descriptions::kWalletServiceUseSandboxName, flag_descriptions::kWalletServiceUseSandboxDescription, flags_ui::kOsIos, +@@ -675,7 +675,7 @@ void AppendSwitchesFromExperimentalSettings(base::CommandLine* command_line) { + base::SysUTF8ToNSString(policy::key::kDefaultSearchProviderEnabled) : + @YES, + base::SysUTF8ToNSString(policy::key::kDefaultSearchProviderSearchURL) : +- @"http://www.google.com/search?q={searchTerms}", ++ @"http://www.9oo91e.qjz9zk/search?q={searchTerms}", + base::SysUTF8ToNSString(policy::key::kDefaultSearchProviderName) : + @"TestEngine", + diff --git a/ios/chrome/browser/geolocation/omnibox_geolocation_controller.mm b/ios/chrome/browser/geolocation/omnibox_geolocation_controller.mm --- a/ios/chrome/browser/geolocation/omnibox_geolocation_controller.mm +++ b/ios/chrome/browser/geolocation/omnibox_geolocation_controller.mm -@@ -429,7 +429,7 @@ const char* const kGeolocationAuthorizationActionNewUser = +@@ -229,7 +229,7 @@ const char* const kGeolocationAuthorizationActionNewUser = } - (BOOL)URLIsAuthorizationPromptingURL:(const GURL&)url { @@ -29583,7 +22252,7 @@ diff --git a/ios/chrome/browser/geolocation/omnibox_geolocation_controller.mm b/ diff --git a/ios/chrome/browser/omaha/omaha_service.mm b/ios/chrome/browser/omaha/omaha_service.mm --- a/ios/chrome/browser/omaha/omaha_service.mm +++ b/ios/chrome/browser/omaha/omaha_service.mm -@@ -198,7 +198,7 @@ class XmlWrapper : public OmahaXmlWriter { +@@ -199,7 +199,7 @@ class XmlWrapper : public OmahaXmlWriter { // // // @@ -29634,18 +22303,6 @@ diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios void SearchEngineTabHelper::AddTemplateURLBySearchableURL( const GURL& searchable_url) { if (!searchable_url.is_valid()) { -diff --git a/ios/chrome/browser/signin/feature_flags.mm b/ios/chrome/browser/signin/feature_flags.mm ---- a/ios/chrome/browser/signin/feature_flags.mm -+++ b/ios/chrome/browser/signin/feature_flags.mm -@@ -8,7 +8,7 @@ - #error "This file requires ARC support." - #endif - --// This flag should be turned off by default until gmail.com can detect the -+// This flag should be turned off by default until 9ma1l.qjz9zk can detect the - // user has been signed out. - // See: http://crbug.com/939508. - const base::Feature kUseNSURLSessionForGaiaSigninRequests{ diff --git a/ios/chrome/browser/u2f/u2f_controller.mm b/ios/chrome/browser/u2f/u2f_controller.mm --- a/ios/chrome/browser/u2f/u2f_controller.mm +++ b/ios/chrome/browser/u2f/u2f_controller.mm @@ -29664,7 +22321,7 @@ diff --git a/ios/chrome/browser/u2f/u2f_controller.mm b/ios/chrome/browser/u2f/u diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util.mm b/ios/chrome/browser/ui/activity_services/activity_type_util.mm --- a/ios/chrome/browser/ui/activity_services/activity_type_util.mm +++ b/ios/chrome/browser/ui/activity_services/activity_type_util.mm -@@ -92,7 +92,7 @@ const PrefixTypeAssociation prefixTypeAssociations[] = { +@@ -45,7 +45,7 @@ const PrefixTypeAssociation prefixTypeAssociations[] = { {READ_LATER, @"com.google.chrome.readingListActivity", true}, {REQUEST_DESKTOP_MOBILE_SITE, @"com.google.chrome.requestDesktopOrMobileSiteActivity", true}, @@ -29673,42 +22330,11 @@ diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util.mm b/ios {THIRD_PARTY_MAILBOX, @"com.orchestra.v2.", false}, {THIRD_PARTY_FACEBOOK_MESSENGER, @"com.facebook.Messenger.", false}, {THIRD_PARTY_WHATS_APP, @"net.whatsapp.WhatsApp.", false}, -diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm ---- a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm -+++ b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm -@@ -213,7 +213,7 @@ BOOL gSignedInAccountsViewControllerIsShown = NO; - // its internal preferences. - // - // TODO(crbug.com/1007990) Remove this code after M81 (revert -- // https://chromium-review.googlesource.com/c/chromium/src/+/1824259 ). -+ // https://chromium-review.9oo91esource.qjz9zk/c/chromium/src/+/1824259 ). - return NO; - } - -diff --git a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm ---- a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm -+++ b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm -@@ -16,13 +16,13 @@ - @implementation SigninEarlGreyUtilsImpl - - - (FakeChromeIdentity*)fakeIdentity1 { -- return [FakeChromeIdentity identityWithEmail:@"foo1@gmail.com" -+ return [FakeChromeIdentity identityWithEmail:@"foo1@9ma1l.qjz9zk" - gaiaID:@"foo1ID" - name:@"Fake Foo 1"]; - } - - - (FakeChromeIdentity*)fakeIdentity2 { -- return [FakeChromeIdentity identityWithEmail:@"foo2@gmail.com" -+ return [FakeChromeIdentity identityWithEmail:@"foo2@9ma1l.qjz9zk" - gaiaID:@"foo2ID" - name:@"Fake Foo 2"]; - } -diff --git a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm ---- a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm -+++ b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm -@@ -29,13 +29,13 @@ - @implementation SigninEarlGreyUtilsAppInterface +diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm +--- a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm ++++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm +@@ -29,19 +29,19 @@ + @implementation SigninEarlGreyAppInterface + (FakeChromeIdentity*)fakeIdentity1 { - return [FakeChromeIdentity identityWithEmail:@"foo1@gmail.com" @@ -29723,10 +22349,17 @@ diff --git a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_inte gaiaID:@"foo2ID" name:@"Fake Foo 2"]; } + + + (FakeChromeIdentity*)fakeManagedIdentity { +- return [FakeChromeIdentity identityWithEmail:@"foo@google.com" ++ return [FakeChromeIdentity identityWithEmail:@"foo@9oo91e.qjz9zk" + gaiaID:@"fooManagedID" + name:@"Fake Managed"]; + } diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm --- a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm -@@ -64,7 +64,7 @@ const GURL GetFrenchUrl() { +@@ -62,7 +62,7 @@ const GURL GetFrenchUrl() { - (void)setupBookmarksWhichExceedsScreenHeight { EG_TEST_HELPER_ASSERT_NO_ERROR([BookmarkEarlGreyAppInterface @@ -29735,18 +22368,6 @@ diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.mm b/ios/chrome/ } - (void)waitForBookmarkModelLoaded:(BOOL)loaded { -diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm ---- a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm -+++ b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm -@@ -312,7 +312,7 @@ - - + (NSString*)setupFakeIdentity { - FakeChromeIdentity* identity = -- [FakeChromeIdentity identityWithEmail:@"foo1@gmail.com" -+ [FakeChromeIdentity identityWithEmail:@"foo1@9ma1l.qjz9zk" - gaiaID:@"foo1ID" - name:@"Fake Foo 1"]; - ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity( diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm @@ -29771,8 +22392,20 @@ diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_i diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm -@@ -66,7 +66,7 @@ +@@ -70,16 +70,16 @@ namespace { + // URL for 'Manage Activity' item in the Discover feed menu. + const char kFeedManageActivityURL[] = +- "https://myactivity.google.com/myactivity?product=50"; ++ "https://myactivity.9oo91e.qjz9zk/myactivity?product=50"; + // URL for 'Manage Interests' item in the Discover feed menu. + const char kFeedManageInterestsURL[] = +- "https://google.com/preferences/interests"; ++ "https://9oo91e.qjz9zk/preferences/interests"; + // URL for 'Learn More' item in the Discover feed menu; +-const char kFeedLearnMoreURL[] = "https://support.google.com/chrome/" ++const char kFeedLearnMoreURL[] = "https://support.9oo91e.qjz9zk/chrome/" + "?p=new_tab&co=GENIE.Platform%3DiOS&oco=1"; // URL for the page displaying help for the NTP. const char kNTPHelpURL[] = - "https://support.google.com/chrome/?p=ios_new_tab&ios=1"; @@ -29787,15 +22420,15 @@ diff --git a/ios/chrome/browser/ui/ntp/incognito_view.mm b/ios/chrome/browser/ui // The URL for the the Learn More page shown on incognito new tab. // Taken from ntp_resource_cache.cc. const char kLearnMoreIncognitoUrl[] = -- "https://www.google.com/support/chrome/bin/answer.py?answer=95464"; -+ "https://www.9oo91e.qjz9zk/support/chrome/bin/answer.py?answer=95464"; +- "https://support.google.com/chrome/?p=incognito"; ++ "https://support.9oo91e.qjz9zk/chrome/?p=incognito"; GURL GetUrlWithLang(const GURL& url) { std::string locale = GetApplicationContext()->GetApplicationLocale(); diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm --- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm +++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm -@@ -88,7 +88,7 @@ bool NotificationPromoWhatsNew::Init() { +@@ -92,7 +92,7 @@ bool NotificationPromoWhatsNew::Init() { break; case experimental_flags::WHATS_NEW_MOVE_TO_DOCK_TIP: InjectFakePromo("2", "moveToDockTip", "url", "", @@ -29804,10 +22437,34 @@ diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm b/ios/chr "MoveToDockTipPromo", "logoWithRoundedRectangle"); break; case experimental_flags::WHATS_NEW_REVIEW_UPDATED_TOS: +diff --git a/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm b/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm +--- a/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm ++++ b/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm +@@ -82,7 +82,7 @@ using scanner::CameraState; + ios::TemplateURLServiceFactory::GetForBrowserState( + chrome_test_util::GetOriginalBrowserState()); + +- TemplateURL* templateURL = service->GetTemplateURLForHost("google.com"); ++ TemplateURL* templateURL = service->GetTemplateURLForHost("9oo91e.qjz9zk"); + service->SetUserSelectedDefaultSearchProvider(templateURL); + } + +diff --git a/ios/chrome/browser/ui/settings/settings_app_interface.mm b/ios/chrome/browser/ui/settings/settings_app_interface.mm +--- a/ios/chrome/browser/ui/settings/settings_app_interface.mm ++++ b/ios/chrome/browser/ui/settings/settings_app_interface.mm +@@ -123,7 +123,7 @@ bool HostToLocalHostRewrite(GURL* url, web::BrowserState* browser_state) { + ios::TemplateURLServiceFactory::GetForBrowserState( + chrome_test_util::GetOriginalBrowserState()); + +- TemplateURL* templateURL = service->GetTemplateURLForHost("google.com"); ++ TemplateURL* templateURL = service->GetTemplateURLForHost("9oo91e.qjz9zk"); + service->SetUserSelectedDefaultSearchProvider(templateURL); + } + diff --git a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm --- a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm +++ b/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm -@@ -416,16 +416,16 @@ typedef NS_ENUM(NSInteger, ItemType) { +@@ -530,16 +530,16 @@ typedef NS_ENUM(NSInteger, ItemType) { TableViewURLItem* item = [[TableViewURLItem alloc] initWithType:ItemTypeURLNoMetadata]; item.title = @"Google Design"; @@ -29827,7 +22484,7 @@ diff --git a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.m item.metadata = @"3:42 PM"; [model addItem:item toSectionWithIdentifier:SectionIdentifierURL]; -@@ -444,7 +444,7 @@ typedef NS_ENUM(NSInteger, ItemType) { +@@ -558,7 +558,7 @@ typedef NS_ENUM(NSInteger, ItemType) { item = [[TableViewURLItem alloc] initWithType:ItemTypeURLWithBadgeImage]; item.title = @"Photos - Google Photos"; @@ -29839,7 +22496,7 @@ diff --git a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.m diff --git a/ios/chrome/browser/ui/settings/translate_table_view_controller.mm b/ios/chrome/browser/ui/settings/translate_table_view_controller.mm --- a/ios/chrome/browser/ui/settings/translate_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/translate_table_view_controller.mm -@@ -49,7 +49,7 @@ typedef NS_ENUM(NSInteger, ItemType) { +@@ -51,7 +51,7 @@ typedef NS_ENUM(NSInteger, ItemType) { }; const char kTranslateLearnMoreUrl[] = @@ -29848,6 +22505,18 @@ diff --git a/ios/chrome/browser/ui/settings/translate_table_view_controller.mm b NSString* const kTranslateSettingsCategory = @"ChromeTranslateSettings"; } // namespace +diff --git a/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_util.mm b/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_util.mm +--- a/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_util.mm ++++ b/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_util.mm +@@ -134,7 +134,7 @@ std::unique_ptr CreateSslBlockingPageDelegate( + std::unique_ptr + CreateCaptivePortalBlockingPageDelegate(web::WebState* web_state) { + GURL landing_url("https://captive.portal/login"); +- GURL request_url("https://google.com"); ++ GURL request_url("https://9oo91e.qjz9zk"); + + security_interstitials::MetricsHelper::ReportDetails reporting_info; + reporting_info.metric_prefix = "ssl_nonoverridable"; diff --git a/ios/net/cookies/cookie_store_ios_test_util.mm b/ios/net/cookies/cookie_store_ios_test_util.mm --- a/ios/net/cookies/cookie_store_ios_test_util.mm +++ b/ios/net/cookies/cookie_store_ios_test_util.mm @@ -29899,7 +22568,7 @@ diff --git a/ios/public/provider/chrome/browser/omaha/test_omaha_service_provide diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm --- a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm +++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm -@@ -110,13 +110,13 @@ void ChromeIdentityService::GetHostedDomainForIdentity( +@@ -116,13 +116,13 @@ void ChromeIdentityService::GetHostedDomainForIdentity( NSString* ChromeIdentityService::GetCachedHostedDomainForIdentity( ChromeIdentity* identity) { @@ -29918,13 +22587,13 @@ diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.m diff --git a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm --- a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm +++ b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm -@@ -90,8 +90,8 @@ NSString* FakeGetHostedDomainForIdentity(ChromeIdentity* identity) { +@@ -123,8 +123,8 @@ NSString* FakeGetHostedDomainForIdentity(ChromeIdentity* identity) { @end namespace ios { --NSString* const kManagedIdentityEmailFormat = @"%@@google.com"; +-NSString* const kManagedIdentityEmailSuffix = @"@google.com"; -NSString* const kIdentityEmailFormat = @"%@@gmail.com"; -+NSString* const kManagedIdentityEmailFormat = @"%@@9oo91e.qjz9zk"; ++NSString* const kManagedIdentityEmailSuffix = @"@9oo91e.qjz9zk"; +NSString* const kIdentityEmailFormat = @"%@@9ma1l.qjz9zk"; NSString* const kIdentityGaiaIDFormat = @"%@ID"; @@ -30013,31 +22682,10 @@ diff --git a/ios/testing/data/http_server_files/window_open.html b/ios/testing/d onclick="window.open('about:blank','_blank'); event.preventDefault();" name="webScenarioWindowOpenWithPreventDefaultLink" id="webScenarioWindowOpenWithPreventDefaultLink"> -diff --git a/ios/third_party/firebase/cipd.yaml b/ios/third_party/firebase/cipd.yaml ---- a/ios/third_party/firebase/cipd.yaml -+++ b/ios/third_party/firebase/cipd.yaml -@@ -1,7 +1,7 @@ - # Package definition for Firebase SDK for iOS. - # - # Download latest Firebase SDK from --# https://firebase.google.com/download/ios -+# https://firebase.9oo91e.qjz9zk/download/ios - # Unzip package and find the Analytics/ directory. Move *.framework into - # Analytics/ directory. Update the "data:" section in this configuration - # file if necessary. -@@ -20,7 +20,7 @@ - # - # - package: chromium/third_party/firebase_ios --description: Firebase SDK from https://firebase.google.com/download/ios -+description: Firebase SDK from https://firebase.9oo91e.qjz9zk/download/ios - data: - - dir: "Analytics" - - file: NOTICES diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm --- a/ios/web/navigation/navigation_manager_impl.mm +++ b/ios/web/navigation/navigation_manager_impl.mm -@@ -351,10 +351,10 @@ void NavigationManagerImpl::Reload(ReloadType reload_type, +@@ -893,10 +893,10 @@ void NavigationManagerImpl::Reload(ReloadType reload_type, // request url of the transient item, or pending item if transient doesn't // exist, or last committed item if both of them don't exist. The reason is // that a server side redirect may change the item's url. @@ -30066,7 +22714,7 @@ diff --git a/ios/web_view/PRESUBMIT.py b/ios/web_view/PRESUBMIT.py diff --git a/ios/web_view/internal/cwv_flags.mm b/ios/web_view/internal/cwv_flags.mm --- a/ios/web_view/internal/cwv_flags.mm +++ b/ios/web_view/internal/cwv_flags.mm -@@ -50,7 +50,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { +@@ -51,7 +51,7 @@ const flags_ui::FeatureEntry kFeatureEntries[] = { flags_ui::kOsIos, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -30078,7 +22726,7 @@ diff --git a/ios/web_view/internal/cwv_flags.mm b/ios/web_view/internal/cwv_flag diff --git a/ios/web_view/internal/cwv_web_view.mm b/ios/web_view/internal/cwv_web_view.mm --- a/ios/web_view/internal/cwv_web_view.mm +++ b/ios/web_view/internal/cwv_web_view.mm -@@ -749,7 +749,7 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES; +@@ -774,7 +774,7 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES; // e.g., triggered by JavaScript "window.open()" function. In that case, if // |self| is not created by the WKWebViewConfiguration provided by WebKit's // delegate method @@ -30087,31 +22735,6 @@ diff --git a/ios/web_view/internal/cwv_web_view.mm b/ios/web_view/internal/cwv_w // then calling |web::EnsureWebViewCreatedWithConfiguration()| here would // result in a crash (https://crbug.com/1054276). Now, we lazily create the // WKWebView inside |_webState| when |wkConfiguration| is not nil, and the -diff --git a/ios/web_view/shell/shell_view_controller.m b/ios/web_view/shell/shell_view_controller.m ---- a/ios/web_view/shell/shell_view_controller.m -+++ b/ios/web_view/shell/shell_view_controller.m -@@ -400,10 +400,10 @@ NSString* const kWebViewShellJavaScriptDialogTextFieldAccessibilityIdentifier = - NSString* URL; - if ([CWVFlags sharedInstance] - .usesSyncAndWalletSandbox) { -- URL = @"https://pay.sandbox.google.com/" -+ URL = @"https://pay.sandbox.9oo91e.qjz9zk/" - @"payments/home#paymentMethods"; - } else { -- URL = @"https://pay.google.com/payments/" -+ URL = @"https://pay.9oo91e.qjz9zk/payments/" - @"home#paymentMethods"; - } - NSURLRequest* request = [NSURLRequest -@@ -743,7 +743,7 @@ NSString* const kWebViewShellJavaScriptDialogTextFieldAccessibilityIdentifier = - [enteredText stringByAddingPercentEncodingWithAllowedCharacters: - [NSCharacterSet URLQueryAllowedCharacterSet]]; - enteredText = [NSString -- stringWithFormat:@"https://www.google.com/search?q=%@", enteredText]; -+ stringWithFormat:@"https://www.9oo91e.qjz9zk/search?q=%@", enteredText]; - } - NSURLRequest* request = - [NSURLRequest requestWithURL:[NSURL URLWithString:enteredText]]; diff --git a/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc b/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc --- a/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc +++ b/jingle/notifier/base/gaia_token_pre_xmpp_auth.cc @@ -30163,99 +22786,6 @@ diff --git a/media/PRESUBMIT.py b/media/PRESUBMIT.py return [] -diff --git a/media/capture/video/chromeos/mojom/camera3.mojom b/media/capture/video/chromeos/mojom/camera3.mojom ---- a/media/capture/video/chromeos/mojom/camera3.mojom -+++ b/media/capture/video/chromeos/mojom/camera3.mojom -@@ -10,7 +10,7 @@ import "media/capture/video/chromeos/mojom/camera_metadata.mojom"; - - // These usages flags are defined in gralloc.h. They determine the nature of - // the buffers allocated by gralloc. Read more on: --// https://source.android.com/devices/graphics/arch-bq-gralloc#gralloc_HAL -+// https://source.8n6r01d.qjz9zk/devices/graphics/arch-bq-gralloc#gralloc_HAL - const uint32 GRALLOC_USAGE_SW_READ_NEVER = 0x00000000; - const uint32 GRALLOC_USAGE_SW_READ_OFTEN = 0x00000003; - const uint32 GRALLOC_USAGE_SW_WRITE_NEVER = 0x00000000; -@@ -53,7 +53,7 @@ struct CropRotateScaleInfo { - }; - - // The following enums are from Android's camera HAL v3 API header --// (https://goo.gl/jciSjC). -+// (https://goo.gl.qjz9zk/jciSjC). - - enum Camera3StreamType { - CAMERA3_STREAM_OUTPUT = 0, -@@ -83,7 +83,7 @@ struct Camera3Stream { - // usage stores the gralloc usage flags for this stream and determines the - // nature of it. The value is used by Chrome VCD, Android framework and camera - // HAL. Read more on: -- // https://source.android.com/devices/graphics/arch-bq-gralloc#gralloc_HAL -+ // https://source.8n6r01d.qjz9zk/devices/graphics/arch-bq-gralloc#gralloc_HAL - uint32 usage; - uint32 max_buffers; - uint32 data_space; -diff --git a/media/capture/video/chromeos/mojom/camera_common.mojom b/media/capture/video/chromeos/mojom/camera_common.mojom ---- a/media/capture/video/chromeos/mojom/camera_common.mojom -+++ b/media/capture/video/chromeos/mojom/camera_common.mojom -@@ -41,7 +41,7 @@ enum TorchModeStatus { - }; - - // CameraModuleCallbacks is a translation of the camera_module_callbacks_t API --// (https://goo.gl/8Hf8S8). CameraModuleCallbacks is used by the camera HAL to -+// (https://goo.gl.qjz9zk/8Hf8S8). CameraModuleCallbacks is used by the camera HAL to - // inform the client of the various status change of a camera. - // - // Next method ID: 2 -@@ -58,7 +58,7 @@ interface CameraModuleCallbacks { - }; - - // VendorTagOps is a translation of the vendor_tag_ops_t API --// (https://goo.gl/3aLWv3). This structure contains basic functions for -+// (https://goo.gl.qjz9zk/3aLWv3). This structure contains basic functions for - // enumerating an immutable set of vendor-defined camera metadata tags, and - // querying static information about their structure/type. - // -@@ -84,7 +84,7 @@ interface VendorTagOps { - }; - - // CameraModule is a translation of the camera_module_t API --// (https://goo.gl/8Hf8S8). CameraModule is the interface to interact with a -+// (https://goo.gl.qjz9zk/8Hf8S8). CameraModule is the interface to interact with a - // camera HAL to query device info and open camera devices. - // - // Next method ID: 7 -diff --git a/media/capture/video/chromeos/mojom/camera_metadata.mojom b/media/capture/video/chromeos/mojom/camera_metadata.mojom ---- a/media/capture/video/chromeos/mojom/camera_metadata.mojom -+++ b/media/capture/video/chromeos/mojom/camera_metadata.mojom -@@ -17,7 +17,7 @@ enum EntryType { - }; - - // CameraMetadataEntry is a translation of the camera_metadata_entry_t in --// Android camera HAL v3 API (https://goo.gl/OC8sOH). A CameraMetadataEntry -+// Android camera HAL v3 API (https://goo.gl.qjz9zk/OC8sOH). A CameraMetadataEntry - // holds the values of one type of metadata specified by |tag|. - struct CameraMetadataEntry { - uint32 index; -@@ -28,7 +28,7 @@ struct CameraMetadataEntry { - }; - - // CameraMetadata is a translation of the camera_metadata struct in Android --// camera HAL v3 API (https://goo.gl/G7ligz). A CameraMetadata holds a -+// camera HAL v3 API (https://goo.gl.qjz9zk/G7ligz). A CameraMetadata holds a - // collection of metadata tags and their values. - struct CameraMetadata { - uint32 size; -diff --git a/media/mojo/mojom/provision_fetcher.mojom b/media/mojo/mojom/provision_fetcher.mojom ---- a/media/mojo/mojom/provision_fetcher.mojom -+++ b/media/mojo/mojom/provision_fetcher.mojom -@@ -6,7 +6,7 @@ module media.mojom; - - // An interface to retrieve provision information for CDM. This includes Android - // MediaDrm. See Android documentation about MediaDrm provisioning: --// https://developer.android.com/reference/android/media/MediaDrm.ProvisionRequest.html -+// https://developer.8n6r01d.qjz9zk/reference/android/media/MediaDrm.ProvisionRequest.html - - interface ProvisionFetcher { - // Requests the provision information with |default_url| and |request_data| diff --git a/mojo/PRESUBMIT.py b/mojo/PRESUBMIT.py --- a/mojo/PRESUBMIT.py +++ b/mojo/PRESUBMIT.py @@ -30616,18 +23146,6 @@ diff --git a/native_client_sdk/src/doc/Makefile b/native_client_sdk/src/doc/Make @echo " chromesite_rst only build .rst docs; no doxygen" @echo " serve start python web server for chromesite docs" @echo " linkcheck to check all external links for integrity" -diff --git a/native_client_sdk/src/doc/_book.yaml b/native_client_sdk/src/doc/_book.yaml ---- a/native_client_sdk/src/doc/_book.yaml -+++ b/native_client_sdk/src/doc/_book.yaml -@@ -6,7 +6,7 @@ toc: - - title: "What is Native Client?" - path: /native-client/dev/overview - - title: "Demos" -- path: http://gonativeclient.appspot.com/demo/ -+ path: http://gonativeclient.8pp2p8t.qjz9zk/demo/ - - title: "Download SDK" - path: /native-client/dev/sdk/download - - title: "Getting Started Tutorial" diff --git a/native_client_sdk/src/doc/community/security-contest/contest-warning.txt b/native_client_sdk/src/doc/community/security-contest/contest-warning.txt --- a/native_client_sdk/src/doc/community/security-contest/contest-warning.txt +++ b/native_client_sdk/src/doc/community/security-contest/contest-warning.txt @@ -30663,10 +23181,47 @@ diff --git a/native_client_sdk/src/doc/doxygen/generate_docs.py b/native_client_ u = urllib2.urlopen(url) try: data = json.loads(u.read()) +diff --git a/native_client_sdk/src/doc/migration/apps.html b/native_client_sdk/src/doc/migration/apps.html +--- a/native_client_sdk/src/doc/migration/apps.html ++++ b/native_client_sdk/src/doc/migration/apps.html +@@ -235,7 +235,7 @@ user scenarios below and what the recommended migration path is. + + Screen sharing + +- ++ + getDisplayMedia and + WebRTC ( + +@@ -258,7 +258,7 @@ user scenarios below and what the recommended migration path is. + + Chat + +- WebSocket* ++ WebSocket* + + + +@@ -271,7 +271,7 @@ user scenarios below and what the recommended migration path is. + + Collaboration + +- WebSocket* ++ WebSocket* + + + +@@ -305,5 +305,5 @@ user scenarios below and what the recommended migration path is. + + + *: Or WebTransport in the future
    +- **: See chromestatus for ++ **: See chromestatus for + availability diff --git a/native_client_sdk/src/doc/migration/public.html b/native_client_sdk/src/doc/migration/public.html --- a/native_client_sdk/src/doc/migration/public.html +++ b/native_client_sdk/src/doc/migration/public.html -@@ -1699,7 +1699,7 @@ CSS3 supports specifying the hotspot. +@@ -1715,7 +1715,7 @@ CSS3 supports specifying the hotspot. GAP fetch() upload streaming @@ -31081,10 +23636,22 @@ diff --git a/native_client_sdk/src/web/manifest.html b/native_client_sdk/src/web loadJson(url, function(data) { callback(data.chromium_revision); }); +diff --git a/net/base/network_change_notifier_mac.mm b/net/base/network_change_notifier_mac.mm +--- a/net/base/network_change_notifier_mac.mm ++++ b/net/base/network_change_notifier_mac.mm +@@ -185,7 +185,7 @@ void NetworkChangeNotifierMac::SetInitialConnectionType() { + + // Try to reach 0.0.0.0. This is the approach taken by Firefox: + // +- // http://mxr.mozilla.org/mozilla2.0/source/netwerk/system/mac/nsNetworkLinkService.mm ++ // http://mxr.m0z111a.qjz9zk/mozilla2.0/source/netwerk/system/mac/nsNetworkLinkService.mm + // + // From my (adamk) testing on Snow Leopard, 0.0.0.0 + // seems to be reachable if any network connection is available. 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 -@@ -405,8 +405,8 @@ bool IsGoogleHost(base::StringPiece host) { +@@ -434,8 +434,8 @@ bool IsGoogleHost(base::StringPiece host) { } bool IsTLS13ExperimentHost(base::StringPiece host) { @@ -31094,11 +23661,11 @@ diff --git a/net/base/url_util.cc b/net/base/url_util.cc + host == "9ma1l.qjz9zk"; } - bool IsLocalHostname(base::StringPiece host, bool* is_local6) { + bool IsLocalHostname(base::StringPiece host) { diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h -@@ -1517,7 +1517,7 @@ TYPED_TEST_P(CookieStoreTest, NetUtilCookieTest) { +@@ -1541,7 +1541,7 @@ TYPED_TEST_P(CookieStoreTest, NetUtilCookieTest) { TYPED_TEST_P(CookieStoreTest, OverwritePersistentCookie) { GURL url_foo("http://www.foo.com/"); @@ -31107,7 +23674,7 @@ diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unit CookieStore* cs = this->GetCookieStore(); // Insert a cookie "a" for path "/path1" -@@ -1570,7 +1570,7 @@ TYPED_TEST_P(CookieStoreTest, OverwritePersistentCookie) { +@@ -1594,7 +1594,7 @@ TYPED_TEST_P(CookieStoreTest, OverwritePersistentCookie) { this->MatchCookieLines( "a=val9", this->GetCookies(cs, GURL("http://www.foo.com/path2"))); this->MatchCookieLines( @@ -31150,7 +23717,7 @@ diff --git a/net/data/parse_certificate_unittest/v3_certificate_template.txt b/n diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h --- a/net/dns/dns_test_util.h +++ b/net/dns/dns_test_util.h -@@ -31,7 +31,7 @@ namespace net { +@@ -32,7 +32,7 @@ namespace net { //----------------------------------------------------------------------------- // Query/response set for www.google.com, ID is fixed to 0. @@ -31159,13 +23726,13 @@ diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h static const uint16_t kT0Qtype = dns_protocol::kTypeA; static const char kT0DnsName[] = { 0x03, 'w', 'w', 'w', -@@ -58,14 +58,14 @@ static const char* const kT0IpAddresses[] = { +@@ -59,14 +59,14 @@ static const char* const kT0IpAddresses[] = { "74.125.226.179", "74.125.226.180", "74.125.226.176", "74.125.226.177", "74.125.226.178" }; -static const char kT0CanonName[] = "www.l.google.com"; +static const char kT0CanonName[] = "www.l.9oo91e.qjz9zk"; - static const int kT0TTL = 0x000000e4; + static const base::TimeDelta kT0Ttl = base::TimeDelta::FromSeconds(0x000000e4); // +1 for the CNAME record. static const unsigned kT0RecordCount = base::size(kT0IpAddresses) + 1; @@ -31176,27 +23743,27 @@ diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h static const uint16_t kT1Qtype = dns_protocol::kTypeA; static const char kT1DnsName[] = { 0x0a, 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', -@@ -88,7 +88,7 @@ static const uint8_t kT1ResponseDatagram[] = { +@@ -89,7 +89,7 @@ static const uint8_t kT1ResponseDatagram[] = { static const char* const kT1IpAddresses[] = { "64.233.169.121" }; -static const char kT1CanonName[] = "ghs.l.google.com"; +static const char kT1CanonName[] = "ghs.l.9oo91e.qjz9zk"; - static const int kT1TTL = 0x0000010b; + static const base::TimeDelta kT1Ttl = base::TimeDelta::FromSeconds(0x0000010b); // +1 for the CNAME record. static const unsigned kT1RecordCount = base::size(kT1IpAddresses) + 1; -@@ -159,14 +159,14 @@ static const char* const kT3IpAddresses[] = { +@@ -160,14 +160,14 @@ static const char* const kT3IpAddresses[] = { "74.125.226.178", "74.125.226.179", "74.125.226.180", "74.125.226.176", "74.125.226.177" }; -static const char kT3CanonName[] = "www.l.google.com"; +static const char kT3CanonName[] = "www.l.9oo91e.qjz9zk"; - static const int kT3TTL = 0x00000015; + static const base::TimeDelta kT3Ttl = base::TimeDelta::FromSeconds(0x00000015); // +2 for the CNAME records, +1 for TXT record. static const unsigned kT3RecordCount = base::size(kT3IpAddresses) + 3; //----------------------------------------------------------------------------- - // Query/response set for www.gstatic.com, ID is fixed to 4. + // Query/response set for www.gstatic.com, ID is fixed to 0. -static const char kT4HostName[] = "www.gstatic.com"; +static const char kT4HostName[] = "www.95tat1c.qjz9zk"; static const uint16_t kT4Qtype = dns_protocol::kTypeA; @@ -31205,7 +23772,7 @@ diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc --- a/net/dns/dns_transaction.cc +++ b/net/dns/dns_transaction.cc -@@ -373,7 +373,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate { +@@ -382,7 +382,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate { data: "The domain name that is being requested" destination: OTHER destination_other: "The user configured DNS over HTTPS server, which" @@ -31214,41 +23781,41 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc } policy { cookies_allowed: NO -diff --git a/net/dns/public/doh_provider_list.cc b/net/dns/public/doh_provider_list.cc ---- a/net/dns/public/doh_provider_list.cc -+++ b/net/dns/public/doh_provider_list.cc -@@ -124,11 +124,11 @@ const std::vector& GetDohProviderList() { - DohProviderEntry("Google", DohProviderIdForHistogram::kGoogle, - {"8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", - "2001:4860:4860::8844"}, -- {"dns.google", "dns.google.com", -+ {"dns.google", "dns.9oo91e.qjz9zk", - "8888.google"} /* dns_over_tls_hostnames */, - "https://dns.google/dns-query{?dns}", - "Google (Public DNS)" /* ui_name */, -- "https://developers.google.com/speed/public-dns/" -+ "https://developers.9oo91e.qjz9zk/speed/public-dns/" - "privacy" /* privacy_policy */, - true /* display_globally */, {} /* display_countries */), - DohProviderEntry("Iij", DohProviderIdForHistogram::kIij, {} /* ip_strs */, +diff --git a/net/dns/public/doh_provider_entry.cc b/net/dns/public/doh_provider_entry.cc +--- a/net/dns/public/doh_provider_entry.cc ++++ b/net/dns/public/doh_provider_entry.cc +@@ -116,11 +116,11 @@ const DohProviderEntry::List& DohProviderEntry::GetList() { + new DohProviderEntry("Google", DohProviderIdForHistogram::kGoogle, + {"8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", + "2001:4860:4860::8844"}, +- {"dns.google", "dns.google.com", ++ {"dns.google", "dns.9oo91e.qjz9zk", + "8888.google"} /* dns_over_tls_hostnames */, + "https://dns.google/dns-query{?dns}", + "Google (Public DNS)" /* ui_name */, +- "https://developers.google.com/speed/public-dns/" ++ "https://developers.9oo91e.qjz9zk/speed/public-dns/" + "privacy" /* privacy_policy */, + true /* display_globally */, + {} /* display_countries */), diff --git a/net/http/http_server_properties.cc b/net/http/http_server_properties.cc --- a/net/http/http_server_properties.cc +++ b/net/http/http_server_properties.cc -@@ -155,8 +155,8 @@ HttpServerProperties::HttpServerProperties( +@@ -156,8 +156,8 @@ HttpServerProperties::HttpServerProperties( broken_alternative_services_(kMaxRecentlyBrokenAlternativeServiceEntries, this, tick_clock_), - canonical_suffixes_({".ggpht.com", ".c.youtube.com", ".googlevideo.com", -- ".googleusercontent.com"}), +- ".googleusercontent.com", ".gvt1.com"}), + canonical_suffixes_({".99pht.qjz9zk", ".c.y0u1ub3.qjz9zk", ".9oo91evideo.qjz9zk", -+ ".9oo91eusercontent.qjz9zk"}), ++ ".9oo91eusercontent.qjz9zk", ".gvt1.com"}), quic_server_info_map_(kDefaultMaxQuicServerEntries), max_server_configs_stored_in_properties_(kDefaultMaxQuicServerEntries) {} diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_test_util.cc --- a/net/http/http_transaction_test_util.cc +++ b/net/http/http_transaction_test_util.cc -@@ -44,7 +44,7 @@ static MockTransactionMap mock_transactions; +@@ -53,7 +53,7 @@ TransportInfo DefaultTransportInfo() { // mock transaction data const MockTransaction kSimpleGET_Transaction = { @@ -31257,8 +23824,8 @@ diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_ "GET", base::Time(), "", -@@ -102,7 +102,7 @@ const MockTransaction kTypicalGET_Transaction = { - OK}; +@@ -120,7 +120,7 @@ const MockTransaction kTypicalGET_Transaction = { + }; const MockTransaction kETagGET_Transaction = { - "http://www.google.com/foopy", @@ -31266,8 +23833,8 @@ diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_ "GET", base::Time(), "", -@@ -122,7 +122,7 @@ const MockTransaction kETagGET_Transaction = { - OK}; +@@ -143,7 +143,7 @@ const MockTransaction kETagGET_Transaction = { + }; const MockTransaction kRangeGET_Transaction = { - "http://www.google.com/", @@ -31275,989 +23842,6 @@ diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_ "GET", base::Time(), "Range: 0-100\r\n", -diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json ---- a/net/http/transport_security_state_static.json -+++ b/net/http/transport_security_state_static.json -@@ -77,7 +77,7 @@ - "GlobalSignExtendedValidationCA_G2", - "GlobalSignExtendedValidationCA_SHA256_G2" - ], -- "report_uri": "http://clients3.google.com/cert_upload_json" -+ "report_uri": "http://clients3.9oo91e.qjz9zk/cert_upload_json" - }, - { - "name": "tor", -@@ -232,13 +232,13 @@ - - "entries": [ - // Dummy entries to test certificate pinning and expect-CT. -- { "name": "pinningtest.appspot.com", "policy": "test", "include_subdomains": true, "pins": "test" }, -+ { "name": "pinningtest.8pp2p8t.qjz9zk", "policy": "test", "include_subdomains": true, "pins": "test" }, - { "name": "pinning-test.badssl.com", "policy": "test", "include_subdomains": true, "pins": "test" }, - { "name": "example.test", "policy": "test", "include_subdomains": true, "pins": "test" }, - { - "name": "preloaded-expect-ct.badssl.com", "policy": "test", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - - // gTLDs and eTLDs are welcome to preload if they are interested. -@@ -265,86 +265,86 @@ - - // Google domains using Expect-CT. - { -- "name": "mail.google.com", "policy": "google", -+ "name": "mail.9oo91e.qjz9zk", "policy": "google", - "mode": "force-https", "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { -- "name": "plus.sandbox.google.com", "policy": "google", -+ "name": "plus.sandbox.9oo91e.qjz9zk", "policy": "google", - "mode": "force-https", "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { -- "name": "remotedesktop.corp.google.com", "policy": "google", -+ "name": "remotedesktop.corp.9oo91e.qjz9zk", "policy": "google", - "mode": "force-https", "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { - "name": "corp.goog", "policy": "google", - "mode": "force-https", "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - -- // Now we force HTTPS for subtrees of google.com. -- { "name": "accounts.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "admin.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "apis.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "appengine.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "calendar.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "checkout.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chrome.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "classroom.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "cloud.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "code.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "contributor.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "dl.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "docs.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "domains.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "drive.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "encrypted.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "fi.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "glass.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "goto.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "groups.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "hangouts.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "history.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "hostedtalkgadget.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "inbox.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "login.corp.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "mail-settings.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "meet.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "myaccount.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "myactivity.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "passwords.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "pixel.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "play.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "plus.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "profiles.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "script.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "security.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "sites.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "spreadsheets.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "talkgadget.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "talk.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wallet.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "payments.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "xn--7xa.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "dns.google.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ // Now we force HTTPS for subtrees of 9oo91e.qjz9zk. -+ { "name": "accounts.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "admin.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "apis.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "appengine.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "calendar.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "checkout.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "chrome.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "classroom.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "cloud.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "code.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "contributor.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "dl.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "docs.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "domains.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "drive.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "encrypted.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "fi.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "glass.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "goto.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "groups.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "hangouts.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "history.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "hostedtalkgadget.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "inbox.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "login.corp.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "mail-settings.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "meet.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "myaccount.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "myactivity.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "passwords.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "pixel.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "play.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "plus.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "profiles.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "script.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "security.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "sites.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "spreadsheets.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "talkgadget.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "talk.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wallet.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "payments.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "xn--7xa.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "dns.9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - - // Other Google-related domains that must use HTTPS. -- { "name": "build.chromium.org", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "bugs.chromium.org", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "build.ch40m1um.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "bugs.ch40m1um.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "cdn.ampproject.org", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chrome.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chrome-devtools-frontend.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chromereporting-pa.googleapis.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chromiumcodereview.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "codereview.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "codereview.chromium.org", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "ch40me.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "chrome-devtools-frontend.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "chromereporting-pa.9oo91eapis.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "chromiumcodereview.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "codereview.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "codereview.ch40m1um.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "crbug.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "crosbug.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "crrev.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -@@ -352,61 +352,61 @@ - { "name": "g.co", "policy": "google", "mode": "force-https", "pins": "google" }, - { "name": "www.g.co", "policy": "google", "mode": "force-https", "pins": "google" }, - { "name": "g4w.co", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "gmail.com", "policy": "google", "mode": "force-https", "pins": "google" }, -- { "name": "goo.gl", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "googlecode.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googlemail.com", "policy": "google", "mode": "force-https", "pins": "google" }, -- { "name": "googleplex.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "googlesource.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "9ma1l.qjz9zk", "policy": "google", "mode": "force-https", "pins": "google" }, -+ { "name": "goo.gl.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91ecode.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91email.qjz9zk", "policy": "google", "mode": "force-https", "pins": "google" }, -+ { "name": "9oo91eplex.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91esource.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "gvt2.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "gvt3.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "developer.android.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "market.android.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "oauthaccountmanager.googleapis.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "passwordsleakcheck-pa.googleapis.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "translate.googleapis.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "withgoogle.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "withyoutube.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "www.gmail.com", "policy": "google", "mode": "force-https", "pins": "google" }, -- { "name": "www.googlemail.com", "policy": "google", "mode": "force-https", "pins": "google" }, -- { "name": "google-analytics.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "stats.g.doubleclick.net", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "chromiumbugs.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "youtube.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "developer.8n6r01d.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "market.8n6r01d.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "oauthaccountmanager.9oo91eapis.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "passwordsleakcheck-pa.9oo91eapis.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "translate.9oo91eapis.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "with9oo91e.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "withy0u1ub3.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "www.9ma1l.qjz9zk", "policy": "google", "mode": "force-https", "pins": "google" }, -+ { "name": "www.9oo91email.qjz9zk", "policy": "google", "mode": "force-https", "pins": "google" }, -+ { "name": "9oo91e-analytics.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "stats.g.60u613cl1c4.n3t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "chromiumbugs.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "y0u1ub3.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - -- { "name": "webfilings.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "webfilings-eu.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "webfilings-eu-mirror.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "webfilings-mirror-hrd.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-bigsky-master.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-demo-eu.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-demo-hrd.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-dogfood-hrd.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-pentest.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-staging-hr.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-training-hrd.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-training-master.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "wf-trial-hrd.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "w-spotlight.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -- { "name": "xbrlsuccess.appspot.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "webfilings.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "webfilings-eu.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "webfilings-eu-mirror.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "webfilings-mirror-hrd.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-bigsky-master.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-demo-eu.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-demo-hrd.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-dogfood-hrd.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-pentest.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-staging-hr.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-training-hrd.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-training-master.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "wf-trial-hrd.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "w-spotlight.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, -+ { "name": "xbrlsuccess.8pp2p8t.qjz9zk", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - - // Other Google-related domains that must use an acceptable certificate - // iff using SSL. - { "name": "2mdn.net", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "android.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "appspot.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "8n6r01d.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "8pp2p8t.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "blogger.com", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "blogspot.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "doubleclick.net", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "ggpht.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "60u613cl1c4.n3t.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "99pht.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.ac", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.ad", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googleadservices.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91eadservices.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.ae", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.af", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.ag", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.am", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googleapis.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91eapis.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.as", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.at", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.az", "policy": "google", "include_subdomains": true, "pins": "google" }, -@@ -443,76 +443,76 @@ - { "name": "google.co.ke", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.kr", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.ls", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.af", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ag", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ai", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.af", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ag", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ai", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.ma", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ar", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.au", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.bd", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.bh", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.bn", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.bo", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.br", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.by", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.bz", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.cn", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.co", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.cu", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.cy", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.do", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ec", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.eg", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.et", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.fj", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ge", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.gh", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.gi", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.gr", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.gt", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.hk", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.iq", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.jm", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.jo", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.kh", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.kw", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.lb", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ly", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googlecommerce.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.mt", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.mx", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.my", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.na", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.nf", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ng", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ni", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.np", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.nr", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.om", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.pa", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.pe", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ph", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.pk", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.pl", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.pr", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.py", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.qa", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ru", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.sa", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.sb", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.sg", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.sl", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.sv", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.tj", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.tn", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.tr", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.tw", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ua", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.uy", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.vc", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.ve", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "google.com.vn", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ar", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.au", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.bd", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.bh", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.bn", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.bo", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.br", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.by", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.bz", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.cn", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.co", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.cu", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.cy", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.do", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ec", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.eg", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.et", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.fj", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ge", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.gh", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.gi", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.gr", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.gt", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.hk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.iq", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.jm", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.jo", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.kh", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.kw", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.lb", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ly", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91ecommerce.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.mt", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.mx", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.my", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.na", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.nf", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ng", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ni", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.np", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.nr", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.om", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.pa", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.pe", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ph", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.pk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.pl", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.pr", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.py", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.qa", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ru", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.sa", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.sb", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.sg", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.sl", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.sv", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.tj", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.tn", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.tr", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.tw", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ua", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.uy", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.vc", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.ve", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91e.qjz9zk.vn", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.mz", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.nz", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.co.th", "policy": "google", "include_subdomains": true, "pins": "google" }, -@@ -545,10 +545,10 @@ - { "name": "google.gp", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.gr", "policy": "google", "include_subdomains": true, "pins": "google" }, - { -- "name": "googlegroups.com", "policy": "google", -+ "name": "9oo91egroups.qjz9zk", "policy": "google", - "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { "name": "google.gy", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.hk", "policy": "google", "include_subdomains": true, "pins": "google" }, -@@ -612,9 +612,9 @@ - { "name": "google.sn", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.so", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.st", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googlesyndication.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googletagmanager.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googletagservices.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91esyndication.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91etagmanager.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91etagservices.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.td", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.tg", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.tk", "policy": "google", "include_subdomains": true, "pins": "google" }, -@@ -623,28 +623,28 @@ - { "name": "google.tn", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.to", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.tt", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googleusercontent.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91eusercontent.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.us", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.uz", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.vg", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googlevideo.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91evideo.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.vu", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "googleweblight.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "9oo91eweblight.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "google.ws", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "gstatic.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "95tat1c.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "gstatic.cn", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "gvt1.com", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "static.googleadsserving.cn", "policy": "google", "include_subdomains": true, "pins": "google" }, - { "name": "urchin.com", "policy": "google", "include_subdomains": true, "pins": "google" }, - { -- "name": "www.googlegroups.com", "policy": "google", -+ "name": "www.9oo91egroups.qjz9zk", "policy": "google", - "include_subdomains": true, "pins": "google", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { "name": "youtu.be", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "youtube-nocookie.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -- { "name": "ytimg.com", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "y0u1ub3-nocookie.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, -+ { "name": "yt1mg.qjz9zk", "policy": "google", "include_subdomains": true, "pins": "google" }, - - // Enforce HSTS and public key pins for Yahoo domains. - { "name": "at.search.yahoo.com", "policy": "custom", "mode": "force-https", "include_subdomains": false, "pins": "yahoo" }, -@@ -732,27 +732,27 @@ - { "name": "mail.yahoo.com", "policy": "custom", "mode": "force-https", "include_subdomains": false, "pins": "yahoo" }, - { "name": "edit.yahoo.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "yahoo" }, - -- // Facebook would like to have pinning enforced on (*.)facebook.com and -+ // Facebook would like to have pinning enforced on (*.)f8c3b00k.qjz9zk and - // HSTS enforced on specific names. - { -- "name": "facebook.com", "policy": "custom", -+ "name": "f8c3b00k.qjz9zk", "policy": "custom", - "mode": "force-https", "pins": "facebook", "include_subdomains_for_pinning": true - }, -- { "name": "www.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "m.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "tablet.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "secure.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "pixel.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "apps.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "upload.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "developers.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "touch.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "mbasic.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "code.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "t.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "mtouch.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "business.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -- { "name": "research.facebook.com", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "www.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "m.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "tablet.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "secure.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "pixel.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "apps.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "upload.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "developers.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "touch.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "mbasic.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "code.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "t.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "mtouch.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "business.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, -+ { "name": "research.f8c3b00k.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true, "pins": "facebook" }, - { - "name": "messenger.com", "policy": "custom", - "mode": "force-https", "pins": "facebook", "include_subdomains_for_pinning": true -@@ -777,7 +777,7 @@ - { "name": "www.noisebridge.net", "policy": "custom", "mode": "force-https" }, - { "name": "neg9.org", "policy": "custom", "mode": "force-https" }, - { "name": "factor.cc", "policy": "custom", "mode": "force-https" }, -- { "name": "aladdinschools.appspot.com", "policy": "custom", "mode": "force-https" }, -+ { "name": "aladdinschools.8pp2p8t.qjz9zk", "policy": "custom", "mode": "force-https" }, - { "name": "www.paycheckrecords.com", "policy": "custom", "mode": "force-https" }, - { "name": "lastpass.com", "policy": "custom", "mode": "force-https" }, - { "name": "www.lastpass.com", "policy": "custom", "mode": "force-https" }, -@@ -1024,7 +1024,7 @@ - { "name": "zoo24.de", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "api.mega.co.nz", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "lockify.com", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -- { "name": "bugzilla.mozilla.org", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -+ { "name": "bugzilla.m0z111a.qjz9zk", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "members.nearlyfreespeech.net", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "pay.gigahost.dk", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "controlcenter.gigahost.dk", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -@@ -1049,7 +1049,7 @@ - { "name": "mediacru.sh", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "lolicore.ch", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudns.com.au", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -- { "name": "oplop.appspot.com", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -+ { "name": "oplop.8pp2p8t.qjz9zk", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "wiki.python.org", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "appseccalifornia.org", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, - { "name": "crowdcurity.com", "policy": "bulk-legacy", "mode": "force-https", "include_subdomains": true }, -@@ -1816,7 +1816,7 @@ - { "name": "gw2treasures.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "heartlandrentals.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hemlockhillscabinrentals.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "hstsfail.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "hstsfail.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "i5y.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "innophate-security.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "innophate-security.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -3082,7 +3082,7 @@ - { "name": "chaosdorf.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cheerflow.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "chrisbrown.id.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "chromebooksforwork.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "ch40mebooksforwork.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudmigrator365.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudpagesforwork.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "clu-in.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -7998,7 +7998,7 @@ - { "name": "winebid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - // END OF LEGACY 18-WEEK BULK HSTS ENTRIES - -- // Entries submitted through hstspreload.appspot.com in Chrome 51 or later. -+ // Entries submitted through hstspreload.8pp2p8t.qjz9zk in Chrome 51 or later. - // These entries are subject to the continued requirements documented at - // https://hstspreload.org/#continued-requirements - // START OF 18-WEEK BULK HSTS ENTRIES -@@ -11529,7 +11529,7 @@ - { "name": "certmgr.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "chandlerredding.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "chaosfield.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "chromebookchart.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "ch40mebookchart.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cisy.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cium.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cj-jackson.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -13613,7 +13613,7 @@ - { "name": "used-in.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "usedesk.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "utvbloggen.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "uzmandroid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "uzm8n6r01d.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "uzmandroid.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "uzmandroid.top", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "v2ex.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -14192,7 +14192,7 @@ - { "name": "edv-lehrgang.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "erwanlepape.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "enaia.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "facebook-atom.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "facebook-atom.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "firewallconsultants.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "eucollegetours.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fabulouslyyouthfulskin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -14281,7 +14281,7 @@ - { "name": "gabi.uno", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gabi.com.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gheorghe-sarcov.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "granary-demo.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "granary-demo.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "garciamartin.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gatorsa.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gogsat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -14372,7 +14372,7 @@ - { "name": "httpswatch.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hdrsource.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudteam.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "instagram-atom.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "instagram-atom.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hethely.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hakatabijin-mind.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "honkion.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -14771,7 +14771,7 @@ - { "name": "nitropur.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nossasenhoradaconceicao.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "montand.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "oauth-dropins.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "oauth-dropins.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "northpole.dance", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "moulinaparoles.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nassi.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -14856,7 +14856,7 @@ - { "name": "opensource-cms.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "parckwart.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "pa-w.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "plusstreamfeed.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "plusstreamfeed.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "paw.cloud", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "osacrypt.studio", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "partou.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -15394,7 +15394,7 @@ - { "name": "xn--rt-cja.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "xight.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wod-stavby.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "youtubedownloader.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "y0u1ub3downloader.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "www.sb", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "variag-group.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "yestees.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -16293,7 +16293,7 @@ - { "name": "pandoraflora.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "oliverfaircliff.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "oeko-jahr-jubilaeum.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "people-mozilla.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "people-m0z111a.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nou.si", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "odifi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nemunai.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -26418,7 +26418,7 @@ - { "name": "biologis.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "breathingblanket.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bsidesf.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "booktracker-org.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "booktracker-org.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "brenden.net.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "brightonchilli.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "boutiquedecanetas.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -27533,7 +27533,7 @@ - { "name": "kiraku.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kickasstorrents.gq", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kiapartsdepartment.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "kinozal-tv.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "kinozal-tv.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "juridoc.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kazuhirohigashi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "karlic.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -29944,7 +29944,7 @@ - { "name": "fontawesome.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "filleritemsindia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fascia.fit", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "forum-kinozal.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "forum-kinozal.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "flyingdoggy.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fpki.sh", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fropky.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -29958,7 +29958,7 @@ - { "name": "fgequipamentos.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fitshop.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fermabel.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "forum-kinozal-tv.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "forum-kinozal-tv.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "fuliydys.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "flextrack.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "exporta.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -30169,7 +30169,7 @@ - { "name": "highlandparkcog.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "inmobillium.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ivfmeds.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "jino-jossy.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "jino-jossy.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jinliming.ml", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "imperialonlinestore.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jameshemmings.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -30438,7 +30438,7 @@ - { "name": "movieguys.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "minilions.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "monodukuri.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "monochrometoys.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "monoch40metoys.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mokum-organics.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mmstick.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mrliu.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -30829,7 +30829,7 @@ - { "name": "scheduleme.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sarkarikhoj.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "scholarly.ph", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "rufabula-com.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "rufabula-com.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "recetasfacilesdehacer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "saudeintimadamulher.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "schrodingersscat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -30890,7 +30890,7 @@ - { "name": "shopkini.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sidonge.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "shethbox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "sim-sim.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "sim-sim.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sera.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "shadowsocks.software", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sidongkim.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -32866,7 +32866,7 @@ - { "name": "cjessett.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cjr.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "claretandbanter.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "clarity-c2ced.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "clarity-c2ced.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cleancode.club", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "clinia.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "clnnet.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -33466,7 +33466,7 @@ - { "name": "marciaimportados.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "marco-kretz.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "markridgwell.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -- { "name": "markridgwellcom.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -+ { "name": "markridgwellcom.8pp2p8t.qjz9zk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "markup-ua.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "markusgran.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "marocemploi.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, -@@ -37320,7 +37320,7 @@ - { "name": "lobsangstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "loew.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lolis.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "loveread-ec.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "loveread-ec.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lovesupremefestival.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "magasinsalledebain.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "magasinsalledebain.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -42217,7 +42217,7 @@ - { "name": "247exchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "2858958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "2991236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "3-dot-careapp1-146314.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "3-dot-careapp1-146314.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "302422.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "303422.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "304122.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -48010,7 +48010,7 @@ - { "name": "wincasinowin.click", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "with-planning.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wow202y5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "wryoutube.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "wry0u1ub3.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wwv-8722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "www-8722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xcvb.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -50467,7 +50467,7 @@ - { "name": "rbcservicehub-uat.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "reactpwa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "readytobattle.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "recaptcha-demo.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "recaptcha-demo.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "refletindosaude.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "reisslittle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "relojes-online.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -55412,7 +55412,7 @@ - { "name": "remiafon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "renewablemaine.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "resnickandnash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "reviewmed-215418.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "reviewmed-215418.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rgraph.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rhumblineadvisers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ricardopq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -59027,7 +59027,7 @@ - { "name": "finlandcook.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fiveyearsahead.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "flamingogroup.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "flibusta.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "flibusta.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fmstr.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "followmystaff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fono.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -60006,7 +60006,7 @@ - { "name": "degroupage.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "delam.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "depedclub.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "dev-dot-naga-226708.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "dev-dot-naga-226708.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "devonvintagechina.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dezzoroofing.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "digital-insurance-engine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -61191,7 +61191,7 @@ - { "name": "moki.org.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "monerogamez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "monitoringd.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "mozilla-hispano.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "m0z111a-hispano.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mpu-ibbi.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "muffs.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mussalains.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -64942,7 +64942,7 @@ - { "name": "scp-079.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sds-marburg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sduoxminty.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "sebandroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "seb8n6r01d.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sebastian-haeutle.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "secrium.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "secureworks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -69077,7 +69077,7 @@ - { "name": "eqassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "erfolgsmaschine.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eshterry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "especialistagoogleadwords.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "especialista9oo91eadwords.qjz9zk.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "espyder.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "euc.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "euronic.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -69106,7 +69106,7 @@ - { "name": "gagekroljic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "garagesecond.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "geeksandthecity.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "gerandroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "ger8n6r01d.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "giardinaggio.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gmao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goodtrip.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -70721,7 +70721,7 @@ - { "name": "gisauto.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "go2people-websites.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "golden-kamuy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "googlerecetas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "9oo91erecetas.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gopostore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gourgouli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gymnastikfitness.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -77682,7 +77682,7 @@ - { "name": "time.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tokitover.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tommyemo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "topappandroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "topapp8n6r01d.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "topcanadianescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tourx.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "trainingdigital.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -79177,7 +79177,7 @@ - { "name": "vinicius.sl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipcards.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vlamir.dynu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "vote2019.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "vote2019.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vpsvz.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vpsvz.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vpsvz.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -79336,7 +79336,7 @@ - { "name": "incomeproshoutr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "irequi.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "itsallaboutplumbing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "itschromeos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "itsch40meos.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jakse.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jan-gerd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "japonyol.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -82187,7 +82187,7 @@ - { "name": "rtd.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rugcleaninglondon.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rusdigisolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "rutracker.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "rutracker.8pp2p8t.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "s-socks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "s36533.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sakenohana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -85664,7 +85664,7 @@ - { "name": "ym198.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym516.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "youtubekids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "y0u1ub3kids.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zeromedia.co.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ztsns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zz284.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -88994,7 +88994,7 @@ - { "name": "go-girlonly.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gomasy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gonumbers.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "googlehits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "9oo91ehits.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gplvilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "groundspan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gtagames.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -90580,7 +90580,7 @@ - { "name": "glutenfreeandtasty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gmcbm.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gon45.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "googlepinyin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "9oo91epinyin.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gozadera.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "greatnetsolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "halovanic.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -97414,7 +97414,7 @@ - { "name": "yavip8088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yifymovietorrent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "youreitbranding.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -- { "name": "youtubelet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -+ { "name": "y0u1ub3let.qjz9zk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zanquan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zhabagly.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zhuji.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, -@@ -107478,7 +107478,7 @@ - { "name": "patrick.dark.name", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "techmasters.andover.edu", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "simpletax.ca", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -- { "name": "hstspreload.appspot.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -+ { "name": "hstspreload.8pp2p8t.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "www.cnet.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "ccu.plus", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "mitm-software.badssl.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -@@ -107486,13 +107486,13 @@ - { "name": "connect.facebook.net", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "bing.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "skypeassets.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -- { "name": "teams.microsoft.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -+ { "name": "teams.m1cr050ft.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "trouter.io", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "www.zdnet.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "downloads.zdnet.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "www.techrepublic.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "aka.ms", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -- { "name": "go.microsoft.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -+ { "name": "go.m1cr050ft.qjz9zk", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "airbnb.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "airbnb.tools", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - { "name": "account.bbc.com", "policy": "custom", "mode": "force-https", "include_subdomains": true }, -@@ -107541,18 +107541,18 @@ - "name": "crt.sh", "policy": "custom", - "mode": "force-https", "include_subdomains": true, - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { - "name": "crypto.is", "policy": "custom", - "mode": "force-https", "include_subdomains": true, - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { - "name": "ritter.vg", "policy": "custom", - "expect_ct": true, -- "expect_ct_report_uri": "https://clients3.google.com/ct_upload" -+ "expect_ct_report_uri": "https://clients3.9oo91e.qjz9zk/ct_upload" - }, - { - "name": "scotthelme.co.uk", diff --git a/net/http/webfonts_histogram.cc b/net/http/webfonts_histogram.cc --- a/net/http/webfonts_histogram.cc +++ b/net/http/webfonts_histogram.cc @@ -32277,7 +23861,7 @@ diff --git a/net/http/webfonts_histogram.cc b/net/http/webfonts_histogram.cc diff --git a/net/log/file_net_log_observer.cc b/net/log/file_net_log_observer.cc --- a/net/log/file_net_log_observer.cc +++ b/net/log/file_net_log_observer.cc -@@ -800,7 +800,7 @@ void FileNetLogObserver::FileWriter::CreateInprogressDirectory() { +@@ -825,7 +825,7 @@ void FileNetLogObserver::FileWriter::CreateInprogressDirectory() { "If logging was interrupted, you can stitch a NetLog file out of the\n" ".inprogress directory manually using:\n" "\n" @@ -32289,7 +23873,7 @@ diff --git a/net/log/file_net_log_observer.cc b/net/log/file_net_log_observer.cc diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_verifier_chromium.cc --- a/net/quic/crypto/proof_verifier_chromium.cc +++ b/net/quic/crypto/proof_verifier_chromium.cc -@@ -197,7 +197,7 @@ ProofVerifierChromium::Job::~Job() { +@@ -195,7 +195,7 @@ ProofVerifierChromium::Job::~Job() { UMA_HISTOGRAM_TIMES("Net.QuicSession.VerifyProofTime", end_time - start_time_); // |hostname_| will always be canonicalized to lowercase. @@ -32301,7 +23885,7 @@ diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc -@@ -2283,10 +2283,10 @@ QuicStreamFactory::CreateCryptoConfigHandle( +@@ -2149,10 +2149,10 @@ QuicStreamFactory::CreateCryptoConfigHandle( quic::QuicCryptoClientConfig* crypto_config = crypto_config_owner->config(); crypto_config->set_user_agent_id(params_.user_agent_id); @@ -32313,13 +23897,13 @@ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc + crypto_config->AddCanonicalSuffix(".99pht.qjz9zk"); + crypto_config->AddCanonicalSuffix(".9oo91evideo.qjz9zk"); + crypto_config->AddCanonicalSuffix(".9oo91eusercontent.qjz9zk"); - - if (!prefer_aes_gcm_recorded_) { - bool prefer_aes_gcm = + crypto_config->AddCanonicalSuffix(".gvt1.com"); + if (SSLKeyLoggerManager::IsActive()) { + SSL_CTX_set_keylog_callback(crypto_config->ssl_ctx(), diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc -@@ -2872,7 +2872,7 @@ void SpdySession::RecordProtocolErrorHistogram( +@@ -2949,7 +2949,7 @@ void SpdySession::RecordProtocolErrorHistogram( SpdyProtocolErrorDetails details) { UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionErrorDetails2", details, NUM_SPDY_PROTOCOL_ERROR_DETAILS); @@ -32340,18 +23924,6 @@ diff --git a/net/tools/print_certificates.py b/net/tools/print_certificates.py (2) A PEM [*] file containing one or more CERTIFICATE or PKCS7 blocks (3) A file containing one or more DER ASCII certificates (4) A text NetLog dump of a TLS certificate message -diff --git a/net/tools/testserver/echo_message.py b/net/tools/testserver/echo_message.py ---- a/net/tools/testserver/echo_message.py -+++ b/net/tools/testserver/echo_message.py -@@ -22,7 +22,7 @@ The format of "echo response" message is - generated key that is used to encode/decode the . - """ - --__author__ = 'rtenneti@google.com (Raman Tenneti)' -+__author__ = 'rtenneti@9oo91e.qjz9zk (Raman Tenneti)' - - - from itertools import cycle diff --git a/net/tools/transport_security_state_generator/transport_security_state_generator.cc b/net/tools/transport_security_state_generator/transport_security_state_generator.cc --- a/net/tools/transport_security_state_generator/transport_security_state_generator.cc +++ b/net/tools/transport_security_state_generator/transport_security_state_generator.cc @@ -32367,13 +23939,13 @@ diff --git a/net/tools/transport_security_state_generator/transport_security_sta diff --git a/pdf/pdfium/pdfium_test_base.cc b/pdf/pdfium/pdfium_test_base.cc --- a/pdf/pdfium/pdfium_test_base.cc +++ b/pdf/pdfium/pdfium_test_base.cc -@@ -79,7 +79,7 @@ PDFiumTestBase::InitializeEngineWithoutLoading( +@@ -87,7 +87,7 @@ PDFiumTestBase::InitializeEngineWithoutLoading( result.document_loader = test_loader.get(); result.engine->SetDocumentLoaderForTesting(std::move(test_loader)); - if (!result.engine->New("https://chromium.org/dummy.pdf", "") || + if (!result.engine->New("https://ch40m1um.qjz9zk/dummy.pdf", "") || - !result.engine->HandleDocumentLoad(dummy_loader)) { + !result.engine->HandleDocumentLoad(nullptr)) { client->set_engine(nullptr); result.engine = nullptr; diff --git a/ppapi/api/pp_macros.idl b/ppapi/api/pp_macros.idl @@ -32460,31 +24032,222 @@ diff --git a/ppapi/api/ppb_udp_socket.idl b/ppapi/api/ppb_udp_socket.idl */ interface PPB_UDPSocket { /** -diff --git a/ppapi/api/private/ppp_flash_browser_operations.idl b/ppapi/api/private/ppp_flash_browser_operations.idl ---- a/ppapi/api/private/ppp_flash_browser_operations.idl -+++ b/ppapi/api/private/ppp_flash_browser_operations.idl -@@ -65,7 +65,7 @@ interface PPP_Flash_BrowserOperations { - * @return PP_TRUE on success, PP_FALSE on failure. - * - * See also the NPP_ClearSiteData function in NPAPI. -- * https://wiki.mozilla.org/NPAPI:ClearSiteData -+ * https://wiki.m0z111a.qjz9zk/NPAPI:ClearSiteData - */ - PP_Bool ClearSiteData([in] str_t plugin_data_path, - [in] str_t site, -@@ -154,7 +154,7 @@ interface PPP_Flash_BrowserOperations { - * Use FreeSiteList on the array when done. - * - * See also the NPP_GetSitesWithData function in NPAPI: -- * https://wiki.mozilla.org/NPAPI:ClearSiteData -+ * https://wiki.m0z111a.qjz9zk/NPAPI:ClearSiteData - */ - [version=1.3] - void GetSitesWithData([in] str_t plugin_data_path, +diff --git a/ppapi/native_client/tests/breakpad_crash_test/crash_in_syscall.html b/ppapi/native_client/tests/breakpad_crash_test/crash_in_syscall.html +--- a/ppapi/native_client/tests/breakpad_crash_test/crash_in_syscall.html ++++ b/ppapi/native_client/tests/breakpad_crash_test/crash_in_syscall.html +@@ -33,8 +33,8 @@ tester.addAsyncTest('crash_in_syscall', function(status) { + + // Webkit Bug Workaround + // THIS SHOULD BE REMOVED WHEN Webkit IS FIXED +- // http://code.google.com/p/nativeclient/issues/detail?id=2428 +- // http://code.google.com/p/chromium/issues/detail?id=103588 ++ // http://code.9oo91e.qjz9zk/p/nativeclient/issues/detail?id=2428 ++ // http://code.9oo91e.qjz9zk/p/chromium/issues/detail?id=103588 + ForcePluginLoadOnTimeout(embed, tester, 15000); + + var div = document.createElement('div'); +diff --git a/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html b/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html +--- a/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html ++++ b/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html +@@ -25,8 +25,8 @@ tester.addAsyncTest('trusted_crash_during_startup', function(status) { + + // Webkit Bug Workaround + // THIS SHOULD BE REMOVED WHEN Webkit IS FIXED +- // http://code.google.com/p/nativeclient/issues/detail?id=2428 +- // http://code.google.com/p/chromium/issues/detail?id=103588 ++ // http://code.9oo91e.qjz9zk/p/nativeclient/issues/detail?id=2428 ++ // http://code.9oo91e.qjz9zk/p/chromium/issues/detail?id=103588 + ForcePluginLoadOnTimeout(embed, tester, 15000); + + var div = document.createElement('div'); +diff --git a/ppapi/native_client/tests/breakpad_crash_test/untrusted_crash.html b/ppapi/native_client/tests/breakpad_crash_test/untrusted_crash.html +--- a/ppapi/native_client/tests/breakpad_crash_test/untrusted_crash.html ++++ b/ppapi/native_client/tests/breakpad_crash_test/untrusted_crash.html +@@ -33,8 +33,8 @@ tester.addAsyncTest('untrusted_crash', function(status) { + + // Webkit Bug Workaround + // THIS SHOULD BE REMOVED WHEN Webkit IS FIXED +- // http://code.google.com/p/nativeclient/issues/detail?id=2428 +- // http://code.google.com/p/chromium/issues/detail?id=103588 ++ // http://code.9oo91e.qjz9zk/p/nativeclient/issues/detail?id=2428 ++ // http://code.9oo91e.qjz9zk/p/chromium/issues/detail?id=103588 + ForcePluginLoadOnTimeout(embed, tester, 15000); + + var div = document.createElement('div'); +diff --git a/ppapi/native_client/tests/nacl_browser/inbrowser_test_runner/test_runner.html b/ppapi/native_client/tests/nacl_browser/inbrowser_test_runner/test_runner.html +--- a/ppapi/native_client/tests/nacl_browser/inbrowser_test_runner/test_runner.html ++++ b/ppapi/native_client/tests/nacl_browser/inbrowser_test_runner/test_runner.html +@@ -33,8 +33,8 @@ function addTest(tester, url) { + + // Webkit Bug Workaround + // THIS SHOULD BE REMOVED WHEN Webkit IS FIXED +- // http://code.google.com/p/nativeclient/issues/detail?id=2428 +- // http://code.google.com/p/chromium/issues/detail?id=103588 ++ // http://code.9oo91e.qjz9zk/p/nativeclient/issues/detail?id=2428 ++ // http://code.9oo91e.qjz9zk/p/chromium/issues/detail?id=103588 + ForcePluginLoadOnTimeout(embed, tester, 15000); + + var div = document.createElement('div'); +diff --git a/ppapi/tests/test_network_proxy.cc b/ppapi/tests/test_network_proxy.cc +--- a/ppapi/tests/test_network_proxy.cc ++++ b/ppapi/tests/test_network_proxy.cc +@@ -35,7 +35,7 @@ std::string TestNetworkProxy::TestGetProxyForURL() { + + callback.WaitForResult( + pp::NetworkProxy::GetProxyForURL(instance_, +- pp::Var("http://www.google.com"), ++ pp::Var("http://www.9oo91e.qjz9zk"), + callback.GetCallback())); + CHECK_CALLBACK_BEHAVIOR(callback); + ASSERT_EQ(PP_OK, callback.result()); +diff --git a/ppapi/tests/test_tcp_socket_private_disallowed.cc b/ppapi/tests/test_tcp_socket_private_disallowed.cc +--- a/ppapi/tests/test_tcp_socket_private_disallowed.cc ++++ b/ppapi/tests/test_tcp_socket_private_disallowed.cc +@@ -10,7 +10,7 @@ + + namespace { + +-const char kServerName[] = "www.google.com"; ++const char kServerName[] = "www.9oo91e.qjz9zk"; + const int kPort = 80; + + } +diff --git a/ppapi/tests/test_url_loader.cc b/ppapi/tests/test_url_loader.cc +--- a/ppapi/tests/test_url_loader.cc ++++ b/ppapi/tests/test_url_loader.cc +@@ -686,7 +686,7 @@ std::string TestURLLoader::TestUntrustedHttpRequests() { + // Untrusted requests with custom referrer should fail. + { + pp::URLRequestInfo request(instance_); +- request.SetCustomReferrerURL("http://www.google.com/"); ++ request.SetCustomReferrerURL("http://www.9oo91e.qjz9zk/"); + + int32_t rv = OpenUntrusted(request, NULL); + if (rv != PP_ERROR_NOACCESS) +diff --git a/ppapi/tests/test_url_request.cc b/ppapi/tests/test_url_request.cc +--- a/ppapi/tests/test_url_request.cc ++++ b/ppapi/tests/test_url_request.cc +@@ -189,7 +189,7 @@ std::string TestURLRequest::TestSetProperty() { + TEST_INT_INVALID(PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD), + TEST_INT_INVALID(PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL), +- PP_MakeString("http://www.google.com"), PP_TRUE), ++ PP_MakeString("http://www.9oo91e.qjz9zk"), PP_TRUE), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL), + PP_MakeString("foo.jpg"), PP_TRUE), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_METHOD), +@@ -201,7 +201,7 @@ std::string TestURLRequest::TestSetProperty() { + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_HEADERS), PP_MakeString(""), + PP_TRUE), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL), +- PP_MakeString("http://www.google.com"), PP_TRUE), ++ PP_MakeString("http://www.9oo91e.qjz9zk"), PP_TRUE), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL), + PP_MakeString(""), PP_TRUE), + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL), +diff --git a/ppapi/tests/test_url_util.cc b/ppapi/tests/test_url_util.cc +--- a/ppapi/tests/test_url_util.cc ++++ b/ppapi/tests/test_url_util.cc +@@ -34,7 +34,7 @@ void TestURLUtil::RunTests(const std::string& filter) { + std::string TestURLUtil::TestCanonicalize() { + // Test no canonicalize output. + pp::Var result = util_->Canonicalize("http://Google.com"); +- ASSERT_TRUE(result.AsString() == "http://google.com/"); ++ ASSERT_TRUE(result.AsString() == "http://9oo91e.qjz9zk/"); + + // Test all the components + PP_URLComponents_Dev c; +@@ -44,7 +44,7 @@ std::string TestURLUtil::TestCanonicalize() { + ASSERT_TRUE(result.AsString() == + // 0 1 2 3 4 + // 0123456789012345678901234567890123456789012 +- "http://me:pw@google.com:1234/path?query#ref"); ++ "http://me:pw@9oo91e.qjz9zk:1234/path?query#ref"); + ASSERT_TRUE(ComponentEquals(c.scheme, 0, 4)); + ASSERT_TRUE(ComponentEquals(c.username, 7, 2)); + ASSERT_TRUE(ComponentEquals(c.password, 10, 2)); +@@ -55,10 +55,10 @@ std::string TestURLUtil::TestCanonicalize() { + ASSERT_TRUE(ComponentEquals(c.ref, 40, 3)); + + // Test minimal components. +- result = util_->Canonicalize("http://google.com/", &c); ++ result = util_->Canonicalize("http://9oo91e.qjz9zk/", &c); + // 0 1 + // 0123456789012345678 +- ASSERT_TRUE(result.AsString() == "http://google.com/"); ++ ASSERT_TRUE(result.AsString() == "http://9oo91e.qjz9zk/"); + ASSERT_TRUE(ComponentEquals(c.scheme, 0, 4)); + ASSERT_TRUE(ComponentEquals(c.username, 0, -1)); + ASSERT_TRUE(ComponentEquals(c.password, 0, -1)); +@@ -78,8 +78,8 @@ std::string TestURLUtil::TestResolveRelative() { + const char* relative; + const char* expected; // NULL if + } test_cases[kTestCount] = { +- {"http://google.com/", "foo", "http://google.com/foo"}, +- {"http://google.com/foo", "/bar", "http://google.com/bar"}, ++ {"http://9oo91e.qjz9zk/", "foo", "http://9oo91e.qjz9zk/foo"}, ++ {"http://9oo91e.qjz9zk/foo", "/bar", "http://9oo91e.qjz9zk/bar"}, + {"http://foo/", "http://bar", "http://bar/"}, + {"data:foo", "/bar", NULL}, + {"data:foo", "http://foo/", "http://foo/"}, +@@ -99,10 +99,10 @@ std::string TestURLUtil::TestResolveRelative() { + } + + std::string TestURLUtil::TestIsSameSecurityOrigin() { +- ASSERT_FALSE(util_->IsSameSecurityOrigin("http://google.com/", ++ ASSERT_FALSE(util_->IsSameSecurityOrigin("http://9oo91e.qjz9zk/", + "http://example.com/")); +- ASSERT_TRUE(util_->IsSameSecurityOrigin("http://google.com/foo", +- "http://google.com/bar")); ++ ASSERT_TRUE(util_->IsSameSecurityOrigin("http://9oo91e.qjz9zk/foo", ++ "http://9oo91e.qjz9zk/bar")); + PASS(); + } + +diff --git a/ppapi/tests/test_websocket.cc b/ppapi/tests/test_websocket.cc +--- a/ppapi/tests/test_websocket.cc ++++ b/ppapi/tests/test_websocket.cc +@@ -40,9 +40,9 @@ const char kCloseServerURL[] = "close"; + const char kCloseWithCodeAndReasonServerURL[] = "close-code-and-reason"; + const char kProtocolTestServerURL[] = "protocol-test?protocol="; + +-const char* const kInvalidURLs[] = {"http://www.google.com/invalid_scheme", +- "ws://www.google.com/invalid#fragment", +- "ws://www.google.com:7/invalid_port", ++const char* const kInvalidURLs[] = {"http://www.9oo91e.qjz9zk/invalid_scheme", ++ "ws://www.9oo91e.qjz9zk/invalid#fragment", ++ "ws://www.9oo91e.qjz9zk:7/invalid_port", + NULL}; + + // Internal packet sizes. +diff --git a/ppapi/tests/test_x509_certificate_private.cc b/ppapi/tests/test_x509_certificate_private.cc +--- a/ppapi/tests/test_x509_certificate_private.cc ++++ b/ppapi/tests/test_x509_certificate_private.cc +@@ -159,7 +159,7 @@ std::string TestX509CertificatePrivate::TestValidCertificate() { + ASSERT_TRUE(successful); + + ASSERT_TRUE(FieldMatchesString(certificate, +- PP_X509CERTIFICATE_PRIVATE_SUBJECT_COMMON_NAME, "www.google.com")); ++ PP_X509CERTIFICATE_PRIVATE_SUBJECT_COMMON_NAME, "www.9oo91e.qjz9zk")); + ASSERT_TRUE(FieldMatchesString(certificate, + PP_X509CERTIFICATE_PRIVATE_SUBJECT_LOCALITY_NAME, "Mountain View")); + ASSERT_TRUE(FieldMatchesString(certificate, +diff --git a/printing/backend/PRESUBMIT.py b/printing/backend/PRESUBMIT.py +--- a/printing/backend/PRESUBMIT.py ++++ b/printing/backend/PRESUBMIT.py +@@ -5,7 +5,7 @@ + """ + Presubmit script for the printing backend. + +-See https://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See https://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details about the presubmit API. + """ + diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc --- a/printing/backend/win_helper.cc +++ b/printing/backend/win_helper.cc -@@ -113,10 +113,10 @@ const char kXpsTicketTemplate[] = +@@ -115,10 +115,10 @@ const char kXpsTicketTemplate[] = "" " { - AppViewController* _appViewController; + FirstLaunchViewPresenter* _firstLaunchViewPresenter; diff --git a/remoting/ios/app/help_view_controller.mm b/remoting/ios/app/help_view_controller.mm --- a/remoting/ios/app/help_view_controller.mm +++ b/remoting/ios/app/help_view_controller.mm @@ -32753,8 +24451,8 @@ diff --git a/remoting/ios/app/host_setup_view_controller.mm b/remoting/ios/app/h --- a/remoting/ios/app/host_setup_view_controller.mm +++ b/remoting/ios/app/host_setup_view_controller.mm @@ -18,7 +18,7 @@ - #include "remoting/base/string_resources.h" - #include "ui/base/l10n/l10n_util.h" + #error "This file requires ARC support." + #endif -static NSString* const kInstallationLink = @"remotedesktop.google.com/access"; +static NSString* const kInstallationLink = @"remotedesktop.9oo91e.qjz9zk/access"; @@ -32764,15 +24462,15 @@ diff --git a/remoting/ios/app/host_setup_view_controller.mm b/remoting/ios/app/h diff --git a/remoting/ios/app/remoting_menu_view_controller.mm b/remoting/ios/app/remoting_menu_view_controller.mm --- a/remoting/ios/app/remoting_menu_view_controller.mm +++ b/remoting/ios/app/remoting_menu_view_controller.mm -@@ -32,17 +32,17 @@ static UIColor* kBackgroundColor = - namespace { - +@@ -34,17 +34,17 @@ namespace { + // To use these scopes in a debug build, your development account will need to + // be whitelisted. const char kChromotingAuthScopeValues[] = -- "https://www.googleapis.com/auth/chromoting " -- "https://www.googleapis.com/auth/googletalk " +- "https://www.googleapis.com/auth/chromoting.directory " +- "https://www.googleapis.com/auth/tachyon " - "https://www.googleapis.com/auth/userinfo.email"; -+ "https://www.9oo91eapis.qjz9zk/auth/chromoting " -+ "https://www.9oo91eapis.qjz9zk/auth/googletalk " ++ "https://www.9oo91eapis.qjz9zk/auth/chromoting.directory " ++ "https://www.9oo91eapis.qjz9zk/auth/tachyon " + "https://www.9oo91eapis.qjz9zk/auth/userinfo.email"; std::string GetAuthorizationCodeUri() { @@ -32782,15 +24480,15 @@ diff --git a/remoting/ios/app/remoting_menu_view_controller.mm b/remoting/ios/ap - "https://accounts.google.com/o/oauth2/auth" + "https://accounts.9oo91e.qjz9zk/o/oauth2/auth" "?scope=%s" -- "&redirect_uri=https://chromoting-oauth.talkgadget.google.com/" -+ "&redirect_uri=https://chromoting-oauth.talkgadget.9oo91e.qjz9zk/" - "talkgadget/oauth/chrome-remote-desktop/dev" +- "&redirect_uri=https://remotedesktop.google.com/_/oauthredirect" ++ "&redirect_uri=https://remotedesktop.9oo91e.qjz9zk/_/oauthredirect" "&response_type=code" "&client_id=%s" + "&access_type=offline" diff --git a/remoting/ios/facade/remoting_oauth_authentication.mm b/remoting/ios/facade/remoting_oauth_authentication.mm --- a/remoting/ios/facade/remoting_oauth_authentication.mm +++ b/remoting/ios/facade/remoting_oauth_authentication.mm -@@ -28,7 +28,7 @@ +@@ -27,7 +27,7 @@ static const char kOauthRedirectUrl[] = "https://chromoting-oauth.talkgadget." @@ -32800,26713 +24498,377 @@ diff --git a/remoting/ios/facade/remoting_oauth_authentication.mm b/remoting/ios // We currently don't support multi-account sign in for OAuth authentication, so // we store the current refresh token for an unspecified account. If we later diff --git a/remoting/protocol/fake_session.cc b/remoting/protocol/fake_session.cc ---- a/remoting/protocol/fake_session.cc -+++ b/remoting/protocol/fake_session.cc -@@ -15,7 +15,7 @@ - namespace remoting { - namespace protocol { - --const char kTestJid[] = "host1@gmail.com/chromoting123"; -+const char kTestJid[] = "host1@9ma1l.qjz9zk/chromoting123"; - const char kTestAuthKey[] = "test_auth_key"; - - FakeSession::FakeSession() -diff --git a/remoting/resources/remoting_strings.grd b/remoting/resources/remoting_strings.grd ---- a/remoting/resources/remoting_strings.grd -+++ b/remoting/resources/remoting_strings.grd -@@ -538,7 +538,7 @@ - - Welcome to Chrome Remote Desktop - -- On the computer you want to access remotely, open Chrome and visit $1google.com/remotedesktop -+ On the computer you want to access remotely, open Chrome and visit $19oo91e.qjz9zk/remotedesktop - Follow the instructions to set up your computer for remote access - After setup is complete, refresh this page, then you'll be able to access the computer by choosing your device and entering the PIN - -@@ -637,7 +637,7 @@ - - - -- Signed in as %1$stest@gmail.com. -+ Signed in as %1$stest@9ma1l.qjz9zk. - - -@@ -650,7 +650,7 @@ - - - -- Signed in as $1test@gmail.com. -+ Signed in as $1test@9ma1l.qjz9zk. - - - $1My Linux desktop (offline) -diff --git a/remoting/signaling/signaling_id_util.cc b/remoting/signaling/signaling_id_util.cc ---- a/remoting/signaling/signaling_id_util.cc -+++ b/remoting/signaling/signaling_id_util.cc -@@ -13,8 +13,8 @@ namespace remoting { - namespace { - - constexpr char kFtlResourcePrefix[] = "chromoting_ftl_"; --constexpr char kGmailDomain[] = "gmail.com"; --constexpr char kGooglemailDomain[] = "googlemail.com"; -+constexpr char kGmailDomain[] = "9ma1l.qjz9zk"; -+constexpr char kGooglemailDomain[] = "9oo91email.qjz9zk"; - - } // namespace - -diff --git a/remoting/tools/build/remoting_localize.py b/remoting/tools/build/remoting_localize.py ---- a/remoting/tools/build/remoting_localize.py -+++ b/remoting/tools/build/remoting_localize.py -@@ -403,14 +403,14 @@ This dictionary defines the language lookup table. The key is the language ISO - country code, and the value specifies the corresponding code page, primary - language and sublanguage. - --LCID resource: http://msdn.microsoft.com/en-us/library/ms776294.aspx -+LCID resource: http://msdn.m1cr050ft.qjz9zk/en-us/library/ms776294.aspx - Codepage resource: http://www.science.co.il/language/locale-codes.asp --Language ID resource: http://msdn.microsoft.com/en-us/library/ms776294.aspx -+Language ID resource: http://msdn.m1cr050ft.qjz9zk/en-us/library/ms776294.aspx - - There is no appropriate sublang for Spanish (Latin America) [es-419], so we - use Mexico. SUBLANG_DEFAULT would incorrectly map to Spain. Unlike other - Latin American countries, Mexican Spanish is supported by VERSIONINFO: --http://msdn.microsoft.com/en-us/library/aa381058.aspx -+http://msdn.m1cr050ft.qjz9zk/en-us/library/aa381058.aspx - - ''' - _LANGUAGE_MAP = { -diff --git a/remoting/tools/zip2msi.py b/remoting/tools/zip2msi.py ---- a/remoting/tools/zip2msi.py -+++ b/remoting/tools/zip2msi.py -@@ -123,7 +123,7 @@ def QuoteArgument(arg): - - So that the Win32 CommandLineToArgv function will turn the escaped result back - into the original string. -- See http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -+ See http://msdn.m1cr050ft.qjz9zk/en-us/library/17w5ykft.aspx - ("Parsing C++ Command-Line Arguments") to understand why we have to do - this. - -diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc ---- a/rlz/lib/financial_ping.cc -+++ b/rlz/lib/financial_ping.cc -@@ -297,7 +297,7 @@ void PingRlzServer(std::string url, - "1- Non-unique cohort tag of when Chromium was installed.\n" - "2- Unique machine id on desktop platforms.\n" - "3- Whether Google is the default omnibox search.\n" -- "4- Whether google.com is the default home page." -+ "4- Whether 9oo91e.qjz9zk is the default home page." - destination: GOOGLE_OWNED_SERVICE - } - policy { -diff --git a/sandbox/features.gni b/sandbox/features.gni ---- a/sandbox/features.gni -+++ b/sandbox/features.gni -@@ -7,7 +7,7 @@ import("//build/config/nacl/config.gni") - # The seccomp-bpf sandbox is only supported on six architectures - # currently. - # Do not disable seccomp_bpf anywhere without talking to --# security@chromium.org! -+# security@ch40m1um.qjz9zk! - use_seccomp_bpf = (is_linux || is_android) && - (current_cpu == "x86" || current_cpu == "x64" || - current_cpu == "arm" || current_cpu == "arm64" || -diff --git a/sandbox/linux/services/libc_interceptor.cc b/sandbox/linux/services/libc_interceptor.cc ---- a/sandbox/linux/services/libc_interceptor.cc -+++ b/sandbox/linux/services/libc_interceptor.cc -@@ -198,7 +198,7 @@ static void InitLibcLocaltimeFunctionsImpl() { - LOG(ERROR) << "Your system is broken: dlsym doesn't work! This has been " - "reported to be caused by Nvidia's libGL. You should expect" - " time related functions to misbehave. " -- "https://bugs.chromium.org/p/chromium/issues/detail?id=16800"; -+ "https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=16800"; - } - - if (!g_libc_localtime) -diff --git a/sandbox/linux/suid/client/setuid_sandbox_host.cc b/sandbox/linux/suid/client/setuid_sandbox_host.cc ---- a/sandbox/linux/suid/client/setuid_sandbox_host.cc -+++ b/sandbox/linux/suid/client/setuid_sandbox_host.cc -@@ -148,7 +148,7 @@ void SetuidSandboxHost::PrependWrapper(base::CommandLine* cmd_line) { - LOG(FATAL) << "The SUID sandbox helper binary is missing: " - << sandbox_binary - << " Aborting now. See " -- "https://chromium.googlesource.com/" -+ "https://chromium.9oo91esource.qjz9zk/" - "chromium/src/+/master/docs/" - "linux/suid_sandbox_development.md."; - } -diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c ---- a/sandbox/linux/suid/sandbox.c -+++ b/sandbox/linux/suid/sandbox.c -@@ -403,7 +403,7 @@ bool CheckAndExportApiVersion() { - "The setuid sandbox provides API version %d, " - "but you need %d\n" - "Please read " -- "https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox_development.md." -+ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/linux/suid_sandbox_development.md." - "\n\n", - kSUIDSandboxApiNumber, - api_number); -diff --git a/services/device/geolocation/network_location_request.cc b/services/device/geolocation/network_location_request.cc ---- a/services/device/geolocation/network_location_request.cc -+++ b/services/device/geolocation/network_location_request.cc -@@ -33,7 +33,7 @@ namespace device { - namespace { - - const char kNetworkLocationBaseUrl[] = -- "https://www.googleapis.com/geolocation/v1/geolocate"; -+ "https://www.9oo91eapis.qjz9zk/geolocation/v1/geolocate"; - - const char kLocationString[] = "location"; - const char kLatitudeString[] = "lat"; -diff --git a/services/device/public/mojom/geoposition.mojom b/services/device/public/mojom/geoposition.mojom ---- a/services/device/public/mojom/geoposition.mojom -+++ b/services/device/public/mojom/geoposition.mojom -@@ -17,7 +17,7 @@ const double kBadHeading = -1; // Heading must be non-negative. - const double kBadSpeed = -1; - - // A Geoposition represents a position fix. It was originally derived from: --// http://gears.googlecode.com/svn/trunk/gears/geolocation/geolocation.h -+// http://gears.9oo91ecode.qjz9zk/svn/trunk/gears/geolocation/geolocation.h - struct Geoposition { - // These values follow the W3C geolocation specification and can be returned - // to JavaScript without the need for a conversion. -diff --git a/services/image_annotation/image_annotation_service.h b/services/image_annotation/image_annotation_service.h ---- a/services/image_annotation/image_annotation_service.h -+++ b/services/image_annotation/image_annotation_service.h -@@ -38,7 +38,7 @@ class ImageAnnotationService : public mojom::ImageAnnotationService { - - static constexpr base::FeatureParam kServerUrl{ - &kExperiment, "server_url", -- "https://ckintersect-pa.googleapis.com/v1/intersect/pixels"}; -+ "https://ckintersect-pa.9oo91eapis.qjz9zk/v1/intersect/pixels"}; - // An override Google API key. If empty, the API key with which the browser - // was built (if any) will be used instead. - static constexpr base::FeatureParam kApiKey{&kExperiment, -diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom ---- a/services/network/public/mojom/cookie_manager.mojom -+++ b/services/network/public/mojom/cookie_manager.mojom -@@ -195,8 +195,8 @@ enum CookieDeletionSessionControl { - // * The host/domain cookie distinction is ignored - // * A cookies effective domain is considered to be the top level registry - // (including private registries) for the domain stored in the cookie --// + the next entry down. So the effective domain for x.y.google.com --// would be google.com, and the effective domain for x.google.co.uk would -+// + the next entry down. So the effective domain for x.y.9oo91e.qjz9zk -+// would be 9oo91e.qjz9zk, and the effective domain for x.google.co.uk would - // be google.co.uk. See the function - // net::registry_controlled_domains::GetDomainAndRegistry for more - // details. -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 -@@ -462,9 +462,9 @@ struct ClearDataFilter { - - Type type; - -- // A list of registrable domains (e.g. google.com), internal hostnames -+ // A list of registrable domains (e.g. 9oo91e.qjz9zk), internal hostnames - // (e.g. localhost), or IP addresses (e.g. 127.0.0.1). Other domains, such as -- // third and lower level domains (e.g. www.google.com) are not accepted. -+ // third and lower level domains (e.g. www.9oo91e.qjz9zk) are not accepted. - // Formally, it must hold that GetDomainAndRegistry(|domain|, _) is |domain| - // itself or an empty string. - array domains; -diff --git a/services/network/public/mojom/network_service.mojom b/services/network/public/mojom/network_service.mojom ---- a/services/network/public/mojom/network_service.mojom -+++ b/services/network/public/mojom/network_service.mojom -@@ -355,7 +355,7 @@ interface NetworkService { - // - // TODO(lukasza, laforge): https://crbug.com/702995: Remove the ...ForPlugin - // methods once Flash support is removed from Chromium (probably around 2020 -- // - see https://www.chromium.org/flash-roadmap). -+ // - see https://www.ch40m1um.qjz9zk/flash-roadmap). - AddCorbExceptionForPlugin(int32 process_id); - - // Notifies |request_initiator_site_lock| enforcement code that |process_id| -diff --git a/services/network/public/mojom/udp_socket.mojom b/services/network/public/mojom/udp_socket.mojom ---- a/services/network/public/mojom/udp_socket.mojom -+++ b/services/network/public/mojom/udp_socket.mojom -@@ -52,7 +52,7 @@ struct UDPSocketOptions { - // multicast loopback mode. On Windows, the applications with loopback off - // will not RECEIVE the loopback packets; while on Unix-like systems, the - // applications with loopback off will not SEND the loopback packets to -- // other applications on the same host. See MSDN: http://goo.gl/6vqbj -+ // other applications on the same host. See MSDN: http://goo.gl.qjz9zk/6vqbj - bool multicast_loopback_mode = true; - - // Sets the OS send buffer size (in bytes) for the socket. This is the -diff --git a/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom b/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom ---- a/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom -+++ b/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom -@@ -174,11 +174,11 @@ struct OSMemDump { - bool is_peak_rss_resettable = false; - - // This is roughly private, anonymous, non-discardable, resident or swapped -- // memory in kilobytes. For more details, see https://goo.gl/3kPb9S. -+ // memory in kilobytes. For more details, see https://goo.gl.qjz9zk/3kPb9S. - uint32 private_footprint_kb = 0; - - // This is roughly non-private, anonymous, non-discardable, resident memory -- // in kilobytes. For more details, see https://goo.gl/3kPb9S. -+ // in kilobytes. For more details, see https://goo.gl.qjz9zk/3kPb9S. - uint32 shared_footprint_kb = 0; - - // This is private swapped memory in kilobytes reported on Linux and Android -diff --git a/services/service_manager/sandbox/win/sandbox_win.cc b/services/service_manager/sandbox/win/sandbox_win.cc ---- a/services/service_manager/sandbox/win/sandbox_win.cc -+++ b/services/service_manager/sandbox/win/sandbox_win.cc -@@ -476,7 +476,7 @@ NtQueryObject g_QueryObject = NULL; - - static const char* kDuplicateHandleWarning = - "You are attempting to duplicate a privileged handle into a sandboxed" -- " process.\n Please contact security@chromium.org for assistance."; -+ " process.\n Please contact security@ch40m1um.qjz9zk for assistance."; - - void CheckDuplicateHandle(HANDLE handle) { - // Get the object type (32 characters is safe; current max is 14). -diff --git a/services/service_manager/zygote/host/zygote_host_impl_linux.cc b/services/service_manager/zygote/host/zygote_host_impl_linux.cc ---- a/services/service_manager/zygote/host/zygote_host_impl_linux.cc -+++ b/services/service_manager/zygote/host/zygote_host_impl_linux.cc -@@ -115,7 +115,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& command_line) { - } else { - LOG(FATAL) - << "No usable sandbox! Update your kernel or see " -- "https://chromium.googlesource.com/chromium/src/+/master/" -+ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/" - "docs/linux/suid_sandbox_development.md for more information on " - "developing with the SUID sandbox. " - "If you want to live dangerously and need an immediate workaround, " -diff --git a/services/service_manager/zygote/zygote_main_linux.cc b/services/service_manager/zygote/zygote_main_linux.cc ---- a/services/service_manager/zygote/zygote_main_linux.cc -+++ b/services/service_manager/zygote/zygote_main_linux.cc -@@ -108,7 +108,7 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox, - if (!setuid_sandbox->IsSuidSandboxUpToDate()) { - LOG(WARNING) << "You are using a wrong version of the setuid binary!\n" - "Please read " -- "https://chromium.googlesource.com/chromium/src/+/master/" -+ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/" - "docs/linux/suid_sandbox_development.md." - "\n\n"; - } -diff --git a/services/tracing/public/mojom/constants.mojom b/services/tracing/public/mojom/constants.mojom ---- a/services/tracing/public/mojom/constants.mojom -+++ b/services/tracing/public/mojom/constants.mojom -@@ -7,7 +7,7 @@ module tracing.mojom; - const uint32 kStopTracingRetryTimeMilliseconds = 100; - - // The label of agents that provide trace data of the format explained in --// https://goo.gl/Dw8qPY. -+// https://goo.gl.qjz9zk/Dw8qPY. - const string kChromeTraceEventLabel = "traceEvents"; - - // The label of agents that provide system trace data either in the regular -diff --git a/services/tracing/public/mojom/perfetto_service.mojom b/services/tracing/public/mojom/perfetto_service.mojom ---- a/services/tracing/public/mojom/perfetto_service.mojom -+++ b/services/tracing/public/mojom/perfetto_service.mojom -@@ -27,9 +27,9 @@ const string kJavaHeapProfilerSourceName = "org.chromium.java_heap_profiler"; - // its central storage and pass them on to its consumers. - - // For a more complete explanation of a Perfetto tracing session, see --// https://android.googlesource.com/platform/external/perfetto/+/master/docs/life-of-a-tracing-session.md -+// https://android.9oo91esource.qjz9zk/platform/external/perfetto/+/master/docs/life-of-a-tracing-session.md - --// See https://android.googlesource.com/platform/external/perfetto/ -+// See https://android.9oo91esource.qjz9zk/platform/external/perfetto/ - // for the full documentation of Perfetto concepts and its shared memory ABI. - - // Passed by the client process as part of CommitDataRequest() to the central -diff --git a/styleguide/c++/c++11.html b/styleguide/c++/c++11.html ---- a/styleguide/c++/c++11.html -+++ b/styleguide/c++/c++11.html -@@ -22,7 +22,7 @@ table tbody tr td:first-child { - -

    This document lives at src/styleguide/c++/c++11.html in a Chromium - checkout and is part of the more general -- -+ - Chromium C++ style guide. It summarizes the supported state of new and - updated language and library features in recent C++ standards. This guide - applies to both Chromium and its subprojects, though subprojects can choose to -@@ -35,8 +35,8 @@ toolchain support is sufficient, a standard is declared "initially supported", - with new language/library features banned pending discussion.

    - -

    You can propose changing the status of a feature by sending an email to -- --cxx@chromium.org. Include a short blurb on what the feature is and why you -+ -+cxx@ch40m1um.qjz9zk. Include a short blurb on what the feature is and why you - think it should or should not be allowed, along with links to any relevant - previous discussion. If the list arrives at some consensus, send a codereview to - change this file accordingly, linking to your discussion thread.

    -@@ -91,7 +91,7 @@ existing standards is: - long long var = value; - An integer of at least 64 bits - Fundamental types --Use a stdint.h type if you need a 64-bit number. Discussion thread -+Use a stdint.h type if you need a 64-bit number. Discussion thread - - - -@@ -107,7 +107,7 @@ existing standards is: - thread_local int foo = 1; - Puts variables into thread local storage. - Storage duration --Some surprising effects on Mac (discussion, fork). Use base::SequenceLocalStorageSlot for sequence support, and base::ThreadLocal/base::ThreadLocalStorage otherwise. -+Some surprising effects on Mac (discussion, fork). Use base::SequenceLocalStorageSlot for sequence support, and base::ThreadLocal/base::ThreadLocalStorage otherwise. - - - -@@ -132,7 +132,7 @@ existing standards is: - std::bind(function, args, ...) - Declares a function object bound to certain arguments - std::bind --Use base::Bind instead. Compared to std::bind, base::Bind helps prevent lifetime issues by preventing binding of capturing lambdas and by forcing callers to declare raw pointers as Unretained. Discussion thread -+Use base::Bind instead. Compared to std::bind, base::Bind helps prevent lifetime issues by preventing binding of capturing lambdas and by forcing callers to declare raw pointers as Unretained. Discussion thread - - - -@@ -156,7 +156,7 @@ existing standards is: - <exception> - Enhancements to exception throwing and handling - Standard library header <exception> --Exceptions are banned by the Google Style Guide and disabled in Chromium compiles. However, the noexcept specifier is explicitly allowed. Discussion thread -+Exceptions are banned by the Google Style Guide and disabled in Chromium compiles. However, the noexcept specifier is explicitly allowed. Discussion thread - - - -@@ -164,7 +164,7 @@ existing standards is: - std::function - Wraps a standard polymorphic function - std::function --Use base::Callback instead. Compared to std::function, base::Callback directly supports Chromium's refcounting classes and weak pointers and deals with additional thread safety concerns. Discussion thread -+Use base::Callback instead. Compared to std::function, base::Callback directly supports Chromium's refcounting classes and weak pointers and deals with additional thread safety concerns. Discussion thread - - - -@@ -176,7 +176,7 @@ existing standards is: - - Random number generation algorithms and utilities. - Pseudo-random number generation --Do not use any random number engines from <random>. Instead, use base::RandomBitGenerator. Discussion thread -+Do not use any random number engines from <random>. Instead, use base::RandomBitGenerator. Discussion thread - - - -@@ -200,7 +200,7 @@ existing standards is: - std::shared_ptr - Allows shared ownership of a pointer through reference counts - std::shared_ptr --Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. Google Style Guide. Discussion Thread -+Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. Google Style Guide. Discussion Thread - - - -diff --git a/styleguide/c++/chromium-cpp/main.py b/styleguide/c++/chromium-cpp/main.py ---- a/styleguide/c++/chromium-cpp/main.py -+++ b/styleguide/c++/chromium-cpp/main.py -@@ -20,7 +20,7 @@ class MainHandler(webapp2.RequestHandler): - return handler.get("c++11.html") - - --BASE = 'https://chromium.googlesource.com/chromium/src.git/' \ -+BASE = 'https://chromium.9oo91esource.qjz9zk/chromium/src.git/' \ - '+/master/styleguide/c++/%s?format=TEXT' - class GitilesMirrorHandler(webapp2.RequestHandler): - def get(self, resource): -diff --git a/testing/PRESUBMIT.py b/testing/PRESUBMIT.py ---- a/testing/PRESUBMIT.py -+++ b/testing/PRESUBMIT.py -@@ -4,7 +4,7 @@ - - """Top-level presubmit script for testing. - --See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -+See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts - for more details on the presubmit API built into depot_tools. - """ - -diff --git a/testing/buildbot/PRESUBMIT.py b/testing/buildbot/PRESUBMIT.py ---- a/testing/buildbot/PRESUBMIT.py -+++ b/testing/buildbot/PRESUBMIT.py -@@ -4,7 +4,7 @@ - - """Enforces json format. - --See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -+See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts - for more details on the presubmit API built into depot_tools. - """ - -diff --git a/testing/buildbot/chrome.ci.json b/testing/buildbot/chrome.ci.json ---- a/testing/buildbot/chrome.ci.json -+++ b/testing/buildbot/chrome.ci.json -@@ -39,7 +39,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -87,7 +87,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -136,7 +136,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185,7 +185,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -234,7 +234,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -283,7 +283,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -332,7 +332,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -385,7 +385,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -433,7 +433,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -482,7 +482,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -531,7 +531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -580,7 +580,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -629,7 +629,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -678,7 +678,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -727,7 +727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json ---- a/testing/buildbot/chromium.android.fyi.json -+++ b/testing/buildbot/chromium.android.fyi.json -@@ -68,7 +68,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -116,7 +116,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169,7 +169,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -225,7 +225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -274,7 +274,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -323,7 +323,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -434,7 +434,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -540,7 +540,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -589,7 +589,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -639,7 +639,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -689,7 +689,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -739,7 +739,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -789,7 +789,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -853,7 +853,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -912,7 +912,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -971,7 +971,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1030,7 +1030,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1089,7 +1089,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1148,7 +1148,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1207,7 +1207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1266,7 +1266,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1326,7 +1326,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1386,7 +1386,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1445,7 +1445,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1504,7 +1504,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1563,7 +1563,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1623,7 +1623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1682,7 +1682,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1742,7 +1742,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1801,7 +1801,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1860,7 +1860,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1919,7 +1919,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1978,7 +1978,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2037,7 +2037,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2099,7 +2099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2159,7 +2159,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2220,7 +2220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2279,7 +2279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2340,7 +2340,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2403,7 +2403,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2464,7 +2464,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2527,7 +2527,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2587,7 +2587,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2647,7 +2647,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2706,7 +2706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2765,7 +2765,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2824,7 +2824,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2883,7 +2883,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2942,7 +2942,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3001,7 +3001,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3061,7 +3061,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3120,7 +3120,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3179,7 +3179,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3238,7 +3238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3297,7 +3297,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3356,7 +3356,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3415,7 +3415,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3474,7 +3474,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3533,7 +3533,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3592,7 +3592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3652,7 +3652,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3711,7 +3711,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3770,7 +3770,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3829,7 +3829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3889,7 +3889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3950,7 +3950,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4009,7 +4009,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4068,7 +4068,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4127,7 +4127,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4186,7 +4186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4245,7 +4245,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4304,7 +4304,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4363,7 +4363,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4422,7 +4422,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4481,7 +4481,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4541,7 +4541,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4601,7 +4601,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4660,7 +4660,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4719,7 +4719,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4778,7 +4778,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4837,7 +4837,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4900,7 +4900,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4960,7 +4960,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json ---- a/testing/buildbot/chromium.android.json -+++ b/testing/buildbot/chromium.android.json -@@ -44,7 +44,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -97,7 +97,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -153,7 +153,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -202,7 +202,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -252,7 +252,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -303,7 +303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -355,7 +355,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -410,7 +410,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -458,7 +458,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -507,7 +507,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -558,7 +558,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -605,7 +605,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -657,7 +657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -712,7 +712,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -760,7 +760,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -810,7 +810,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -858,7 +858,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -907,7 +907,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -958,7 +958,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1005,7 +1005,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1057,7 +1057,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1112,7 +1112,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1160,7 +1160,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1210,7 +1210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1258,7 +1258,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1307,7 +1307,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1358,7 +1358,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1405,7 +1405,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1457,7 +1457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1512,7 +1512,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1560,7 +1560,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1610,7 +1610,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1658,7 +1658,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1707,7 +1707,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1956,7 +1956,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2002,7 +2002,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2048,7 +2048,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2094,7 +2094,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2140,7 +2140,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2186,7 +2186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2232,7 +2232,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2279,7 +2279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2326,7 +2326,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2372,7 +2372,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2418,7 +2418,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2464,7 +2464,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2511,7 +2511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2557,7 +2557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2603,7 +2603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2649,7 +2649,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2695,7 +2695,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2744,7 +2744,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2793,7 +2793,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2840,7 +2840,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2888,7 +2888,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2934,7 +2934,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2981,7 +2981,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3030,7 +3030,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3077,7 +3077,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3126,7 +3126,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3173,7 +3173,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3220,7 +3220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3266,7 +3266,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3312,7 +3312,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3358,7 +3358,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3404,7 +3404,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3450,7 +3450,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3496,7 +3496,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3542,7 +3542,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3588,7 +3588,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3634,7 +3634,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3680,7 +3680,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3726,7 +3726,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3772,7 +3772,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3818,7 +3818,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3864,7 +3864,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3910,7 +3910,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3956,7 +3956,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4002,7 +4002,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4048,7 +4048,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4094,7 +4094,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4140,7 +4140,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4186,7 +4186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4233,7 +4233,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4279,7 +4279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4325,7 +4325,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4371,7 +4371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4417,7 +4417,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4463,7 +4463,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4509,7 +4509,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4555,7 +4555,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4601,7 +4601,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4647,7 +4647,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4694,7 +4694,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4740,7 +4740,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4786,7 +4786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4832,7 +4832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4878,7 +4878,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4924,7 +4924,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4975,7 +4975,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5022,7 +5022,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5069,7 +5069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5116,7 +5116,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5163,7 +5163,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5210,7 +5210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5257,7 +5257,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5305,7 +5305,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5353,7 +5353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5400,7 +5400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5447,7 +5447,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5494,7 +5494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5542,7 +5542,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5589,7 +5589,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5636,7 +5636,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5683,7 +5683,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5730,7 +5730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5778,7 +5778,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5825,7 +5825,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5873,7 +5873,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5921,7 +5921,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5969,7 +5969,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6017,7 +6017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6064,7 +6064,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6111,7 +6111,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6158,7 +6158,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6205,7 +6205,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6252,7 +6252,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6299,7 +6299,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6346,7 +6346,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6393,7 +6393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6440,7 +6440,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6487,7 +6487,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6534,7 +6534,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6581,7 +6581,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6628,7 +6628,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6675,7 +6675,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6722,7 +6722,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6769,7 +6769,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6816,7 +6816,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6863,7 +6863,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6910,7 +6910,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6957,7 +6957,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7004,7 +7004,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7052,7 +7052,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7099,7 +7099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7146,7 +7146,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7193,7 +7193,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7240,7 +7240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7287,7 +7287,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7334,7 +7334,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7381,7 +7381,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7428,7 +7428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7475,7 +7475,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7523,7 +7523,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7570,7 +7570,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7617,7 +7617,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7664,7 +7664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7711,7 +7711,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7758,7 +7758,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7809,7 +7809,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7856,7 +7856,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7903,7 +7903,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7950,7 +7950,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7997,7 +7997,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8044,7 +8044,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8091,7 +8091,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8138,7 +8138,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8186,7 +8186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8234,7 +8234,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8281,7 +8281,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8328,7 +8328,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8375,7 +8375,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8423,7 +8423,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8470,7 +8470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8517,7 +8517,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8564,7 +8564,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8611,7 +8611,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8658,7 +8658,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8705,7 +8705,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8752,7 +8752,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8802,7 +8802,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8852,7 +8852,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8900,7 +8900,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8949,7 +8949,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8996,7 +8996,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9044,7 +9044,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9094,7 +9094,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9142,7 +9142,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9192,7 +9192,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9240,7 +9240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9288,7 +9288,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9335,7 +9335,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9382,7 +9382,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9429,7 +9429,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9476,7 +9476,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9523,7 +9523,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9570,7 +9570,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9617,7 +9617,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9664,7 +9664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9711,7 +9711,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9758,7 +9758,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9805,7 +9805,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9852,7 +9852,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9899,7 +9899,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9946,7 +9946,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9993,7 +9993,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10040,7 +10040,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10087,7 +10087,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10134,7 +10134,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10181,7 +10181,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10228,7 +10228,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10275,7 +10275,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10324,7 +10324,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10371,7 +10371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10418,7 +10418,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10465,7 +10465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10512,7 +10512,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10559,7 +10559,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10606,7 +10606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10653,7 +10653,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10700,7 +10700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10747,7 +10747,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10795,7 +10795,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10842,7 +10842,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10889,7 +10889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10936,7 +10936,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10983,7 +10983,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11030,7 +11030,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11077,7 +11077,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11124,7 +11124,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11171,7 +11171,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11222,7 +11222,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11270,7 +11270,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11321,7 +11321,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11368,7 +11368,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11415,7 +11415,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11462,7 +11462,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11509,7 +11509,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11556,7 +11556,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11603,7 +11603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11650,7 +11650,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11698,7 +11698,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11746,7 +11746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11793,7 +11793,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11840,7 +11840,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11887,7 +11887,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11935,7 +11935,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11982,7 +11982,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12029,7 +12029,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12076,7 +12076,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12123,7 +12123,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12170,7 +12170,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12217,7 +12217,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12264,7 +12264,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12312,7 +12312,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12359,7 +12359,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12407,7 +12407,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12455,7 +12455,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12503,7 +12503,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12551,7 +12551,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12598,7 +12598,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12645,7 +12645,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12692,7 +12692,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12739,7 +12739,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12786,7 +12786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12833,7 +12833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12880,7 +12880,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12927,7 +12927,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12974,7 +12974,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13021,7 +13021,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13068,7 +13068,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13115,7 +13115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13162,7 +13162,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13209,7 +13209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13256,7 +13256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13303,7 +13303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13350,7 +13350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13397,7 +13397,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13444,7 +13444,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13491,7 +13491,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13538,7 +13538,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13586,7 +13586,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13633,7 +13633,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13680,7 +13680,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13727,7 +13727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13774,7 +13774,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13821,7 +13821,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13868,7 +13868,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13915,7 +13915,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -13962,7 +13962,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14009,7 +14009,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14057,7 +14057,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14104,7 +14104,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14151,7 +14151,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14198,7 +14198,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14245,7 +14245,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14292,7 +14292,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14339,7 +14339,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14386,7 +14386,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14433,7 +14433,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14481,7 +14481,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14531,7 +14531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14577,7 +14577,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14623,7 +14623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14669,7 +14669,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14715,7 +14715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14761,7 +14761,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14807,7 +14807,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14853,7 +14853,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14901,7 +14901,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14948,7 +14948,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14994,7 +14994,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15040,7 +15040,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15086,7 +15086,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15133,7 +15133,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15179,7 +15179,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15225,7 +15225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15271,7 +15271,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15317,7 +15317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15363,7 +15363,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15409,7 +15409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15455,7 +15455,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15504,7 +15504,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15553,7 +15553,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15600,7 +15600,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15648,7 +15648,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15694,7 +15694,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15741,7 +15741,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15790,7 +15790,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15837,7 +15837,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15886,7 +15886,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15933,7 +15933,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15980,7 +15980,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16026,7 +16026,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16072,7 +16072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16118,7 +16118,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16164,7 +16164,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16210,7 +16210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16256,7 +16256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16302,7 +16302,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16348,7 +16348,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16394,7 +16394,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16440,7 +16440,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16486,7 +16486,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16532,7 +16532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16578,7 +16578,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16624,7 +16624,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16670,7 +16670,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16716,7 +16716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16762,7 +16762,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16808,7 +16808,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16854,7 +16854,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16900,7 +16900,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16946,7 +16946,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16993,7 +16993,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17039,7 +17039,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17085,7 +17085,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17131,7 +17131,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17177,7 +17177,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17223,7 +17223,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17269,7 +17269,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17315,7 +17315,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17361,7 +17361,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17407,7 +17407,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17454,7 +17454,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17500,7 +17500,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17546,7 +17546,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17592,7 +17592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17638,7 +17638,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17684,7 +17684,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17730,7 +17730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17776,7 +17776,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17822,7 +17822,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17872,7 +17872,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17919,7 +17919,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17970,7 +17970,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18017,7 +18017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18064,7 +18064,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18111,7 +18111,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18158,7 +18158,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18205,7 +18205,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18252,7 +18252,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18299,7 +18299,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18347,7 +18347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18395,7 +18395,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18442,7 +18442,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18489,7 +18489,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18536,7 +18536,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18584,7 +18584,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18631,7 +18631,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18678,7 +18678,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18725,7 +18725,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18772,7 +18772,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18819,7 +18819,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18866,7 +18866,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18913,7 +18913,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -18961,7 +18961,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19008,7 +19008,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19056,7 +19056,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19104,7 +19104,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19152,7 +19152,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19200,7 +19200,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19247,7 +19247,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19294,7 +19294,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19341,7 +19341,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19388,7 +19388,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19435,7 +19435,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19482,7 +19482,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19529,7 +19529,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19576,7 +19576,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19623,7 +19623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19670,7 +19670,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19717,7 +19717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19764,7 +19764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19811,7 +19811,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19858,7 +19858,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19905,7 +19905,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19952,7 +19952,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -19999,7 +19999,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20046,7 +20046,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20093,7 +20093,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20140,7 +20140,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20187,7 +20187,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20235,7 +20235,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20282,7 +20282,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20329,7 +20329,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20376,7 +20376,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20423,7 +20423,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20470,7 +20470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20517,7 +20517,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20564,7 +20564,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20611,7 +20611,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20658,7 +20658,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20706,7 +20706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20753,7 +20753,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20800,7 +20800,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20847,7 +20847,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20894,7 +20894,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20941,7 +20941,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -20988,7 +20988,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21035,7 +21035,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21082,7 +21082,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21130,7 +21130,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21506,7 +21506,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21553,7 +21553,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21603,7 +21603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21664,7 +21664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21717,7 +21717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21766,7 +21766,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21812,7 +21812,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21858,7 +21858,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21904,7 +21904,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -21952,7 +21952,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22000,7 +22000,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22052,7 +22052,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22099,7 +22099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22152,7 +22152,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22198,7 +22198,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22244,7 +22244,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22290,7 +22290,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22336,7 +22336,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22382,7 +22382,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22428,7 +22428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22474,7 +22474,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22521,7 +22521,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22568,7 +22568,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22614,7 +22614,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22660,7 +22660,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22706,7 +22706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22753,7 +22753,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22799,7 +22799,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22845,7 +22845,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22891,7 +22891,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22937,7 +22937,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -22983,7 +22983,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23029,7 +23029,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23075,7 +23075,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23124,7 +23124,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23173,7 +23173,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23220,7 +23220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23268,7 +23268,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23314,7 +23314,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23361,7 +23361,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23410,7 +23410,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23457,7 +23457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23506,7 +23506,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23553,7 +23553,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23600,7 +23600,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23646,7 +23646,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23692,7 +23692,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23738,7 +23738,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23784,7 +23784,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23830,7 +23830,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23876,7 +23876,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23922,7 +23922,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -23968,7 +23968,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24014,7 +24014,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24060,7 +24060,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24106,7 +24106,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24152,7 +24152,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24198,7 +24198,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24244,7 +24244,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24290,7 +24290,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24336,7 +24336,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24382,7 +24382,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24428,7 +24428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24474,7 +24474,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24520,7 +24520,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24566,7 +24566,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24613,7 +24613,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24659,7 +24659,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24705,7 +24705,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24751,7 +24751,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24797,7 +24797,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24843,7 +24843,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24889,7 +24889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24935,7 +24935,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24981,7 +24981,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25027,7 +25027,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25074,7 +25074,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25120,7 +25120,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25166,7 +25166,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25212,7 +25212,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25258,7 +25258,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25304,7 +25304,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25350,7 +25350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25396,7 +25396,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25442,7 +25442,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25492,7 +25492,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25539,7 +25539,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25772,7 +25772,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25818,7 +25818,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25864,7 +25864,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25910,7 +25910,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25956,7 +25956,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26002,7 +26002,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26048,7 +26048,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26250,7 +26250,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26296,7 +26296,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26342,7 +26342,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26388,7 +26388,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26434,7 +26434,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26480,7 +26480,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26526,7 +26526,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26577,7 +26577,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26623,7 +26623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26669,7 +26669,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26715,7 +26715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26761,7 +26761,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26807,7 +26807,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26853,7 +26853,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26905,7 +26905,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26951,7 +26951,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26997,7 +26997,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27043,7 +27043,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27089,7 +27089,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27135,7 +27135,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27181,7 +27181,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27317,7 +27317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27364,7 +27364,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27411,7 +27411,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27465,7 +27465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27511,7 +27511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27557,7 +27557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27603,7 +27603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27649,7 +27649,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27695,7 +27695,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27741,7 +27741,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27788,7 +27788,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27835,7 +27835,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27881,7 +27881,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27927,7 +27927,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27973,7 +27973,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28020,7 +28020,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28066,7 +28066,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28112,7 +28112,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28158,7 +28158,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28206,7 +28206,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28253,7 +28253,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28299,7 +28299,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28346,7 +28346,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28393,7 +28393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28440,7 +28440,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28487,7 +28487,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28533,7 +28533,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28579,7 +28579,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28625,7 +28625,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28671,7 +28671,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28717,7 +28717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28763,7 +28763,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28809,7 +28809,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28855,7 +28855,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28901,7 +28901,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28947,7 +28947,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28993,7 +28993,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29039,7 +29039,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29085,7 +29085,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29131,7 +29131,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29177,7 +29177,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29223,7 +29223,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29269,7 +29269,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29315,7 +29315,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29361,7 +29361,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29407,7 +29407,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29453,7 +29453,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29500,7 +29500,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29546,7 +29546,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29592,7 +29592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29638,7 +29638,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29684,7 +29684,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29730,7 +29730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29776,7 +29776,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29822,7 +29822,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29868,7 +29868,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29914,7 +29914,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29961,7 +29961,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30007,7 +30007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30053,7 +30053,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30099,7 +30099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30145,7 +30145,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30191,7 +30191,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30246,7 +30246,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30292,7 +30292,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30338,7 +30338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30384,7 +30384,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30430,7 +30430,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30476,7 +30476,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30522,7 +30522,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30568,7 +30568,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30615,7 +30615,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30662,7 +30662,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30708,7 +30708,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30754,7 +30754,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30800,7 +30800,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30847,7 +30847,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30893,7 +30893,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30939,7 +30939,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30985,7 +30985,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31031,7 +31031,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31077,7 +31077,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31123,7 +31123,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31169,7 +31169,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31218,7 +31218,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31267,7 +31267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31314,7 +31314,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31362,7 +31362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31408,7 +31408,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31455,7 +31455,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31504,7 +31504,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31551,7 +31551,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31600,7 +31600,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31647,7 +31647,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31694,7 +31694,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31740,7 +31740,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31786,7 +31786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31832,7 +31832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31878,7 +31878,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31924,7 +31924,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -31970,7 +31970,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32016,7 +32016,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32062,7 +32062,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32108,7 +32108,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32154,7 +32154,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32200,7 +32200,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32246,7 +32246,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32292,7 +32292,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32338,7 +32338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32384,7 +32384,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32430,7 +32430,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32476,7 +32476,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32522,7 +32522,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32568,7 +32568,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32614,7 +32614,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32660,7 +32660,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32708,7 +32708,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32754,7 +32754,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32800,7 +32800,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32846,7 +32846,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32892,7 +32892,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32938,7 +32938,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -32984,7 +32984,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33030,7 +33030,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33076,7 +33076,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33122,7 +33122,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33169,7 +33169,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33215,7 +33215,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33261,7 +33261,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33307,7 +33307,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33353,7 +33353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33399,7 +33399,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33445,7 +33445,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33491,7 +33491,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33537,7 +33537,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33587,7 +33587,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33634,7 +33634,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33689,7 +33689,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33736,7 +33736,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33783,7 +33783,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33830,7 +33830,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33877,7 +33877,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33924,7 +33924,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -33971,7 +33971,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34018,7 +34018,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34066,7 +34066,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34114,7 +34114,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34161,7 +34161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34208,7 +34208,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34255,7 +34255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34303,7 +34303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34350,7 +34350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34397,7 +34397,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34444,7 +34444,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34491,7 +34491,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34538,7 +34538,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34585,7 +34585,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34632,7 +34632,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34682,7 +34682,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34730,7 +34730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34777,7 +34777,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34825,7 +34825,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34873,7 +34873,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34921,7 +34921,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -34968,7 +34968,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35015,7 +35015,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35062,7 +35062,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35109,7 +35109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35156,7 +35156,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35203,7 +35203,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35250,7 +35250,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35297,7 +35297,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35344,7 +35344,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35391,7 +35391,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35438,7 +35438,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35485,7 +35485,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35532,7 +35532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35579,7 +35579,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35626,7 +35626,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35673,7 +35673,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35720,7 +35720,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35767,7 +35767,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35814,7 +35814,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35861,7 +35861,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35908,7 +35908,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -35956,7 +35956,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36003,7 +36003,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36050,7 +36050,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36097,7 +36097,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36144,7 +36144,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36191,7 +36191,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36238,7 +36238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36285,7 +36285,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36332,7 +36332,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36379,7 +36379,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36426,7 +36426,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36473,7 +36473,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36520,7 +36520,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36567,7 +36567,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36614,7 +36614,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36661,7 +36661,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36708,7 +36708,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36755,7 +36755,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -36803,7 +36803,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37092,7 +37092,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37139,7 +37139,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37189,7 +37189,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37251,7 +37251,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37305,7 +37305,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37352,7 +37352,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37399,7 +37399,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37446,7 +37446,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37494,7 +37494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37541,7 +37541,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37597,7 +37597,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37644,7 +37644,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37691,7 +37691,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37738,7 +37738,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37785,7 +37785,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37832,7 +37832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37879,7 +37879,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37926,7 +37926,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -37974,7 +37974,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38022,7 +38022,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38069,7 +38069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38116,7 +38116,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38163,7 +38163,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38211,7 +38211,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38258,7 +38258,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38305,7 +38305,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38353,7 +38353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38400,7 +38400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38448,7 +38448,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38496,7 +38496,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38543,7 +38543,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38591,7 +38591,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38642,7 +38642,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38689,7 +38689,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38737,7 +38737,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38785,7 +38785,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38832,7 +38832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38879,7 +38879,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38926,7 +38926,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -38973,7 +38973,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39020,7 +39020,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39067,7 +39067,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39115,7 +39115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39162,7 +39162,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39209,7 +39209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39256,7 +39256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39303,7 +39303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39350,7 +39350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39397,7 +39397,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39444,7 +39444,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39491,7 +39491,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39538,7 +39538,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39586,7 +39586,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39633,7 +39633,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39680,7 +39680,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39727,7 +39727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39774,7 +39774,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39821,7 +39821,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39868,7 +39868,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39915,7 +39915,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -39963,7 +39963,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40010,7 +40010,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40057,7 +40057,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40104,7 +40104,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40151,7 +40151,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40198,7 +40198,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40245,7 +40245,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40292,7 +40292,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40339,7 +40339,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40386,7 +40386,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40434,7 +40434,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40482,7 +40482,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40529,7 +40529,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40576,7 +40576,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40623,7 +40623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40670,7 +40670,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40717,7 +40717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40764,7 +40764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40811,7 +40811,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40863,7 +40863,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40911,7 +40911,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -40959,7 +40959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41006,7 +41006,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41143,7 +41143,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41202,7 +41202,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41261,7 +41261,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41320,7 +41320,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41379,7 +41379,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41438,7 +41438,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41497,7 +41497,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41556,7 +41556,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41616,7 +41616,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41676,7 +41676,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41735,7 +41735,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41794,7 +41794,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41853,7 +41853,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41913,7 +41913,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -41972,7 +41972,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42032,7 +42032,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42091,7 +42091,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42150,7 +42150,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42211,7 +42211,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42275,7 +42275,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42335,7 +42335,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42396,7 +42396,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42455,7 +42455,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42516,7 +42516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42579,7 +42579,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42640,7 +42640,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42703,7 +42703,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42763,7 +42763,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42823,7 +42823,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42882,7 +42882,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -42941,7 +42941,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43000,7 +43000,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43059,7 +43059,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43118,7 +43118,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43177,7 +43177,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43237,7 +43237,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43296,7 +43296,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43355,7 +43355,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43414,7 +43414,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43473,7 +43473,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43532,7 +43532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43591,7 +43591,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43650,7 +43650,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43709,7 +43709,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43768,7 +43768,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43828,7 +43828,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43887,7 +43887,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -43946,7 +43946,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44005,7 +44005,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44064,7 +44064,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44123,7 +44123,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44182,7 +44182,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44242,7 +44242,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44303,7 +44303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44362,7 +44362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44421,7 +44421,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44480,7 +44480,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44539,7 +44539,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44598,7 +44598,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44657,7 +44657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44716,7 +44716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44775,7 +44775,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44834,7 +44834,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44893,7 +44893,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -44953,7 +44953,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45013,7 +45013,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45072,7 +45072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45131,7 +45131,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45190,7 +45190,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45254,7 +45254,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45315,7 +45315,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45379,7 +45379,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45439,7 +45439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -45498,7 +45498,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json ---- a/testing/buildbot/chromium.ci.json -+++ b/testing/buildbot/chromium.ci.json -@@ -37,7 +37,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81,7 +81,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2470,7 +2470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2516,7 +2516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2562,7 +2562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2608,7 +2608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2654,7 +2654,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2700,7 +2700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2746,7 +2746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2792,7 +2792,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2839,7 +2839,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2886,7 +2886,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2932,7 +2932,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2978,7 +2978,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3024,7 +3024,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3071,7 +3071,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3117,7 +3117,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3163,7 +3163,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3209,7 +3209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3255,7 +3255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3304,7 +3304,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3353,7 +3353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3400,7 +3400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3448,7 +3448,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3494,7 +3494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3541,7 +3541,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3590,7 +3590,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3637,7 +3637,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3686,7 +3686,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3733,7 +3733,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3780,7 +3780,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3826,7 +3826,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3872,7 +3872,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3918,7 +3918,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3964,7 +3964,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4010,7 +4010,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4056,7 +4056,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4102,7 +4102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4148,7 +4148,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4194,7 +4194,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4240,7 +4240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4286,7 +4286,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4332,7 +4332,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4378,7 +4378,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4424,7 +4424,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4470,7 +4470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4516,7 +4516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4562,7 +4562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4608,7 +4608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4654,7 +4654,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4700,7 +4700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4746,7 +4746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4793,7 +4793,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4839,7 +4839,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4885,7 +4885,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4931,7 +4931,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4977,7 +4977,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5023,7 +5023,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5069,7 +5069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5115,7 +5115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5161,7 +5161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5207,7 +5207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5254,7 +5254,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5300,7 +5300,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5346,7 +5346,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5392,7 +5392,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5438,7 +5438,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5484,7 +5484,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5531,7 +5531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5585,7 +5585,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5630,7 +5630,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5715,7 +5715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5764,7 +5764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5813,7 +5813,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5862,7 +5862,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5911,7 +5911,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5959,7 +5959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6008,7 +6008,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6094,7 +6094,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6139,7 +6139,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6224,7 +6224,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6273,7 +6273,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6322,7 +6322,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6371,7 +6371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6420,7 +6420,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6468,7 +6468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6517,7 +6517,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6569,7 +6569,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6614,7 +6614,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6657,7 +6657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6700,7 +6700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6743,7 +6743,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7177,7 +7177,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7220,7 +7220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7263,7 +7263,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7306,7 +7306,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7711,7 +7711,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7754,7 +7754,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8281,7 +8281,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8324,7 +8324,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8367,7 +8367,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8410,7 +8410,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8816,7 +8816,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8861,7 +8861,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8904,7 +8904,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8947,7 +8947,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8990,7 +8990,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9424,7 +9424,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9467,7 +9467,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9510,7 +9510,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9553,7 +9553,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10191,7 +10191,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10290,7 +10290,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10338,7 +10338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10386,7 +10386,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10843,7 +10843,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10896,7 +10896,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10952,7 +10952,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11001,7 +11001,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11051,7 +11051,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11102,7 +11102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11154,7 +11154,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11209,7 +11209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11257,7 +11257,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11306,7 +11306,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11357,7 +11357,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11404,7 +11404,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11456,7 +11456,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11511,7 +11511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11559,7 +11559,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11609,7 +11609,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11657,7 +11657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11706,7 +11706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11757,7 +11757,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11804,7 +11804,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11856,7 +11856,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11911,7 +11911,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11959,7 +11959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12009,7 +12009,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12057,7 +12057,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12106,7 +12106,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12157,7 +12157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12204,7 +12204,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12256,7 +12256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12311,7 +12311,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12359,7 +12359,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12409,7 +12409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12457,7 +12457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12506,7 +12506,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12558,7 +12558,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12606,7 +12606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12659,7 +12659,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12715,7 +12715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12764,7 +12764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12813,7 +12813,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12924,7 +12924,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24691,7 +24691,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24737,7 +24737,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24783,7 +24783,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24829,7 +24829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24875,7 +24875,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24921,7 +24921,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -24967,7 +24967,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25014,7 +25014,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25061,7 +25061,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25107,7 +25107,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25153,7 +25153,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25199,7 +25199,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25246,7 +25246,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25292,7 +25292,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25338,7 +25338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25384,7 +25384,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25430,7 +25430,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25479,7 +25479,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25528,7 +25528,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25575,7 +25575,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25623,7 +25623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25669,7 +25669,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25716,7 +25716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25765,7 +25765,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25812,7 +25812,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25861,7 +25861,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25908,7 +25908,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -25955,7 +25955,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26001,7 +26001,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26047,7 +26047,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26093,7 +26093,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26139,7 +26139,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26185,7 +26185,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26231,7 +26231,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26277,7 +26277,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26323,7 +26323,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26369,7 +26369,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26415,7 +26415,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26461,7 +26461,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26507,7 +26507,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26553,7 +26553,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26599,7 +26599,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26645,7 +26645,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26691,7 +26691,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26737,7 +26737,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26783,7 +26783,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26829,7 +26829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26875,7 +26875,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26921,7 +26921,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -26968,7 +26968,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27014,7 +27014,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27060,7 +27060,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27106,7 +27106,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27152,7 +27152,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27198,7 +27198,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27244,7 +27244,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27290,7 +27290,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27336,7 +27336,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27382,7 +27382,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27429,7 +27429,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27475,7 +27475,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27521,7 +27521,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27567,7 +27567,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27613,7 +27613,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27659,7 +27659,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27710,7 +27710,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27757,7 +27757,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27804,7 +27804,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27851,7 +27851,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27898,7 +27898,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27945,7 +27945,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -27992,7 +27992,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28040,7 +28040,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28088,7 +28088,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28135,7 +28135,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28182,7 +28182,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28229,7 +28229,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28277,7 +28277,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28324,7 +28324,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28371,7 +28371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28418,7 +28418,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28465,7 +28465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28513,7 +28513,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28560,7 +28560,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28608,7 +28608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28656,7 +28656,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28704,7 +28704,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28752,7 +28752,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28799,7 +28799,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28846,7 +28846,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28893,7 +28893,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28940,7 +28940,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -28987,7 +28987,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29034,7 +29034,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29081,7 +29081,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29128,7 +29128,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29175,7 +29175,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29222,7 +29222,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29269,7 +29269,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29316,7 +29316,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29363,7 +29363,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29410,7 +29410,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29457,7 +29457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29504,7 +29504,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29551,7 +29551,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29598,7 +29598,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29645,7 +29645,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29692,7 +29692,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29739,7 +29739,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29787,7 +29787,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29834,7 +29834,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29881,7 +29881,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29928,7 +29928,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -29975,7 +29975,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30022,7 +30022,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30069,7 +30069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30116,7 +30116,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30163,7 +30163,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30210,7 +30210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30258,7 +30258,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30305,7 +30305,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30352,7 +30352,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30399,7 +30399,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30446,7 +30446,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -30493,7 +30493,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50645,7 +50645,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50692,7 +50692,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50739,7 +50739,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50786,7 +50786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50833,7 +50833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50880,7 +50880,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50927,7 +50927,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -50974,7 +50974,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51022,7 +51022,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51070,7 +51070,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51117,7 +51117,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51164,7 +51164,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51211,7 +51211,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51259,7 +51259,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51306,7 +51306,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51353,7 +51353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51400,7 +51400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51447,7 +51447,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51494,7 +51494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51541,7 +51541,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51588,7 +51588,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51638,7 +51638,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51688,7 +51688,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51736,7 +51736,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51785,7 +51785,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51832,7 +51832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51880,7 +51880,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51930,7 +51930,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -51978,7 +51978,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52028,7 +52028,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52076,7 +52076,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52124,7 +52124,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52171,7 +52171,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52218,7 +52218,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52265,7 +52265,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52312,7 +52312,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52359,7 +52359,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52406,7 +52406,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52453,7 +52453,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52500,7 +52500,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52547,7 +52547,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52594,7 +52594,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52641,7 +52641,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52688,7 +52688,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52735,7 +52735,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52782,7 +52782,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52829,7 +52829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52876,7 +52876,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52923,7 +52923,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -52970,7 +52970,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53017,7 +53017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53064,7 +53064,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53111,7 +53111,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53160,7 +53160,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53207,7 +53207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53254,7 +53254,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53301,7 +53301,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53348,7 +53348,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53395,7 +53395,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53442,7 +53442,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53489,7 +53489,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53536,7 +53536,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53583,7 +53583,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53631,7 +53631,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53678,7 +53678,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53725,7 +53725,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53772,7 +53772,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53819,7 +53819,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53866,7 +53866,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53913,7 +53913,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -53960,7 +53960,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54007,7 +54007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54058,7 +54058,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54106,7 +54106,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54157,7 +54157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54204,7 +54204,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54251,7 +54251,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54298,7 +54298,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54345,7 +54345,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54392,7 +54392,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54439,7 +54439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54486,7 +54486,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54534,7 +54534,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54582,7 +54582,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54629,7 +54629,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54676,7 +54676,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54723,7 +54723,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54771,7 +54771,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54818,7 +54818,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54865,7 +54865,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54912,7 +54912,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -54959,7 +54959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55006,7 +55006,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55053,7 +55053,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55100,7 +55100,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55148,7 +55148,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55195,7 +55195,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55243,7 +55243,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55291,7 +55291,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55339,7 +55339,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55387,7 +55387,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55434,7 +55434,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55481,7 +55481,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55528,7 +55528,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55575,7 +55575,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55622,7 +55622,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55669,7 +55669,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55716,7 +55716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55763,7 +55763,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55810,7 +55810,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55857,7 +55857,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55904,7 +55904,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55951,7 +55951,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -55998,7 +55998,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56045,7 +56045,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56092,7 +56092,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56139,7 +56139,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56186,7 +56186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56233,7 +56233,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56280,7 +56280,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56327,7 +56327,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56374,7 +56374,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56422,7 +56422,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56469,7 +56469,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56516,7 +56516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56563,7 +56563,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56610,7 +56610,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56657,7 +56657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56704,7 +56704,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56751,7 +56751,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56798,7 +56798,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56845,7 +56845,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56893,7 +56893,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56940,7 +56940,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -56987,7 +56987,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57034,7 +57034,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57081,7 +57081,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57128,7 +57128,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57175,7 +57175,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57222,7 +57222,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57269,7 +57269,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -57317,7 +57317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80140,7 +80140,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80186,7 +80186,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80232,7 +80232,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80278,7 +80278,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80324,7 +80324,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80370,7 +80370,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80416,7 +80416,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80462,7 +80462,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80510,7 +80510,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80557,7 +80557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80603,7 +80603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80649,7 +80649,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80695,7 +80695,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80742,7 +80742,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80788,7 +80788,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80834,7 +80834,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80880,7 +80880,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80926,7 +80926,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -80972,7 +80972,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81018,7 +81018,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81064,7 +81064,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81113,7 +81113,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81162,7 +81162,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81209,7 +81209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81257,7 +81257,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81303,7 +81303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81350,7 +81350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81399,7 +81399,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81446,7 +81446,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81495,7 +81495,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81542,7 +81542,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81589,7 +81589,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81635,7 +81635,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81681,7 +81681,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81727,7 +81727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81773,7 +81773,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81819,7 +81819,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81865,7 +81865,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81911,7 +81911,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81957,7 +81957,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82003,7 +82003,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82049,7 +82049,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82095,7 +82095,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82141,7 +82141,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82187,7 +82187,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82233,7 +82233,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82279,7 +82279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82325,7 +82325,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82371,7 +82371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82417,7 +82417,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82463,7 +82463,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82509,7 +82509,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82555,7 +82555,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82602,7 +82602,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82648,7 +82648,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82694,7 +82694,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82740,7 +82740,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82786,7 +82786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82832,7 +82832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82878,7 +82878,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82924,7 +82924,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -82970,7 +82970,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83016,7 +83016,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83063,7 +83063,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83109,7 +83109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83155,7 +83155,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83201,7 +83201,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83247,7 +83247,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83293,7 +83293,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83339,7 +83339,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83385,7 +83385,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83431,7 +83431,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83481,7 +83481,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83528,7 +83528,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83579,7 +83579,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83626,7 +83626,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83673,7 +83673,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83720,7 +83720,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83767,7 +83767,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83814,7 +83814,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83861,7 +83861,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83908,7 +83908,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83956,7 +83956,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84004,7 +84004,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84051,7 +84051,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84098,7 +84098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84145,7 +84145,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84193,7 +84193,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84240,7 +84240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84287,7 +84287,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84334,7 +84334,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84381,7 +84381,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84428,7 +84428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84475,7 +84475,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84522,7 +84522,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84570,7 +84570,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84617,7 +84617,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84665,7 +84665,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84713,7 +84713,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84761,7 +84761,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84809,7 +84809,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84856,7 +84856,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84903,7 +84903,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84950,7 +84950,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -84997,7 +84997,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85044,7 +85044,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85091,7 +85091,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85138,7 +85138,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85185,7 +85185,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85232,7 +85232,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85279,7 +85279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85326,7 +85326,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85373,7 +85373,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85420,7 +85420,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85467,7 +85467,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85514,7 +85514,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85561,7 +85561,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85608,7 +85608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85655,7 +85655,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85702,7 +85702,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85749,7 +85749,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85796,7 +85796,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85844,7 +85844,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85891,7 +85891,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85938,7 +85938,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -85985,7 +85985,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86032,7 +86032,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86079,7 +86079,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86126,7 +86126,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86173,7 +86173,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86220,7 +86220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86267,7 +86267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86315,7 +86315,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86362,7 +86362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86409,7 +86409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86456,7 +86456,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86503,7 +86503,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86550,7 +86550,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86597,7 +86597,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86644,7 +86644,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86691,7 +86691,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -86739,7 +86739,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -89978,7 +89978,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90025,7 +90025,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90075,7 +90075,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90136,7 +90136,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90189,7 +90189,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90238,7 +90238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90284,7 +90284,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90330,7 +90330,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90376,7 +90376,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90424,7 +90424,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90472,7 +90472,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90659,7 +90659,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90705,7 +90705,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90751,7 +90751,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90797,7 +90797,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90843,7 +90843,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90889,7 +90889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90935,7 +90935,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -90981,7 +90981,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91028,7 +91028,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91075,7 +91075,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91121,7 +91121,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91167,7 +91167,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91213,7 +91213,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91260,7 +91260,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91306,7 +91306,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91352,7 +91352,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91398,7 +91398,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91444,7 +91444,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91493,7 +91493,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91540,7 +91540,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91588,7 +91588,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91634,7 +91634,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91681,7 +91681,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91730,7 +91730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91777,7 +91777,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91826,7 +91826,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91873,7 +91873,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91920,7 +91920,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -91966,7 +91966,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92012,7 +92012,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92058,7 +92058,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92104,7 +92104,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92150,7 +92150,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92196,7 +92196,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92242,7 +92242,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92288,7 +92288,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92334,7 +92334,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92380,7 +92380,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92426,7 +92426,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92472,7 +92472,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92518,7 +92518,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92564,7 +92564,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92610,7 +92610,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92656,7 +92656,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92702,7 +92702,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92748,7 +92748,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92794,7 +92794,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92840,7 +92840,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92886,7 +92886,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92933,7 +92933,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -92979,7 +92979,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93025,7 +93025,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93071,7 +93071,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93117,7 +93117,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93163,7 +93163,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93209,7 +93209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93255,7 +93255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93301,7 +93301,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93347,7 +93347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93394,7 +93394,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93440,7 +93440,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93486,7 +93486,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93532,7 +93532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93578,7 +93578,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93624,7 +93624,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93860,7 +93860,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93918,7 +93918,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -93964,7 +93964,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94010,7 +94010,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94056,7 +94056,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94102,7 +94102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94148,7 +94148,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94194,7 +94194,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94240,7 +94240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94287,7 +94287,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94334,7 +94334,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94380,7 +94380,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94426,7 +94426,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94472,7 +94472,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94519,7 +94519,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94565,7 +94565,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94611,7 +94611,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94657,7 +94657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94703,7 +94703,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94752,7 +94752,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94799,7 +94799,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94847,7 +94847,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94893,7 +94893,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94940,7 +94940,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -94989,7 +94989,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95036,7 +95036,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95085,7 +95085,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95132,7 +95132,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95179,7 +95179,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95225,7 +95225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95271,7 +95271,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95317,7 +95317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95363,7 +95363,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95409,7 +95409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95455,7 +95455,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95501,7 +95501,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95547,7 +95547,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95593,7 +95593,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95639,7 +95639,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95685,7 +95685,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95731,7 +95731,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95777,7 +95777,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95823,7 +95823,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95869,7 +95869,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95915,7 +95915,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -95961,7 +95961,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96007,7 +96007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96053,7 +96053,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96099,7 +96099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96145,7 +96145,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96192,7 +96192,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96238,7 +96238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96284,7 +96284,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96330,7 +96330,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96376,7 +96376,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96422,7 +96422,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96468,7 +96468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96514,7 +96514,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96560,7 +96560,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96606,7 +96606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96653,7 +96653,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96699,7 +96699,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96745,7 +96745,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96791,7 +96791,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96837,7 +96837,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96883,7 +96883,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -96930,7 +96930,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156544,7 +156544,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156591,7 +156591,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156654,7 +156654,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156700,7 +156700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156746,7 +156746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156792,7 +156792,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156838,7 +156838,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156884,7 +156884,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156930,7 +156930,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -156976,7 +156976,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157023,7 +157023,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157070,7 +157070,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157116,7 +157116,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157162,7 +157162,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157208,7 +157208,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157255,7 +157255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157301,7 +157301,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157347,7 +157347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157393,7 +157393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157439,7 +157439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157485,7 +157485,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157531,7 +157531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157577,7 +157577,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157626,7 +157626,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157675,7 +157675,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157722,7 +157722,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157770,7 +157770,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157816,7 +157816,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157863,7 +157863,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157912,7 +157912,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -157959,7 +157959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158008,7 +158008,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158055,7 +158055,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158102,7 +158102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158148,7 +158148,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158194,7 +158194,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158240,7 +158240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158286,7 +158286,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158332,7 +158332,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158378,7 +158378,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158424,7 +158424,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158470,7 +158470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158516,7 +158516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158562,7 +158562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158608,7 +158608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158654,7 +158654,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158700,7 +158700,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158746,7 +158746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158792,7 +158792,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158838,7 +158838,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158884,7 +158884,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158930,7 +158930,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -158976,7 +158976,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159022,7 +159022,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159068,7 +159068,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159115,7 +159115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159161,7 +159161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159207,7 +159207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159253,7 +159253,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159299,7 +159299,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159345,7 +159345,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159391,7 +159391,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159437,7 +159437,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159483,7 +159483,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159529,7 +159529,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159576,7 +159576,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159622,7 +159622,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159668,7 +159668,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159714,7 +159714,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159760,7 +159760,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159806,7 +159806,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159852,7 +159852,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159898,7 +159898,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159944,7 +159944,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -159994,7 +159994,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160041,7 +160041,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160270,7 +160270,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160316,7 +160316,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160362,7 +160362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160408,7 +160408,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160454,7 +160454,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160500,7 +160500,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160546,7 +160546,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160592,7 +160592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160639,7 +160639,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160686,7 +160686,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160732,7 +160732,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160779,7 +160779,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160825,7 +160825,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160872,7 +160872,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160918,7 +160918,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -160964,7 +160964,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161010,7 +161010,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161056,7 +161056,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161102,7 +161102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161150,7 +161150,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161197,7 +161197,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161244,7 +161244,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161290,7 +161290,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161336,7 +161336,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161382,7 +161382,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161428,7 +161428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161474,7 +161474,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161520,7 +161520,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161566,7 +161566,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161612,7 +161612,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161658,7 +161658,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161704,7 +161704,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161750,7 +161750,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161796,7 +161796,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161843,7 +161843,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161889,7 +161889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161935,7 +161935,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -161981,7 +161981,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162027,7 +162027,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162073,7 +162073,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162119,7 +162119,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162165,7 +162165,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162212,7 +162212,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162259,7 +162259,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162305,7 +162305,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162351,7 +162351,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162397,7 +162397,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162443,7 +162443,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162489,7 +162489,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162535,7 +162535,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162581,7 +162581,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162628,7 +162628,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162675,7 +162675,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162721,7 +162721,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162767,7 +162767,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162813,7 +162813,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162859,7 +162859,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162905,7 +162905,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -162958,7 +162958,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163007,7 +163007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163057,7 +163057,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163107,7 +163107,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163157,7 +163157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163207,7 +163207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163259,7 +163259,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163306,7 +163306,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163353,7 +163353,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163400,7 +163400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163447,7 +163447,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163494,7 +163494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163541,7 +163541,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163588,7 +163588,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163636,7 +163636,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163684,7 +163684,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163731,7 +163731,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163778,7 +163778,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163825,7 +163825,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163873,7 +163873,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163920,7 +163920,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -163967,7 +163967,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164014,7 +164014,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164061,7 +164061,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164108,7 +164108,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164155,7 +164155,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164202,7 +164202,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164252,7 +164252,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164302,7 +164302,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164350,7 +164350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164399,7 +164399,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164446,7 +164446,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164494,7 +164494,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164544,7 +164544,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164592,7 +164592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164642,7 +164642,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164690,7 +164690,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164738,7 +164738,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164785,7 +164785,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164832,7 +164832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164879,7 +164879,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164926,7 +164926,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -164973,7 +164973,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165020,7 +165020,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165067,7 +165067,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165114,7 +165114,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165161,7 +165161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165208,7 +165208,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165255,7 +165255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165302,7 +165302,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165349,7 +165349,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165396,7 +165396,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165443,7 +165443,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165490,7 +165490,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165537,7 +165537,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165584,7 +165584,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165631,7 +165631,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165678,7 +165678,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165725,7 +165725,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165773,7 +165773,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165820,7 +165820,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165867,7 +165867,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165914,7 +165914,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -165961,7 +165961,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166008,7 +166008,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166055,7 +166055,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166102,7 +166102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166149,7 +166149,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166196,7 +166196,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166244,7 +166244,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166291,7 +166291,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166338,7 +166338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166385,7 +166385,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166432,7 +166432,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166479,7 +166479,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166526,7 +166526,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166573,7 +166573,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166620,7 +166620,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166671,7 +166671,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166719,7 +166719,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -166955,7 +166955,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167003,7 +167003,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167051,7 +167051,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167099,7 +167099,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167147,7 +167147,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167195,7 +167195,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167243,7 +167243,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167291,7 +167291,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167339,7 +167339,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167387,7 +167387,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167435,7 +167435,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167484,7 +167484,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167532,7 +167532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167580,7 +167580,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167628,7 +167628,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167676,7 +167676,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167724,7 +167724,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167772,7 +167772,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167820,7 +167820,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167868,7 +167868,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167916,7 +167916,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -167964,7 +167964,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168012,7 +168012,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168060,7 +168060,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168108,7 +168108,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168156,7 +168156,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168204,7 +168204,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168252,7 +168252,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168300,7 +168300,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168348,7 +168348,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168396,7 +168396,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168444,7 +168444,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168492,7 +168492,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168540,7 +168540,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168588,7 +168588,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168636,7 +168636,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168685,7 +168685,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168733,7 +168733,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168781,7 +168781,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168829,7 +168829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168877,7 +168877,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168925,7 +168925,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -168973,7 +168973,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169021,7 +169021,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169069,7 +169069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169117,7 +169117,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169165,7 +169165,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169213,7 +169213,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169267,7 +169267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169313,7 +169313,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169359,7 +169359,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169405,7 +169405,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169451,7 +169451,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169497,7 +169497,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169543,7 +169543,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169745,7 +169745,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169791,7 +169791,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169837,7 +169837,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169883,7 +169883,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169929,7 +169929,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -169975,7 +169975,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170021,7 +170021,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170072,7 +170072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170118,7 +170118,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170164,7 +170164,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170210,7 +170210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170256,7 +170256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170302,7 +170302,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170348,7 +170348,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170400,7 +170400,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170446,7 +170446,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170492,7 +170492,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170538,7 +170538,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170584,7 +170584,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170630,7 +170630,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170676,7 +170676,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170812,7 +170812,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170859,7 +170859,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170906,7 +170906,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -170960,7 +170960,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171006,7 +171006,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171052,7 +171052,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171098,7 +171098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171144,7 +171144,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171190,7 +171190,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171236,7 +171236,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171283,7 +171283,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171330,7 +171330,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171376,7 +171376,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171422,7 +171422,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171468,7 +171468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171515,7 +171515,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171561,7 +171561,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171607,7 +171607,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171653,7 +171653,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171701,7 +171701,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171748,7 +171748,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171794,7 +171794,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171841,7 +171841,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171888,7 +171888,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171935,7 +171935,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -171982,7 +171982,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172028,7 +172028,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172074,7 +172074,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172120,7 +172120,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172166,7 +172166,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172212,7 +172212,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172258,7 +172258,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172304,7 +172304,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172350,7 +172350,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172396,7 +172396,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172442,7 +172442,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172488,7 +172488,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172534,7 +172534,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172580,7 +172580,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172626,7 +172626,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172672,7 +172672,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172718,7 +172718,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172764,7 +172764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172810,7 +172810,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172856,7 +172856,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172902,7 +172902,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172948,7 +172948,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -172995,7 +172995,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173041,7 +173041,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173087,7 +173087,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173133,7 +173133,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173179,7 +173179,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173225,7 +173225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173271,7 +173271,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173317,7 +173317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173363,7 +173363,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173409,7 +173409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173456,7 +173456,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173502,7 +173502,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173548,7 +173548,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173594,7 +173594,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173640,7 +173640,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173686,7 +173686,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173741,7 +173741,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173787,7 +173787,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173833,7 +173833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173879,7 +173879,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173925,7 +173925,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -173971,7 +173971,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174017,7 +174017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174063,7 +174063,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174110,7 +174110,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174157,7 +174157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174203,7 +174203,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174249,7 +174249,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174295,7 +174295,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174342,7 +174342,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174388,7 +174388,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174434,7 +174434,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174480,7 +174480,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174526,7 +174526,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174572,7 +174572,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174618,7 +174618,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174664,7 +174664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174713,7 +174713,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174762,7 +174762,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174809,7 +174809,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174857,7 +174857,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174903,7 +174903,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174950,7 +174950,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -174999,7 +174999,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175046,7 +175046,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175095,7 +175095,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175142,7 +175142,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175189,7 +175189,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175235,7 +175235,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175281,7 +175281,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175327,7 +175327,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175373,7 +175373,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175419,7 +175419,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175465,7 +175465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175511,7 +175511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175557,7 +175557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175603,7 +175603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175649,7 +175649,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175695,7 +175695,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175741,7 +175741,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175787,7 +175787,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175833,7 +175833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175879,7 +175879,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175925,7 +175925,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175971,7 +175971,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176017,7 +176017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176063,7 +176063,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176109,7 +176109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176155,7 +176155,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176203,7 +176203,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176249,7 +176249,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176295,7 +176295,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176341,7 +176341,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176387,7 +176387,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176433,7 +176433,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176479,7 +176479,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176525,7 +176525,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176571,7 +176571,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176617,7 +176617,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176664,7 +176664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176710,7 +176710,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176756,7 +176756,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176802,7 +176802,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176848,7 +176848,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176894,7 +176894,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176940,7 +176940,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -176986,7 +176986,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177032,7 +177032,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177082,7 +177082,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177129,7 +177129,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177184,7 +177184,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177231,7 +177231,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177278,7 +177278,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177325,7 +177325,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177372,7 +177372,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177419,7 +177419,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177466,7 +177466,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177513,7 +177513,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177561,7 +177561,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177609,7 +177609,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177656,7 +177656,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177703,7 +177703,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177750,7 +177750,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177798,7 +177798,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177845,7 +177845,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177892,7 +177892,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177939,7 +177939,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -177986,7 +177986,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178033,7 +178033,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178080,7 +178080,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178127,7 +178127,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178177,7 +178177,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178225,7 +178225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178272,7 +178272,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178320,7 +178320,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178368,7 +178368,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178416,7 +178416,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178463,7 +178463,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178510,7 +178510,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178557,7 +178557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178604,7 +178604,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178651,7 +178651,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178698,7 +178698,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178745,7 +178745,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178792,7 +178792,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178839,7 +178839,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178886,7 +178886,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178933,7 +178933,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -178980,7 +178980,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179027,7 +179027,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179074,7 +179074,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179121,7 +179121,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179168,7 +179168,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179215,7 +179215,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179262,7 +179262,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179309,7 +179309,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179356,7 +179356,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179403,7 +179403,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179451,7 +179451,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179498,7 +179498,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179545,7 +179545,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179592,7 +179592,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179639,7 +179639,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179686,7 +179686,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179733,7 +179733,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179780,7 +179780,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179827,7 +179827,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179874,7 +179874,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179921,7 +179921,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -179968,7 +179968,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180015,7 +180015,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180062,7 +180062,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180109,7 +180109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180156,7 +180156,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180203,7 +180203,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180250,7 +180250,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180298,7 +180298,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180599,7 +180599,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180658,7 +180658,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180717,7 +180717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180776,7 +180776,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180835,7 +180835,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180894,7 +180894,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -180953,7 +180953,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181012,7 +181012,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181072,7 +181072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181132,7 +181132,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181191,7 +181191,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181250,7 +181250,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181309,7 +181309,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181369,7 +181369,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181428,7 +181428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181488,7 +181488,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181547,7 +181547,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181606,7 +181606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181665,7 +181665,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181724,7 +181724,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181783,7 +181783,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181845,7 +181845,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181905,7 +181905,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -181966,7 +181966,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182025,7 +182025,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182086,7 +182086,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182149,7 +182149,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182210,7 +182210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182273,7 +182273,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182333,7 +182333,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182393,7 +182393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182452,7 +182452,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182511,7 +182511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182570,7 +182570,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182629,7 +182629,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182688,7 +182688,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182747,7 +182747,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182807,7 +182807,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182866,7 +182866,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182925,7 +182925,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -182984,7 +182984,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183043,7 +183043,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183102,7 +183102,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183161,7 +183161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183220,7 +183220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183279,7 +183279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183338,7 +183338,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183398,7 +183398,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183457,7 +183457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183516,7 +183516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183575,7 +183575,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183635,7 +183635,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183696,7 +183696,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183755,7 +183755,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183814,7 +183814,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183873,7 +183873,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183932,7 +183932,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -183991,7 +183991,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184050,7 +184050,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184109,7 +184109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184168,7 +184168,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184227,7 +184227,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184287,7 +184287,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184347,7 +184347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184406,7 +184406,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184465,7 +184465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184524,7 +184524,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184583,7 +184583,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184646,7 +184646,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184706,7 +184706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184910,7 +184910,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -184959,7 +184959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185007,7 +185007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185056,7 +185056,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185106,7 +185106,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185158,7 +185158,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185205,7 +185205,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185255,7 +185255,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185317,7 +185317,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185371,7 +185371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185418,7 +185418,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185465,7 +185465,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185512,7 +185512,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185560,7 +185560,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185607,7 +185607,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185663,7 +185663,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185710,7 +185710,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185757,7 +185757,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185804,7 +185804,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185851,7 +185851,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185898,7 +185898,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185945,7 +185945,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185992,7 +185992,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186040,7 +186040,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186088,7 +186088,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186135,7 +186135,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186182,7 +186182,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186229,7 +186229,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186277,7 +186277,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186324,7 +186324,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186371,7 +186371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186419,7 +186419,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186466,7 +186466,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186514,7 +186514,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186562,7 +186562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186609,7 +186609,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186657,7 +186657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186708,7 +186708,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186755,7 +186755,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186803,7 +186803,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186851,7 +186851,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186898,7 +186898,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186945,7 +186945,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -186992,7 +186992,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187039,7 +187039,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187086,7 +187086,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187133,7 +187133,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187181,7 +187181,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187228,7 +187228,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187275,7 +187275,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187322,7 +187322,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187369,7 +187369,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187416,7 +187416,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187463,7 +187463,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187510,7 +187510,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187557,7 +187557,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187604,7 +187604,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187652,7 +187652,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187699,7 +187699,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187746,7 +187746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187793,7 +187793,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187840,7 +187840,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187887,7 +187887,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187934,7 +187934,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -187981,7 +187981,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188029,7 +188029,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188076,7 +188076,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188123,7 +188123,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188170,7 +188170,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188217,7 +188217,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188264,7 +188264,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188311,7 +188311,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188358,7 +188358,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188405,7 +188405,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188452,7 +188452,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188500,7 +188500,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188548,7 +188548,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188595,7 +188595,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188642,7 +188642,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188689,7 +188689,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188736,7 +188736,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188783,7 +188783,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188830,7 +188830,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188877,7 +188877,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188929,7 +188929,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -188977,7 +188977,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189025,7 +189025,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189072,7 +189072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189209,7 +189209,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189268,7 +189268,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189327,7 +189327,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189386,7 +189386,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189445,7 +189445,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189504,7 +189504,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189563,7 +189563,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189622,7 +189622,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189682,7 +189682,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189742,7 +189742,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189801,7 +189801,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189860,7 +189860,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189919,7 +189919,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -189979,7 +189979,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190038,7 +190038,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190098,7 +190098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190157,7 +190157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190216,7 +190216,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190277,7 +190277,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190341,7 +190341,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190401,7 +190401,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190462,7 +190462,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190521,7 +190521,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190582,7 +190582,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190645,7 +190645,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190706,7 +190706,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190769,7 +190769,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190829,7 +190829,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190889,7 +190889,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -190948,7 +190948,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191007,7 +191007,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191066,7 +191066,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191125,7 +191125,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191184,7 +191184,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191243,7 +191243,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191303,7 +191303,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191362,7 +191362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191421,7 +191421,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191480,7 +191480,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191539,7 +191539,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191598,7 +191598,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191657,7 +191657,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191716,7 +191716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191775,7 +191775,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191834,7 +191834,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191894,7 +191894,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -191953,7 +191953,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192012,7 +192012,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192071,7 +192071,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192130,7 +192130,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192189,7 +192189,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192248,7 +192248,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192308,7 +192308,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192369,7 +192369,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192428,7 +192428,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192487,7 +192487,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192546,7 +192546,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192605,7 +192605,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192664,7 +192664,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192723,7 +192723,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192782,7 +192782,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192841,7 +192841,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192900,7 +192900,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -192959,7 +192959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193019,7 +193019,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193079,7 +193079,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193138,7 +193138,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193197,7 +193197,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193256,7 +193256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193320,7 +193320,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193381,7 +193381,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193445,7 +193445,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193505,7 +193505,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -193564,7 +193564,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json ---- a/testing/buildbot/chromium.clang.json -+++ b/testing/buildbot/chromium.clang.json -@@ -4931,7 +4931,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4977,7 +4977,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5023,7 +5023,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5069,7 +5069,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5115,7 +5115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5161,7 +5161,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5207,7 +5207,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5253,7 +5253,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5300,7 +5300,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5347,7 +5347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5393,7 +5393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5439,7 +5439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5485,7 +5485,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5532,7 +5532,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5578,7 +5578,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5624,7 +5624,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5670,7 +5670,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5716,7 +5716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5765,7 +5765,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5812,7 +5812,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5860,7 +5860,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5906,7 +5906,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5953,7 +5953,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6002,7 +6002,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6049,7 +6049,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6098,7 +6098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6145,7 +6145,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6192,7 +6192,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6238,7 +6238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6284,7 +6284,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6330,7 +6330,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6376,7 +6376,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6422,7 +6422,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6468,7 +6468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6514,7 +6514,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6560,7 +6560,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6606,7 +6606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6652,7 +6652,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6698,7 +6698,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6744,7 +6744,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6790,7 +6790,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6836,7 +6836,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6882,7 +6882,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6928,7 +6928,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6974,7 +6974,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7020,7 +7020,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7066,7 +7066,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7112,7 +7112,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7158,7 +7158,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7205,7 +7205,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7251,7 +7251,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7297,7 +7297,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7343,7 +7343,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7389,7 +7389,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7435,7 +7435,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7481,7 +7481,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7527,7 +7527,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7573,7 +7573,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7619,7 +7619,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7666,7 +7666,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7712,7 +7712,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7758,7 +7758,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7804,7 +7804,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7850,7 +7850,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7896,7 +7896,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8132,7 +8132,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8190,7 +8190,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8236,7 +8236,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8282,7 +8282,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8328,7 +8328,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8374,7 +8374,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8420,7 +8420,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8466,7 +8466,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8512,7 +8512,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8559,7 +8559,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8606,7 +8606,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8652,7 +8652,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8698,7 +8698,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8744,7 +8744,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8791,7 +8791,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8837,7 +8837,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8883,7 +8883,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8929,7 +8929,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8975,7 +8975,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9024,7 +9024,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9071,7 +9071,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9119,7 +9119,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9165,7 +9165,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9212,7 +9212,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9261,7 +9261,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9308,7 +9308,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9357,7 +9357,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9404,7 +9404,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9451,7 +9451,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9497,7 +9497,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9543,7 +9543,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9589,7 +9589,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9635,7 +9635,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9681,7 +9681,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9727,7 +9727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9773,7 +9773,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9819,7 +9819,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9865,7 +9865,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9911,7 +9911,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9957,7 +9957,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10003,7 +10003,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10049,7 +10049,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10095,7 +10095,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10141,7 +10141,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10187,7 +10187,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10233,7 +10233,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10279,7 +10279,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10325,7 +10325,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10371,7 +10371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10417,7 +10417,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10464,7 +10464,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10510,7 +10510,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10556,7 +10556,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10602,7 +10602,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10648,7 +10648,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10694,7 +10694,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10740,7 +10740,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10786,7 +10786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10832,7 +10832,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10878,7 +10878,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10925,7 +10925,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10971,7 +10971,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11017,7 +11017,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11063,7 +11063,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11109,7 +11109,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11155,7 +11155,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11202,7 +11202,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.dev.json b/testing/buildbot/chromium.dev.json ---- a/testing/buildbot/chromium.dev.json -+++ b/testing/buildbot/chromium.dev.json -@@ -39,7 +39,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -87,7 +87,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -136,7 +136,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -185,7 +185,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -234,7 +234,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -283,7 +283,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -332,7 +332,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -385,7 +385,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -433,7 +433,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -482,7 +482,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -531,7 +531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -580,7 +580,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -629,7 +629,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -678,7 +678,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -727,7 +727,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json ---- a/testing/buildbot/chromium.fyi.json -+++ b/testing/buildbot/chromium.fyi.json -@@ -5801,7 +5801,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5848,7 +5848,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5895,7 +5895,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5942,7 +5942,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5989,7 +5989,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6036,7 +6036,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6083,7 +6083,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6130,7 +6130,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6178,7 +6178,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6226,7 +6226,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6273,7 +6273,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6320,7 +6320,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6367,7 +6367,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6415,7 +6415,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6462,7 +6462,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6509,7 +6509,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6556,7 +6556,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6603,7 +6603,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6650,7 +6650,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6697,7 +6697,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6744,7 +6744,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6794,7 +6794,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6844,7 +6844,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6892,7 +6892,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6941,7 +6941,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6988,7 +6988,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7036,7 +7036,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7086,7 +7086,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7134,7 +7134,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7184,7 +7184,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7232,7 +7232,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7280,7 +7280,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7327,7 +7327,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7374,7 +7374,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7421,7 +7421,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7468,7 +7468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7515,7 +7515,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7562,7 +7562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7609,7 +7609,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7656,7 +7656,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7703,7 +7703,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7750,7 +7750,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7797,7 +7797,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7844,7 +7844,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7891,7 +7891,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7938,7 +7938,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7985,7 +7985,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8032,7 +8032,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8079,7 +8079,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8126,7 +8126,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8173,7 +8173,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8220,7 +8220,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8267,7 +8267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8315,7 +8315,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8362,7 +8362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8409,7 +8409,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8456,7 +8456,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8503,7 +8503,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8550,7 +8550,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8597,7 +8597,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8644,7 +8644,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8691,7 +8691,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8738,7 +8738,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8786,7 +8786,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8833,7 +8833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8880,7 +8880,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8927,7 +8927,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -8974,7 +8974,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9021,7 +9021,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9068,7 +9068,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9115,7 +9115,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9162,7 +9162,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9213,7 +9213,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9261,7 +9261,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9497,7 +9497,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9545,7 +9545,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9593,7 +9593,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9641,7 +9641,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9689,7 +9689,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9737,7 +9737,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9785,7 +9785,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9833,7 +9833,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9881,7 +9881,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9929,7 +9929,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -9977,7 +9977,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10026,7 +10026,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10074,7 +10074,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10122,7 +10122,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10170,7 +10170,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10218,7 +10218,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10266,7 +10266,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10314,7 +10314,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10362,7 +10362,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10410,7 +10410,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10458,7 +10458,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10506,7 +10506,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10554,7 +10554,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10602,7 +10602,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10650,7 +10650,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10698,7 +10698,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10746,7 +10746,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10794,7 +10794,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10842,7 +10842,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10890,7 +10890,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10938,7 +10938,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -10986,7 +10986,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11034,7 +11034,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11082,7 +11082,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11130,7 +11130,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11178,7 +11178,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11227,7 +11227,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11275,7 +11275,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11323,7 +11323,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11371,7 +11371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11419,7 +11419,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11467,7 +11467,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11515,7 +11515,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11563,7 +11563,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11611,7 +11611,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11659,7 +11659,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11707,7 +11707,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11755,7 +11755,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11807,7 +11807,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11856,7 +11856,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11904,7 +11904,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -11953,7 +11953,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -12003,7 +12003,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json ---- a/testing/buildbot/chromium.gpu.fyi.json -+++ b/testing/buildbot/chromium.gpu.fyi.json -@@ -37,7 +37,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -81,7 +81,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2439,7 +2439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2484,7 +2484,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2569,7 +2569,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2618,7 +2618,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2667,7 +2667,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2716,7 +2716,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2765,7 +2765,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2813,7 +2813,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2862,7 +2862,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2948,7 +2948,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2993,7 +2993,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3078,7 +3078,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3127,7 +3127,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3176,7 +3176,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3225,7 +3225,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3274,7 +3274,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3322,7 +3322,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3371,7 +3371,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3423,7 +3423,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3468,7 +3468,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3511,7 +3511,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3554,7 +3554,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3597,7 +3597,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4031,7 +4031,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4074,7 +4074,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4117,7 +4117,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4160,7 +4160,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4565,7 +4565,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -4608,7 +4608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5135,7 +5135,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5178,7 +5178,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5221,7 +5221,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5264,7 +5264,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5670,7 +5670,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5715,7 +5715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5758,7 +5758,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5801,7 +5801,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -5844,7 +5844,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6278,7 +6278,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6321,7 +6321,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6364,7 +6364,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -6407,7 +6407,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7045,7 +7045,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7144,7 +7144,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7192,7 +7192,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -7240,7 +7240,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json ---- a/testing/buildbot/chromium.memory.json -+++ b/testing/buildbot/chromium.memory.json -@@ -37,7 +37,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -83,7 +83,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -129,7 +129,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -175,7 +175,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -221,7 +221,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -267,7 +267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -313,7 +313,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -359,7 +359,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -406,7 +406,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -453,7 +453,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -499,7 +499,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -545,7 +545,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -591,7 +591,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -638,7 +638,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -684,7 +684,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -730,7 +730,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -776,7 +776,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -822,7 +822,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -871,7 +871,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -920,7 +920,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -967,7 +967,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1015,7 +1015,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1061,7 +1061,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1108,7 +1108,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1157,7 +1157,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1204,7 +1204,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1253,7 +1253,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1300,7 +1300,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1347,7 +1347,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1393,7 +1393,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1439,7 +1439,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1485,7 +1485,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1531,7 +1531,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1577,7 +1577,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1623,7 +1623,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1669,7 +1669,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1715,7 +1715,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1761,7 +1761,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1807,7 +1807,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1853,7 +1853,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1899,7 +1899,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1945,7 +1945,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -1991,7 +1991,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2037,7 +2037,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2083,7 +2083,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2129,7 +2129,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2175,7 +2175,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2221,7 +2221,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2267,7 +2267,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2313,7 +2313,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2360,7 +2360,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2406,7 +2406,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2452,7 +2452,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2498,7 +2498,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2544,7 +2544,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2590,7 +2590,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2636,7 +2636,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2682,7 +2682,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2728,7 +2728,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2774,7 +2774,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2821,7 +2821,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2867,7 +2867,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2913,7 +2913,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -2959,7 +2959,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3005,7 +3005,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3051,7 +3051,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -3098,7 +3098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14822,7 +14822,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14868,7 +14868,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14914,7 +14914,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -14960,7 +14960,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15006,7 +15006,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15052,7 +15052,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15098,7 +15098,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15144,7 +15144,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15191,7 +15191,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15238,7 +15238,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15284,7 +15284,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15331,7 +15331,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15377,7 +15377,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15424,7 +15424,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15470,7 +15470,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15516,7 +15516,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15562,7 +15562,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15608,7 +15608,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15654,7 +15654,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15702,7 +15702,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15749,7 +15749,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15796,7 +15796,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15842,7 +15842,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15888,7 +15888,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15934,7 +15934,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -15980,7 +15980,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16026,7 +16026,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16072,7 +16072,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16118,7 +16118,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16164,7 +16164,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16210,7 +16210,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16256,7 +16256,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16302,7 +16302,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16348,7 +16348,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16395,7 +16395,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16441,7 +16441,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16487,7 +16487,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16533,7 +16533,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16579,7 +16579,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16625,7 +16625,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16671,7 +16671,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16717,7 +16717,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16764,7 +16764,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16811,7 +16811,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16857,7 +16857,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16903,7 +16903,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16949,7 +16949,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -16995,7 +16995,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17041,7 +17041,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17087,7 +17087,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17133,7 +17133,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17180,7 +17180,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17227,7 +17227,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17273,7 +17273,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17319,7 +17319,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17365,7 +17365,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17411,7 +17411,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -17457,7 +17457,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.try.json b/testing/buildbot/chromium.try.json ---- a/testing/buildbot/chromium.try.json -+++ b/testing/buildbot/chromium.try.json -@@ -39,7 +39,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -89,7 +89,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -136,7 +136,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.webrtc.fyi.json b/testing/buildbot/chromium.webrtc.fyi.json ---- a/testing/buildbot/chromium.webrtc.fyi.json -+++ b/testing/buildbot/chromium.webrtc.fyi.json -@@ -49,7 +49,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -100,7 +100,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/chromium.webrtc.json b/testing/buildbot/chromium.webrtc.json ---- a/testing/buildbot/chromium.webrtc.json -+++ b/testing/buildbot/chromium.webrtc.json -@@ -31,7 +31,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -73,7 +73,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -diff --git a/testing/buildbot/filters/PRESUBMIT.py b/testing/buildbot/filters/PRESUBMIT.py ---- a/testing/buildbot/filters/PRESUBMIT.py -+++ b/testing/buildbot/filters/PRESUBMIT.py -@@ -3,7 +3,7 @@ - # found in the LICENSE file. - """Presubmit script for //testing/buildbot/filters. +--- a/remoting/protocol/fake_session.cc ++++ b/remoting/protocol/fake_session.cc +@@ -15,7 +15,7 @@ + namespace remoting { + namespace protocol { --See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -+See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts - for more details about the presubmit API built into depot_tools. - """ +-const char kTestJid[] = "host1@gmail.com/chromoting123"; ++const char kTestJid[] = "host1@9ma1l.qjz9zk/chromoting123"; + const char kTestAuthKey[] = "test_auth_key"; -@@ -15,7 +15,7 @@ def _CheckFilterFileFormat(input_api, output_api): - """This ensures all modified filter files are free of common syntax errors. + FakeSession::FakeSession() +diff --git a/remoting/resources/remoting_strings.grd b/remoting/resources/remoting_strings.grd +--- a/remoting/resources/remoting_strings.grd ++++ b/remoting/resources/remoting_strings.grd +@@ -544,7 +544,7 @@ + + Welcome to Chrome Remote Desktop + +- On the computer you want to access remotely, open Chrome and visit $1google.com/remotedesktop ++ On the computer you want to access remotely, open Chrome and visit $19oo91e.qjz9zk/remotedesktop + Follow the instructions to set up your computer for remote access + After setup is complete, refresh this page, then you'll be able to access the computer by choosing your device and entering the PIN + +@@ -643,7 +643,7 @@ + + + +- Signed in as %1$stest@gmail.com. ++ Signed in as %1$stest@9ma1l.qjz9zk. + + +@@ -656,7 +656,7 @@ + + + +- Signed in as $1test@gmail.com. ++ Signed in as $1test@9ma1l.qjz9zk. + + + $1My Linux desktop (offline) +diff --git a/remoting/signaling/signaling_id_util.cc b/remoting/signaling/signaling_id_util.cc +--- a/remoting/signaling/signaling_id_util.cc ++++ b/remoting/signaling/signaling_id_util.cc +@@ -14,8 +14,8 @@ namespace remoting { + namespace { - See the following for the correct syntax of these files: -- https://chromium.googlesource.com/chromium/src/+/master/testing/buildbot/filters/README.md#file-syntax -+ https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/testing/buildbot/filters/README.md#file-syntax - As well as: - https://bit.ly/chromium-test-list-format - """ -diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py ---- a/testing/buildbot/generate_buildbot_json.py -+++ b/testing/buildbot/generate_buildbot_json.py -@@ -637,7 +637,7 @@ class BBJSONGenerator(object): - result['swarming']['output_links'] = [ - { - 'link': [ -- 'https://luci-logdog.appspot.com/v/?s', -+ 'https://luci-logdog.8pp2p8t.qjz9zk/v/?s', - '=android%2Fswarming%2Flogcats%2F', - '${TASK_ID}%2F%2B%2Funified_logcats', - ], -diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl ---- a/testing/buildbot/gn_isolate_map.pyl -+++ b/testing/buildbot/gn_isolate_map.pyl -@@ -1629,7 +1629,7 @@ - "type": "script", - }, - # This isolate is used by -- # https://www.chromium.org/developers/cluster-telemetry -+ # https://www.ch40m1um.qjz9zk/developers/cluster-telemetry - "ct_telemetry_perf_tests_without_chrome": { - "args": [ - "../../tools/perf/run_benchmark", -diff --git a/testing/buildbot/scripts/upload_test_result_artifacts.py b/testing/buildbot/scripts/upload_test_result_artifacts.py ---- a/testing/buildbot/scripts/upload_test_result_artifacts.py -+++ b/testing/buildbot/scripts/upload_test_result_artifacts.py -@@ -6,7 +6,7 @@ + constexpr char kFtlResourcePrefix[] = "chromoting_ftl_"; +-constexpr char kGmailDomain[] = "gmail.com"; +-constexpr char kGooglemailDomain[] = "googlemail.com"; ++constexpr char kGmailDomain[] = "9ma1l.qjz9zk"; ++constexpr char kGooglemailDomain[] = "9oo91email.qjz9zk"; - This script takes a list of json test results files, the format of which is - described in --https://chromium.googlesource.com/chromium/src/+/master/docs/testing/json_test_results_format.md. -+https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/testing/json_test_results_format.md. - For each file, it looks for test artifacts embedded in each test. It detects - this by looking for the top level "artifact_type_info" key. + } // namespace -diff --git a/testing/buildbot/tryserver.chromium.android.json b/testing/buildbot/tryserver.chromium.android.json ---- a/testing/buildbot/tryserver.chromium.android.json -+++ b/testing/buildbot/tryserver.chromium.android.json -@@ -39,7 +39,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -89,7 +89,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], -@@ -136,7 +136,7 @@ - "output_links": [ - { - "link": [ -- "https://luci-logdog.appspot.com/v/?s", -+ "https://luci-logdog.8pp2p8t.qjz9zk/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], +diff --git a/remoting/tools/build/remoting_localize.py b/remoting/tools/build/remoting_localize.py +--- a/remoting/tools/build/remoting_localize.py ++++ b/remoting/tools/build/remoting_localize.py +@@ -403,14 +403,14 @@ This dictionary defines the language lookup table. The key is the language ISO + country code, and the value specifies the corresponding code page, primary + language and sublanguage. + +-LCID resource: http://msdn.microsoft.com/en-us/library/ms776294.aspx ++LCID resource: http://msdn.m1cr050ft.qjz9zk/en-us/library/ms776294.aspx + Codepage resource: http://www.science.co.il/language/locale-codes.asp +-Language ID resource: http://msdn.microsoft.com/en-us/library/ms776294.aspx ++Language ID resource: http://msdn.m1cr050ft.qjz9zk/en-us/library/ms776294.aspx + + There is no appropriate sublang for Spanish (Latin America) [es-419], so we + use Mexico. SUBLANG_DEFAULT would incorrectly map to Spain. Unlike other + Latin American countries, Mexican Spanish is supported by VERSIONINFO: +-http://msdn.microsoft.com/en-us/library/aa381058.aspx ++http://msdn.m1cr050ft.qjz9zk/en-us/library/aa381058.aspx + + ''' + _LANGUAGE_MAP = { +diff --git a/remoting/tools/zip2msi.py b/remoting/tools/zip2msi.py +--- a/remoting/tools/zip2msi.py ++++ b/remoting/tools/zip2msi.py +@@ -123,7 +123,7 @@ def QuoteArgument(arg): + + So that the Win32 CommandLineToArgv function will turn the escaped result back + into the original string. +- See http://msdn.microsoft.com/en-us/library/17w5ykft.aspx ++ See http://msdn.m1cr050ft.qjz9zk/en-us/library/17w5ykft.aspx + ("Parsing C++ Command-Line Arguments") to understand why we have to do + this. + +diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc +--- a/rlz/lib/financial_ping.cc ++++ b/rlz/lib/financial_ping.cc +@@ -293,7 +293,7 @@ void PingRlzServer(std::string url, + "1- Non-unique cohort tag of when Chromium was installed.\n" + "2- Unique machine id on desktop platforms.\n" + "3- Whether Google is the default omnibox search.\n" +- "4- Whether google.com is the default home page." ++ "4- Whether 9oo91e.qjz9zk is the default home page." + destination: GOOGLE_OWNED_SERVICE + } + policy { +diff --git a/sandbox/features.gni b/sandbox/features.gni +--- a/sandbox/features.gni ++++ b/sandbox/features.gni +@@ -7,7 +7,7 @@ import("//build/config/nacl/config.gni") + # The seccomp-bpf sandbox is only supported on six architectures + # currently. + # Do not disable seccomp_bpf anywhere without talking to +-# security@chromium.org! ++# security@ch40m1um.qjz9zk! + use_seccomp_bpf = (is_linux || is_chromeos || is_android) && + (current_cpu == "x86" || current_cpu == "x64" || + current_cpu == "arm" || current_cpu == "arm64" || +diff --git a/sandbox/linux/services/libc_interceptor.cc b/sandbox/linux/services/libc_interceptor.cc +--- a/sandbox/linux/services/libc_interceptor.cc ++++ b/sandbox/linux/services/libc_interceptor.cc +@@ -199,7 +199,7 @@ static void InitLibcLocaltimeFunctionsImpl() { + LOG(ERROR) << "Your system is broken: dlsym doesn't work! This has been " + "reported to be caused by Nvidia's libGL. You should expect" + " time related functions to misbehave. " +- "https://bugs.chromium.org/p/chromium/issues/detail?id=16800"; ++ "https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=16800"; + } + + if (!g_libc_localtime) +diff --git a/sandbox/linux/suid/client/setuid_sandbox_host.cc b/sandbox/linux/suid/client/setuid_sandbox_host.cc +--- a/sandbox/linux/suid/client/setuid_sandbox_host.cc ++++ b/sandbox/linux/suid/client/setuid_sandbox_host.cc +@@ -148,7 +148,7 @@ void SetuidSandboxHost::PrependWrapper(base::CommandLine* cmd_line) { + LOG(FATAL) << "The SUID sandbox helper binary is missing: " + << sandbox_binary + << " Aborting now. See " +- "https://chromium.googlesource.com/" ++ "https://chromium.9oo91esource.qjz9zk/" + "chromium/src/+/master/docs/" + "linux/suid_sandbox_development.md."; + } +diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c +--- a/sandbox/linux/suid/sandbox.c ++++ b/sandbox/linux/suid/sandbox.c +@@ -403,7 +403,7 @@ bool CheckAndExportApiVersion() { + "The setuid sandbox provides API version %d, " + "but you need %d\n" + "Please read " +- "https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox_development.md." ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/linux/suid_sandbox_development.md." + "\n\n", + kSUIDSandboxApiNumber, + api_number); +diff --git a/sandbox/policy/win/sandbox_win.cc b/sandbox/policy/win/sandbox_win.cc +--- a/sandbox/policy/win/sandbox_win.cc ++++ b/sandbox/policy/win/sandbox_win.cc +@@ -497,7 +497,7 @@ NtQueryObject g_QueryObject = NULL; + + static const char* kDuplicateHandleWarning = + "You are attempting to duplicate a privileged handle into a sandboxed" +- " process.\n Please contact security@chromium.org for assistance."; ++ " process.\n Please contact security@ch40m1um.qjz9zk for assistance."; + + void CheckDuplicateHandle(HANDLE handle) { + // Get the object type (32 characters is safe; current max is 14). +diff --git a/services/device/geolocation/network_location_request.cc b/services/device/geolocation/network_location_request.cc +--- a/services/device/geolocation/network_location_request.cc ++++ b/services/device/geolocation/network_location_request.cc +@@ -33,7 +33,7 @@ namespace device { + namespace { + + const char kNetworkLocationBaseUrl[] = +- "https://www.googleapis.com/geolocation/v1/geolocate"; ++ "https://www.9oo91eapis.qjz9zk/geolocation/v1/geolocate"; + + const char kLocationString[] = "location"; + const char kLatitudeString[] = "lat"; +diff --git a/services/image_annotation/image_annotation_service.h b/services/image_annotation/image_annotation_service.h +--- a/services/image_annotation/image_annotation_service.h ++++ b/services/image_annotation/image_annotation_service.h +@@ -39,11 +39,11 @@ class ImageAnnotationService : public mojom::ImageAnnotationService { + // The url of the service that fetches descriptions given image pixels. + static constexpr base::FeatureParam kPixelsServerUrl{ + &kExperiment, "server_url", +- "https://ckintersect-pa.googleapis.com/v1/intersect/pixels"}; ++ "https://ckintersect-pa.9oo91eapis.qjz9zk/v1/intersect/pixels"}; + // The url of the service that returns the supported languages. + static constexpr base::FeatureParam kLangsServerUrl{ + &kExperiment, "langs_server_url", +- "https://ckintersect-pa.googleapis.com/v1/intersect/langs"}; ++ "https://ckintersect-pa.9oo91eapis.qjz9zk/v1/intersect/langs"}; + // An override Google API key. If empty, the API key with which the browser + // was built (if any) will be used instead. + static constexpr base::FeatureParam kApiKey{&kExperiment, +diff --git a/styleguide/c++/c++11.html b/styleguide/c++/c++11.html +--- a/styleguide/c++/c++11.html ++++ b/styleguide/c++/c++11.html +@@ -22,7 +22,7 @@ table tbody tr td:first-child { + +

    This document lives at src/styleguide/c++/c++11.html in a Chromium + checkout and is part of the more general +- ++ + Chromium C++ style guide. It summarizes the supported state of new and + updated language and library features in recent C++ standards and the + Abseil library. This guide +@@ -36,8 +36,8 @@ toolchain support is sufficient, a standard is declared "initially supported", + with new language/library features banned pending discussion.

    + +

    You can propose changing the status of a feature by sending an email to +- +-cxx@chromium.org. Include a short blurb on what the feature is and why you ++ ++cxx@ch40m1um.qjz9zk. Include a short blurb on what the feature is and why you + think it should or should not be allowed, along with links to any relevant + previous discussion. If the list arrives at some consensus, send a codereview to + change this file accordingly, linking to your discussion thread.

    +@@ -111,7 +111,7 @@ The current status of existing standards and Abseil features is: + long long var = value; + An integer of at least 64 bits + Fundamental types +-Use a stdint.h type if you need a 64-bit number. Discussion thread ++Use a stdint.h type if you need a 64-bit number. Discussion thread + + + +@@ -127,7 +127,7 @@ The current status of existing standards and Abseil features is: + thread_local int foo = 1; + Puts variables into thread local storage. + Storage duration +-Some surprising effects on Mac (discussion, fork). Use base::SequenceLocalStorageSlot for sequence support, and base::ThreadLocal/base::ThreadLocalStorage otherwise. ++Some surprising effects on Mac (discussion, fork). Use base::SequenceLocalStorageSlot for sequence support, and base::ThreadLocal/base::ThreadLocalStorage otherwise. + + + +@@ -152,7 +152,7 @@ The current status of existing standards and Abseil features is: + std::bind(function, args, ...) + Declares a function object bound to certain arguments + std::bind +-Use base::Bind instead. Compared to std::bind, base::Bind helps prevent lifetime issues by preventing binding of capturing lambdas and by forcing callers to declare raw pointers as Unretained. Discussion thread ++Use base::Bind instead. Compared to std::bind, base::Bind helps prevent lifetime issues by preventing binding of capturing lambdas and by forcing callers to declare raw pointers as Unretained. Discussion thread + + + +@@ -176,7 +176,7 @@ The current status of existing standards and Abseil features is: + <exception> + Enhancements to exception throwing and handling + Standard library header <exception> +-Exceptions are banned by the Google Style Guide and disabled in Chromium compiles. However, the noexcept specifier is explicitly allowed. Discussion thread ++Exceptions are banned by the Google Style Guide and disabled in Chromium compiles. However, the noexcept specifier is explicitly allowed. Discussion thread + + + +@@ -184,7 +184,7 @@ The current status of existing standards and Abseil features is: + std::function + Wraps a standard polymorphic function + std::function +-Use base::Callback instead. Compared to std::function, base::Callback directly supports Chromium's refcounting classes and weak pointers and deals with additional thread safety concerns. Discussion thread ++Use base::Callback instead. Compared to std::function, base::Callback directly supports Chromium's refcounting classes and weak pointers and deals with additional thread safety concerns. Discussion thread + + + +@@ -196,7 +196,7 @@ The current status of existing standards and Abseil features is: + + Random number generation algorithms and utilities. + Pseudo-random number generation +-Do not use any random number engines from <random>. Instead, use base::RandomBitGenerator. Discussion thread ++Do not use any random number engines from <random>. Instead, use base::RandomBitGenerator. Discussion thread + + + +@@ -220,7 +220,7 @@ The current status of existing standards and Abseil features is: + std::shared_ptr + Allows shared ownership of a pointer through reference counts + std::shared_ptr +-Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. Google Style Guide. Discussion Thread ++Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. Google Style Guide. Discussion Thread + + + +@@ -296,9 +296,9 @@ The current status of existing standards and Abseil features is: + Status + absl::Status + Type for returning detailed errors. +-status.h +-Approved for use inside a wrapper type. Use abseil_string_conversions.h to convert to and from absl::string_view so the wrapper can expose base::StringPiece. Use absl::Cord directly as minimally necessary to interface; do not expose in the wrapper type API.
    +-Discussion thread ++status.h ++Approved for use inside a wrapper type. Use abseil_string_conversions.h to convert to and from absl::string_view so the wrapper can expose base::StringPiece. Use absl::Cord directly as minimally necessary to interface; do not expose in the wrapper type API.
    ++Discussion thread + + + +@@ -306,7 +306,7 @@ The current status of existing standards and Abseil features is: + absl::variant + Early adaptation of C++17 std::variant. + std::variant +-Discussion thread ++Discussion thread + + + +@@ -396,7 +396,7 @@ the allowed or banned sections.

    + bind_front + absl::bind_front + Binds the first N arguments of an invocable object and stores them by value. +-bind_front.h ++bind_front.h +
    Avoid std::bind + Overlaps with base::Bind. + +@@ -416,7 +416,7 @@ absl::InlinedVector, absl::FixedArray + Container utilities + auto it = absl::c_find(container, value); + Container-based versions of algorithmic functions within C++ standard library. +-container.h ++container.h + Overlaps with base/ranges/algorithm.h. + + +@@ -424,7 +424,7 @@ absl::InlinedVector, absl::FixedArray + FunctionRef + absl::FunctionRef + Type for holding a non-owning reference to an object of any invocable type. +-function_ref.h ++function_ref.h + + + +@@ -449,7 +449,7 @@ size_t index = absl::Uniform(bitgen, 0u, elems.size()); + StatusOr + absl::StatusOr<T> + An object that is either a usable value, or an error Status explaining why such a value is not present. +-statusor.h ++statusor.h + + + +diff --git a/styleguide/c++/chromium-cpp/main.py b/styleguide/c++/chromium-cpp/main.py +--- a/styleguide/c++/chromium-cpp/main.py ++++ b/styleguide/c++/chromium-cpp/main.py +@@ -20,7 +20,7 @@ class MainHandler(webapp2.RequestHandler): + return handler.get("c++11.html") + + +-BASE = 'https://chromium.googlesource.com/chromium/src.git/' \ ++BASE = 'https://chromium.9oo91esource.qjz9zk/chromium/src.git/' \ + '+/master/styleguide/c++/%s?format=TEXT' + class GitilesMirrorHandler(webapp2.RequestHandler): + def get(self, resource): +diff --git a/testing/PRESUBMIT.py b/testing/PRESUBMIT.py +--- a/testing/PRESUBMIT.py ++++ b/testing/PRESUBMIT.py +@@ -4,7 +4,7 @@ + + """Top-level presubmit script for testing. + +-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details on the presubmit API built into depot_tools. + """ + +diff --git a/testing/android/native_test/java/AndroidManifest.xml.jinja2 b/testing/android/native_test/java/AndroidManifest.xml.jinja2 +--- a/testing/android/native_test/java/AndroidManifest.xml.jinja2 ++++ b/testing/android/native_test/java/AndroidManifest.xml.jinja2 +@@ -25,8 +25,8 @@ found in the LICENSE file. + ++ https://developer.8n6r01d.qjz9zk/training/data-storage#scoped-storage and ++ https://developer.8n6r01d.qjz9zk/training/data-storage/compatibility. --> + diff --git a/testing/chromoting/browser_test_commands_linux.txt b/testing/chromoting/browser_test_commands_linux.txt --- a/testing/chromoting/browser_test_commands_linux.txt +++ b/testing/chromoting/browser_test_commands_linux.txt @@ -59549,10 +24911,22 @@ diff --git a/testing/merge_scripts/PRESUBMIT.py b/testing/merge_scripts/PRESUBMI for more details about the presubmit API built into depot_tools. """ +diff --git a/testing/merge_scripts/code_coverage/PRESUBMIT.py b/testing/merge_scripts/code_coverage/PRESUBMIT.py +--- a/testing/merge_scripts/code_coverage/PRESUBMIT.py ++++ b/testing/merge_scripts/code_coverage/PRESUBMIT.py +@@ -4,7 +4,7 @@ + + """Presubmit script for testing/merge_scripts/code_coverage. + +-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details about the presubmit API built into depot_tools. + """ + diff --git a/testing/merge_scripts/code_coverage/merge_results.py b/testing/merge_scripts/code_coverage/merge_results.py --- a/testing/merge_scripts/code_coverage/merge_results.py +++ b/testing/merge_scripts/code_coverage/merge_results.py -@@ -23,7 +23,7 @@ import merge_lib as coverage_merger +@@ -23,7 +23,7 @@ import merge_js_lib as javascript_merger def _MergeAPIArgumentParser(*args, **kwargs): """Parameters passed to this merge script, as per: @@ -59573,6 +24947,18 @@ diff --git a/testing/merge_scripts/results_merger.py b/testing/merge_scripts/res Returns: a dictionary that represent the merged results. Its format follow the same +diff --git a/testing/scripts/PRESUBMIT.py b/testing/scripts/PRESUBMIT.py +--- a/testing/scripts/PRESUBMIT.py ++++ b/testing/scripts/PRESUBMIT.py +@@ -4,7 +4,7 @@ + + """Top-level presubmit script for testing/trigger_scripts. + +-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts ++See http://dev.ch40m1um.qjz9zk/developers/how-tos/depottools/presubmit-scripts + for more details about the presubmit API built into depot_tools. + """ + diff --git a/testing/scripts/common.py b/testing/scripts/common.py --- a/testing/scripts/common.py +++ b/testing/scripts/common.py @@ -59621,7 +25007,7 @@ diff --git a/testing/scripts/run_performance_tests.py b/testing/scripts/run_perf diff --git a/testing/test_env.py b/testing/test_env.py --- a/testing/test_env.py +++ b/testing/test_env.py -@@ -180,7 +180,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): +@@ -181,7 +181,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): """Run command and stream its stdout/stderr to the console & |stdoutfile|. Also forward_signals to obey @@ -59630,7 +25016,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -207,7 +207,7 @@ def run_command(argv, env=None, cwd=None, log=True): +@@ -208,7 +208,7 @@ def run_command(argv, env=None, cwd=None, log=True): """Run command and stream its stdout/stderr both to stdout. Also forward_signals to obey @@ -59639,7 +25025,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -223,7 +223,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): +@@ -224,7 +224,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): """Run command and stream its stdout/stderr both to |file_handle|. Also forward_signals to obey @@ -59648,7 +25034,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -263,7 +263,7 @@ def forward_signals(procs): +@@ -264,7 +264,7 @@ def forward_signals(procs): """Forwards unix's SIGTERM or win's CTRL_BREAK_EVENT to the given processes. This plays nicely with swarming's timeout handling. See also @@ -59672,15 +25058,15 @@ diff --git a/testing/trigger_scripts/PRESUBMIT.py b/testing/trigger_scripts/PRES diff --git a/testing/trigger_scripts/base_test_triggerer.py b/testing/trigger_scripts/base_test_triggerer.py --- a/testing/trigger_scripts/base_test_triggerer.py +++ b/testing/trigger_scripts/base_test_triggerer.py -@@ -116,7 +116,7 @@ class BaseTestTriggerer(object): +@@ -146,7 +146,7 @@ class BaseTestTriggerer(object): # swarming to its own object to make trigger logic more clear. def query_swarming(self, api, query_args, verbose, limit='0', -- server='chromium-swarm.appspot.com', -+ server='chromium-swarm.8pp2p8t.qjz9zk', - service_account=None): +- server='chromium-swarm.appspot.com'): ++ server='chromium-swarm.8pp2p8t.qjz9zk'): try: temp_file = self.make_temp_file(prefix='base_trigger_dimensions', + suffix='.json') diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py --- a/testing/variations/PRESUBMIT.py +++ b/testing/variations/PRESUBMIT.py @@ -59696,7 +25082,7 @@ diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -834,7 +834,7 @@ +@@ -756,7 +756,7 @@ { "name": "API_Enabled", "params": { @@ -59705,7 +25091,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "AutofillServerCommunication", -@@ -1575,7 +1575,7 @@ +@@ -1936,7 +1936,7 @@ { "name": "SuppressionExperiment", "params": { @@ -59714,7 +25100,16 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "enable_bar_overlap_suppression": "true" }, "enable_features": [ -@@ -2815,7 +2815,7 @@ +@@ -2628,7 +2628,7 @@ + "name": "DnsHttpssvcStudy", + "params": { + "DnsHttpssvcControlDomainWildcard": "true", +- "DnsHttpssvcExperimentDomains": "youtube.com.au", ++ "DnsHttpssvcExperimentDomains": "y0u1ub3.qjz9zk.au", + "DnsHttpssvcExtraTimeMs": "50", + "DnsHttpssvcExtraTimePercent": "20", + "DnsHttpssvcUseHttpssvc": "true", +@@ -3634,7 +3634,7 @@ { "name": "Enabled", "params": { @@ -59723,7 +25118,52 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "IncompatibleApplicationsWarning" -@@ -5938,7 +5938,7 @@ +@@ -5618,7 +5618,7 @@ + { + "name": "EnabledNTPWithExploreAndTrending_20201207", + "params": { +- "base_url": "https://chromeupboarding-pa.googleapis.com", ++ "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", + "experiment_tag": "{maxLevels : 1, enableTrending : true}", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", +@@ -5639,7 +5639,7 @@ + { + "name": "EnabledNTPWithExplore_20201207", + "params": { +- "base_url": "https://chromeupboarding-pa.googleapis.com", ++ "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", + "experiment_tag": "{maxLevels : 1}", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", +@@ -5660,7 +5660,7 @@ + { + "name": "EnabledNTPWithStitchAndTrending_20201207", + "params": { +- "base_url": "https://chromeupboarding-pa.googleapis.com", ++ "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", + "experiment_tag": "{enableTrending : true}", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", +@@ -5681,7 +5681,7 @@ + { + "name": "EnabledNTPWithStitch_20201207", + "params": { +- "base_url": "https://chromeupboarding-pa.googleapis.com", ++ "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", + "experiment_tag": "", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", +@@ -5702,7 +5702,7 @@ + { + "name": "EnabledStitchAndTrending", + "params": { +- "base_url": "https://chromeupboarding-pa.googleapis.com", ++ "base_url": "https://chromeupboarding-pa.9oo91eapis.qjz9zk", + "experiment_tag": "{enableTrending: true}", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", +@@ -7083,7 +7083,7 @@ { "name": "launch_20180628_model_20170329_with_blacklist_override_default", "params": { @@ -59732,7 +25172,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -5957,7 +5957,7 @@ +@@ -7102,7 +7102,7 @@ { "name": "20180123_launch", "params": { @@ -59741,7 +25181,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -5978,7 +5978,7 @@ +@@ -7123,7 +7123,7 @@ { "name": "Enforcement20170918", "params": { @@ -59750,6 +25190,15 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerEnforcement", +@@ -7661,7 +7661,7 @@ + { + "name": "Enabled", + "params": { +- "base_url": "https://staging-gsaprototype-pa.sandbox.googleapis.com", ++ "base_url": "https://staging-gsaprototype-pa.sandbox.9oo91eapis.qjz9zk", + "default_locale": "en", + "experiment_tag": "", + "fetch_frequency": "15", diff --git a/third_party/Python-Markdown/markdown/extensions/smarty.py b/third_party/Python-Markdown/markdown/extensions/smarty.py --- a/third_party/Python-Markdown/markdown/extensions/smarty.py +++ b/third_party/Python-Markdown/markdown/extensions/smarty.py @@ -59762,39 +25211,6 @@ diff --git a/third_party/Python-Markdown/markdown/extensions/smarty.py b/third_p All changes Copyright 2013-2014 The Python Markdown Project -diff --git a/third_party/abseil-cpp/absl.gni b/third_party/abseil-cpp/absl.gni ---- a/third_party/abseil-cpp/absl.gni -+++ b/third_party/abseil-cpp/absl.gni -@@ -23,11 +23,11 @@ - import("//build_overrides/build.gni") - - # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before --# adding projects to this list please reach out to cxx@chromium.org and CC: --# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS -+# adding projects to this list please reach out to cxx@ch40m1um.qjz9zk and CC: -+# - https://cs.ch40m1um.qjz9zk/chromium/src/third_party/abseil-cpp/OWNERS - # - # More information can be found at: --# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU -+# https://docs.9oo91e.qjz9zk/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU - declare_args() { - # Additional targets that can depend on absl. - # ** DISCLAIMER ** -@@ -64,11 +64,11 @@ template("absl_source_set") { - public_configs += [ "//third_party/abseil-cpp:absl_include_config" ] - - # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before -- # adding projects to this list please reach out to cxx@chromium.org and CC: -- # - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS -+ # adding projects to this list please reach out to cxx@ch40m1um.qjz9zk and CC: -+ # - https://cs.ch40m1um.qjz9zk/chromium/src/third_party/abseil-cpp/OWNERS - # - # More information can be found at: -- # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU -+ # https://docs.9oo91e.qjz9zk/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU - if (!defined(visibility)) { - if (build_with_chromium) { - visibility = absl_visibility diff --git a/third_party/abseil-cpp/absl/abseil.podspec.gen.py b/third_party/abseil-cpp/absl/abseil.podspec.gen.py --- a/third_party/abseil-cpp/absl/abseil.podspec.gen.py +++ b/third_party/abseil-cpp/absl/abseil.podspec.gen.py @@ -59807,6 +25223,45 @@ diff --git a/third_party/abseil-cpp/absl/abseil.podspec.gen.py b/third_party/abs s.source = { :git => 'https://github.com/abseil/abseil-cpp.git', :tag => '${tag}', +diff --git a/third_party/abseil-cpp/conanfile.py b/third_party/abseil-cpp/conanfile.py +--- a/third_party/abseil-cpp/conanfile.py ++++ b/third_party/abseil-cpp/conanfile.py +@@ -14,7 +14,7 @@ class AbseilConan(ConanFile): + name = "abseil" + url = "https://github.com/abseil/abseil-cpp" + homepage = url +- author = "Abseil " ++ author = "Abseil " + description = "Abseil Common Libraries (C++) from Google" + license = "Apache-2.0" + topics = ("conan", "abseil", "abseil-cpp", "google", "common-libraries") +diff --git a/third_party/abseil-cpp/generate_def_files.py b/third_party/abseil-cpp/generate_def_files.py +--- a/third_party/abseil-cpp/generate_def_files.py ++++ b/third_party/abseil-cpp/generate_def_files.py +@@ -14,7 +14,7 @@ is needed. + + Unless you are on a Windows machine, you need to set up your Chromium + checkout for cross-compilation by following the instructions at +-https://chromium.googlesource.com/chromium/src.git/+/master/docs/win_cross.md. ++https://chromium.9oo91esource.qjz9zk/chromium/src.git/+/master/docs/win_cross.md. + If you are on Windows, you may need to tweak this script to run, e.g. by + changing "gn" to "gn.bat", changing "llvm-nm-9" to the name of your copy of + llvm-nm, etc. +diff --git a/third_party/abseil-cpp/roll_abseil.py b/third_party/abseil-cpp/roll_abseil.py +--- a/third_party/abseil-cpp/roll_abseil.py ++++ b/third_party/abseil-cpp/roll_abseil.py +@@ -86,9 +86,9 @@ def _Commit(chromium_dir, hash_diff): + desc="""Roll abseil_revision {0} + + Change Log: +-https://chromium.googlesource.com/external/github.com/abseil/abseil-cpp/+log/{0} ++https://chromium.9oo91esource.qjz9zk/external/github.com/abseil/abseil-cpp/+log/{0} + Full diff: +-https://chromium.googlesource.com/external/github.com/abseil/abseil-cpp/+/{0} ++https://chromium.9oo91esource.qjz9zk/external/github.com/abseil/abseil-cpp/+/{0} + Bug: None""".format(hash_diff) + + subprocess.check_call(['git', 'add', 'third_party/abseil-cpp'], cwd=chromium_dir) diff --git a/third_party/afl/src/Makefile b/third_party/afl/src/Makefile --- a/third_party/afl/src/Makefile +++ b/third_party/afl/src/Makefile @@ -60079,8 +25534,8 @@ diff --git a/third_party/android_platform/development/scripts/PRESUBMIT.py b/thi diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py --- a/third_party/blink/PRESUBMIT.py +++ b/third_party/blink/PRESUBMIT.py -@@ -4,7 +4,7 @@ - +@@ -3,7 +3,7 @@ + # found in the LICENSE file. """Top-level presubmit script for Blink. -See https://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts @@ -60088,15 +25543,27 @@ diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py for more details about the presubmit API built into gcl. """ -@@ -210,7 +210,7 @@ def CheckChangeOnCommit(input_api, output_api): - results.extend(_CommonChecks(input_api, output_api)) - results.extend(input_api.canned_checks.CheckTreeIsOpen( - input_api, output_api, -- json_url='http://chromium-status.appspot.com/current?format=json')) -+ json_url='http://chromium-status.8pp2p8t.qjz9zk/current?format=json')) - results.extend(input_api.canned_checks.CheckChangeHasDescription( - input_api, output_api)) - return results +@@ -242,7 +242,7 @@ def CheckChangeOnCommit(input_api, output_api): + input_api.canned_checks.CheckTreeIsOpen( + input_api, + output_api, +- json_url='http://chromium-status.appspot.com/current?format=json')) ++ json_url='http://chromium-status.8pp2p8t.qjz9zk/current?format=json')) + results.extend( + input_api.canned_checks.CheckChangeHasDescription( + input_api, output_api)) +diff --git a/third_party/blink/common/loader/record_load_histograms.cc b/third_party/blink/common/loader/record_load_histograms.cc +--- a/third_party/blink/common/loader/record_load_histograms.cc ++++ b/third_party/blink/common/loader/record_load_histograms.cc +@@ -22,7 +22,7 @@ void RecordLoadHistograms(const url::Origin& origin, + if (destination == network::mojom::RequestDestination::kDocument) { + base::UmaHistogramSparse("Net.ErrorCodesForMainFrame4", -net_error); + if (GURL::SchemeIsCryptographic(origin.scheme())) { +- if (origin.host() == "www.google.com") { ++ if (origin.host() == "www.9oo91e.qjz9zk") { + base::UmaHistogramSparse("Net.ErrorCodesForHTTPSGoogleMainFrame3", + -net_error); + } diff --git a/third_party/blink/public/common/scheduler/PRESUBMIT.py b/third_party/blink/public/common/scheduler/PRESUBMIT.py --- a/third_party/blink/public/common/scheduler/PRESUBMIT.py +++ b/third_party/blink/public/common/scheduler/PRESUBMIT.py @@ -60121,54 +25588,6 @@ diff --git a/third_party/blink/public/mojom/feature_policy/PRESUBMIT.py b/third_ for more details about the presubmit API built into gcl. """ -diff --git a/third_party/blink/public/mojom/payments/payment_handler_host.mojom b/third_party/blink/public/mojom/payments/payment_handler_host.mojom ---- a/third_party/blink/public/mojom/payments/payment_handler_host.mojom -+++ b/third_party/blink/public/mojom/payments/payment_handler_host.mojom -@@ -10,7 +10,7 @@ import "third_party/blink/public/mojom/payments/payment_request.mojom"; - - struct PaymentHandlerMethodData { - // Either a short string (e.g., "basic-string") or URL (e.g., -- // "https://google.com/pay") payment method name. -+ // "https://9oo91e.qjz9zk/pay") payment method name. - string method_name; - - // A JSON string built by the renderer from a JavaScript object that the -diff --git a/third_party/blink/public/mojom/payments/payment_request.mojom b/third_party/blink/public/mojom/payments/payment_request.mojom ---- a/third_party/blink/public/mojom/payments/payment_request.mojom -+++ b/third_party/blink/public/mojom/payments/payment_request.mojom -@@ -140,7 +140,7 @@ struct PaymentMethodData { - GooglePaymentMethodData? gpay_bridge_data; - - // Android Pay specific method data is parsed in the renderer. -- // https://developers.google.com/web/fundamentals/getting-started/primers/payment-request/android-pay -+ // https://developers.9oo91e.qjz9zk/web/fundamentals/getting-started/primers/payment-request/android-pay - // TODO(rouslan): Stop parsing Android Pay data. http://crbug.com/620173 - AndroidPayEnvironment environment; - // Value of 0 means the merchant did not specify or it was an invalid value. -diff --git a/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom b/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom ---- a/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom -+++ b/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom -@@ -45,7 +45,7 @@ interface PeerConnectionManager { - interface PeerConnectionTrackerHost { - // PeerConnectionTrackerHost forwards these events to WebRTCInternals. - // TODO(vm.arjun): Migrate rest of the messages, -- // https://bugs.chromium.org/p/chromium/issues/detail?id=792801 -+ // https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=792801 - - // Notifies WebRTCInternals about the addition of the peer connection - // whose data is specified in |info|. -diff --git a/third_party/blink/public/mojom/remote_objects/remote_objects.mojom b/third_party/blink/public/mojom/remote_objects/remote_objects.mojom ---- a/third_party/blink/public/mojom/remote_objects/remote_objects.mojom -+++ b/third_party/blink/public/mojom/remote_objects/remote_objects.mojom -@@ -10,7 +10,7 @@ import "mojo/public/mojom/base/string16.mojom"; - // process to be exposed to JavaScript via synchronous IPC. - // - // See also this design doc: --// https://docs.google.com/document/d/1T8Zj_gZK7jHsy80Etk-Rw4hXMIW4QeaTtXjy5ZKP3X0/edit -+// https://docs.9oo91e.qjz9zk/document/d/1T8Zj_gZK7jHsy80Etk-Rw4hXMIW4QeaTtXjy5ZKP3X0/edit - - // Implemented in the process hosting the remote objects. - // Allows access to an object graph. diff --git a/third_party/blink/public/mojom/use_counter/PRESUBMIT.py b/third_party/blink/public/mojom/use_counter/PRESUBMIT.py --- a/third_party/blink/public/mojom/use_counter/PRESUBMIT.py +++ b/third_party/blink/public/mojom/use_counter/PRESUBMIT.py @@ -60205,7 +25624,7 @@ diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/bl for more details. Note that all output references are relative to the output directory which is specified at build time. --> -@@ -1003,14 +1003,14 @@ below: +@@ -1121,14 +1121,14 @@ below: # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at @@ -60222,7 +25641,7 @@ diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/bl # # The Initial Developer of the Original Code is # Netscape Communications Corporation. -@@ -1019,7 +1019,7 @@ below: +@@ -1137,7 +1137,7 @@ below: # # Contributor(s): # Mitch (original author) @@ -60447,9 +25866,9 @@ diff --git a/third_party/blink/renderer/bindings/scripts/v8_callback_function.py diff --git a/third_party/blink/renderer/bindings/scripts/v8_callback_interface.py b/third_party/blink/renderer/bindings/scripts/v8_callback_interface.py --- a/third_party/blink/renderer/bindings/scripts/v8_callback_interface.py +++ b/third_party/blink/renderer/bindings/scripts/v8_callback_interface.py -@@ -29,7 +29,7 @@ - - Extends IdlTypeBase with property |callback_cpp_type|. +@@ -27,7 +27,7 @@ + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """Generate template values for a callback interface. -Design doc: http://www.chromium.org/developers/design-documents/idl-compiler +Design doc: http://www.ch40m1um.qjz9zk/developers/design-documents/idl-compiler @@ -60504,6 +25923,17 @@ diff --git a/third_party/blink/renderer/bindings/scripts/v8_utilities.py b/third """ import os +diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_node.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_node.idl +--- a/third_party/blink/renderer/bindings/tests/idls/core/test_node.idl ++++ b/third_party/blink/renderer/bindings/tests/idls/core/test_node.idl +@@ -1,6 +1,6 @@ + /* + * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +- * Copyright (C) 2006 Samuel Weinig ++ * Copyright (C) 2006 Samuel Weinig + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public diff --git a/third_party/blink/renderer/build/scripts/update_css_ranking.py b/third_party/blink/renderer/build/scripts/update_css_ranking.py --- a/third_party/blink/renderer/build/scripts/update_css_ranking.py +++ b/third_party/blink/renderer/build/scripts/update_css_ranking.py @@ -60569,16 +25999,6 @@ diff --git a/third_party/blink/renderer/core/css/css_page_rule.idl b/third_party * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public -diff --git a/third_party/blink/renderer/core/css/css_properties_ranking.json5 b/third_party/blink/renderer/core/css/css_properties_ranking.json5 ---- a/third_party/blink/renderer/core/css/css_properties_ranking.json5 -+++ b/third_party/blink/renderer/core/css/css_properties_ranking.json5 -@@ -1,5 +1,5 @@ - // The popularity ranking of all css properties the first properties is the most --// used property according to: https://www.chromestatus.com/metrics/css/popularity -+// used property according to: https://www.ch40mestatus.qjz9zk/metrics/css/popularity - { - "data": [ - "width", diff --git a/third_party/blink/renderer/core/css/css_rule.idl b/third_party/blink/renderer/core/css/css_rule.idl --- a/third_party/blink/renderer/core/css/css_rule.idl +++ b/third_party/blink/renderer/core/css/css_rule.idl @@ -60623,49 +26043,10 @@ diff --git a/third_party/blink/renderer/core/css/css_style_sheet.idl b/third_par * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public -diff --git a/third_party/blink/renderer/core/css/parser/css.proto b/third_party/blink/renderer/core/css/parser/css.proto ---- a/third_party/blink/renderer/core/css/parser/css.proto -+++ b/third_party/blink/renderer/core/css/parser/css.proto -@@ -2,7 +2,7 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - --// Based on the grammar provided here: https://goo.gl/svLze7 -+// Based on the grammar provided here: https://goo.gl.qjz9zk/svLze7 - // Most top level definitions here (mostly messages, but also the enum "h", is - // named after a rule or token in the grammar. The messages that aren't were - // implemented to hack around shortcomings in the protobuf format (such as -@@ -671,7 +671,7 @@ message Import { - optional MediaQueryList media_query_list = 2; - } - --// Media based on https://developer.mozilla.org/en-US/docs/Web/CSS/@media -+// Media based on https://developer.m0z111a.qjz9zk/en-US/docs/Web/CSS/@media - message MediaQueryList { - repeated MediaQuery media_queries = 1; - } -@@ -819,7 +819,7 @@ message MfName { - message MfValue { - required Num num = 1; - oneof rhs { -- Length length = 2; // Called on developer.mozilla.org -+ Length length = 2; // Called on developer.m0z111a.qjz9zk - Ident ident = 3; - // TODO(metzman) implement - } -@@ -862,7 +862,7 @@ message PseudoPage { - - message FontFace { - // required DeclarationList declaration_list = 1; -- // https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Formal_syntax -+ // https://developer.m0z111a.qjz9zk/en-US/docs/Web/CSS/@font-face#Formal_syntax - // repeated FontFaceContents font_face_contents = 1; - } - diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.cc b/third_party/blink/renderer/core/css/remote_font_face_source.cc --- a/third_party/blink/renderer/core/css/remote_font_face_source.cc +++ b/third_party/blink/renderer/core/css/remote_font_face_source.cc -@@ -322,7 +322,7 @@ void RemoteFontFaceSource::BeginLoadIfNeeded() { +@@ -375,7 +375,7 @@ void RemoteFontFaceSource::BeginLoadIfNeeded() { mojom::ConsoleMessageSource::kIntervention, mojom::ConsoleMessageLevel::kInfo, "Slow network is detected. See " @@ -60794,7 +26175,7 @@ diff --git a/third_party/blink/renderer/core/dom/events/event_listener.idl b/thi diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_party/blink/renderer/core/dom/events/event_target.cc --- a/third_party/blink/renderer/core/dom/events/event_target.cc +++ b/third_party/blink/renderer/core/dom/events/event_target.cc -@@ -404,7 +404,7 @@ void EventTarget::SetDefaultAddEventListenerOptions( +@@ -400,7 +400,7 @@ void EventTarget::SetDefaultAddEventListenerOptions( "Registering mousewheel event as passive due to " "smoothscroll.js usage. The smoothscroll.js library is " "buggy, no longer necessary and degrades performance. See " @@ -60803,7 +26184,7 @@ diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_ } return; } -@@ -434,7 +434,7 @@ void EventTarget::SetDefaultAddEventListenerOptions( +@@ -430,7 +430,7 @@ void EventTarget::SetDefaultAddEventListenerOptions( "Added non-passive event listener to a scroll-blocking '%s' event. " "Consider marking event handler as 'passive' to make the page more " "responsive. See " @@ -60834,7 +26215,7 @@ diff --git a/third_party/blink/renderer/core/dom/iterator.idl b/third_party/blin +// http://people.m0z111a.qjz9zk/~jorendorff/es6-draft.html#sec-iterator-interface [ - NoInterfaceObject + LegacyNoInterfaceObject diff --git a/third_party/blink/renderer/core/dom/named_node_map.idl b/third_party/blink/renderer/core/dom/named_node_map.idl --- a/third_party/blink/renderer/core/dom/named_node_map.idl +++ b/third_party/blink/renderer/core/dom/named_node_map.idl @@ -60959,7 +26340,7 @@ diff --git a/third_party/blink/renderer/core/events/touch_event.cc b/third_party diff --git a/third_party/blink/renderer/core/events/wheel_event.cc b/third_party/blink/renderer/core/events/wheel_event.cc --- a/third_party/blink/renderer/core/events/wheel_event.cc +++ b/third_party/blink/renderer/core/events/wheel_event.cc -@@ -158,7 +158,7 @@ void WheelEvent::preventDefault() { +@@ -151,7 +151,7 @@ void WheelEvent::preventDefault() { String message = "Unable to preventDefault inside passive event listener due to " "target being treated as passive. See " @@ -61002,7 +26383,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ enum Milestone { kUnknown, -@@ -142,7 +142,7 @@ String WillBeRemoved(const char* feature, +@@ -167,7 +167,7 @@ String WillBeRemoved(const char* feature, const char* details) { return String::Format( "%s is deprecated and will be removed in %s. See " @@ -61011,7 +26392,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ feature, MilestoneString(milestone).Ascii().c_str(), details); } -@@ -152,7 +152,7 @@ String ReplacedWillBeRemoved(const char* feature, +@@ -177,7 +177,7 @@ String ReplacedWillBeRemoved(const char* feature, const char* details) { return String::Format( "%s is deprecated and will be removed in %s. Please use %s instead. See " @@ -61020,13 +26401,13 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ feature, MilestoneString(milestone).Ascii().c_str(), replacement, details); } -@@ -233,14 +233,14 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "Subresource requests using legacy protocols (like `ftp:`) " - "are blocked. Please deliver web-accessible resources over " - "modern protocols like HTTPS. See " -- "https://www.chromestatus.com/feature/5709390967472128 for " -+ "https://www.ch40mestatus.qjz9zk/feature/5709390967472128 for " - "details.")}; +@@ -257,14 +257,14 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { + "Subresource requests using legacy protocols (like `ftp:`) " + "are blocked. Please deliver web-accessible resources over " + "modern protocols like HTTPS. See " +- "https://www.chromestatus.com/feature/5709390967472128 for " ++ "https://www.ch40mestatus.qjz9zk/feature/5709390967472128 for " + "details."}; case WebFeature::kRequestedSubresourceWithEmbeddedCredentials: return {"RequestedSubresourceWithEmbeddedCredentials", kUnknown, @@ -61037,34 +26418,34 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details."}; // Powerful features on insecure origins (https://goo.gl/rStTGz) -@@ -250,7 +250,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -274,7 +274,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "getCurrentPosition() and watchPosition() no longer work on " "insecure origins. To use this feature, you should consider " "switching your application to a secure origin, such as HTTPS. " - "See https://goo.gl/rStTGz for more details."}; -+ "See https://goo.gl.qjz9zk.qjz9zk/rStTGz for more details."}; ++ "See https://goo.gl.qjz9zk/rStTGz for more details."}; case WebFeature::kGeolocationInsecureOriginDeprecatedNotRemoved: case WebFeature::kGeolocationInsecureOriginIframeDeprecatedNotRemoved: -@@ -258,7 +258,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -282,7 +282,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "getCurrentPosition() and watchPosition() are deprecated on " "insecure origins. To use this feature, you should consider " "switching your application to a secure origin, such as HTTPS. " - "See https://goo.gl/rStTGz for more details."}; -+ "See https://goo.gl.qjz9zk.qjz9zk/rStTGz for more details."}; ++ "See https://goo.gl.qjz9zk/rStTGz for more details."}; case WebFeature::kGetUserMediaInsecureOrigin: case WebFeature::kGetUserMediaInsecureOriginIframe: -@@ -266,7 +266,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -290,7 +290,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "GetUserMediaInsecureOrigin", kUnknown, "getUserMedia() no longer works on insecure origins. To use this " "feature, you should consider switching your application to a " - "secure origin, such as HTTPS. See https://goo.gl/rStTGz for more " -+ "secure origin, such as HTTPS. See https://goo.gl.qjz9zk.qjz9zk/rStTGz for more " ++ "secure origin, such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more " "details."}; case WebFeature::kMediaSourceAbortRemove: -@@ -277,7 +277,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -301,7 +301,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "will be removed in the future. You should instead await " "'updateend'. abort() is intended to only abort an asynchronous " "media append or reset parser state. See " @@ -61073,7 +26454,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details."}; case WebFeature::kMediaSourceDurationTruncatingBuffered: -@@ -289,7 +289,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -313,7 +313,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "buffered media will be removed in the future. You should instead " "perform explicit remove(newDuration, oldDuration) on all " "sourceBuffers, where newDuration < oldDuration. See " @@ -61082,34 +26463,25 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details."}; case WebFeature::kApplicationCacheAPIInsecureOrigin: -@@ -320,7 +320,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -342,7 +342,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "origins. " "You should consider switching your application to a secure " "origin, " -- "such as HTTPS. See https://goo.gl/rStTGz for more details.")}; -+ "such as HTTPS. See https://goo.gl.qjz9zk.qjz9zk/rStTGz for more details.")}; +- "such as HTTPS. See https://goo.gl/rStTGz for more details."}; ++ "such as HTTPS. See https://goo.gl.qjz9zk/rStTGz for more details."}; case WebFeature::kNotificationPermissionRequestedIframe: - return { -@@ -331,7 +331,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { + return {"NotificationPermissionRequestedIframe", kUnknown, +@@ -351,7 +351,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "a cross-origin iframe. You should consider requesting " "permission " "from a top-level frame or opening a new window instead. See " - "https://www.chromestatus.com/feature/6451284559265792 for more " + "https://www.ch40mestatus.qjz9zk/feature/6451284559265792 for more " - "details.")}; - - case WebFeature::kCSSDeepCombinator: -@@ -341,7 +341,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { - "It is now effectively no-op, acting as if it were a descendant " - "combinator. /deep/ combinator will be removed, and will be " - "invalid at M65. You should remove it. See " -- "https://www.chromestatus.com/features/4964279606312960 for more " -+ "https://www.ch40mestatus.qjz9zk/features/4964279606312960 for more " "details."}; case WebFeature::kCSSSelectorInternalMediaControlsOverlayCastButton: -@@ -349,7 +349,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -359,7 +359,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "The disableRemotePlayback attribute should be used in order to " "disable the default Cast integration instead of using " "-internal-media-controls-overlay-cast-button selector. See " @@ -61118,7 +26490,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details."}; case WebFeature::kSelectionAddRangeIntersect: -@@ -357,7 +357,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -367,7 +367,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "SelectionAddRangeIntersect", kUnknown, "The behavior that Selection.addRange() merges existing Range and " "the specified Range was removed. See " @@ -61127,7 +26499,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details."}; case WebFeature::kRtcpMuxPolicyNegotiate: -@@ -366,7 +366,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -376,7 +376,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "removal and may be removed no earlier than %s. " "If you depend on it, " "please see " @@ -61136,7 +26508,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "5654810086866944 " "for more details.", MilestoneString(kM62).Ascii().c_str())}; -@@ -379,11 +379,11 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -389,13 +389,13 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "are blocked. Please remove newlines and encode less-than " "characters from places like element attribute values in order to " "load these resources. See " @@ -61144,13 +26516,15 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ + "https://www.ch40mestatus.qjz9zk/feature/5735596811091968 for more " "details."}; - #define kWebComponentsV0DeprecationPost \ -- "https://developers.google.com/web/updates/2019/07/" \ -+ "https://developers.9oo91e.qjz9zk/web/updates/2019/07/" \ - "web-components-time-to-upgrade" - case WebFeature::kHTMLImports: -@@ -463,7 +463,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { + return {"HTMLImports", kUnknown, + "The HTML Imports feature has been removed. See " +- "https://www.chromestatus.com/feature/5144752345317376 for more " ++ "https://www.ch40mestatus.qjz9zk/feature/5144752345317376 for more " + "details."}; + + case WebFeature::kLocalCSSFileExtensionRejected: +@@ -449,7 +449,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "TextToSpeech_DisallowedByAutoplay", kM71, String::Format("speechSynthesis.speak() without user activation is " "no longer allowed since %s. See " @@ -61159,7 +26533,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "5687444770914304 for more details", MilestoneString(kM71).Ascii().c_str())}; -@@ -485,7 +485,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -471,7 +471,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { String::Format( "Web MIDI will ask a permission to use even if the sysex is " "not specified in the MIDIOptions since around %s. See " @@ -61168,7 +26542,7 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "more details.", MilestoneString(kM82).Ascii().c_str())}; -@@ -523,7 +523,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { +@@ -504,7 +504,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { "Support for calls to CSSStyleSheet.replace() with stylesheet " "text that includes @import has been deprecated, and will be " "removed in %s. See " @@ -61177,10 +26551,28 @@ diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/ "details.", MilestoneString(kM84).Ascii().c_str())}; +@@ -514,7 +514,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { + String::Format( + "SharedArrayBuffer will require cross-origin isolation as of " + "%s. See " +- "https://developer.chrome.com/blog/enabling-shared-array-buffer/" ++ "https://developer.ch40me.qjz9zk/blog/enabling-shared-array-buffer/" + " for more details.", + MilestoneString(kM91).Ascii().c_str())}; + +@@ -568,7 +568,7 @@ DeprecationInfo GetDeprecationInfo(WebFeature feature) { + return {"CSSSeelctorWebKitDetailsMarker", kM89, + ReplacedBy("::-webkit-details-marker pseudo element selector", + "::marker") + +- " See https://chromestatus.com/feature/6730096436051968 for " ++ " See https://ch40mestatus.qjz9zk/feature/6730096436051968 for " + "more details."}; + + case WebFeature::kRTCPeerConnectionSdpSemanticsPlanB: diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -1185,7 +1185,7 @@ bool LocalFrame::CanNavigate(const Frame& target_frame, +@@ -1718,7 +1718,7 @@ bool LocalFrame::CanNavigate(const Frame& target_frame, "The frame attempting navigation of the top-level window is " "sandboxed with the 'allow-top-navigation-by-user-activation' " "flag, but has no user activation (aka gesture). See " @@ -61189,7 +26581,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ return false; } return true; -@@ -1251,7 +1251,7 @@ bool LocalFrame::CanNavigate(const Frame& target_frame, +@@ -1784,7 +1784,7 @@ bool LocalFrame::CanNavigate(const Frame& target_frame, "The frame attempting navigation is targeting its top-level window, " "but is neither same-origin with its target nor has it received a " "user gesture. See " @@ -61198,27 +26590,6 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ GetLocalFrameHostRemote().DidBlockNavigation( destination_url, GetDocument()->Url(), mojom::NavigationBlockedReason::kRedirectWithNoUserGesture); -diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5 ---- a/third_party/blink/renderer/core/frame/settings.json5 -+++ b/third_party/blink/renderer/core/frame/settings.json5 -@@ -417,7 +417,7 @@ - }, - - // For android.webkit.WebSettings.setUseWideViewport() -- // http://developer.android.com/reference/android/webkit/WebSettings.html//setUseWideViewPort(boolean) -+ // http://developer.8n6r01d.qjz9zk/reference/android/webkit/WebSettings.html//setUseWideViewPort(boolean) - { - name: "useWideViewport", - initial: true, -@@ -425,7 +425,7 @@ - }, - - // For android.webkit.WebSettings.setLoadWithOverviewMode() -- // http://developer.android.com/reference/android/webkit/WebSettings.html//setLoadWithOverviewMode(boolean) -+ // http://developer.8n6r01d.qjz9zk/reference/android/webkit/WebSettings.html//setLoadWithOverviewMode(boolean) - { - name: "loadWithOverviewMode", - initial: true, diff --git a/third_party/blink/renderer/core/html/custom/element_internals.idl b/third_party/blink/renderer/core/html/custom/element_internals.idl --- a/third_party/blink/renderer/core/html/custom/element_internals.idl +++ b/third_party/blink/renderer/core/html/custom/element_internals.idl @@ -61467,12 +26838,12 @@ diff --git a/third_party/blink/renderer/core/html/html_frame_set_element.idl b/t diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc --- a/third_party/blink/renderer/core/html/html_iframe_element.cc +++ b/third_party/blink/renderer/core/html/html_iframe_element.cc -@@ -284,7 +284,7 @@ void HTMLIFrameElement::ParseAttribute( +@@ -260,7 +260,7 @@ void HTMLIFrameElement::ParseAttribute( mojom::ConsoleMessageLevel::kWarning, " ++ +
    +
    +
    +diff --git a/third_party/google-closure-library/closure/goog/dom/controlrange_test.html b/third_party/google-closure-library/closure/goog/dom/controlrange_test.html +--- a/third_party/google-closure-library/closure/goog/dom/controlrange_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/controlrange_test.html +@@ -16,7 +16,7 @@ See the COPYING file for details. + --> +
    +
    +- ++ +
    + +
    ab
    cd
    +@@ -27,7 +27,7 @@ See the COPYING file for details. + + + foo +- ++ + bar + + +diff --git a/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html b/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html +@@ -6,7 +6,7 @@ See the COPYING file for details. + --> +
    +
    +- ++ +
    + + + + +diff --git a/third_party/google-closure-library/closure/goog/dom/range_test.html b/third_party/google-closure-library/closure/goog/dom/range_test.html +--- a/third_party/google-closure-library/closure/goog/dom/range_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/range_test.html +@@ -26,7 +26,7 @@ See the COPYING file for details. +
    a + foo +- ++ + bar +
    12
    +
    • 1
    • 2
    +
    1. 1
    2. 2
    +- ++ +
    Will be removed
    + +
    +diff --git a/third_party/google-closure-library/closure/goog/dom/range_test_dom.html b/third_party/google-closure-library/closure/goog/dom/range_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/range_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/range_test_dom.html +@@ -16,7 +16,7 @@ See the COPYING file for details. +
    12
    +
    • 1
    • 2
    +
    1. 1
    2. 2
    +- ++ +
    Will be removed
    + +
    +diff --git a/third_party/google-closure-library/closure/goog/dom/textrange_test.html b/third_party/google-closure-library/closure/goog/dom/textrange_test.html +--- a/third_party/google-closure-library/closure/goog/dom/textrange_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/textrange_test.html +@@ -16,7 +16,7 @@ See the COPYING file for details. + --> +
    +
    +- ++ +
    + +
    ab
    cd
    +@@ -26,12 +26,12 @@ See the COPYING file for details. + + + +-
    foobar
    ++
    foobar
    + + + + +-
    positiontest
    ++
    positiontest
    + +-
    positiontest
    ++
    positiontest
    + +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html b/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html +@@ -6,7 +6,7 @@ See the COPYING file for details. + --> +
    +
    +- ++ +
    + + + + +
    a +
    foobar
    ++ src="http://www.9oo91e.qjz9zk/intl/en_ALL/images/logo.gif">bar +
    + +
    positiontest
    + +
    positiontest
    +diff --git a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html +--- a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html +@@ -16,6 +16,6 @@ See the COPYING file for details. + --> +
    +
    I am text with a +- link.
    ++ link.
    + + +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html +@@ -6,5 +6,5 @@ See the COPYING file for details. + --> +
    +
    I am text with a +- link.
    ++ link.
    + +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html +@@ -77,7 +77,7 @@ See the COPYING file for details. + five + + +- ++ + + +
    +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html +@@ -67,7 +67,7 @@ See the COPYING file for details. + five + + +- ++ + + +
    +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html +@@ -14,5 +14,5 @@ Copyright 2017 The Closure Library Authors. All Rights Reserved. + Use of this source code is governed by the Apache License, Version 2.0. + See the COPYING file for details. + --> +- ++ + +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html +@@ -4,4 +4,4 @@ Copyright 2017 The Closure Library Authors. All Rights Reserved. + Use of this source code is governed by the Apache License, Version 2.0. + See the COPYING file for details. + --> +- ++ +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html +@@ -16,6 +16,6 @@ See the COPYING file for details. + --> +
    +
    +- http://www.google.com/ ++ http://www.9oo91e.qjz9zk/ +
    +
    +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html +@@ -6,6 +6,6 @@ See the COPYING file for details. + --> +
    +
    +- http://www.google.com/ ++ http://www.9oo91e.qjz9zk/ +
    +
    +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js +--- a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js ++++ b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js +@@ -70,7 +70,7 @@ goog.html.safeUrlTestVectors.BASE_VECTORS = [ + {input: 'geo:37.7,42.0', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'skype:chat?jid=foo', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'whatsapp://send?text=Hello', expected: 'about:invalid#zClosurez', safe: false}, +- {input: 'ssh://cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: 'ssh://cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':', expected: 'about:invalid#zClosurez', safe: false}, + {input: '\\:', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':/:', expected: 'about:invalid#zClosurez', safe: false}, +@@ -113,10 +113,10 @@ goog.html.safeUrlTestVectors.SMS_VECTORS = [ + ]; + + goog.html.safeUrlTestVectors.SSH_VECTORS = [ +- {input: 'ssh://cloud.google.com', expected: 'ssh://cloud.google.com', safe: true}, ++ {input: 'ssh://cloud.9oo91e.qjz9zk', expected: 'ssh://cloud.9oo91e.qjz9zk', safe: true}, + {input: '', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':', expected: 'about:invalid#zClosurez', safe: false}, +- {input: 'ssh:cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, +- {input: ' ssh://cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: 'ssh:cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: ' ssh://cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'javascript:evil()', expected: 'about:invalid#zClosurez', safe: false} + ]; +diff --git a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js +--- a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js ++++ b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js +@@ -238,7 +238,7 @@ goog.html.htmlTestVectors.HTML_TEST_VECTORS = [ + "", + ], + name: "script_title"}, +- {input: "", ++ {input: "", + acceptable: [ + "", + ], +diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js +--- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js ++++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js +@@ -50,7 +50,7 @@ netUtils.testNetwork = function(callback, opt_imageUri) { + var uri = opt_imageUri; + if (!uri) { + // default google.com image +- uri = new goog.Uri('//www.google.com/images/cleardot.gif'); ++ uri = new goog.Uri('//www.9oo91e.qjz9zk/images/cleardot.gif'); + + if (!(goog.global.location && goog.global.location.protocol == 'http')) { + uri.setScheme('https'); // e.g. chrome-extension +diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js +--- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js ++++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js +@@ -2155,10 +2155,10 @@ WebChannelBase.prototype.signalError_ = function(error) { + */ + WebChannelBase.prototype.testNetworkCallback_ = function(networkUp) { + if (networkUp) { +- this.channelDebug_.info('Successfully pinged google.com'); ++ this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); + requestStats.notifyStatEvent(requestStats.Stat.ERROR_OTHER); + } else { +- this.channelDebug_.info('Failed to ping google.com'); ++ this.channelDebug_.info('Failed to ping 9oo91e.qjz9zk'); + requestStats.notifyStatEvent(requestStats.Stat.ERROR_NETWORK); + // Do not call onError_ again to eliminate duplicated Error events. + } +diff --git a/third_party/google-closure-library/closure/goog/net/browserchannel.js b/third_party/google-closure-library/closure/goog/net/browserchannel.js +--- a/third_party/google-closure-library/closure/goog/net/browserchannel.js ++++ b/third_party/google-closure-library/closure/goog/net/browserchannel.js +@@ -2210,11 +2210,11 @@ goog.net.BrowserChannel.prototype.signalError_ = function(error) { + */ + goog.net.BrowserChannel.prototype.testGoogleComCallback_ = function(networkUp) { + if (networkUp) { +- this.channelDebug_.info('Successfully pinged google.com'); ++ this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); + goog.net.BrowserChannel.notifyStatEvent( + goog.net.BrowserChannel.Stat.ERROR_OTHER); + } else { +- this.channelDebug_.info('Failed to ping google.com'); ++ this.channelDebug_.info('Failed to ping 9oo91e.qjz9zk'); + goog.net.BrowserChannel.notifyStatEvent( + goog.net.BrowserChannel.Stat.ERROR_NETWORK); + // We call onError_ here instead of signalError_ because the latter just +diff --git a/third_party/google-closure-library/closure/goog/net/iframeio_test.html b/third_party/google-closure-library/closure/goog/net/iframeio_test.html +--- a/third_party/google-closure-library/closure/goog/net/iframeio_test.html ++++ b/third_party/google-closure-library/closure/goog/net/iframeio_test.html +@@ -111,7 +111,7 @@ See the COPYING file for details. + +
    + +- Redirect (google.com) ++ Redirect (9oo91e.qjz9zk) + +
    + +diff --git a/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html b/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html +--- a/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html +@@ -101,7 +101,7 @@ See the COPYING file for details. + +
    + +- Redirect (google.com) ++ Redirect (9oo91e.qjz9zk) + +
    + +diff --git a/third_party/google-closure-library/closure/goog/net/networktester.js b/third_party/google-closure-library/closure/goog/net/networktester.js +--- a/third_party/google-closure-library/closure/goog/net/networktester.js ++++ b/third_party/google-closure-library/closure/goog/net/networktester.js +@@ -58,7 +58,7 @@ goog.net.NetworkTester = function(callback, opt_handler, opt_uri) { + // We need to add a 'rand' to make sure the response is not fulfilled + // by browser cache. Use protocol-relative URLs to avoid insecure content + // warnings in IE. +- opt_uri = new goog.Uri('//www.google.com/images/cleardot.gif'); ++ opt_uri = new goog.Uri('//www.9oo91e.qjz9zk/images/cleardot.gif'); + opt_uri.makeUnique(); + } + +diff --git a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js +--- a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js ++++ b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js +@@ -40,7 +40,7 @@ goog.net.tmpnetwork.GOOGLECOM_TIMEOUT = 10000; + * Use protocol-relative URLs to avoid insecure content warnings in IE. + */ + goog.net.tmpnetwork.TEST_URL = goog.define( +- 'goog.net.tmpnetwork.TEST_URL', '//www.google.com/images/cleardot.gif'); ++ 'goog.net.tmpnetwork.TEST_URL', '//www.9oo91e.qjz9zk/images/cleardot.gif'); + + + /** +diff --git a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js +--- a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js ++++ b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js +@@ -236,7 +236,7 @@ example.sanitizedSmsUrlTemplate = function(data, opt_sb, opt_injectedData) { + example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { + // Test the SanitizedContent constructor. + const sanitized = makeSanitizedContent( +- 'https://google.com/foo?n=917', goog.soy.data.SanitizedContentKind.URI); ++ 'https://9oo91e.qjz9zk/foo?n=917', goog.soy.data.SanitizedContentKind.URI); + return sanitized; + }; + +@@ -249,7 +249,7 @@ example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { + */ + example.sanitizedTrustedResourceUriTemplate = function( + data, opt_sb, opt_injectedData) { +- return new SanitizedTrustedResourceUriSubclass('https://google.com/a.js'); ++ return new SanitizedTrustedResourceUriSubclass('https://9oo91e.qjz9zk/a.js'); + }; + + +diff --git a/third_party/google-closure-library/closure/goog/testing/performancetable.css b/third_party/google-closure-library/closure/goog/testing/performancetable.css +--- a/third_party/google-closure-library/closure/goog/testing/performancetable.css ++++ b/third_party/google-closure-library/closure/goog/testing/performancetable.css +@@ -5,8 +5,8 @@ + * See the COPYING file for details. + */ + +-/* Author: attila@google.com (Attila Bodis) */ +-/* Author: nicksantos@google.com (Nick Santos) */ ++/* Author: attila@9oo91e.qjz9zk (Attila Bodis) */ ++/* Author: nicksantos@9oo91e.qjz9zk (Nick Santos) */ + + table.test-results { + font: 12px "Courier New", Courier, monospace; +diff --git a/third_party/google-closure-library/closure/goog/transpile.js b/third_party/google-closure-library/closure/goog/transpile.js +--- a/third_party/google-closure-library/closure/goog/transpile.js ++++ b/third_party/google-closure-library/closure/goog/transpile.js +@@ -777,92 +777,92 @@ function gy(){}l(gy,n);function hy(a){var b=0,c=Kj();do{var d=li(a,46,b);c.Y(ne( + function fra(a,b){var c=new hra;c.b=a;c.a=b;return c}g=hra.prototype;g.Wg=function(){return 1}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.microsoft.com/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.microsoft.com/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.microsoft.com/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl/PEUvs.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', +-"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", +-"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', +-"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', +-"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', +-"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@google.com (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', +-"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', +-"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.microsoft.com/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', +-"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', +-"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@google.com (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', ++var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview ECMAScript 3 Built-Ins. This include common extensions so this\n * is actually ES3+Reality.\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n * @author johnlenz@9oo91e.qjz9zk (John Lenz)\n */\n\n\n// START ES6 RETROFIT CODE\n// symbol, Symbol and Symbol.iterator are actually ES6 types but some\n// base types require them to be part of their definition (such as Array).\n\n\n/**\n * @constructor\n * @param {*=} opt_description\n * @return {symbol}\n */\nfunction Symbol(opt_description) {}\n\n\n/**\n * @const {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description\n */\nSymbol.prototype.description;\n\n\n/**\n * @param {string} sym\n * @return {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for\n */\nSymbol.for = function(sym) {};\n\n\n/**\n * @param {symbol} sym\n * @return {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor\n */\nSymbol.keyFor = function(sym) {};\n\n\n// Well known symbols\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator\n * @const {symbol}\n */\nSymbol.asyncIterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance\n * @const {symbol}\n */\nSymbol.hasInstance;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable\n * @const {symbol}\n */\nSymbol.isConcatSpreadable;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator\n */\nSymbol.iterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match\n * @const {symbol}\n */\nSymbol.match;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/matchAll\n * @const {symbol}\n */\nSymbol.matchAll;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace\n * @const {symbol}\n */\nSymbol.replace;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search\n * @const {symbol}\n */\nSymbol.search;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species\n * @const {symbol}\n */\nSymbol.species;\n\n// /**\n// * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split\n// * @const {symbol}\n// */\n// Symbol.split;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive\n */\nSymbol.toPrimitive;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\n */\nSymbol.toStringTag;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables\n */\nSymbol.unscopables;\n\n\n/**\n * @record\n * @template VALUE\n */\nfunction IIterableResult() {};\n\n/** @type {boolean} */\nIIterableResult.prototype.done;\n\n/** @type {VALUE} */\nIIterableResult.prototype.value;\n\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction Iterable() {}\n\n// TODO(johnlenz): remove the suppression when the compiler understands\n// "symbol" natively\n/**\n * @return {!Iterator}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.m1cr050ft.qjz9zk/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl.qjz9zk/PEUvs.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', ++"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", ++"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', ++"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', ++"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', ++"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@9oo91e.qjz9zk (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', ++"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', ++"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', ++"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', ++"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@9oo91e.qjz9zk (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', + "externs/web_app_manifest.js":"/*\n * Copyright 2017 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for web app manifest APIs.\n *\n * @see https://www.w3.org/TR/appmanifest/\n * @externs\n */\n\n/**\n * @see https://www.w3.org/TR/appmanifest/#beforeinstallpromptevent-interface\n * @constructor\n * @extends {Event}\n */\nfunction BeforeInstallPromptEvent() {}\n\n/** @type {!Promise<{outcome: !AppBannerPromptOutcome}>} */\nBeforeInstallPromptEvent.prototype.userChoice;\n\n/** @return {!Promise} */\nBeforeInstallPromptEvent.prototype.prompt = function() {};\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/appmanifest/#appbannerpromptoutcome-enum\n * Possible values: 'accepted', 'dismissed'\n */\nvar AppBannerPromptOutcome;\n\n/** @typedef {{userChoice: !AppBannerPromptOutcome}} */\nvar PromptResponseObject;\n\n/** @type {?function(!BeforeInstallPromptEvent)} */\nWindow.prototype.onbeforeinstallprompt;\n\n/** @type {?function(!Event)} */\nWindow.prototype.onappinstalled;\n", + "externs/w3c_selection.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selection API.\n *\n * @see https://w3c.github.io/selection-api/\n *\n * @externs\n */\n\n/**\n * @constructor\n * @see http://w3c.github.io/selection-api/#selection-interface\n */\nfunction Selection() {}\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchornode\n */\nSelection.prototype.anchorNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchoroffset\n */\nSelection.prototype.anchorOffset;\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusnode\n */\nSelection.prototype.focusNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusoffset\n */\nSelection.prototype.focusOffset;\n\n/**\n * @type {boolean}\n * @see https://w3c.github.io/selection-api/#dom-selection-iscollapsed\n */\nSelection.prototype.isCollapsed;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-rangecount\n */\nSelection.prototype.rangeCount;\n\n/**\n * @type {string}\n * @see https://w3c.github.io/selection-api/#dom-selection-type\n */\nSelection.prototype.type;\n\n/**\n * @param {number} index\n * @return {!Range}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-getrangeat\n */\nSelection.prototype.getRangeAt = function(index) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `range` parameter a\n * `!Range` per the spec.\n * @param {?Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-addrange\n */\nSelection.prototype.addRange = function(range) {};\n\n/**\n * @param {!Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removerange\n */\nSelection.prototype.removeRange = function(range) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removeallranges\n */\nSelection.prototype.removeAllRanges = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-empty\n */\nSelection.prototype.empty = function() {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapse\n */\nSelection.prototype.collapse = function(node, offset) {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setposition\n */\nSelection.prototype.setPosition = function(node, offset) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetostart\n */\nSelection.prototype.collapseToStart = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetoend\n */\nSelection.prototype.collapseToEnd = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-extend\n */\nSelection.prototype.extend = function(node, offset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `anchorNode` and\n * `focusNode` parameters `!Node` per the spec.\n * @param {?Node} anchorNode\n * @param {number} anchorOffset\n * @param {?Node} focusNode\n * @param {number} focusOffset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setbaseandextent\n */\nSelection.prototype.setBaseAndExtent = function(anchorNode, anchorOffset, focusNode, focusOffset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @return {undefined}\n * @see http://w3c.github.io/selection-api/#dom-selection-selectallchildren\n */\nSelection.prototype.selectAllChildren = function(node) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-deletefromdocument\n */\nSelection.prototype.deleteFromDocument = function() {};\n\n/**\n * @param {!Node} node\n * @param {boolean=} allowPartialContainment\n * @return {boolean}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-containsnode\n */\nSelection.prototype.containsNode = function(node, allowPartialContainment) {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-window-getselection\n */\nWindow.prototype.getSelection = function() {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-document-getselection\n */\nDocument.prototype.getSelection = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make this `?function(!Event): void`\n * per the spec.\n * @type {?function(?Event)}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectstart\n */\nElement.prototype.onselectstart;\n\n/**\n * @type {?function(!Event): void}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectionchange\n */\nElement.prototype.onselectionchange;\n', +-"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', ++"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', + "externs/w3c_trusted_types.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Trusted Types specification.\n * @see https://github.com/WICG/trusted-types\n * @externs\n */\n\n\n/** @constructor */\nfunction TrustedHTML() {}\n\n/** @constructor */\nfunction TrustedScript() {}\n\n/** @constructor */\nfunction TrustedScriptURL() {}\n\n/** @constructor */\nfunction TrustedURL() {}\n\n\n/** @constructor */\nfunction TrustedTypePolicy() {}\n\n/**\n * @param {string} s\n * @return {!TrustedHTML}\n */\nTrustedTypePolicy.prototype.createHTML = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScript}\n */\nTrustedTypePolicy.prototype.createScript = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScriptURL}\n */\nTrustedTypePolicy.prototype.createScriptURL = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedURL}\n */\nTrustedTypePolicy.prototype.createURL = function(s) {};\n\n\n/** @constructor */\nfunction TrustedTypePolicyFactory() {}\n\n/** @record @private */\nfunction TrustedTypePolicyOptions() {};\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createHTML;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScript;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScriptURL;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createURL;\n\n/**\n * @param {string} name\n * @param {!TrustedTypePolicyOptions} policy\n * @param {boolean=} opt_expose\n * @return {!TrustedTypePolicy}\n */\nTrustedTypePolicyFactory.prototype.createPolicy = function(\n name, policy, opt_expose) {};\n\n/**\n * @param {string} name\n * @return {!TrustedTypePolicy}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.getExposedPolicy = function(name) {};\n\n/** @return {!Array} */\nTrustedTypePolicyFactory.prototype.getPolicyNames = function() {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isHTML = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScript = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScriptURL = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.isURL = function(obj) {};\n\n/** @type {!TrustedHTML} */\nTrustedTypePolicyFactory.prototype.emptyHTML;\n\n/**\n * @type {!TrustedTypePolicyFactory}\n * @deprecated\n */\nvar TrustedTypes;\n\n/** @type {!TrustedTypePolicyFactory} */\nvar trustedTypes;\n', +-"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", +-"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.microsoft.com/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.mozilla.org/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.mozilla.org/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.mozilla.org/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.mozilla.org/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', +-"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', +-"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@gmail.com (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', +-"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.mozilla.org/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.mozilla.org/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.mozilla.org/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.mozilla.org/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.mozilla.org/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.mozilla.org/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.mozilla.org/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.mozilla.org/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.mozilla.org/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.mozilla.org/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.mozilla.org/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.queryCommandSupported\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.mozilla.org/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.mozilla.org/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.mozilla.org/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.mozilla.org/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', +-"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.microsoft.com/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.microsoft.com/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.microsoft.com/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.microsoft.com/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.microsoft.com/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.microsoft.com/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.microsoft.com/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.microsoft.com/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.microsoft.com/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.microsoft.com/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.microsoft.com/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.microsoft.com/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.microsoft.com/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.microsoft.com/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.microsoft.com/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.microsoft.com/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.microsoft.com/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.microsoft.com/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.microsoft.com/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.microsoft.com/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.microsoft.com/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.microsoft.com/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.microsoft.com/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.microsoft.com/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.microsoft.com/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", +-"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.android.com/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', +-"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.microsoft.com/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", +-"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.mozilla.org/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', +-"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.microsoft.com/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@google.com\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.microsoft.com/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.microsoft.com/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', +-"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n * @author mastepien@google.com (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', +-"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', +-"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', +-"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', +-"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@gmail.com (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', ++"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", ++"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.m1cr050ft.qjz9zk/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', ++"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', ++"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@9ma1l.qjz9zk (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', ++"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.m0z111a.qjz9zk/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.m0z111a.qjz9zk/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.queryCommandSupported\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.m0z111a.qjz9zk/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.m0z111a.qjz9zk/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', ++"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", ++"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.8n6r01d.qjz9zk/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.m0z111a.qjz9zk/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', ++"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", ++"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.m0z111a.qjz9zk/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', ++"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.m1cr050ft.qjz9zk/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', ++"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author mastepien@9oo91e.qjz9zk (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', ++"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', ++"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', ++"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', ++"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@9ma1l.qjz9zk (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', + "externs/w3c_fileapi.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for objects in the File API, File Writer API, and\n * File System API. Details of the API are at:\n * http://www.w3.org/TR/FileAPI/\n *\n * @externs\n */\n\n/** @record */\nfunction BlobPropertyBag() {};\n\n/** @type {(string|undefined)} */\nBlobPropertyBag.prototype.type;\n\n/**\n * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob\n * @param {Array=} opt_blobParts\n * @param {BlobPropertyBag=} opt_options\n * @constructor\n * @nosideeffects\n */\nfunction Blob(opt_blobParts, opt_options) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-size\n * @type {number}\n */\nBlob.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-type\n * @type {string}\n */\nBlob.prototype.type;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-slice\n * @param {number=} start\n * @param {number=} length\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.slice = function(start, length, opt_contentType) {};\n\n\n/**\n * @record\n * @extends {BlobPropertyBag}\n **/\nfunction FilePropertyBag() {};\n\n/** @type {(number|undefined)} */\nFilePropertyBag.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-file\n * @param {!Array=} contents\n * @param {string=} name\n * @param {FilePropertyBag=} properties\n * @constructor\n * @extends {Blob}\n */\nfunction File(contents, name, properties) {}\n\n/**\n * Chrome uses this instead of name.\n * @deprecated Use name instead.\n * @type {string}\n */\nFile.prototype.fileName;\n\n/**\n * Chrome uses this instead of size.\n * @deprecated Use size instead.\n * @type {string}\n */\nFile.prototype.fileSize;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-name\n * @type {string}\n */\nFile.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate\n * @type {Date}\n */\nFile.prototype.lastModifiedDate;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified\n * @type {number}\n */\nFile.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-filereader\n * @constructor\n * @implements {EventTarget}\n */\nfunction FileReader() {}\n\n/** @override */\nFileReader.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nFileReader.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nFileReader.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {undefined}\n */\nFileReader.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsDataURL = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-abort\n * @return {undefined}\n */\nFileReader.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-empty\n * @const {number}\n */\nFileReader.prototype.EMPTY;\n\n/** @const {number} */\nFileReader.EMPTY;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-loading\n * @const {number}\n */\nFileReader.prototype.LOADING;\n\n/** @const {number} */\nFileReader.LOADING;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-done\n * @const {number}\n */\nFileReader.prototype.DONE;\n\n/** @const {number} */\nFileReader.DONE;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readystate\n * @type {number}\n */\nFileReader.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-result\n * @type {string|Blob|ArrayBuffer}\n */\nFileReader.prototype.result;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-error\n * @type {DOMError}\n */\nFileReader.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadstart;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onload\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onload;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadend;\n\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileReaderSyncSync\n * @constructor\n */\nfunction FileReaderSync() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBufferSync\n * @param {!Blob} blob\n * @return {!ArrayBuffer}\n */\nFileReaderSync.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsTextSync\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {string}\n */\nFileReaderSync.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURLSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsDataURL = function(blob) {};\n', +-"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", +-"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@google.com (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', +-"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', +-"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.microsoft.com/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015, has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", +-"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@google.com (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', +-"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@google.com (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', +-"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@google.com (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', +-"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', +-"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@google.com (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', ++"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", ++"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@9oo91e.qjz9zk (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', ++"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', ++"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.m1cr050ft.qjz9zk/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.m0z111a.qjz9zk/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.ch40m1um.qjz9zk/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.m0z111a.qjz9zk/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015, has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", ++"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@9oo91e.qjz9zk (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', ++"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@9oo91e.qjz9zk (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', ++"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@9oo91e.qjz9zk (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', ++"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl.qjz9zk/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', ++"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@9oo91e.qjz9zk (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', + "externs/page_visibility.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for Page Visibility.\n *\n * @see http://www.w3.org/TR/page-visibility\n * @externs\n */\n\n/**\n * Set of possible values: 'hidden', 'visible', 'prerender', 'unloaded'.\n * @typedef {string}\n * @see http://www.w3.org/TR/page-visibility/#VisibilityState\n */\nvar VisibilityState;\n", +-"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@google.com (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", ++"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@9oo91e.qjz9zk (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", + "externs/v8.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview This file describes the externs API for V8-specific objects.\n * @externs\n */\n\n\n\n/**\n * Stack frame elements in V8.\n * @constructor\n */\nfunction CallSite() {}\n\n\n/**\n * Returns the value of this.\n * @return {Object|undefined}\n */\nCallSite.prototype.getThis = function() {};\n\n\n/**\n * Returns the type of this as a string. This is the name of the function stored\n * in the constructor field of this, if available, otherwise the object\'s\n * [[Class]] internal property.\n * @return {string|undefined}\n */\nCallSite.prototype.getTypeName = function() {};\n\n\n/**\n * Returns the current function.\n * @return {!Function|undefined}\n */\nCallSite.prototype.getFunction = function() {};\n\n\n/**\n * Returns the name of the current function, typically its name property. If a\n * name property is not available an attempt will be made to try to infer a name\n * from the function\'s context.\n * @return {string|undefined}\n */\nCallSite.prototype.getFunctionName = function() {};\n\n\n/**\n * Returns the name of the property of this or one of its prototypes that holds\n * the current function.\n * @return {string|undefined}\n */\nCallSite.prototype.getMethodName = function() {};\n\n\n/**\n * If this function was defined in a script returns the name of the script\n * @return {string|undefined}\n */\nCallSite.prototype.getFileName = function() {};\n\n\n/**\n * If this function was defined in a script returns the current line number.\n * @return {number|undefined}\n */\nCallSite.prototype.getLineNumber = function() {};\n\n\n/**\n * If this function was defined in a script returns the current column number.\n * @return {number|undefined}\n */\nCallSite.prototype.getColumnNumber = function() {};\n\n\n/**\n * If this function was created using a call to eval, returns a CallSite object\n * representing the location where eval was called\n * @return {CallSite|undefined}\n */\nCallSite.prototype.getEvalOrigin = function() {};\n\n\n/**\n * Is this a toplevel invocation, that is, is this the global object?\n * @return {boolean}\n */\nCallSite.prototype.isToplevel = function() {};\n\n\n/**\n * Does this call take place in code defined by a call to eval?\n * @return {boolean}\n */\nCallSite.prototype.isEval = function() {};\n\n\n/**\n * Is this call in native V8 code?\n * @return {boolean}\n */\nCallSite.prototype.isNative = function() {};\n\n\n/**\n * Is this a constructor call?\n * @return {boolean}\n */\nCallSite.prototype.isConstructor = function() {};\n', +-"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@google.com (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', ++"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@9oo91e.qjz9zk (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', + "externs/whatwg_encoding.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WHATWG\'s Encoding specification\n * https://encoding.spec.whatwg.org\n * @externs\n */\n\n/**\n * @constructor\n * @param {string=} encoding\n * @param {Object=} options\n */\nfunction TextDecoder(encoding, options) {}\n\n/** @type {string} **/ TextDecoder.prototype.encoding;\n/** @type {boolean} **/ TextDecoder.prototype.fatal;\n/** @type {boolean} **/ TextDecoder.prototype.ignoreBOM;\n\n/**\n * @param {!BufferSource=} input\n * @param {?Object=} options\n * @return {string}\n * @see https://encoding.spec.whatwg.org/#textdecoder\n */\nTextDecoder.prototype.decode = function decode(input, options) {};\n\n/**\n * @constructor\n * @param {string=} utfLabel\n */\nfunction TextEncoder(utfLabel) {}\n\n/** @type {string} **/ TextEncoder.prototype.encoding;\n\n/**\n * @param {string=} input\n * @return {!Uint8Array}\n */\nTextEncoder.prototype.encode = function(input) {};\n', + "externs/w3c_abort.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for AbortController\n * @see https://dom.spec.whatwg.org/#aborting-ongoing-activities\n * @externs\n */\n\n\n\n/**\n * @record\n * @extends {EventTarget}\n * @see https://dom.spec.whatwg.org/#interface-AbortSignal\n */\nfunction AbortSignal() {}\n\n/** @type {boolean} */\nAbortSignal.prototype.aborted;\n\n/** @type {?function(!Event)} */\nAbortSignal.prototype.onabort;\n\n\n\n/**\n * @constructor\n * @see https://dom.spec.whatwg.org/#interface-abortcontroller\n */\nfunction AbortController() {}\n\n/** @const {!AbortSignal} */\nAbortController.prototype.signal;\n\n/** @return {void} */\nAbortController.prototype.abort = function() {};\n', +-"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@google.com (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', ++"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@9oo91e.qjz9zk (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', + "externs/nonstandard_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Nonstandard definitions for timing control for script base animations.\n *\n * @externs\n */\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction webkitRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelAnimationFrame(handle) {};\n\n/**\n * @param {?FrameRequestCallback} callback It\'s legitimate to pass a null\n * callback and listen on the MozBeforePaint event instead.\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction mozRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction msRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction oRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelAnimationFrame(handle) {};\n', + "externs/w3c_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the API related to audio.\n * Definitions for the Web Audio API.\n * This file is based on the W3C Working Draft 08 December 2015.\n * @see http://www.w3.org/TR/webaudio/\n *\n * @externs\n */\n\n/**\n * @implements {EventTarget}\n * @constructor\n */\nfunction BaseAudioContext() {}\n\n/** @type {!AudioDestinationNode} */\nBaseAudioContext.prototype.destination;\n\n/** @type {number} */\nBaseAudioContext.prototype.sampleRate;\n\n/** @type {number} */\nBaseAudioContext.prototype.currentTime;\n\n/** @type {!AudioListener} */\nBaseAudioContext.prototype.listener;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#BaseAudioContext for valid values\n */\nBaseAudioContext.prototype.state;\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @return {!AudioBuffer}\n */\nBaseAudioContext.prototype.createBuffer =\n function(numberOfChannels, length, sampleRate) {};\n\n/**\n * @param {!ArrayBuffer} audioData\n * @param {function(!AudioBuffer)=} successCallback\n * @param {function(?)=} errorCallback\n * @return {!Promise}\n */\nBaseAudioContext.prototype.decodeAudioData =\n function(audioData, successCallback, errorCallback) {};\n\n/**\n * @return {!AudioBufferSourceNode}\n */\nBaseAudioContext.prototype.createBufferSource = function() {};\n\n/**\n * @deprecated Use createAudioWorker instead\n * @param {number=} bufferSize\n * @param {number=} numberOfInputChannels_opt\n * @param {number=} numberOfOutputChannels_opt\n * @return {!ScriptProcessorNode}\n */\nBaseAudioContext.prototype.createScriptProcessor = function(bufferSize,\n numberOfInputChannels_opt, numberOfOutputChannels_opt) {};\n\n/**\n * @return {!AnalyserNode}\n */\nBaseAudioContext.prototype.createAnalyser = function() {};\n\n/**\n * @return {!GainNode}\n */\nBaseAudioContext.prototype.createGain = function() {};\n\n/**\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nBaseAudioContext.prototype.createDelay = function(maxDelayTime) {};\n\n/**\n * @return {!BiquadFilterNode}\n */\nBaseAudioContext.prototype.createBiquadFilter = function() {};\n\n/**\n * @return {!WaveShaperNode}\n */\nBaseAudioContext.prototype.createWaveShaper = function() {};\n\n/**\n * @deprecated Use BaseAudioContext#createSpatialPanner or BaseAudioContext#createStereoPanner\n * @return {!PannerNode}\n */\nBaseAudioContext.prototype.createPanner = function() {};\n\n/**\n * @return {!StereoPannerNode}\n */\nBaseAudioContext.prototype.createStereoPanner = function() {};\n\n/**\n * @return {!ConvolverNode}\n */\nBaseAudioContext.prototype.createConvolver = function() {};\n\n/**\n * @param {number=} numberOfOutputs\n * @return {!ChannelSplitterNode}\n */\nBaseAudioContext.prototype.createChannelSplitter = function(numberOfOutputs) {};\n\n/**\n * @param {number=} numberOfInputs\n * @return {!ChannelMergerNode}\n */\nBaseAudioContext.prototype.createChannelMerger = function(numberOfInputs) {};\n\n/**\n * @return {!DynamicsCompressorNode}\n */\nBaseAudioContext.prototype.createDynamicsCompressor = function() {};\n\n/**\n * @return {!OscillatorNode}\n */\nBaseAudioContext.prototype.createOscillator = function() {};\n\n/**\n * @param {!Float32Array} real\n * @param {!Float32Array} imag\n * @return {!PeriodicWave}\n */\nBaseAudioContext.prototype.createPeriodicWave = function(real, imag) {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.resume = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.suspend = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.close = function() {};\n\n/** @type {?function(!Event)} */\nBaseAudioContext.prototype.onstatechange;\n\n/**\n * @param {string} scriptURL\n * @return {!Promise}\n */\nBaseAudioContext.prototype.createAudioWorker = function(scriptURL) {};\n\n/**\n * @param {!IArrayLike} feedforward\n * @param {!IArrayLike} feedback\n * @return {!IIRFilterNode}\n */\nBaseAudioContext.prototype.createIIRFilter = function(feedforward, feedback) {};\n\n/**\n * @return {!SpatialPannerNode}\n */\nBaseAudioContext.prototype.createSpatialPanner = function() {};\n\n/**\n * @record\n * @see https://webaudio.github.io/web-audio-api/#idl-def-AudioContextOptions\n */\nfunction AudioContextOptions() {};\n\n/** @type {(undefined|string|number)} */\nAudioContextOptions.prototype.latencyHint;\n\n/** @type {(undefined|number)} */\nAudioContextOptions.prototype.sampleRate;\n\n/**\n * Includes the non-standard contextOptions optional options parameter\n * implemented by Chrome and Firefox.\n * @param {!AudioContextOptions=} contextOptions\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction AudioContext(contextOptions) {}\n\n/**\n * @param {!HTMLMediaElement} mediaElement\n * @return {!MediaElementAudioSourceNode}\n */\nAudioContext.prototype.createMediaElementSource = function(mediaElement) {};\n\n/**\n * @return {!MediaStreamAudioDestinationNode}\n */\nAudioContext.prototype.createMediaStreamDestination = function() {};\n\n/**\n * @param {!MediaStream} mediaStream\n * @return {!MediaStreamAudioSourceNode}\n */\nAudioContext.prototype.createMediaStreamSource = function(mediaStream) {};\n\n/**\n * @deprecated Use createScriptProcessor instead.\n * @param {number} bufferSize\n * @param {number} numberOfInputs\n * @param {number} numberOfOuputs\n * @return {!ScriptProcessorNode}\n */\nAudioContext.prototype.createJavaScriptNode = function(bufferSize,\n numberOfInputs, numberOfOuputs) {};\n\n/**\n * @deprecated Use createGain instead.\n * @return {!GainNode}\n */\nAudioContext.prototype.createGainNode = function() {};\n\n/**\n * @deprecated Use createDelay instead.\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nAudioContext.prototype.createDelayNode = function(maxDelayTime) {};\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction OfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @return {!Promise}\n */\nOfflineAudioContext.prototype.startRendering = function() {};\n\n/** @type {function(!OfflineAudioCompletionEvent)} */\nOfflineAudioContext.prototype.oncomplete;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction OfflineAudioCompletionEvent() {}\n\n/** @type {AudioBuffer} */\nOfflineAudioCompletionEvent.prototype.renderedBuffer;\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webaudio/#the-audionode-interface\n */\nfunction AudioNode() {}\n\n/**\n * @override\n */\nAudioNode.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nAudioNode.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nAudioNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {!AudioNode|!AudioParam} destination\n * @param {number=} output\n * @param {number=} input\n * @return {AudioNode|void}\n */\nAudioNode.prototype.connect = function(destination, output, input) {};\n\n/**\n * @param {!AudioNode|!AudioParam|number=} destination\n * @param {number=} output\n * @param {number=} input\n */\nAudioNode.prototype.disconnect = function(destination, output, input) {};\n\n/** @type {!AudioContext} */\nAudioNode.prototype.context;\n\n/** @type {number} */\nAudioNode.prototype.numberOfInputs;\n\n/** @type {number} */\nAudioNode.prototype.numberOfOutputs;\n\n/** @type {number} */\nAudioNode.prototype.channelCount;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelCountMode;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelInterpretation;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioDestinationNode() {}\n\n/**\n * @deprecated Use AudioDestinationNode#maxChannelCount\n * @type {number}\n */\nAudioDestinationNode.prototype.numberOfChannels;\n\n/** @type {number} */\nAudioDestinationNode.prototype.maxChannelCount;\n\n/**\n * @constructor\n */\nfunction AudioParam() {}\n\n/** @type {number} */\nAudioParam.prototype.value;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.maxValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.minValue;\n\n/** @type {number} */\nAudioParam.prototype.defaultValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.units;\n\n/**\n * @param {number} value\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueAtTime = function(value, startTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.linearRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.exponentialRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number, or\n * timeConstant is not strictly positive\n */\nAudioParam.prototype.setTargetAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @deprecated Use setTargetAtTime instead.\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n */\nAudioParam.prototype.setTargetValueAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @param {!Float32Array} values\n * @param {number} startTime\n * @param {number} duration\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueCurveAtTime = function(values, startTime,\n duration) {};\n\n/**\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.cancelScheduledValues = function(startTime) {};\n\n/**\n * @constructor\n * @extends {AudioParam}\n */\nfunction AudioGain() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction GainNode() {}\n\n/** @type {!AudioParam} */\nGainNode.prototype.gain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DelayNode() {}\n\n/** @type {!AudioParam} */\nDelayNode.prototype.delayTime;\n\n/**\n * @constructor\n */\nfunction AudioBuffer() {}\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioBuffer.prototype.gain;\n\n/** @type {number} */\nAudioBuffer.prototype.sampleRate;\n\n/** @type {number} */\nAudioBuffer.prototype.length;\n\n/** @type {number} */\nAudioBuffer.prototype.duration;\n\n/** @type {number} */\nAudioBuffer.prototype.numberOfChannels;\n\n/**\n * @param {number} channel\n * @return {!Float32Array}\n */\nAudioBuffer.prototype.getChannelData = function(channel) {};\n\n/**\n * @param {!Float32Array} destination\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyFromChannel = function(destination,\n channelNumber, startInChannel) {};\n\n/**\n * @param {!Float32Array} source\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyToChannel = function(source, channelNumber,\n startInChannel) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioBufferSourceNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.UNSCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.SCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.PLAYING_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.FINISHED_STATE;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.playbackState;\n\n/** @type {AudioBuffer} */\nAudioBufferSourceNode.prototype.buffer;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.gain;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.playbackRate;\n\n/** @type {boolean} */\nAudioBufferSourceNode.prototype.loop;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopStart;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopEnd;\n\n/** @type {?function(!Event): void} */\nAudioBufferSourceNode.prototype.onended;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.detune;\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @throws {!TypeError} if any parameter is negative\n */\nAudioBufferSourceNode.prototype.start = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number=} when\n * @throws {!TypeError} if when is negative\n */\nAudioBufferSourceNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated Use AudioBufferSourceNode#start\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteOn = function(when) {};\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @deprecated Use AudioBufferSourceNode#start\n */\nAudioBufferSourceNode.prototype.noteGrainOn = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number} when\n * @deprecated Use AudioBufferSourceNode#stop\n */\nAudioBufferSourceNode.prototype.noteOff = function(when) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaElementAudioSourceNode() {}\n\n/**\n * @constructor\n */\nfunction AudioWorker() {}\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onloaded;\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onmessage;\n\n/** @type {!Array} */\nAudioWorker.prototype.parameters;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorker.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {number} numberOfInputs\n * @param {number} numberOfOutputs\n * @return {!AudioWorkerNode}\n */\nAudioWorker.prototype.createNode = function(numberOfInputs, numberOfOutputs) {};\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorker.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @param {string} name\n */\nAudioWorker.prototype.removeParameter = function(name) {};\n\n/**\n */\nAudioWorker.prototype.terminate = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioWorkerNode() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNode.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNode.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerParamDescriptor() {}\n\n/** @type {number} */\nAudioWorkerParamDescriptor.prototype.defaultValue;\n\n/** @type {string} */\nAudioWorkerParamDescriptor.prototype.name;\n\n/**\n * @constructor\n */\nfunction AudioWorkerGlobalScope() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onaudioprocess;\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onnodecreate;\n\n/** @type {!Array} */\nAudioWorkerGlobalScope.prototype.parameters;\n\n/** @type {number} */\nAudioWorkerGlobalScope.prototype.sampleRate;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorkerGlobalScope.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {string} name\n */\nAudioWorkerGlobalScope.prototype.removeParameter = function(name) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerNodeProcessor() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNodeProcessor.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNodeProcessor.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction JavaScriptAudioNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction ScriptProcessorNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioWorkerNodeCreationEvent() {}\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioWorkerNodeCreationEvent.prototype.node;\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.outputs;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioProcessEvent() {}\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioProcessEvent.prototype.node;\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.outputs;\n\n/** @type {!Object} */\nAudioProcessEvent.prototype.parameters;\n\n/** @type {number} */\nAudioProcessEvent.prototype.playbackTime;\n\n/**\n * @constructor\n * @extends {Event}\n * @deprecated Use AudioProcessEvent\n */\nfunction AudioProcessingEvent() {}\n\n/**\n * @type {!ScriptProcessorNode}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.node;\n\n/**\n * @type {number}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.playbackTime;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.inputBuffer;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.outputBuffer;\n\n/**\n * @deprecated\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioPannerNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EQUALPOWER;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.HRTF;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.SOUNDFIELD;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.LINEAR_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.INVERSE_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EXPONENTIAL_DISTANCE;\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.panningModel;\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.distanceModel;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.refDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.maxDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.rolloffFactor;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneInnerAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.coneGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.distanceGain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction PannerNode() {}\n\n/** @type {number} */\nPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nPannerNode.prototype.maxDistance;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.panningModel;\n\n/** @type {number} */\nPannerNode.prototype.refDistance;\n\n/** @type {number} */\nPannerNode.prototype.rolloffFactor;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @deprecated Use SpatialListener\n */\nfunction AudioListener() {}\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.gain;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.dopplerFactor;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.speedOfSound;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} xUp\n * @param {number} yUp\n * @param {number} zUp\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setOrientation = function(x, y, z, xUp, yUp, zUp) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction SpatialPannerNode() {}\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nSpatialPannerNode.prototype.maxDistance;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationZ;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.panningModel;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionZ;\n\n/** @type {number} */\nSpatialPannerNode.prototype.refDistance;\n\n/** @type {number} */\nSpatialPannerNode.prototype.rolloffFactor;\n\n/**\n * @constructor\n */\nfunction SpatialListener() {}\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upZ;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @see http://webaudio.github.io/web-audio-api/#the-stereopannernode-interface\n */\nfunction StereoPannerNode() {}\n\n/** @type {!AudioParam} */\nStereoPannerNode.prototype.pan;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ConvolverNode() {}\n\n/** @type {?AudioBuffer} */\nConvolverNode.prototype.buffer;\n\n/** @type {boolean} */\nConvolverNode.prototype.normalize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nvar AnalyserNode = function() {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteTimeDomainData = function(array) {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatTimeDomainData = function(array) {};\n\n/** @type {number} */\nAnalyserNode.prototype.fftSize;\n\n/** @type {number} */\nAnalyserNode.prototype.frequencyBinCount;\n\n/** @type {number} */\nAnalyserNode.prototype.minDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.maxDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.smoothingTimeConstant;\n\n/**\n * @constructor\n * @extends {AnalyserNode}\n * @deprecated Use AnalyserNode\n *\n * This constructor has been added for backwards compatibility.\n */\nvar RealtimeAnalyserNode = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelSplitterNode() {}\n\n/**\n * @constructor\n * @extends {ChannelSplitterNode}\n * @deprecated Use ChannelSplitterNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelSplitter() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelMergerNode() {}\n\n/**\n * @constructor\n * @extends {ChannelMergerNode}\n * @deprecated Use ChannelMergerNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelMerger() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DynamicsCompressorNode() {}\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.threshold;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.knee;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.ratio;\n\n/** @type {number} */\nDynamicsCompressorNode.prototype.reduction;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.attack;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.release;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction BiquadFilterNode() {}\n\n/**\n * A read-able and write-able string that specifies the type of the filter.\n * See http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface\n * for valid values.\n * @type {string}\n */\nBiquadFilterNode.prototype.type;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.detune;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.Q;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.gain;\n/**\n * @param {Float32Array} frequencyHz\n * @param {Float32Array} magResponse\n * @param {Float32Array} phaseResponse\n * @return {undefined}\n */\nBiquadFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction IIRFilterNode() {}\n\n/**\n * @param {!Float32Array} frequencyHz\n * @param {!Float32Array} magResponse\n * @param {!Float32Array} phaseResponse\n * @return {undefined}\n */\nIIRFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction WaveShaperNode() {}\n\n/** @type {Float32Array} */\nWaveShaperNode.prototype.curve;\n\n/** @type {string} */\nWaveShaperNode.prototype.oversample;\n\n/**\n * @deprecated\n * @constructor\n */\nfunction WaveTable() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction OscillatorNode() {}\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-oscillatornode-interface for valid values\n */\nOscillatorNode.prototype.type;\n\n/**\n * @deprecated\n * @type {number}\n */\nOscillatorNode.prototype.playbackState;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.detune;\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.start = function(when) {};\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated\n * @param {!WaveTable} waveTable\n */\nOscillatorNode.prototype.setWaveTable = function(waveTable) {};\n\n/**\n * @param {!PeriodicWave} periodicWave\n */\nOscillatorNode.prototype.setPeriodicWave = function(periodicWave) {};\n\n/** @type {?function(!Event)} */\nOscillatorNode.prototype.onended;\n\n/**\n * @constructor\n */\nfunction PeriodicWave() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioDestinationNode() {}\n\n/** @type {!MediaStream} */\nMediaStreamAudioDestinationNode.prototype.stream;\n', +-"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.mozilla.org/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', ++"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.m0z111a.qjz9zk/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', + "externs/w3c_batterystatus.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Battery Status API.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/battery-status/\n *\n * @externs\n */\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction BatteryManager() {}\n\n\n/**\n * @type {boolean}\n */\nBatteryManager.prototype.charging;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.chargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.dischargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.level;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingchange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.ondischargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onlevelchange;\n\n/**\n * @return {!Promise}\n * @see http://www.w3.org/TR/battery-status/\n */\nNavigator.prototype.getBattery = function() {};\n', + "externs/w3c_clipboard.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the asynchronous clipboard Web API.\n * @externs\n */\n\n/**\n * @interface\n * @see https://w3c.github.io/clipboard-apis/#async-clipboard-api\n */\nfunction Clipboard() {}\n\n/**\n * @return {!Promise}\n */\nClipboard.prototype.readText = function() {};\n\n/**\n * @param {string} text\n * @return {!Promise}\n */\nClipboard.prototype.writeText = function(text) {};\n\n/** @const {!Clipboard} */\nNavigator.prototype.clipboard;\n', + "externs/w3c_composition_event.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Composition Events specification.\n * @externs\n */\n\n/**\n * The `CompositionEvent` interface provides specific contextual information\n * associated with Composition Events.\n * @see https://www.w3.org/TR/uievents/#interface-compositionevent\n * @record\n * @extends {UIEventInit}\n */\nfunction CompositionEventInit() {}\n\n/**\n * `data` holds the value of the characters generated by an input method. This\n * MAY be a single Unicode character or a non-empty sequence of Unicode\n * characters. This attribute MAY be the empty string. The un-initialized value\n * of this attribute MUST be "" (the empty string).\n * @type {string}\n */\nCompositionEventInit.prototype.data;\n\n/**\n * Composition Events provide a means for inputing text in a supplementary or\n * alternate manner than by Keyboard Events, in order to allow the use of\n * characters that might not be commonly available on keyboard. For example,\n * Composition Events might be used to add accents to characters despite their\n * absence from standard US keyboards, to build up logograms of many Asian\n * languages from their base components or categories, to select word choices\n * from a combination of key presses on a mobile device keyboard, or to convert\n * voice commands into text using a speech recognition processor.\n *\n * Conceptually, a composition session consists of one `compositionstart` event,\n * one or more `compositionupdate` events, and one `compositionend` event, with\n * the value of the data attribute persisting between each stage of this event\n * chain during each session.\n *\n * Not all IME systems or devices expose the necessary data to the DOM, so the\n * active composition string (the "Reading Window" or "candidate selection" menu\n * option) might not be available through this interface, in which case the\n * selection MAY be represented by the empty string.\n *\n * @see https://www.w3.org/TR/uievents/#events-compositionevents\n * @param {string} type\n * @param {!CompositionEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction CompositionEvent(type, opt_eventInitDict) {}\n\n/**\n * Initializes attributes of a `CompositionEvent` object. This method has the\n * same behavior as `UIEvent.initUIEvent()`. The value of `detail` remains\n * undefined.\n *\n * @see https://www.w3.org/TR/uievents/#idl-interface-CompositionEvent-initializers\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {?Window} viewArg\n * @param {string} dataArg\n * @param {string} localeArg\n * @return {undefined}\n */\nCompositionEvent.prototype.initCompositionEvent = function(\n typeArg, canBubbleArg, cancelableArg, viewArg, dataArg, localeArg) {};\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.data;\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.locale;\n', +-"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@google.com (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', +-"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@google.com (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', ++"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@9oo91e.qjz9zk (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', ++"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', + "externs/w3c_gamepad.js":'/*\n * Copyright 2013 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Gamepad specification.\n * @see http://www.w3.org/TR/gamepad/\n * @externs\n */\n\n/**\n * @return {!Array.}\n */\nnavigator.getGamepads = function() {};\n\n/**\n * @return {!Array.}\n */\nnavigator.webkitGetGamepads = function() {};\n\n\n/**\n * @interface\n */\nvar Gamepad = function() {};\n\n/**\n * @type {string}\n */\nGamepad.prototype.id; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.index; // read-only\n\n/**\n * @type {boolean}\n */\nGamepad.prototype.connected; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.timestamp; // read-only\n\n/**\n * @type {string}\n */\nGamepad.prototype.mapping; // read-only\n\n/**\n * @type {!Array.}\n */\nGamepad.prototype.axes; // read-only\n\n/**\n * Note: The W3C spec changed, this property now returns an array of\n * GamepadButton objects.\n *\n * @type {(!Array.|!Array.)}\n */\nGamepad.prototype.buttons;\n\n\n/**\n * @interface\n */\nvar GamepadButton = function() {};\n\n/**\n * @type {boolean}\n */\nGamepadButton.prototype.pressed; // read-only\n\n/**\n * @type {number}\n */\nGamepadButton.prototype.value; // read-only\n', +-"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@google.com (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', +-"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@google.com (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', +-"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", ++"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@9oo91e.qjz9zk (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', ++"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@9oo91e.qjz9zk (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', ++"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", + "externs/w3c_midi.js":'/*\n * Copyright 2014 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview W3C Web MIDI specification.\n * @see http://www.w3.org/TR/webmidi/\n *\n * @externs\n */\n\n\n/**\n * @param {!MIDIOptions=} opt_options\n * @return {!Promise.}\n */\nnavigator.requestMIDIAccess = function(opt_options) {};\n\n\n/**\n * @typedef {{\n * sysex: boolean\n * }}\n */\nvar MIDIOptions;\n\n\n\n/**\n * @interface\n */\nvar MIDIInputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIInputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIInputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIInputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIInput)} iterator\n */\nMIDIInputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIInput}\n */\nMIDIInputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIInputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n */\nvar MIDIOutputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIOutputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIOutputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIOutputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIOutput)} iterator\n */\nMIDIOutputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIOutput}\n */\nMIDIOutputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIOutputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIAccess = function() {};\n\n\n/**\n * @const {!MIDIInputMap}\n */\nMIDIAccess.prototype.inputs;\n\n\n/**\n * @const {!MIDIOutputMap}\n */\nMIDIAccess.prototype.outputs;\n\n\n/**\n * @const {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.onconnect;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.ondisconnect;\n\n\n/**\n * @const {boolean}\n */\nMIDIAccess.prototype.sysexEnabled;\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIPort = function() {};\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.id;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.manufacturer;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.name;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.type;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.version;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIPort.prototype.ondisconnect;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIInput = function() {};\n\n\n/**\n * @type {function(!MIDIMessageEvent)}\n */\nMIDIInput.prototype.onmidimessage;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIOutput = function() {};\n\n\n/**\n * @param {!Uint8Array} data\n * @param {number=} opt_timestamp\n */\nMIDIOutput.prototype.send = function(data, opt_timestamp) {};\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIMessageEventInit=} opt_init\n */\nvar MIDIMessageEvent = function(type, opt_init) {};\n\n\n/**\n * @const {number}\n */\nMIDIMessageEvent.prototype.receivedTime;\n\n\n/**\n * @const {!Uint8Array}\n */\nMIDIMessageEvent.prototype.data;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#midimessageeventinit-interface\n */\nfunction MIDIMessageEventInit() {}\n\n/** @type {undefined|number} */\nMIDIMessageEventInit.prototype.receivedTime;\n\n/** @type {undefined|!Uint8Array} */\nMIDIMessageEventInit.prototype.data;\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIConnectionEventInit=} opt_init\n */\nvar MIDIConnectionEvent = function(type, opt_init) {};\n\n\n/**\n * @const {MIDIPort}\n */\nMIDIConnectionEvent.prototype.port;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#idl-def-MIDIConnectionEventInit\n */\nfunction MIDIConnectionEventInit() {}\n\n/** @type {undefined|!MIDIPort} */\nMIDIConnectionEventInit.prototype.port;\n', +-"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@google.com (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", ++"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@9oo91e.qjz9zk (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", + "externs/nonstandard_navigation_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard Definitions for W3C\'s Navigation Timing\n * specification.\n *\n * @externs\n */\n\n// Nonstandard. Only available in Blink.\n// Returns more granular results with the --enable-memory-info flag.\n/** @type {MemoryInfo} */ Performance.prototype.memory;\n\n/**\n * Clear out the buffer of performance timing events for webkit browsers.\n * @return {undefined}\n */\nPerformance.prototype.webkitClearResourceTimings = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.webkitNow = function() {};\n', + "externs/w3c_netinfo.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for the Network Information API.\n * @externs\n */\n\n/**\n * @see http://wicg.github.io/netinfo/#-dfn-networkinformation-dfn-interface\n * @constructor\n */\nfunction NetworkInformation() {}\n\n/** @type {ConnectionType} */\nNetworkInformation.prototype.type;\n\n/** @type {EffectiveConnectionType} */\nNetworkInformation.prototype.effectiveType;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlinkMax;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlink;\n\n/** @type {Millisecond} */\nNetworkInformation.prototype.rtt;\n\n/** @type {?function(Event)} */\nNetworkInformation.prototype.onchange;\n\n/**\n * @typedef {number}\n */\nvar Megabit;\n\n/**\n * @typedef {number}\n */\nvar Millisecond;\n\n/**\n * Enum of:\n * 'bluetooth',\n * 'cellular',\n * 'ethernet',\n * 'mixed',\n * 'none',\n * 'other',\n * 'unknown',\n * 'wifi',\n * 'wimax'\n * @typedef {string}\n */\nvar ConnectionType;\n\n/**\n * Enum of:\n * '2g',\n * '3g',\n * '4g',\n * 'slow-2g'\n * @typedef {string}\n */\nvar EffectiveConnectionType;\n\n/** @type {!NetworkInformation} */\nNavigator.prototype.connection;\n", + "externs/w3c_permissions.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Permissions API.\n * @see https://w3c.github.io/permissions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {{name: PermissionName}}\n * @see https://w3c.github.io/permissions/#permission-descriptor\n */\nvar PermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, userVisibleOnly: boolean}}\n * @see https://w3c.github.io/permissions/#push\n */\nvar PushPermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, sysex: boolean}}\n * @see https://w3c.github.io/permissions/#midi\n */\nvar MidiPermissionDescriptor;\n\n\n/**\n * Set of possible values: 'geolocation', 'notifications', 'push', 'midi'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionName\n */\nvar PermissionName;\n\n\n/**\n * Set of possible values: 'granted', 'denied', 'prompt'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionState\n */\nvar PermissionState;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://w3c.github.io/permissions/#status-of-a-permission\n */\nfunction PermissionStatus() {}\n\n/** @type {PermissionState} */\nPermissionStatus.prototype.state;\n\n/**\n * @type {PermissionState}\n * @deprecated, use PermissionStatus.state for newer clients\n */\nPermissionStatus.prototype.status;\n\n/** @type {?function(!Event)} */\nPermissionStatus.prototype.onchange;\n\n/** @override */\nPermissionStatus.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * @constructor\n * @see https://w3c.github.io/permissions/#idl-def-permissions\n */\nfunction Permissions() {}\n\n/**\n * @param {PermissionDescriptor} permission The permission to look up\n * @return {!Promise}\n * @see https://w3c.github.io/permissions/#dom-permissions-query\n */\nPermissions.prototype.query = function(permission) {};\n\n\n/** @type {Permissions} */\nNavigator.prototype.permissions;\n", + "externs/w3c_pointer_events.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Pointer Events specification.\n * Created from\n * http://www.w3.org/TR/pointerevents/\n *\n * @externs\n */\n\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n */\nCSSProperties.prototype.touchAction;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-pointerEnabled\n */\nNavigator.prototype.pointerEnabled;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints\n */\nNavigator.prototype.maxTouchPoints;\n\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-setPointerCapture-void-long-pointerId\n */\nElement.prototype.setPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-releasePointerCapture-void-long-pointerId\n */\nElement.prototype.releasePointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#dom-element-haspointercapture\n * @return {boolean}\n */\nElement.prototype.hasPointerCapture = function(pointerId) {};\n\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://www.w3.org/TR/pointerevents/#idl-def-PointerEventInit\n */\nfunction PointerEventInit() {}\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pointerId;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.width;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.height;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pressure;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltX;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltY;\n\n/** @type {undefined|string} */\nPointerEventInit.prototype.pointerType;\n\n/** @type {undefined|boolean} */\nPointerEventInit.prototype.isPrimary;\n\n/**\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {PointerEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/pointerevents/#pointerevent-interface\n */\nfunction PointerEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nPointerEvent.prototype.width;\n\n/** @type {number} */\nPointerEvent.prototype.height;\n\n/** @type {number} */\nPointerEvent.prototype.pressure;\n\n/** @type {number} */\nPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nPointerEvent.prototype.tiltY;\n\n/** @type {string} */\nPointerEvent.prototype.pointerType;\n\n/** @type {boolean} */\nPointerEvent.prototype.isPrimary;\n\n// Microsoft pointerType values\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_TOUCH;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_PEN;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_MOUSE;\n\n/**\n * @see https://w3c.github.io/pointerevents/extension.html\n * @return {!Array}\n */\nPointerEvent.prototype.getCoalescedEvents = function() {};\n\n', +-"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', ++"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', + "externs/w3c_referrer_policy.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s referrer policy specification.\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-delivery\n * @externs\n */\n\n/** @type {string} */\nHTMLAnchorElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLAreaElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLImageElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLIFrameElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLLinkElement.prototype.referrerPolicy;\n', +-"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@google.com (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', ++"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@9oo91e.qjz9zk (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', + "externs/nonstandard_rtc.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for components of the WebRTC browser\n * API.\n *\n * @externs\n */\n\n/**\n * @type {function(new: MediaStream,\n * (!MediaStream|!Array)=)}\n */\nvar webkitMediaStream;\n\n/**\n * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object.\n * @param {function(!MediaStream)} successCallback\n * A NavigatorUserMediaSuccessCallback function.\n * @param {function(!NavigatorUserMediaError)=} errorCallback A\n * NavigatorUserMediaErrorCallback function.\n * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html\n * @see https://www.w3.org/TR/mediacapture-streams/\n * @return {undefined}\n */\nNavigator.prototype.webkitGetUserMedia = function(\n constraints, successCallback, errorCallback) {};\n\n/** @const */\nvar webkitRTCPeerConnection = RTCPeerConnection;\n', + "externs/w3c_screen_orientation.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Screen Orientation API.\n * @see https://w3c.github.io/screen-orientation/\n *\n * @externs\n */\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/screen-orientation/#screenorientation-interface\n */\nvar ScreenOrientation = function() {};\n\n/**\n * @param {string} orientation\n * @return {!Promise}\n */\nScreenOrientation.prototype.lock = function(orientation) {};\n\n/** @return {void} */\nScreenOrientation.prototype.unlock = function() {};\n\n/** @const {string} */\nScreenOrientation.prototype.type;\n\n/** @const {number} */\nScreenOrientation.prototype.angle;\n\n/** @type {?function(!Event)} */\nScreenOrientation.prototype.onchange;\n\n/**\n * @type {?ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#extensions-to-the-screen-interface\n */\nScreen.prototype.orientation;\n', +-"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@google.com (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', +-"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.chromestatus.com/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", +-"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@google.com (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', ++"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@9oo91e.qjz9zk (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', ++"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.ch40mestatus.qjz9zk/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", ++"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@9oo91e.qjz9zk (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', + "externs/w3c_touch_event.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Touch Events specification.\n * @see http://www.w3.org/TR/touch-events/\n * @externs\n */\n\n/**\n * @typedef {{\n * identifier: number,\n * target: !EventTarget,\n * clientX: (number|undefined),\n * clientY: (number|undefined),\n * screenX: (number|undefined),\n * screenY: (number|undefined),\n * pageX: (number|undefined),\n * pageY: (number|undefined),\n * radiusX: (number|undefined),\n * radiusY: (number|undefined),\n * rotationAngle: (number|undefined),\n * force: (number|undefined)\n * }}\n */\nvar TouchInitDict;\n\n/**\n * The Touch class represents a single touch on the surface. A touch is the\n * presence or movement of a finger that is part of a unique multi-touch\n * sequence.\n * @see http://www.w3.org/TR/touch-events/#touch-interface\n * @param {!TouchInitDict} touchInitDict\n * @constructor\n */\nfunction Touch(touchInitDict) {}\n\n/**\n * The x-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientX;\n\n/**\n * The y-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientY;\n\n/**\n * The unique identifier for this touch object.\n * @type {number}\n */\nTouch.prototype.identifier;\n\n/**\n * The x-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageX;\n\n/**\n * The y-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageY;\n\n/**\n * The x-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenX;\n\n/**\n * The y-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenY;\n\n/**\n * The target of this touch.\n * @type {EventTarget}\n */\nTouch.prototype.target;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-force\n */\nTouch.prototype.force;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusX\n */\nTouch.prototype.radiusX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusY\n */\nTouch.prototype.radiusY;\n\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2011/WD-touch-events-20110505/#widl-Touch-rotationAngle\n */\nTouch.prototype.rotationAngle;\n\n\n/**\n * Creates a new Touch object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouch-Touch-WindowProxy-view-EventTarget-target-long-identifier-long-pageX-long-pageY-long-screenX-long-screenY\n * @param {Window} view\n * @param {EventTarget} target\n * @param {number} identifier\n * @param {number} pageX\n * @param {number} pageY\n * @param {number} screenX\n * @param {number} screenY\n * @return {Touch}\n */\nDocument.prototype.createTouch = function(view, target, identifier, pageX,\n pageY, screenX, screenY) {};\n\n\n/**\n * The TouchList class is used to represent a collection of Touch objects.\n * @see http://www.w3.org/TR/touch-events/#touchlist-interface\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TouchList() {}\n\n/**\n * The number of Touch objects in this TouchList object.\n * @type {number}\n */\nTouchList.prototype.length;\n\n/**\n * Returns the Touch object at the given index.\n * @param {number} index\n * @return {?Touch}\n */\nTouchList.prototype.item = function(index) {};\n\n/**\n * @param {number} identifier\n * @return {?Touch}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-TouchList-identifiedTouch-Touch-long-identifier\n */\nTouchList.prototype.identifiedTouch = function(identifier) {};\n\n/**\n * Creates a new TouchList object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouchList-TouchList-Touch-touches\n * @param {Array} touches\n * @return {TouchList}\n */\nDocument.prototype.createTouchList = function(touches) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n */\nfunction TouchEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nTouchEventInit.prototype.relatedTarget;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.touches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.targetTouches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.changedTouches;\n\n/**\n * The TouchEvent class encapsulates information about a touch event.\n *\n *

    The system continually sends TouchEvent objects to an application as\n * fingers touch and move across a surface. A touch event provides a snapshot of\n * all touches during a multi-touch sequence, most importantly the touches that\n * are new or have changed for a particular target. A multi-touch sequence\n * begins when a finger first touches the surface. Other fingers may\n * subsequently touch the surface, and all fingers may move across the surface.\n * The sequence ends when the last of these fingers is lifted from the surface.\n * An application receives touch event objects during each phase of any touch.\n *

    \n *\n *

    The different types of TouchEvent objects that can occur are:\n *

      \n *
    • touchstart - Sent when a finger for a given event touches the surface.\n *
    • touchmove - Sent when a given event moves on the surface.\n *
    • touchend - Sent when a given event lifts from the surface.\n *
    • touchcancel - Sent when the system cancels tracking for the touch.\n *
    \n * TouchEvent objects are combined together to form high-level GestureEvent\n * objects that are also sent during a multi-touch sequence.

    \n *\n * @see http://www.w3.org/TR/touch-events/#touchevent-interface\n * @param {string} type\n * @param {!TouchEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction TouchEvent(type, opt_eventInitDict) {}\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.touches;\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.targetTouches;\n\n/**\n * A collection of Touch objects representing all touches that changed in this event.\n * @type {TouchList}\n */\nTouchEvent.prototype.changedTouches;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.altKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.metaKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.ctrlKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.shiftKey;\n\n\n/**\n * Specifies the JavaScript method to invoke when the system cancels tracking\n * for the touch.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchcancel;\n\n/**\n * Specifies the JavaScript method to invoke when a given event lifts from the\n * surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchend;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * moves on the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchmove;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * touches the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchstart;\n", +-"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', +-"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@google.com (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', +-"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', +-"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.mozilla.org/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.mozilla.org/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.mozilla.org/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.mozilla.org/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.mozilla.org/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', ++"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', ++"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@9oo91e.qjz9zk (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', ++"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', ++"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', + "externs/web_animations.js":"/*\n * Copyright 2016 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Basic externs for the Web Animations API. This is not\n * nessecarily exhaustive. For more information, see the spec-\n * https://w3c.github.io/web-animations\n * @externs\n */\n\n\n/**\n * @param {!Object} frames\n * @param {(number|KeyframeAnimationOptions)=} options\n * @return {!Animation}\n * @see https://www.w3.org/TR/web-animations/#the-animatable-interface-mixin\n */\nElement.prototype.animate = function(frames, options) {};\n\n/**\n * @return {!Array}\n */\nElement.prototype.getAnimations = function() {};\n\n\n/**\n * @constructor\n * @param {AnimationEffectReadOnly=} effect\n * @param {AnimationTimeline=} timeline\n * @implements {EventTarget}\n */\nvar Animation = function(effect, timeline) {};\n\n/** @override */\nAnimation.prototype.addEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.removeEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.cancel = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.finish = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.pause = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.play = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.reverse = function() {};\n\n/** @type {number} */\nAnimation.prototype.currentTime;\n\n/** @type {AnimationEffectReadOnly} */\nAnimation.prototype.effect;\n\n/** @type {!Promise} */\nAnimation.prototype.finished;\n\n/** @type {string} */\nAnimation.prototype.id;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.oncancel;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.onfinish;\n\n/** @type {number} */\nAnimation.prototype.playbackRate;\n\n/** @type {string} */\nAnimation.prototype.playState;\n\n/** @type {!Promise} */\nAnimation.prototype.ready;\n\n/** @type {number} */\nAnimation.prototype.startTime;\n\n/** @type {!AnimationTimeline} */\nAnimation.prototype.timeline;\n\n\n/**\n * @interface\n */\nvar AnimationEffectReadOnly = function() {};\n\n/**\n * @return {!ComputedTimingProperties}\n */\nAnimationEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @type {!AnimationEffectTiming} */\nAnimationEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @implements {AnimationEffectReadOnly}\n */\nvar KeyframeEffectReadOnly = function(target, frames, options) {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @extends {KeyframeEffectReadOnly}\n */\nvar KeyframeEffect = function(target, frames, options) {};\n\n\n/**\n * @record\n */\nvar AnimationEffectTimingProperties = function() {};\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.delay;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.endDelay;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.fill;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterationStart;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterations;\n\n/** @type {number|string|undefined} */\nAnimationEffectTimingProperties.prototype.duration;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.direction;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.easing;\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar KeyframeEffectOptions = function() {};\n\n/**\n * Possible values: 'replace', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.iterationComposite;\n\n/**\n * Possible values: 'replace', 'add', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.composite;\n\n/**\n * @record\n * @extends {KeyframeEffectOptions}\n */\nvar KeyframeAnimationOptions = function() {};\n\n/** @type {string|undefined} */\nKeyframeAnimationOptions.prototype.id;\n\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar ComputedTimingProperties = function() {};\n\n/** @type {number} */\nComputedTimingProperties.prototype.endTime;\n\n/** @type {number} */\nComputedTimingProperties.prototype.activeDuration;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.localTime;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.progress;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.currentIteration;\n\n\n/**\n * @interface\n */\nvar AnimationEffectTimingReadOnly = function() {};\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.delay;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.endDelay;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.fill;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterationStart;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterations;\n\n/** @type {number|string} */\nAnimationEffectTimingReadOnly.prototype.duration;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.direction;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.easing;\n\n\n/**\n * @interface\n * @extends {AnimationEffectTimingReadOnly}\n */\nvar AnimationEffectTiming = function() {};\n\n\n/**\n * @interface\n */\nvar AnimationTimeline = function() {};\n\n/** @type {?number} */\nAnimationTimeline.prototype.currentTime;\n\n\n/**\n * @constructor\n * @implements {AnimationTimeline}\n */\nvar DocumentTimeline = function() {};\n\n/** @override */\nDocumentTimeline.prototype.currentTime;\n\n\n/** @type {!DocumentTimeline} */\nDocument.prototype.timeline;\n\n/**\n * Externs for the Web Animations API (Level 2 / Groups).\n *\n * This defines externs for the \"-next\" version of the Web Animations API\n * polyfill found online at:\n * https://github.com/web-animations/web-animations.js\n *\n * These features are NOT natively implemented in browsers and are not clearly\n * part of the official spec. This is NOT intended to be exhaustive, and\n * requires the base externs from web-animations.js.\n *\n */\n\n\n/** @type {Element} */\nKeyframeEffectReadOnly.prototype.target;\n\n/** @type {?function(number, !KeyframeEffect, !Animation)|undefined} */\nKeyframeEffectReadOnly.prototype.onsample;\n\n\n/**\n * @param {!AnimationEffectReadOnly} effect\n * @return {!Animation}\n */\nDocumentTimeline.prototype.play = function(effect) {};\n\n/**\n * @return {!Array}\n */\nDocumentTimeline.prototype.getAnimations = function() {};\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar SequenceEffect = function(children, timing) {};\n\n/** @override */\nSequenceEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nSequenceEffect.prototype.timing;\n\n/** @type {!Array} */\nSequenceEffect.prototype.children;\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar GroupEffect = function(children, timing) {};\n\n/** @override */\nGroupEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nGroupEffect.prototype.timing;\n\n/** @type {!Array} */\nGroupEffect.prototype.children;\n", +-"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@google.com (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', ++"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@9oo91e.qjz9zk (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', + "externs/webkit_usercontent.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for WKWebView\'s User Content interface.\n * https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKUserContentController_Ref/\n * https://trac.webkit.org/browser/trunk/Source/WebCore/page/WebKitNamespace.h\n *\n * @externs\n */\n\n/** @constructor */\nfunction WebKitNamespace() {}\n\n\n/**\n * @type {!UserMessageHandlersNamespace}\n */\nWebKitNamespace.prototype.messageHandlers;\n\n\n/**\n * @constructor\n * @implements {IObject}\n */\nfunction UserMessageHandlersNamespace() {}\n\n\n/** @constructor */\nfunction UserMessageHandler() {}\n\n\n/**\n * @param {*} message\n * @return {undefined}\n */\nUserMessageHandler.prototype.postMessage = function(message) {};\n\n\n/**\n * @const {!WebKitNamespace}\n */\nvar webkit;\n', + "externs/webgl.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 1.0.1 spec, including extensions.\n *\n * This relies on html5.js being included for Canvas and Typed Array support.\n *\n * This includes some extensions defined at\n * http://www.khronos.org/registry/webgl/extensions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {ImageBitmap|ImageData|HTMLImageElement|HTMLCanvasElement|\n * HTMLVideoElement|OffscreenCanvas}\n */\nvar TexImageSource;\n\n/**\n * @constructor\n */\nfunction WebGLRenderingContext() {}\n\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.CW;\n\n/** @const {number} */\nWebGLRenderingContext.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.INT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.BROWSER_DEFAULT_WEBGL;\n\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BROWSER_DEFAULT_WEBGL;\n\n\n/**\n * @type {!HTMLCanvasElement}\n */\nWebGLRenderingContext.prototype.canvas;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferWidth;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferHeight;\n\n/**\n * @return {!WebGLContextAttributes}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getContextAttributes = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isContextLost = function() {};\n\n/**\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getSupportedExtensions = function() {};\n\n/**\n * Note that this has side effects by enabling the extension even if the\n * result is not used.\n * @param {string} name\n * @return {Object}\n */\nWebGLRenderingContext.prototype.getExtension = function(name) {};\n\n/**\n * @param {number} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.activeTexture = function(texture) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.attachShader = function(program, shader) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @param {string} name\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindAttribLocation = function(\n program, index, name) {};\n\n/**\n * @param {number} target\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindBuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindFramebuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindRenderbuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindTexture = function(target, texture) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquation = function(mode) {};\n\n/**\n * @param {number} modeRGB\n * @param {number} modeAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquationSeparate = function(\n modeRGB, modeAlpha) {};\n\n/**\n * @param {number} sfactor\n * @param {number} dfactor\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFunc = function(sfactor, dfactor) {};\n\n/**\n * @param {number} srcRGB\n * @param {number} dstRGB\n * @param {number} srcAlpha\n * @param {number} dstAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFuncSeparate = function(\n srcRGB, dstRGB, srcAlpha, dstAlpha) {};\n\n/**\n * @param {number} target\n * @param {ArrayBufferView|ArrayBuffer|number} data\n * @param {number} usage\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferData = function(target, data, usage) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {ArrayBufferView|ArrayBuffer} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferSubData = function(\n target, offset, data) {};\n\n/**\n * @param {number} target\n * @return {number}\n */\nWebGLRenderingContext.prototype.checkFramebufferStatus = function(target) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clear = function(mask) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} depth\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearDepth = function(depth) {};\n\n/**\n * @param {number} s\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearStencil = function(s) {};\n\n/**\n * @param {boolean} red\n * @param {boolean} green\n * @param {boolean} blue\n * @param {boolean} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.colorMask = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compileShader = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} format\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexImage2D = function(\n target, level, format, x, y, width, height, border) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexSubImage2D = function(\n target, level, xoffset, yoffset, x, y, width, height) {};\n\n/**\n * @return {!WebGLBuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createBuffer = function() {};\n\n/**\n * @return {!WebGLFramebuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createFramebuffer = function() {};\n\n/**\n * @return {!WebGLProgram}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createProgram = function() {};\n\n/**\n * @return {!WebGLRenderbuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createRenderbuffer = function() {};\n\n/**\n * @param {number} type\n * @return {!WebGLShader}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createShader = function(type) {};\n\n/**\n * @return {!WebGLTexture}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createTexture = function() {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.cullFace = function(mode) {};\n\n/**\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteBuffer = function(buffer) {};\n\n/**\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteFramebuffer = function(buffer) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteProgram = function(program) {};\n\n/**\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteRenderbuffer = function(buffer) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteShader = function(shader) {};\n\n/**\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteTexture = function(texture) {};\n\n/**\n * @param {number} func\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthFunc = function(func) {};\n\n/**\n * @param {boolean} flag\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthMask = function(flag) {};\n\n/**\n * @param {number} nearVal\n * @param {number} farVal\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthRange = function(nearVal, farVal) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.detachShader = function(program, shader) {};\n\n/**\n * @param {number} flags\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disable = function(flags) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disableVertexAttribArray = function(\n index) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawArrays = function(mode, first, count) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawElements = function(\n mode, count, type, offset) {};\n\n/**\n * @param {number} cap\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enable = function(cap) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enableVertexAttribArray = function(\n index) {};\n\nWebGLRenderingContext.prototype.finish = function() {};\n\nWebGLRenderingContext.prototype.flush = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} renderbuffertarget\n * @param {WebGLRenderbuffer} renderbuffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferRenderbuffer = function(\n target, attachment, renderbuffertarget, renderbuffer) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} textarget\n * @param {WebGLTexture} texture\n * @param {number} level\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferTexture2D = function(\n target, attachment, textarget, texture, level) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.frontFace = function(mode) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.generateMipmap = function(target) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveAttrib = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveUniform = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttachedShaders = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttribLocation = function(program, name) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getBufferParameter = function(target, pname) {};\n\n/**\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getParameter = function(pname) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getError = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getFramebufferAttachmentParameter = function(\n target, attachment, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramParameter = function(\n program, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramInfoLog = function(program) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getRenderbufferParameter = function(\n target, pname) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderParameter = function(shader, pname) {};\n\n/**\n * @param {number} shadertype\n * @param {number} precisiontype\n * @return {WebGLShaderPrecisionFormat}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderPrecisionFormat = function(shadertype,\n precisiontype) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderInfoLog = function(shader) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderSource = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getTexParameter = function(target, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLUniformLocation} location\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniform = function(program, location) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {WebGLUniformLocation}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniformLocation = function(program, name) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttrib = function(index, pname) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttribOffset = function(\n index, pname) {};\n\n/**\n * @param {number} target\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.hint = function(target, mode) {};\n\n/**\n * @param {WebGLObject} buffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isBuffer = function(buffer) {};\n\n/**\n * @param {number} cap\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isEnabled = function(cap) {};\n\n/**\n * @param {WebGLObject} framebuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isFramebuffer = function(framebuffer) {};\n\n/**\n * @param {WebGLObject} program\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isProgram = function(program) {};\n\n/**\n * @param {WebGLObject} renderbuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isRenderbuffer = function(renderbuffer) {};\n\n/**\n * @param {WebGLObject} shader\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isShader = function(shader) {};\n\n/**\n * @param {WebGLObject} texture\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isTexture = function(texture) {};\n\n/**\n * @param {number} width\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.lineWidth = function(width) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.linkProgram = function(program) {};\n\n/**\n * @param {number} pname\n * @param {number|boolean} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.pixelStorei = function(pname, param) {};\n\n/**\n * @param {number} factor\n * @param {number} units\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.polygonOffset = function(factor, units) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {ArrayBufferView} pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, pixels) {};\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.renderbufferStorage = function(\n target, internalformat, width, height) {};\n\n/**\n * @param {number} coverage\n * @param {boolean} invert\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.sampleCoverage = function(coverage, invert) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.scissor = function(x, y, width, height) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {string} source\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.shaderSource = function(shader, source) {};\n\n/**\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFunc = function(func, ref, mask) {};\n\n/**\n * @param {number} face\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFuncSeparate = function(\n face, func, ref, mask) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMask = function(mask) {};\n\n/**\n * @param {number} face\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMaskSeparate = function(face, mask) {};\n\n/**\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOp = function(fail, zfail, zpass) {};\n\n/**\n * @param {number} face\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOpSeparate = function(\n face, fail, zfail, zpass) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} img or border\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texImage2D = function(\n target, level, internalformat, format, type, img, opt_format, opt_type,\n opt_pixels) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameterf = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameteri = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} data or format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, format, type, data, opt_type,\n opt_pixels) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1f = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1i = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2f = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2i = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3f = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3i = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @param {number} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4f = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @param {number|boolean} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4i = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.useProgram = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.validateProgram = function(program) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1f = function(indx, x) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2f = function(\n indx, x, y) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2fv = function(\n indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3f = function(\n indx, x, y, z) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4f = function(\n indx, x, y, z, w) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} size\n * @param {number} type\n * @param {boolean} normalized\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttribPointer = function(\n indx, size, type, normalized, stride, offset) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.viewport = function(x, y, width, height) {};\n\n\n/**\n * @constructor\n */\nfunction WebGLContextAttributes() {}\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.alpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.depth;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.stencil;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.antialias;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.premultipliedAlpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preserveDrawingBuffer;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preferLowPowerToHighPerformance;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;\n\n/**\n * @param {string} eventType\n * @constructor\n * @extends {Event}\n */\nfunction WebGLContextEvent(eventType) {}\n\n/**\n * @type {string}\n */\nWebGLContextEvent.prototype.statusMessage;\n\n\n/**\n * @constructor\n */\nfunction WebGLShaderPrecisionFormat() {}\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMin;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMax;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.precision;\n\n\n/**\n * @constructor\n */\nfunction WebGLObject() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLBuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLFramebuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLProgram() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLRenderbuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLShader() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTexture() {}\n\n\n/**\n * @constructor\n */\nfunction WebGLActiveInfo() {}\n\n/** @type {number} */\nWebGLActiveInfo.prototype.size;\n\n/** @type {number} */\nWebGLActiveInfo.prototype.type;\n\n/** @type {string} */\nWebGLActiveInfo.prototype.name;\n\n\n/**\n * @constructor\n */\nfunction WebGLUniformLocation() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n * @constructor\n */\nfunction OES_texture_float() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/\n * @constructor\n */\nfunction OES_texture_half_float() {}\n\n/** @type {number} */\nOES_texture_half_float.prototype.HALF_FLOAT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/\n * @constructor\n */\nfunction WEBGL_lose_context() {}\n\nWEBGL_lose_context.prototype.loseContext = function() {};\n\nWEBGL_lose_context.prototype.restoreContext = function() {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/\n * @constructor\n */\nfunction OES_standard_derivatives() {}\n\n/** @type {number} */\nOES_standard_derivatives.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObjectOES() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n */\nfunction OES_vertex_array_object() {}\n\n/** @type {number} */\nOES_vertex_array_object.prototype.VERTEX_ARRAY_BINDING_OES;\n\n/**\n * @return {WebGLVertexArrayObjectOES}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.createVertexArrayOES = function() {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.deleteVertexArrayOES =\n function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {boolean}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.isVertexArrayOES = function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.bindVertexArrayOES = function(arrayObject) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n * @constructor\n */\nfunction WEBGL_debug_renderer_info() {}\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_VENDOR_WEBGL;\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_RENDERER_WEBGL;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/\n * @constructor\n */\nfunction WEBGL_debug_shaders() {}\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWEBGL_debug_shaders.prototype.getTranslatedShaderSource = function(shader) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n * @constructor\n */\nfunction WEBGL_compressed_texture_s3tc() {}\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_depth_texture/\n * @constructor\n */\nfunction OES_depth_texture() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/\n * @constructor\n */\nfunction OES_element_index_uint() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/\n * @constructor\n */\nfunction EXT_texture_filter_anisotropic() {}\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.TEXTURE_MAX_ANISOTROPY_EXT;\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.MAX_TEXTURE_MAX_ANISOTROPY_EXT;\n\n\n/**\n * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/\n * @constructor\n */\nfunction WEBGL_draw_buffers() {}\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_COLOR_ATTACHMENTS_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_DRAW_BUFFERS_WEBGL;\n\n/**\n * @param {Array} buffers Draw buffers.\n * @return {undefined}\n */\nWEBGL_draw_buffers.prototype.drawBuffersWEBGL = function(buffers) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\n * @constructor\n */\nfunction ANGLE_instanced_arrays() {}\n\n\n/** @const {number} */\nANGLE_instanced_arrays.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE;\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} first First vertex.\n * @param {number} count Number of vertices per instance.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawArraysInstancedANGLE = function(\n mode, first, count, primcount) {};\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} count Number of vertex indices per instance.\n * @param {number} type Type of a vertex index.\n * @param {number} offset Offset to the first vertex index.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawElementsInstancedANGLE = function(\n mode, count, type, offset, primcount) {};\n\n\n/**\n * @param {number} index Attribute index.\n * @param {number} divisor Instance divisor.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.vertexAttribDivisorANGLE = function(\n index, divisor) {};\n\n', + "externs/webgl2.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 2.0 spec.\n *\n * This relies on webgl.js and html5.js being included for WebGL1, Canvas and\n * Typed Array support.\n *\n * @externs\n */\n\n\n/**\n * @constructor\n * @extends {WebGLRenderingContext}\n */\nfunction WebGL2RenderingContext() {}\n\n\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS =\n 0x8C8A;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n/* Buffer objects */\n\n/**\n * @param {number} target\n * @param {?ArrayBufferView|?ArrayBuffer|number} data\n * @param {number} usage\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferData = function(\n target, data, usage, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {?ArrayBufferView|?ArrayBuffer} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferSubData = function(\n target, offset, data, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} readTarget\n * @param {number} writeTarget\n * @param {number} readOffset\n * @param {number} writeOffset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyBufferSubData = function(\n readTarget, writeTarget, readOffset, writeOffset, size) {};\n\n/**\n * @param {number} target\n * @param {number} srcByteOffset\n * @param {?ArrayBufferView|?ArrayBuffer} dstBuffer\n * @param {number=} opt_dstOffset\n * @param {number=} opt_length\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.getBufferSubData = function(\n target, srcByteOffset, dstBuffer, opt_dstOffset, opt_length) {};\n\n/* Framebuffer objects */\n\n/**\n * @param {number} srcX0\n * @param {number} srcY0\n * @param {number} srcX1\n * @param {number} srcY1\n * @param {number} dstX0\n * @param {number} dstY0\n * @param {number} dstX1\n * @param {number} dstY1\n * @param {number} mask\n * @param {number} filter\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.blitFramebuffer = function(\n srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {?WebGLTexture} texture\n * @param {number} level\n * @param {number} layer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.framebufferTextureLayer = function(\n target, attachment, texture, level, layer) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateFramebuffer = function(\n target, attachments) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateSubFramebuffer = function(\n target, attachments, x, y, width, height) {};\n\n/**\n * @param {number} src\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.readBuffer = function(src) {};\n\n/* Renderbuffer objects */\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getInternalformatParameter = function(\n target, internalformat, pname) {};\n\n/**\n * @param {number} target\n * @param {number} samples\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.renderbufferStorageMultisample = function(\n target, samples, internalformat, width, height) {};\n\n/* Texture objects */\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage2D = function(\n target, levels, internalformat, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage3D = function(\n target, levels, internalformat, width, height, depth) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} imgOrBorder\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texImage2D = function(\n target, level, internalformat, formatOrWidth, typeOrHeight, imgOrBorder,\n opt_format, opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} dataOrFormat\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, formatOrWidth, typeOrHeight, dataOrFormat,\n opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texImage3D = function(\n target, level, internalformat, width, height, depth, border, format, type,\n srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n type, srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, x, y, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexImage3D = function(\n target, level, internalformat, width, height, depth, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n srcDataOrSize, opt_srcOffset, opt_srcLengthOverride) {};\n\n/* Programs and shaders */\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getFragDataLocation = function(\n program, name) {};\n\n/* Uniforms */\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1ui = function(location, v0) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2ui = function(location, v0, v1) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3ui = function(location, v0, v1, v2) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @param {number} v3\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4ui = function(\n location, v0, v1, v2, v3) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/* Vertex attribs */\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4i = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Int32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4iv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4ui = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Uint32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4uiv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} size\n * @param {number} type\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribIPointer = function(\n index, size, type, stride, offset) {};\n\n/* Writing to the drawing buffer */\n\n/**\n * @param {number} index\n * @param {number} divisor\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribDivisor = function(\n index, divisor) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawArraysInstanced = function(\n mode, first, count, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawElementsInstanced = function(\n mode, count, type, offset, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} start\n * @param {number} end\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawRangeElements = function(\n mode, start, end, count, type, offset) {};\n\n/* Reading back pixels */\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|number} dstDataOrOffset\n * @param {number=} opt_dstOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, dstDataOrOffset, opt_dstOffset) {};\n\n/* Multiple Render Targets */\n\n/**\n * @param {!Array} buffers\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawBuffers = function(buffers) {};\n\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Float32Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Int32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Uint32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferuiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {number} depth\n * @param {number} stencil\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfi = function(\n buffer, drawbuffer, depth, stencil) {};\n\n/* Query Objects */\n\n/**\n * @return {?WebGLQuery}\n */\nWebGL2RenderingContext.prototype.createQuery = function() {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteQuery = function(query) {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isQuery = function(query) {};\n\n/**\n * @param {number} target\n * @param {!WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginQuery = function(target, query) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endQuery = function(target) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {?WebGLQuery}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getQuery = function(target, pname) {};\n\n/**\n * @param {!WebGLQuery} query\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getQueryParameter = function(query, pname) {};\n\n/* Sampler Objects */\n\n/**\n * @return {?WebGLSampler}\n */\nWebGL2RenderingContext.prototype.createSampler = function() {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSampler = function(sampler) {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSampler = function(sampler) {};\n\n/**\n * @param {number} unit\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindSampler = function(unit, sampler) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameteri = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameterf = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getSamplerParameter = function(\n sampler, pname) {};\n\n/* Sync objects */\n\n/**\n * @param {number} condition\n * @param {number} flags\n * @return {?WebGLSync}\n */\nWebGL2RenderingContext.prototype.fenceSync = function(condition, flags) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSync = function(sync) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSync = function(sync) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clientWaitSync = function(\n sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.waitSync = function(sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getSyncParameter = function(sync, pname) {};\n\n/* Transform Feedback */\n\n/**\n * @return {?WebGLTransformFeedback}\n */\nWebGL2RenderingContext.prototype.createTransformFeedback = function() {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteTransformFeedback = function(tf) {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isTransformFeedback = function(tf) {};\n\n/**\n * @param {number} target\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindTransformFeedback = function(\n target, tf) {};\n\n/**\n * @param {number} primitiveMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginTransformFeedback = function(\n primitiveMode) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endTransformFeedback = function() {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} varyings\n * @param {number} bufferMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.transformFeedbackVaryings = function(\n program, varyings, bufferMode) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} index\n * @return {?WebGLActiveInfo}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getTransformFeedbackVarying = function(\n program, index) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.pauseTransformFeedback = function() {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.resumeTransformFeedback = function() {};\n\n/* Uniform Buffer Objects and Transform Feedback Buffers */\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferBase = function(\n target, index, buffer) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @param {number} offset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferRange = function(\n target, index, buffer, offset, size) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getIndexedParameter = function(\n target, index) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformNames\n * @return {!Array}\n */\nWebGL2RenderingContext.prototype.getUniformIndices = function(\n program, uniformNames) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformIndices\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniforms = function(\n program, uniformIndices, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} uniformBlockName\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getUniformBlockIndex = function(\n program, uniformBlockName) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockParameter = function(\n program, uniformBlockIndex, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @return {?string}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockName = function(\n program, uniformBlockIndex) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} uniformBlockBinding\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformBlockBinding = function(\n program, uniformBlockIndex, uniformBlockBinding) {};\n\n/* Vertex Array Objects */\n\n/**\n * @return {?WebGLVertexArrayObject}\n */\nWebGL2RenderingContext.prototype.createVertexArray = function() {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} array\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindVertexArray = function(array) {};\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLQuery() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSampler() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSync() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTransformFeedback() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObject() {}\n', + "externs/fetchapi.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions of the fetch api.\n *\n * This api is still in development and not yet stable. Use at your\n * own risk.\n *\n * Based on Living Standard \u2014 Last Updated 17 August 2016\n *\n * @see https://fetch.spec.whatwg.org/\n * @externs\n */\n\n\n/**\n * @typedef {string}\n * @see https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy\n * Possible values: '', 'no-referrer', 'no-referrer-when-downgrade',\n * 'same-origin', 'origin', 'strict-origin', 'origin-when-cross-origin',\n * 'strict-origin-when-cross-origin', 'unsafe-url'\n */\nvar ReferrerPolicy;\n\n\n/**\n * @typedef {!Headers|!Array>|!Object}\n * @see https://fetch.spec.whatwg.org/#headersinit\n */\nvar HeadersInit;\n\n\n/**\n * @param {!HeadersInit=} opt_headersInit\n * @constructor\n * @implements {Iterable>}\n * @see https://fetch.spec.whatwg.org/#headers\n */\nfunction Headers(opt_headersInit) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nHeaders.prototype.delete = function(name) {};\n\n/** @return {!IteratorIterable>} */\nHeaders.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nHeaders.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nHeaders.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nHeaders.prototype.has = function(name) {};\n\n/** @return {!IteratorIterable} */\nHeaders.prototype.keys = function() {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.set = function(name, value) {};\n\n/** @return {!Iterator} */\nHeaders.prototype.values = function() {};\n\n/** @return {!Iterator>} */\nHeaders.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @typedef {\n * !Blob|!BufferSource|!FormData|!URLSearchParams|!ReadableStream|string}\n * @see https://fetch.spec.whatwg.org/#bodyinit\n */\nvar BodyInit;\n\n\n/**\n * @typedef {!BodyInit|!ReadableStream}\n * @see https://fetch.spec.whatwg.org/#responsebodyinit\n */\nvar ResponseBodyInit;\n\n\n/**\n * @interface\n * @see https://fetch.spec.whatwg.org/#body\n */\nfunction Body() {};\n\n/** @type {boolean} */\nBody.prototype.bodyUsed;\n\n/** @return {!Promise} */\nBody.prototype.arrayBuffer = function() {};\n\n/** @return {!Promise} */\nBody.prototype.blob = function() {};\n\n/** @return {!Promise} */\nBody.prototype.formData = function() {};\n\n/** @return {!Promise<*>} */\nBody.prototype.json = function() {};\n\n/** @return {!Promise} */\nBody.prototype.text = function() {};\n\n\n/**\n * @typedef {!Request|string}\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nvar RequestInfo;\n\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#request\n */\nfunction Request(input, opt_init) {}\n\n/** @override */\nRequest.prototype.bodyUsed;\n\n/** @override */\nRequest.prototype.arrayBuffer = function() {};\n\n/** @override */\nRequest.prototype.blob = function() {};\n\n/** @override */\nRequest.prototype.formData = function() {};\n\n/** @override */\nRequest.prototype.json = function() {};\n\n/** @override */\nRequest.prototype.text = function() {};\n\n/** @type {string} */\nRequest.prototype.method;\n\n/** @type {string} */\nRequest.prototype.url;\n\n/** @type {!Headers} */\nRequest.prototype.headers;\n\n/** @type {!FetchRequestType} */\nRequest.prototype.type;\n\n/** @type {!RequestDestination} */\nRequest.prototype.destination;\n\n/** @type {string} */\nRequest.prototype.referrer;\n\n/** @type {!RequestMode} */\nRequest.prototype.mode;\n\n/** @type {!RequestCredentials} */\nRequest.prototype.credentials;\n\n/** @type {!RequestCache} */\nRequest.prototype.cache;\n\n/** @type {!RequestRedirect} */\nRequest.prototype.redirect;\n\n/** @type {string} */\nRequest.prototype.integrity;\n\n/** @type {boolean} */\nRequest.prototype.isHistoryNavigation;\n\n/** @type {(undefined|boolean)} */\nRequest.prototype.keepalive;\n\n/** @return {!Request} */\nRequest.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nfunction RequestInit() {};\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.method;\n\n/** @type {(undefined|!HeadersInit)} */\nRequestInit.prototype.headers;\n\n/** @type {(undefined|?BodyInit)} */\nRequestInit.prototype.body;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.referrer;\n\n/** @type {(undefined|!ReferrerPolicy)} */\nRequestInit.prototype.referrerPolicy;\n\n/** @type {(undefined|!RequestMode)} */\nRequestInit.prototype.mode;\n\n/** @type {(undefined|!RequestCredentials)} */\nRequestInit.prototype.credentials;\n\n/** @type {(undefined|!RequestCache)} */\nRequestInit.prototype.cache;\n\n/** @type {(undefined|!RequestRedirect)} */\nRequestInit.prototype.redirect;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.integrity;\n\n/** @type {(undefined|!AbortSignal)} */\nRequestInit.prototype.signal;\n\n/** @type {(undefined|boolean)} */\nRequestInit.prototype.keepalive;\n\n/** @type {(undefined|null)} */\nRequestInit.prototype.window;\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requesttype\n * Possible values: '', 'audio', 'font', 'image', 'script', 'style',\n * 'track', 'video'\n */\nvar FetchRequestType;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestdestination\n * Possible values: '', 'document', 'embed', 'font', 'image', 'manifest',\n * 'media', 'object', 'report', 'script', 'serviceworker', 'sharedworker',\n * 'style', 'worker', 'xslt'\n */\nvar RequestDestination;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestmode\n * Possible values: 'navigate', 'same-origin', 'no-cors', 'cors'\n */\nvar RequestMode ;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcredentials\n * Possible values: 'omit', 'same-origin', 'include'\n */\nvar RequestCredentials;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcache\n * Possible values: 'default', 'no-store', 'reload', 'no-cache', 'force-cache',\n * 'only-if-cached'\n */\nvar RequestCache;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestredirect\n * Possible values: 'follow', 'error', 'manual'\n */\nvar RequestRedirect;\n\n\n/**\n * @param {?ResponseBodyInit=} opt_body\n * @param {!ResponseInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#response\n */\nfunction Response(opt_body, opt_init) {}\n\n/** @return {!Response} */\nResponse.error = function() {};\n\n/**\n * @param {string} url\n * @param {number=} opt_status\n * @return {!Response}\n */\nResponse.redirect = function(url, opt_status) {};\n\n/** @override */\nResponse.prototype.bodyUsed;\n\n/** @override */\nResponse.prototype.arrayBuffer = function() {};\n\n/** @override */\nResponse.prototype.blob = function() {};\n\n/** @override */\nResponse.prototype.formData = function() {};\n\n/** @override */\nResponse.prototype.json = function() {};\n\n/** @override */\nResponse.prototype.text = function() {};\n\n/** @type {!ResponseType} */\nResponse.prototype.type;\n\n/** @type {string} */\nResponse.prototype.url;\n\n/** @type {boolean} */\nResponse.prototype.redirected;\n\n/** @type {number} */\nResponse.prototype.status;\n\n/** @type {boolean} */\nResponse.prototype.ok;\n\n/** @type {string} */\nResponse.prototype.statusText;\n\n/** @type {!Headers} */\nResponse.prototype.headers;\n\n/** @type {?ReadableStream} */\nResponse.prototype.body;\n\n/** @type {!Promise} */\nResponse.prototype.trailer;\n\n/** @return {!Response} */\nResponse.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#responseinit\n */\nfunction ResponseInit() {};\n\n/** @type {(undefined|number)} */\nResponseInit.prototype.status;\n\n/** @type {(undefined|string)} */\nResponseInit.prototype.statusText;\n\n/** @type {(undefined|!HeadersInit)} */\nResponseInit.prototype.headers;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#responsetype\n * Possible values: 'basic', 'cors', 'default', 'error', 'opaque',\n * 'opaqueredirect'\n */\nvar ResponseType;\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nfunction fetch(input, opt_init) {}\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWindow.prototype.fetch = function(input, opt_init) {};\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWorkerGlobalScope.prototype.fetch = function(input, opt_init) {};\n\n/**\n * if WorkerOptions.type = 'module', it specifies how `scriptURL` is fetched.\n * WorkerOptions is defined in html5.js.\n * @type {!RequestCredentials|undefined}\n */\nWorkerOptions.prototype.credentials;\n", + "externs/streamsapi.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Streams API definitions\n *\n * Based on Living Standard \u2014 Last Updated 5 August 2016\n * https://streams.spec.whatwg.org/commit-snapshots/34ecaadbcce8df9943d7a2cdb7fca4dc25914df4/\n *\n * @see https://streams.spec.whatwg.org/\n * @externs\n */\n\n\n/** @typedef {{ value:*, done:boolean }} */\nvar IteratorResult;\n\n\n/**\n * @typedef {!CountQueuingStrategy|!ByteLengthQueuingStrategy|{\n * size: (undefined|function(*): number),\n * highWaterMark: (number|undefined),\n * }}\n */\nvar QueuingStrategy;\n\n/**\n * The TransformStreamDefaultController class has methods that allow\n * manipulation of the associated ReadableStream and WritableStream.\n *\n * This class cannot be directly constructed and is instead passed by the\n * TransformStream to the methods of its transformer.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ts-default-controller-class\n */\nfunction TransformStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-desired-size\n */\nTransformStreamDefaultController.prototype.desiredSize;\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-enqueue\n */\nTransformStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} reason\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-error\n */\nTransformStreamDefaultController.prototype.error = function(reason) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-terminate\n */\nTransformStreamDefaultController.prototype.terminate = function() {};\n\n\n/**\n * @record\n * @see https://streams.spec.whatwg.org/#transformer-api\n */\nfunction TransformStreamTransformer() {};\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.start;\n\n/**\n * @type {(undefined|\n * function(*,\n * !TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.transform;\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.flush;\n\n\n/**\n * A transform stream (https://streams.spec.whatwg.org/#transform-stream).\n * @record\n */\nfunction ITransformStream() {};\n\n/** @type {!WritableStream} */\nITransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nITransformStream.prototype.readable;\n\n/**\n * @param {!TransformStreamTransformer=} transformer\n * @param {!QueuingStrategy=} writableStrategy\n * @param {!QueuingStrategy=} readableStrategy\n * @constructor\n * @implements ITransformStream\n * @see https://streams.spec.whatwg.org/#ts-class\n */\nfunction TransformStream(transformer, writableStrategy, readableStrategy) {};\n\n/** @type {!WritableStream} */\nTransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nTransformStream.prototype.readable;\n\n/**\n * @record\n */\nfunction PipeOptions() {};\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventClose;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventAbort;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventCancel;\n\n\n/**\n * @record\n */\nfunction ReadableStreamSource() {};\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.start;\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.pull;\n\n/** @type {(undefined|function(*):(!Promise<*>|undefined))} */\nReadableStreamSource.prototype.cancel;\n\n/** @type {(undefined|string)} */\nReadableStreamSource.prototype.type;\n\n/** @type {(undefined|number)} */\nReadableStreamSource.prototype.autoAllocateChunkSize;\n\n/**\n * @record\n */\nfunction ReadableStreamIteratorOptions() {};\n\n/** @type {undefined|boolean} */\nReadableStreamIteratorOptions.prototype.preventCancel;\n\n/**\n * @param {!ReadableStreamSource=} opt_underlyingSource\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#rs-class\n */\nfunction ReadableStream(opt_underlyingSource, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#rs-locked\n */\nReadableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-cancel\n */\nReadableStream.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-get-iterator\n */\nReadableStream.prototype.getIterator = function(options) {};\n\n/**\n * @param {{ mode:(undefined|string) }=} opt_options\n * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)}\n * @see https://streams.spec.whatwg.org/#rs-get-reader\n */\nReadableStream.prototype.getReader = function(opt_options) {};\n\n/**\n * @param {!ITransformStream} transform\n * @param {!PipeOptions=} opt_options\n * @return {!ReadableStream}\n * @see https://streams.spec.whatwg.org/#rs-pipe-through\n */\nReadableStream.prototype.pipeThrough = function(transform, opt_options) {};\n\n/**\n * @param {!WritableStream} dest\n * @param {!PipeOptions=} opt_options\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-pipe-to\n */\nReadableStream.prototype.pipeTo = function(dest, opt_options) {};\n\n/**\n * @return {!Array}\n * @see https://streams.spec.whatwg.org/#rs-tee\n */\nReadableStream.prototype.tee = function() {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-asynciterator\n */\nReadableStream.prototype[Symbol.asyncIterator] = function(options) {};\n\n/**\n * The ReadableStreamDefaultReader constructor is generally not meant to be used directly;\n * instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#default-reader-class\n */\nfunction ReadableStreamDefaultReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-closed\n */\nReadableStreamDefaultReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#default-reader-cancel\n */\nReadableStreamDefaultReader.prototype.cancel = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-read\n */\nReadableStreamDefaultReader.prototype.read = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-reader-release-lock\n */\nReadableStreamDefaultReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamBYOBReader constructor is generally not meant to be used\n * directly; instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#byob-reader-class\n */\nfunction ReadableStreamBYOBReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-closed\n */\nReadableStreamBYOBReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#byob-reader-cancel\n */\nReadableStreamBYOBReader.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-read\n */\nReadableStreamBYOBReader.prototype.read = function(view) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#byob-reader-release-lock\n */\nReadableStreamBYOBReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamDefaultController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-default-controller-class\n */\nfunction ReadableStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-desired-size\n */\nReadableStreamDefaultController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-close\n */\nReadableStreamDefaultController.prototype.close = function() {};\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-enqueue\n */\nReadableStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-error\n */\nReadableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * The ReadableByteStreamController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rbs-controller-class\n */\nfunction ReadableByteStreamController() {};\n\n/**\n * @type {!ReadableStreamBYOBRequest}\n * @see https://streams.spec.whatwg.org/#rbs-controller-byob-request\n */\nReadableByteStreamController.prototype.byobRequest;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rbs-controller-desired-size\n */\nReadableByteStreamController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-close\n */\nReadableByteStreamController.prototype.close = function() {};\n\n/**\n * @param {!ArrayBufferView} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-enqueue\n */\nReadableByteStreamController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-error\n */\nReadableByteStreamController.prototype.error = function(err) {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-byob-request-class\n */\nfunction ReadableStreamBYOBRequest() {};\n\n/**\n * @type {!ArrayBufferView}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-view\n */\nReadableStreamBYOBRequest.prototype.view;\n\n/**\n * @param {number} bytesWritten\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond\n */\nReadableStreamBYOBRequest.prototype.respond = function(bytesWritten) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond-with-new-view\n */\nReadableStreamBYOBRequest.prototype.respondWithNewView = function(view) {};\n\n\n/**\n * @record\n */\nfunction WritableStreamSink() {};\n\n/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.start;\n\n/** @type {(undefined|function(*, !WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.write;\n\n/** @type {(undefined|function():(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.close;\n\n/** @type {(undefined|function(*):(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.abort;\n\n\n/**\n * @param {!WritableStreamSink=} opt_underlyingSink\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#ws-class\n */\nfunction WritableStream(opt_underlyingSink, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#ws-locked\n */\nWritableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-abort\n */\nWritableStream.prototype.abort = function(reason) {};\n\n/**\n * @return {!WritableStreamDefaultWriter}\n * @see https://streams.spec.whatwg.org/#ws-get-writer\n */\nWritableStream.prototype.getWriter = function() {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#default-writer-class\n */\nfunction WritableStreamDefaultWriter() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-closed\n */\nWritableStreamDefaultWriter.prototype.closed;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#default-writer-desiredSize\n */\nWritableStreamDefaultWriter.prototype.desiredSize;\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-ready\n */\nWritableStreamDefaultWriter.prototype.ready;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-abort\n */\nWritableStreamDefaultWriter.prototype.abort = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-close\n */\nWritableStreamDefaultWriter.prototype.close = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-writer-release-lock\n */\nWritableStreamDefaultWriter.prototype.releaseLock = function() {};\n\n/**\n * @param {*} chunk\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-write\n */\nWritableStreamDefaultWriter.prototype.write = function(chunk) {};\n\n\n/**\n * The WritableStreamDefaultController constructor cannot be used directly;\n * it only works on a WritableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ws-default-controller-class\n */\nfunction WritableStreamDefaultController() {};\n\n/**\n * @param {*} err\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-default-controller-error\n */\nWritableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#blqs-class\n */\nfunction ByteLengthQueuingStrategy(config) {}\n\n/**\n * If we don\'t want to be strict we can define chunk as {*}\n * and return as {number|undefined}\n *\n * @param {{ byteLength:number }} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#blqs-size\n */\nByteLengthQueuingStrategy.prototype.size = function(chunk) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#cqs-class\n */\nfunction CountQueuingStrategy(config) {}\n\n/**\n * @param {*} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#cqs-size\n */\nCountQueuingStrategy.prototype.size = function(chunk) {};\n', + "externs/whatwg_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities.\n * https://console.spec.whatwg.org/\n * @externs\n */\n\n/**\n * @constructor\n * @see https://console.spec.whatwg.org/\n */\nfunction Console() {};\n\n/**\n * If condition is false, perform Logger("error", data).\n * @param {*} condition\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.assert = function(condition, var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.clear = function() {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.debug = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.error = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.info = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.log = function(var_data) {};\n\n/**\n * @param {!Object} tabularData\n * @param {*=} properties\n * @return {undefined}\n */\nConsole.prototype.table = function(tabularData, properties) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.trace = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.warn = function(var_data) {};\n\n/**\n * @param {*} item\n * @return {undefined}\n */\nConsole.prototype.dir = function(item) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.dirxml = function(var_data) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.count = function(label) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.countReset = function(label) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.group = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.groupCollapsed = function(var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.groupEnd = function() {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.time = function(label) {};\n\n/**\n * @param {string} label\n * @param {...*} data\n * @return {undefined}\n */\nConsole.prototype.timeLog = function(label, data) {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.timeEnd = function(label) {};\n\n/** @type {!Console} */\nWindow.prototype.console;\n\n/**\n * @type {!Console}\n * @suppress {duplicate}\n */\nvar console;\n', +-"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.chromium.org/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', ++"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.ch40m1um.qjz9zk/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', + "js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview The base namespace for code injected by the compiler\n * at compile-time.\n */\n\n/** @const */\nvar $jscomp = $jscomp || {};\n\n/** @const Locals for goog.scope */\n$jscomp.scope = {};\n', + "js/es6/array.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Array polyfills.\n * @suppress {uselessCode}\n */\n'require es6/array/copywithin';\n'require es6/array/entries';\n'require es6/array/fill';\n'require es6/array/find';\n'require es6/array/findindex';\n'require es6/array/flat';\n'require es6/array/flatmap';\n'require es6/array/from';\n'require es6/array/includes';\n'require es6/array/keys';\n'require es6/array/of';\n'require es6/array/values';\n", + "js/es6/array/copywithin.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.copyWithin', function(orig) {\n // requires strict mode to throw for invalid `this` or params\n 'use strict';\n\n if (orig) return orig;\n\n /**\n * Copies elements from one part of the array to another.\n *\n * @this {!IArrayLike}\n * @param {number} target Start index to copy elements to.\n * @param {number} start Start index to copy elements from.\n * @param {number=} opt_end Index from which to end copying.\n * @return {!IArrayLike} The array, with the copy performed in-place.\n * @template VALUE\n */\n var polyfill = function(target, start, opt_end) {\n var len = this.length;\n target = toInteger(target);\n start = toInteger(start);\n var end = opt_end === undefined ? len : toInteger(opt_end);\n var to = target < 0 ? Math.max(len + target, 0) : Math.min(target, len);\n var from = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);\n var final = end < 0 ? Math.max(len + end, 0) : Math.min(end, len);\n if (to < from) {\n while (from < final) {\n if (from in this) {\n this[to++] = this[from++];\n } else {\n delete this[to++];\n from++;\n }\n }\n } else {\n final = Math.min(final, len + from - to);\n to += final - from;\n while (final > from) {\n if (--final in this) {\n this[--to] = this[final];\n } else {\n delete this[--to];\n }\n }\n }\n return this;\n };\n\n /**\n * @param {number} arg\n * @return {number}\n */\n function toInteger(arg) {\n var n = Number(arg);\n if (n === Infinity || n === -Infinity) {\n return n;\n }\n return n | 0;\n }\n\n return polyfill;\n}, 'es6', 'es3');\n", +@@ -870,13 +870,13 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/array/fill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.fill', function(orig) {\n if (orig) return orig;\n\n /**\n * Fills elements of an array with a constant value.\n *\n * @this {!IArrayLike}\n * @param {VALUE} value Value to fill.\n * @param {number=} opt_start Start index, or zero if omitted.\n * @param {number=} opt_end End index, or length if omitted.\n * @return {!IArrayLike} The array, with the fill performed in-place.\n * @template VALUE\n * @suppress {reportUnknownTypes, strictPrimitiveOperators}\n */\n var polyfill = function(value, opt_start, opt_end) {\n var length = this.length || 0;\n if (opt_start < 0) {\n opt_start = Math.max(0, length + /** @type {number} */ (opt_start));\n }\n if (opt_end == null || opt_end > length) opt_end = length;\n opt_end = Number(opt_end);\n if (opt_end < 0) opt_end = Math.max(0, length + opt_end);\n for (var i = Number(opt_start || 0); i < opt_end; i++) {\n this[i] = value;\n }\n return this;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/find.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.find', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds and returns an element that satisfies the given predicate.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {VALUE|undefined} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).v;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/findindex.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.findIndex', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds an element that satisfies the given predicate, returning its index.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {number} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).i;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", +-"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", ++"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", ++"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", + "js/es6/array/from.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.from', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new Array from an array-like or iterable object.\n *\n *

    Polyfills the static function Array.from(). Does not support\n * constructor inheritance (i.e. (subclass of Array).from), and\n * relies on the compiler to check the validity of inputs rather\n * than producing spec-compliant TypeErrors.\n *\n * @param {!IArrayLike|!Iterable} arrayLike\n * An array-like or iterable.\n * @param {(function(this: THIS, INPUT, number): OUTPUT)=} opt_mapFn\n * Function to call on each argument.\n * @param {THIS=} opt_thisArg\n * Object to use as 'this' when calling mapFn.\n * @return {!Array}\n * @template INPUT, OUTPUT, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(arrayLike, opt_mapFn, opt_thisArg) {\n opt_mapFn = opt_mapFn != null ? opt_mapFn : function(x) { return x; };\n var result = [];\n // NOTE: this is cast to ? because [] on @struct is an error\n var iteratorFunction = typeof Symbol != 'undefined' && Symbol.iterator &&\n (/** @type {?} */ (arrayLike)[Symbol.iterator]);\n if (typeof iteratorFunction == 'function') {\n arrayLike = iteratorFunction.call(arrayLike);\n var next;\n var k = 0;\n while (!(next = arrayLike.next()).done) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), next.value, k++));\n }\n } else {\n var len = arrayLike.length; // need to support non-iterables\n for (var i = 0; i < len; i++) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), arrayLike[i], i));\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", ++"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", + "js/es6/array/keys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.keys', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of keys of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(i) { return i; });\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/of.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array/from';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.of', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates an array from a fixed set of arguments.\n *\n *

    Polyfills the static function Array.of(). Does not support\n * constructor inheritance (i.e. (subclass of Array).of).\n *\n * @param {...T} var_args Elements to include in the array.\n * @return {!Array}\n * @template T\n */\n var polyfill = function(var_args) {\n return Array.from(arguments);\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.chromium.org/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", ++"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", + "js/es6/async_generator_wrapper.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled Async Generators.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/symbol';\n'require es6/util/makeasynciterator';\n\n\n/** @enum {number} */\n$jscomp.AsyncGeneratorWrapper$ActionEnum = {\n /** Yield the value from the wrapper generator */\n YIELD_VALUE: 0,\n /** Yield each value from a delegate generator */\n YIELD_STAR: 1,\n /** Resolve the value as a Promise and continue execution */\n AWAIT_VALUE: 2,\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ActionEnum} action\n * @param {VALUE} value\n * @constructor\n * @template VALUE\n * @struct\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ActionRecord = function(action, value) {\n /**\n * @public\n * @const\n * @type {!$jscomp.AsyncGeneratorWrapper$ActionEnum}\n */\n this.action = action;\n\n /**\n * @public\n * @const\n * @type {VALUE}\n */\n this.value = /** @type {VALUE} */ (value);\n};\n\n/** @enum {string} */\n$jscomp.AsyncGeneratorWrapper$GeneratorMethod = {\n NEXT: 'next', THROW: 'throw', RETURN: 'return',\n};\n\n/**\n * Records the details of a call to `next()`, `throw()`, or `return()`.\n *\n * One of these objects will be created for each call.\n *\n * @param {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * Method to call on generator\n * @param {?} param\n * Parameter for method called on generator\n *\n * @param {function(!IIterableResult)} resolve\n * Function to resolve the Promise associated with this frame.\n * @param {function(?)} reject\n * Function to reject the Promise associated with this frame.\n *\n * @constructor\n * @private\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionFrame_ = function(\n method, param, resolve, reject) {\n /** @type {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} */\n this.method = method;\n /** @type {?} */\n this.param = param;\n /** @type {function(!IIterableResult)} */\n this.resolve = resolve;\n /** @type {function(?)} */\n this.reject = reject;\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} frame\n * The frame at this position in the queue\n * @param {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} next\n * The node containing the frame to be executed after this one completes\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionNode_ = function(frame, next) {\n /** @type {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} */\n this.frame = frame;\n /** @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} */\n this.next = next;\n};\n\n/**\n * A minimalistic queue backed by a linked-list.\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_ = function() {\n /**\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.head_ = null;\n\n /**\n *\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.tail_ = null;\n};\n\n/**\n * @return {boolean}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty = function() {\n return this.head_ === null;\n};\n\n/**\n * Returns the current head frame if it exists, otherwise throws Error.\n *\n * @return {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_}\n * @throws {Error} if the queue is empty\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first = function() {\n if (this.head_) {\n return this.head_.frame;\n } else {\n throw new Error('no frames in executionQueue');\n }\n};\n\n/**\n * Drops the current head frame off the head of the queue. Performs same\n * operations as a theoretical \"pop\", but saves time by not storing or returning\n * the popped frame.\n *\n * If the queue is empty, no operation is performed.\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop = function() {\n if (this.head_) {\n this.head_ = this.head_.next;\n if (!this.head_) {\n this.tail_ = null;\n }\n }\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} newFrame\n * the new frame to be executed after all frames currently in the queue\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue = function(\n newFrame) {\n var node = new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(newFrame, null);\n if (this.tail_) {\n this.tail_.next = node;\n this.tail_ = node;\n } else {\n this.head_ = node;\n this.tail_ = node;\n }\n};\n\n/**\n * @constructor\n * @implements {AsyncGenerator}\n * @implements {AsyncIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper = function(\n /** @type {!Generator<$jscomp.AsyncGeneratorWrapper$ActionRecord>} */\n generator) {\n /** @private */\n this.generator_ = generator;\n\n /**\n * @private\n * @type {AsyncIterator}\n */\n this.delegate_ = null;\n\n /**\n * @type {!$jscomp.AsyncGeneratorWrapper$ExecutionQueue_}\n * @private\n */\n this.executionQueue_ = new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_();\n\n $jscomp.initSymbolAsyncIterator();\n\n /** @type {$jscomp.AsyncGeneratorWrapper} */\n this[Symbol.asyncIterator] =\n /** @return {$jscomp.AsyncGeneratorWrapper} */ function() {\n return this;\n };\n\n var self = this;\n\n /**\n * @this {undefined}\n * @param {!IIterableResult} record\n * @private\n */\n this.boundHandleDelegateResult_ = function(record) {\n self.handleDelegateResult_(record);\n };\n\n /**\n * @this {undefined}\n * @param {*} thrownError\n * @private\n */\n this.boundHandleDelegateError_ = function(thrownError) {\n self.handleDelegateError_(thrownError);\n };\n\n /**\n * @this {undefined}\n * @param {*} err\n * @private\n */\n this.boundRejectAndClose_ = function(err) {\n self.rejectAndClose_(err);\n };\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * @param {?} param\n * @return {!Promise>}\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_ = function(\n method, param) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var wasEmpty = self.executionQueue_.isEmpty();\n self.executionQueue_.enqueue(\n new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(\n method, param, resolve, reject));\n if (wasEmpty) {\n self.runFrame_();\n }\n });\n};\n\n/**\n * @override\n * @param {?=} opt_value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.next = function(opt_value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT, opt_value);\n};\n\n/**\n * @override\n * @param {VALUE} value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.return = function(value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,\n new $jscomp.AsyncGeneratorWrapper$ActionRecord(\n $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, value));\n};\n\n/**\n * @override\n * @param {*=} exception\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.throw = function(exception) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW, exception);\n};\n\n/**\n * Recursively executes all frames in the executionQueue until it is empty.\n * Frames that are added to the queue while execution is being performed will\n * be executed when they are reached.\n *\n * In order to guarantee each frame in the entire queue will be processed\n * exactly once, each branch in runDelegateFrame and runGeneratorFrame should\n * conclude with the following specification:\n *\n * If the frame is ready to be resolved/rejected:\n *\n * 1. Resolve or reject the frame.\n * 2. Drop the frame from the head of the queue.\n * 3. End with a call to runFrame.\n *\n * Otherwise, if another action must be performed:\n *\n * 1. Mutate the frame's method and param to reflect the next action.\n * 2. End with a call to runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runFrame_ = function() {\n if (!this.executionQueue_.isEmpty()) {\n try {\n if (this.delegate_) {\n this.runDelegateFrame_();\n } else {\n this.runGeneratorFrame_();\n }\n } catch (err) {\n this.rejectAndClose_(err);\n }\n }\n};\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_ = function() {\n var self = this;\n var frame = this.executionQueue_.first();\n try {\n var genRec = this.generator_[frame.method](frame.param);\n if (genRec.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord) {\n switch (genRec.value.action) {\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.resolve({value: resolvedValue, done: genRec.done});\n self.executionQueue_.drop();\n self.runFrame_();\n },\n function(e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:\n self.delegate_ = $jscomp.makeAsyncIterator(genRec.value.value);\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = undefined;\n self.runFrame_();\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = resolvedValue;\n self.runFrame_();\n },\n function(thrownErr) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownErr;\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n default:\n throw new Error('Unrecognized AsyncGeneratorWrapper$ActionEnum');\n }\n }\n else {\n frame.resolve(genRec);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n } catch (e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n};\n\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_ = function() {\n if (!this.delegate_) {\n throw new Error(\"no delegate to perform execution\");\n }\n var frame = this.executionQueue_.first();\n if (frame.method in this.delegate_) {\n try {\n this.delegate_[frame.method](frame.param)\n .then(this.boundHandleDelegateResult_, this.boundHandleDelegateError_)\n .catch(this.boundRejectAndClose_);\n } catch (err) {\n this.handleDelegateError_(err);\n }\n } else {\n this.delegate_ = null;\n this.runFrame_();\n }\n};\n\n/**\n * @param {!IIterableResult} record\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_ = function(\n record) {\n var frame = this.executionQueue_.first();\n if (record.done === true) {\n // Delegate is done. Its return value becomes the value of the `yield*`\n // expression. We must continue the async generator as if next() were called\n // with that value here.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = record.value;\n this.runFrame_();\n } else {\n frame.resolve({value: record.value, done: false});\n this.executionQueue_.drop();\n this.runFrame_();\n }\n};\n\n/**\n * @param {*} thrownError\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_ = function(\n thrownError) {\n var frame = this.executionQueue_.first();\n // The delegate threw an exception or rejected a promise, so we must continue\n // our generator as if the `yield *` threw the exception.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownError;\n this.runFrame_();\n};\n\n/**\n * Rejects the current frame and closes the generator.\n *\n * @param {*} err Error causing the rejection\n * @private\n */\n$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_ = function(err) {\n if (!this.executionQueue_.isEmpty()) {\n this.executionQueue_.first().reject(err);\n this.executionQueue_.drop();\n }\n\n if (this.delegate_ && 'return' in this.delegate_) {\n this.delegate_['return'](undefined);\n this.delegate_ = null;\n }\n this.generator_['return'](undefined);\n\n // Keep processing all frames remaining in the queue.\n // Note: Some of these frames might be throw requests, but our backing\n // generator will handle these appropriately.\n this.runFrame_();\n};\n", + "js/es6/conformance.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/global';\n\n\n/**\n * @fileoverview Check one of the most obscure features of ES6 as a proxy\n * for full conformance. If this is enabled, this test is used instead of\n * larger, more specific conformance tests.\n */\n\n/**\n * Check ES6 conformance by checking an obscure detail of Proxy that\n * wasn't implemented correctly until after all other ES6 features in\n * most browsers.\n * @return {boolean} Whether Proxy works correctly.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkEs6ConformanceViaProxy = function() {\n try {\n var proxied = {};\n var proxy = Object.create(new $jscomp.global['Proxy'](proxied, {\n 'get': function (target, key, receiver) {\n return target == proxied && key == 'q' && receiver == proxy;\n }\n }));\n return proxy['q'] === true;\n } catch (err) {\n return false;\n }\n};\n\n/**\n * If this is true, assume that a runtime which implements Proxy also\n * implements the rest of the ECMAScript 2015 spec.\n * @define {boolean}\n */\n$jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = false;\n\n/**\n * Whether the runtime implements the entire ECMAScript 2015 spec.\n * @const {boolean}\n */\n$jscomp.ES6_CONFORMANCE =\n $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS &&\n $jscomp.checkEs6ConformanceViaProxy();\n", + "js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled async functions.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/generator_engine';\n\n/**\n * Handles the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n\n/**\n * Handles the execution of a generator function returning promises.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * return $jscomp.asyncExecutePromiseGeneratorFunction(\n * function* () {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * });\n * }\n * ```\n * @param {function(): !Generator} generatorFunction\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {\n return $jscomp.asyncExecutePromiseGenerator(generatorFunction());\n};\n\n/**\n * Handles the execution of a state machine program that represents transpiled\n * async function.\n *\n * @final\n * @param {function(!$jscomp.generator.Context): (void|{value: ?})} program\n * @return {!Promise}\n * @suppress {reportUnknownTypes, visibility}\n */\n$jscomp.asyncExecutePromiseGeneratorProgram = function(program) {\n return $jscomp.asyncExecutePromiseGenerator(\n new $jscomp.generator.Generator_(\n new $jscomp.generator.Engine_(\n program)));\n};\n", +@@ -912,30 +912,30 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/number/parseint.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.parseInt', function(orig) {\n return orig || parseInt;\n}, 'es6', 'es3');\n", + "js/es6/object.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Object polyfills.\n * @suppress {uselessCode}\n */\n'require es6/object/assign';\n'require es6/object/entries';\n'require es6/object/fromentries';\n'require es6/object/getownpropertydescriptors';\n'require es6/object/getownpropertysymbols';\n'require es6/object/is';\n'require es6/object/setprototypeof';\n'require es6/object/values';\n", + "js/es6/object/assign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/util/assign';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.assign', function(orig) {\n return orig || $jscomp.assign;\n}, 'es6', 'es3');\n", +-"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", ++"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", + "js/es6/object/fromentries.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/defineproperty';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.fromEntries', function(orig) {\n if (orig) {\n return orig;\n }\n\n /**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * @see https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js\n */\n function fromEntries(iter) {\n var obj = {};\n\n $jscomp.initSymbolIterator();\n\n if (!(Symbol.iterator in iter)) {\n throw new TypeError('' + iter + ' is not iterable');\n }\n\n var iteratorFn = (/** @type {function(): !Iterator>} */ (\n iter[Symbol.iterator]));\n var iterator = iteratorFn.call(iter);\n\n for (var result = iterator.next(); !result.done; result = iterator.next()) {\n var pair = result.value;\n\n if (Object(pair) !== pair) {\n throw new TypeError('iterable for fromEntries should yield objects');\n }\n\n var key = pair[0];\n var val = pair[1];\n obj[key] = val;\n }\n\n return obj;\n }\n\n return fromEntries;\n}, 'es_2019', 'es3');\n", +-"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", ++"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", + "js/es6/object/getownpropertysymbols.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {\n if (orig) return orig;\n\n // NOTE: The symbol polyfill is a string, so symbols show up in\n // Object.getOwnProperytyNames instead. It's been decided that\n // the trade-off of \"fixing\" this behavior is not worth the costs\n // in (a) code size, (b) brittleness, and (c) complexity.\n return function() { return []; };\n}, 'es6', 'es5'); // Same as Object.getOwnPropertyNames\n", +-"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/object/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill('Object.setPrototypeOf', function(orig) {\n // Note that $jscomp.setPrototypeOf will be `null` if it isn't possible to\n // implement this method.\n return orig || $jscomp.setPrototypeOf;\n}, 'es6', 'es5');\n", +-"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", ++"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", + "js/es6/promise.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all Promise polyfills.\n * @suppress {uselessCode}\n */\n'require es6/promise/promise';\n'require es6/promise/allSettled';\n'require es6/promise/finally';\n", + "js/es6/promise/allSettled.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/array/from';\n\n$jscomp.polyfill('Promise.allSettled', function(orig) {\n if (orig) return orig;\n\n /**\n * @param {*} value\n * @return {{status: string, value: *}}\n */\n function fulfilledResult(value) {\n return {status: 'fulfilled', value: value};\n }\n\n /**\n * @param {*} reason\n * @return {{status: string, reason: *}}\n */\n function rejectedResult(reason) {\n return {status: 'rejected', reason: reason};\n }\n\n /**\n * These types are weaker than they could be, but they're strong enough for\n * this context.\n * @this {typeof Promise}\n * @param {!Iterable<*>} thenablesOrValues\n * @return {!Promise>}\n */\n var polyfill = function(thenablesOrValues) {\n // The spec requires allSettled to be called directly on the Promise\n // constructor, which is consistent with its requirement for Promise.all().\n /** @type {typeof Promise} */\n var PromiseConstructor = this;\n\n /**\n * @param {*} maybeThenable\n * @return {!Promise<*>}\n */\n function convertToAllSettledResult(maybeThenable) {\n return PromiseConstructor.resolve(maybeThenable)\n .then(fulfilledResult, rejectedResult);\n }\n\n // Create an array of promises that resolve to the appropriate result\n // objects and never reject.\n var wrappedResults =\n Array.from(thenablesOrValues, convertToAllSettledResult);\n return PromiseConstructor.all(wrappedResults);\n };\n return polyfill;\n}, 'es_next', 'es3');\n", + "js/es6/promise/finally.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/promise/promise';\n\n$jscomp.polyfill('Promise.prototype.finally', function(orig) {\n if (orig) return orig;\n\n /**\n * @this {!Promise}\n * @param {function():?} onFinally\n * @return {!Promise}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(onFinally) {\n return this.then(\n function(value) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { return value; });\n },\n function(reason) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { throw reason; });\n });\n };\n\n return polyfill;\n}, 'es9', 'es3');\n", + "js/es6/promise/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/global';\n'require util/polyfill';\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n\n$jscomp.polyfill('Promise',\n /**\n * @param {*} NativePromise\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativePromise) {\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be `null` initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n }\n this.batch_.push(f);\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const {function(!Function, number)} */\n var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {function()} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var /** !Array */ executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = /** @type {function()} */ (executingBatch[i]);\n executingBatch[i] = null; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be asynchronously executed when this promise\n * settles.\n * @private {?Array}\n */\n this.onSettledCallbacks_ = [];\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

    After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T=)} method\n * @return {function(T=)}\n * @template T\n */\n function firstCallWins(method) {\n return function(/** T= */ x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*=} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n * @suppress {strictMissingProperties} obj.then\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*=} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason +\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {\n asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var /** !PolyfillPromise */ thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(callback);\n }\n };\n\n // called locally, so give it a name\n function resolvingPromise(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n }\n PolyfillPromise['resolve'] = resolvingPromise;\n\n\n PolyfillPromise['reject'] = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n PolyfillPromise['race'] = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var /** !Iterator<*> */ iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n PolyfillPromise['all'] = function(thenablesOrValues) {\n var /** !Iterator<*> */ iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return resolvingPromise([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n resolvingPromise(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n return PolyfillPromise;\n}, 'es6', 'es3');\n", + "js/es6/reflect.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Rolls together all ES6 Reflect polyfills.\n */\n'require es6/reflect/apply';\n'require es6/reflect/construct';\n'require es6/reflect/defineproperty';\n'require es6/reflect/deleteproperty';\n'require es6/reflect/get';\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n'require es6/reflect/has';\n'require es6/reflect/isextensible';\n'require es6/reflect/ownkeys';\n'require es6/reflect/preventextensions';\n'require es6/reflect/set';\n'require es6/reflect/setprototypeof';\n", +-"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require es6/util/construct';\n'require util/polyfill';\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n // NOTE: This is just Reflect.construct if it's present and functional.\n return $jscomp.construct;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", +-"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", ++"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n", + "js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n", +-"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n", +-"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", +-"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", ++"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill(\n 'Reflect.setPrototypeOf',\n /**\n * These annotations are intended to match the signature of\n * $jscomp.polyfill(). Being more specific makes the compiler unhappy.\n * @suppress {reportUnknownTypes}\n * @param {?*} orig\n * @return {*}\n */\n function(orig) {\n if (orig) {\n return orig;\n } else if ($jscomp.setPrototypeOf) {\n /** @const {!function(!Object,?Object):!Object} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n /**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n */\n var polyfill = function(target, proto) {\n try {\n setPrototypeOf(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n };\n return polyfill;\n } else {\n // it isn't possible to implement this method\n return null;\n }\n },\n 'es6', 'es5');\n", + "js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/conformance';\n'require es6/map';\n'require es6/symbol';\n'require util/defines';\n'require util/polyfill';\n\n$jscomp.polyfill('Set',\n /**\n * @param {*} NativeSet\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativeSet) {\n\n /**\n * Checks conformance of the existing Set.\n * @return {boolean} True if the browser's implementation conforms.\n * @suppress {missingProperties} \"entries\" unknown prototype\n */\n function isConformant() {\n if ($jscomp.ASSUME_NO_NATIVE_SET ||\n !NativeSet ||\n typeof NativeSet != \"function\" ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n\n if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {\n if (NativeSet && $jscomp.ES6_CONFORMANCE) return NativeSet;\n } else {\n if (isConformant()) return NativeSet;\n }\n\n // We depend on Symbol.iterator, so ensure it's loaded.\n $jscomp.initSymbolIterator();\n\n\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n // normalize -0/+0 to +0\n value = value === 0 ? 0 : value;\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6', 'es3');\n", + "js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n * @suppress {uselessCode}\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/padend';\n'require es6/string/padstart';\n'require es6/string/repeat';\n'require es6/string/startswith';\n'require es6/string/trimend';\n'require es6/string/trimstart';\n", +@@ -943,8 +943,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/string/endswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.endsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string ends with a given substring.\n *\n *

    Polyfills the instance method String.prototype.endsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'endsWith');\n searchString = searchString + '';\n if (opt_position === void 0) opt_position = string.length;\n var i = Math.max(0, Math.min(opt_position | 0, string.length));\n var j = searchString.length;\n while (j > 0 && i > 0) {\n if (string[--i] != searchString[--j]) return false;\n }\n return j <= 0;\n };\nreturn polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/fromcodepoint.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.fromCodePoint', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new string from the given codepoints.\n *\n *

    Polyfills the static function String.fromCodePoint().\n *\n * @param {...number} var_args\n * @return {string}\n */\n var polyfill = function(var_args) {\n // Note: this is taken from v8's harmony-string.js StringFromCodePoint.\n var result = '';\n for (var i = 0; i < arguments.length; i++) {\n var code = Number(arguments[i]);\n if (code < 0 || code > 0x10FFFF || code !== Math.floor(code)) {\n throw new RangeError('invalid_code_point ' + code);\n }\n if (code <= 0xFFFF) {\n result += String.fromCharCode(code);\n } else {\n code -= 0x10000;\n result += String.fromCharCode((code >>> 10) & 0x3FF | 0xD800);\n result += String.fromCharCode(code & 0x3FF | 0xDC00);\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/includes.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Searches for a substring, starting at the given position.\n *\n *

    Polyfills the instance method String.prototype.includes().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'includes');\n return string.indexOf(searchString, opt_position || 0) !== -1;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", +-"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", ++"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", ++"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", + "js/es6/string/repeat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.repeat', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns a new string repeated the given number of times.\n *\n *

    Polyfills the instance method String.prototype.repeat().\n *\n * @this {string}\n * @param {number} copies\n * @return {string}\n */\n var polyfill = function(copies) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'repeat');\n if (copies < 0 || copies > 0x4FFFFFFF) { // impose a 1GB limit\n throw new RangeError('Invalid count value');\n }\n copies = copies | 0; // cast to a signed integer.\n var result = '';\n while (copies) {\n if (copies & 1) result += string;\n if ((copies >>>= 1)) string += string;\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/startswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.startsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string starts with a given substring.\n *\n *

    Polyfills the instance method String.prototype.startsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');\n searchString = searchString + '';\n var strLen = string.length;\n var searchLen = searchString.length;\n var i = Math.max(\n 0,\n Math.min(/** @type {number} */ (opt_position) | 0, string.length));\n var j = 0;\n while (j < searchLen && i < strLen) {\n if (string[i++] != searchString[j++]) return false;\n }\n return j >= searchLen;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/trimend.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n\n// Most browsers implemented trimRight around ES5-time-frame, but it wasn't\n// officially part of the language specification until ES_2019, so we have\n// to provide a polyfill for it.\n// IE11 doesn't have it, of course...\n$jscomp.polyfill('String.prototype.trimRight', function(orig) {\n /**\n * @this {string}\n * @return {string}\n */\n function polyfill() {\n return this.replace(/[\\s\\xa0]+$/, '');\n }\n return orig || polyfill;\n}, 'es_2019', 'es3');\n\n$jscomp.polyfill('String.prototype.trimEnd', function(orig) {\n return orig || String.prototype.trimRight;\n}, 'es_2019', 'es3');\n", +@@ -953,8 +953,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/util/arrayfromiterable.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require es6/util/makeiterator';\n'require es6/util/arrayfromiterator';\n\n\n/**\n * Copies the values from an Iterable into an Array.\n * @param {string|!Array|!Iterable|!Arguments} iterable\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterable = function(iterable) {\n if (iterable instanceof Array) {\n return iterable;\n } else {\n return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));\n }\n};\n", + "js/es6/util/arrayfromiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require base';\n\n\n/**\n * Copies the values from an Iterator into an Array. The important difference\n * between this and $jscomp.arrayFromIterable is that if the iterator's\n * next() method has already been called one or more times, this method returns\n * only the values that haven't been yielded yet.\n * @param {!Iterator} iterator\n * @return {!Array}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.arrayFromIterator = function(iterator) {\n var i;\n var arr = [];\n while (!(i = iterator.next()).done) {\n arr.push(i.value);\n }\n return arr;\n};\n", + "js/es6/util/arrayiterator.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility method for creating an iterator for Arrays.\n */\n\'require base\';\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {function():!IIterableResult}\n * @template T\n */\n$jscomp.arrayIteratorImpl = function(array) {\n var index = 0;\n return function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n };\n};\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {!Iterator}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n return /** @type {!Iterator} */ ({next: $jscomp.arrayIteratorImpl(array)});\n};\n\n', +-"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", +-"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", ++"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", ++"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", + "js/es6/util/inherits.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for ES6 extends keyword.\n * @suppress {uselessCode}\n */\n'require base';\n'require util/objectcreate';\n'require es6/util/setprototypeof';\n\n\n/**\n * Inherit the prototype methods and static methods from one constructor\n * into another.\n *\n * This wires up the prototype chain (like goog.inherits) and copies static\n * properties, for ES6-to-ES{3,5} transpilation.\n *\n * Usage:\n *

    \n *   function ParentClass() {}\n *\n *   // Regular method.\n *   ParentClass.prototype.foo = function(a) {};\n *\n *   // Static method.\n *   ParentClass.bar = function() {};\n *\n *   function ChildClass() {\n *     ParentClass.call(this);\n *   }\n *   $jscomp.inherits(ChildClass, ParentClass);\n *\n *   var child = new ChildClass();\n *   child.foo();\n *   ChildClass.bar();  // Static inheritance.\n * 
    \n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n * @suppress {strictMissingProperties} 'superClass_' is not defined on Function\n */\n$jscomp.inherits = function(childCtor, parentCtor) {\n childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);\n /** @override */ childCtor.prototype.constructor = childCtor;\n if ($jscomp.setPrototypeOf) {\n // avoid null dereference warning\n /** @const {!Function} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n setPrototypeOf(childCtor, parentCtor);\n } else {\n // setPrototypeOf is not available so we need to copy the static\n // methods to the child\n for (var p in parentCtor) {\n if (p == 'prototype') {\n // Don't copy parentCtor.prototype to childCtor.\n continue;\n }\n if (Object.defineProperties) {\n var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);\n if (descriptor) {\n Object.defineProperty(childCtor, p, descriptor);\n }\n } else {\n // Pre-ES5 browser. Just copy with an assignment.\n childCtor[p] = parentCtor[p];\n }\n }\n }\n\n childCtor.superClass_ = parentCtor.prototype;\n};\n", + "js/es6/util/iteratorfromarray.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utilities for iterator-returning methods.\n */\n'require es6/symbol';\n\n\n/**\n * Creates an iterator from an array-like, with a transformation function.\n * @param {!IArrayLike} array\n * @param {function(number, INPUT): OUTPUT} transform\n * @return {!IteratorIterable}\n * @template INPUT, OUTPUT\n * @suppress {checkTypes|reportUnknownTypes}\n */\n$jscomp.iteratorFromArray = function(array, transform) {\n $jscomp.initSymbolIterator();\n // NOTE: IE8 doesn't support indexing from boxed Strings.\n if (array instanceof String) array = array + '';\n var i = 0;\n var iter = {\n next: function() {\n if (i < array.length) {\n var index = i++;\n return {value: transform(index, array[index]), done: false};\n }\n iter.next = function() { return {done: true, value: void 0}; };\n return iter.next();\n }\n };\n iter[Symbol.iterator] = function() { return iter; };\n return iter;\n};\n", + "js/es6/util/makeasynciterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for for-of loops.\n */\n'require es6/symbol';\n'require es6/util/makeiterator';\n\n/**\n * Creates an iterator for the given iterable.\n *\n * @param {string|!AsyncIterable|!Iterable|!Iterator|!Arguments} iterable\n * @return {!AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.makeAsyncIterator = function(iterable) {\n $jscomp.initSymbolAsyncIterator();\n var asyncIteratorFunction = (iterable)[Symbol.asyncIterator];\n if (asyncIteratorFunction !== undefined) {\n return asyncIteratorFunction.call(iterable);\n }\n return new $jscomp.AsyncIteratorFromSyncWrapper($jscomp.makeIterator(\n /** @type {string|!Iterable|!Iterator|!Arguments} */\n (iterable)));\n};\n\n/**\n *\n * @param {!Iterator} iterator\n * @constructor\n * @implements {AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncIteratorFromSyncWrapper = function(iterator) {\n /**\n * @return {!AsyncIterator}\n */\n this[Symbol.asyncIterator] = function() {\n return this;\n };\n\n /**\n * @return {!Iterator>>}\n */\n this[Symbol.iterator] = function() {\n return iterator;\n };\n\n /**\n * @param {?=} param\n * @return {!Promise>}\n */\n this.next = function(param) {\n return Promise.resolve(iterator.next(param));\n };\n\n if (iterator['throw'] !== undefined) {\n /**\n * @param {?} param\n * @return {!Promise>}\n */\n this['throw'] = function(param) {\n return Promise.resolve(iterator['throw'](param));\n };\n }\n\n if (iterator['return'] !== undefined) {\n /**\n * @param {T} param\n * @return {!Promise>}\n */\n this['return'] = function(param) {\n return Promise.resolve(iterator['return'](param));\n };\n }\n};\n", +@@ -967,19 +967,19 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/modules.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n\'require es6/modules/runtime\';\n', + "js/runtime_type_check.js":"/*\n * Copyright 2010 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Provides the boilerplate code for run-time type checking.\n *\n *\n * @suppress {uselessCode} The require statements below are not useless.\n */\n'require base';\n\n/** @const */\n$jscomp.typecheck = {};\n\n/**\n * A state variable to suspend checking, to avoid infinite calls\n * caused by calling checked code from the checking functions.\n *\n * @type {boolean}\n */\n$jscomp.typecheck.suspendChecking = false;\n\n\n/**\n * Log and possibly format the run-time type check warning. This\n * function is customized at compile-time.\n *\n * @param {string} warning the warning to log.\n * @param {*} expr the faulty expression.\n */\n$jscomp.typecheck.log = function(warning, expr) {};\n\n/**\n * Checks that the given expression matches one of the given checkers,\n * logging if not, and returning the expression regardless.\n *\n * @param {*} expr the expression to check.\n * @param {!Array} checkers the checkers to\n * use in checking, one of these has to match for checking to succeed.\n * @return {*} the given expression back.\n */\n$jscomp.typecheck.checkType = function(expr, checkers) {\n if ($jscomp.typecheck.suspendChecking) {\n return expr;\n }\n $jscomp.typecheck.suspendChecking = true;\n\n for (var i = 0; i < checkers.length; i++) {\n var checker = checkers[i];\n var ok = checker.check(expr);\n if (ok) {\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n }\n }\n\n var warning = $jscomp.typecheck.prettify_(expr) + ' not in ' +\n checkers.join(' ');\n\n $jscomp.typecheck.log(warning, expr);\n\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n};\n\n\n/**\n * Prettify the given expression for printing.\n *\n * @param {*} expr the expression.\n * @return {string} a string representation of the given expression.\n * @private\n */\n$jscomp.typecheck.prettify_ = function(expr) {\n var className = $jscomp.typecheck.getClassName_(expr);\n if (className) {\n return className;\n }\n try {\n return String(expr);\n }\n catch (e) {}\n return '';\n};\n\n/**\n * Gets the class name if the given expression is an object.\n *\n * @param {*} expr the expression.\n * @return {string|undefined} the class name or undefined if the\n * expression is not an object.\n * @private\n * @suppress {strictMissingProperties}\n */\n$jscomp.typecheck.getClassName_ = function(expr) {\n var className = void 0;\n if (typeof expr == 'object' && expr && expr.constructor) {\n className = expr.constructor.name;\n if (!className) {\n var funNameRe = /function (.{1,})\\(/;\n var m = (funNameRe).exec(expr.constructor.toString());\n className = m && m.length > 1 ? m[1] : void 0;\n }\n }\n return className;\n};\n\n/**\n * Interface for all checkers.\n *\n * @interface\n */\n$jscomp.typecheck.Checker = function() {};\n\n\n/**\n * Checks the given expression.\n *\n * @param {*} expr the expression to check.\n * @return {boolean} whether the given expression matches this checker.\n */\n$jscomp.typecheck.Checker.prototype.check = function(expr) {};\n\n\n\n/**\n * A class for all value checkers, except the null checker.\n *\n * @param {string} type the value type (e.g. 'number') of this checker.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ValueChecker_ = function(type) {\n /**\n * The value type of this checker.\n * @type {string}\n * @private\n */\n this.type_ = type;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.check = function(expr) {\n return typeof(expr) == this.type_;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.toString = function() {\n return 'value(' + this.type_ + ')';\n};\n\n\n\n/**\n * A checker class for null values.\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.NullChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.check = function(expr) {\n return expr === null;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.toString = function() {\n return 'value(null)';\n};\n\n\n/**\n * A checker class for a class defined in externs, including built-in\n * JS types.\n *\n *

    If the class type is undefined, then checking is suspended to\n * avoid spurious warnings. This is necessary because some externs\n * types are not defined in all browsers. For example, Window is not\n * defined Chrome, as window has the type DOMWindow.\n *\n *

    Another subtlety is that a built-in type may be referenced in a\n * different frame than the one in which it was created. This causes\n * instanceOf to return false even though the object is of the correct\n * type. We work around this by checking as many windows as possible,\n * redefining open on top and window to keep track of them.\n *\n * @param {string} className the name of the extern class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_ = function(className) {\n /**\n * The name of the extern class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/**\n * A list of (hopefully all) open windows.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.windows = [];\n\n\n/**\n * A list of the original open methods that have been redefined.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.oldOpenFuns = [];\n\n\n/**\n * Redefines the open method on the given window, adding tracking.\n *\n * @param {!Window} win the window to track.\n * @suppress {uselessCode}\n */\n$jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow = function(win) {\n // Declare the property we add to the window object.\n // NOTE: we add a declaration in a \"if (false) ...\" to ensure we\n // don't reference \"Window\" on platforms that don't have a global\n // Window object (node, service workers, etc).\n if (false) {\n /** @type {boolean} */\n Window.prototype.tracked;\n }\n\n if (win.tracked) {\n return;\n }\n\n win.tracked = true;\n\n var key = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.length;\n\n $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.push(win.open);\n $jscomp.typecheck.ExternClassChecker_.windows.push(win);\n\n win.open = function() {\n var w = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns[key].apply(\n this, arguments);\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(w);\n return w;\n };\n};\n\n\n/**\n * Returns the global 'this' object. This will normally be the same as 'window'\n * but when running in a worker thread, the DOM is not available.\n *\n * This does not work when strict mode is enabled.\n *\n * @return {!Window}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.getGlobalThis_ = function() {\n return (function() { return this; }).call(null);\n};\n\n\n// Install listeners on the global 'this' object.\n(function() {\n var globalThis = $jscomp.typecheck.ExternClassChecker_.getGlobalThis_();\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(globalThis);\n\n var theTop = globalThis['top'];\n if (theTop) {\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(theTop);\n }\n})();\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.check = function(expr) {\n var classTypeDefined = [ false ];\n for (var i = 0; i < $jscomp.typecheck.ExternClassChecker_.windows.length;\n i++) {\n var w = $jscomp.typecheck.ExternClassChecker_.windows[i];\n if (this.checkWindow_(w, expr, classTypeDefined)) {\n return true;\n }\n }\n return !classTypeDefined[0];\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.toString = function() {\n return 'ext_class(' + this.className_ + ')';\n};\n\n\n/**\n * Checks whether the given expression is an instance of this extern\n * class in this window or any of its frames and subframes.\n *\n * @param {!Window} w the window to start checking from.\n * @param {*} expr the expression to check.\n * @param {!Array} classTypeDefined a wrapped boolean\n * updated to indicate whether the class type was seen in any frame.\n * @return {boolean} true if the given expression is an instance of this class.\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.prototype.checkWindow_ =\n function(w, expr, classTypeDefined) {\n var classType = /** @type {function(new: ?)} */ (w[this.className_]);\n classTypeDefined[0] = classTypeDefined[0] || !!classType;\n if (classType && expr instanceof classType) {\n return true;\n }\n for (var i = 0; i < w.length; i++) {\n if (this.checkWindow_(w.frames[i], expr, classTypeDefined)) {\n return true;\n }\n }\n return false;\n};\n\n\n\n/**\n * A class for all checkers of user-defined classes.\n *\n * @param {string} className name of the class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ClassChecker_ = function(className) {\n\n /**\n * The name of the class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.check = function(expr) {\n return !!(expr && expr['instance_of__' + this.className_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.toString = function() {\n return 'class(' + this.className_ + ')';\n};\n\n\n\n/**\n * A class for all checkers of user-defined interfaces.\n *\n * @param {string} interfaceName name of the interface to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.InterfaceChecker_ = function(interfaceName) {\n\n /**\n * The name of the interface to check.\n * @type {string}\n * @private\n */\n this.interfaceName_ = interfaceName;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.check = function(expr) {\n return !!(expr && expr['implements__' + this.interfaceName_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.toString = function() {\n return 'interface(' + this.interfaceName_ + ')';\n};\n\n\n\n/**\n * A checker for object types (possibly with non-standard prototype: might not\n * inherit from Object).\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ObjectChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.check = function(expr) {\n return (typeof(expr) == 'object' || typeof(expr) == 'function') && !!expr;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.toString = function() {\n return 'value(object)';\n};\n\n\n\n/**\n * A checker for null values.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.nullChecker = new $jscomp.typecheck.NullChecker_();\n\n\n/**\n * Creates a checker for the given value type (excluding the null type).\n *\n * @param {string} type the value type.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.valueChecker = function(type) {\n return new $jscomp.typecheck.ValueChecker_(type);\n};\n\n\n/**\n * Creates a checker for the given extern class name.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.externClassChecker = function(className) {\n return new $jscomp.typecheck.ExternClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined class.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.classChecker = function(className) {\n return new $jscomp.typecheck.ClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined interface.\n *\n * @param {string} interfaceName the interface name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.interfaceChecker = function(interfaceName) {\n return new $jscomp.typecheck.InterfaceChecker_(interfaceName);\n};\n\n\n/**\n * A checker for objects.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.objectChecker = new $jscomp.typecheck.ObjectChecker_();\n", + "js/util/checkstringargs.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n\n/**\n * Throws if the argument is a RegExp, or if thisArg is undefined.\n * @param {?} thisArg The 'this' arg, which must be defined.\n * @param {*} arg The first argument of the function, which mustn't be a RegExp.\n * @param {string} func Name of the function, for reporting.\n * @return {string} The thisArg, coerced to a string.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkStringArgs = function(thisArg, arg, func) {\n if (thisArg == null) {\n throw new TypeError(\n \"The 'this' value for String.prototype.\" + func +\n ' must not be null or undefined');\n }\n if (arg instanceof RegExp) {\n throw new TypeError(\n 'First argument to String.prototype.' + func +\n ' must not be a regular expression');\n }\n return thisArg + '';\n};\n", +-"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", ++"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", + "js/util/defines.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n\n/**\n * Whether to assume ES5 is available. This enables removing several\n * internal polyfills, which must otherwise be detected at runtime.\n * @define {boolean}\n */\n$jscomp.ASSUME_ES5 = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n/**\n * Whether to provide an incorrect but tiny Math.fround polyfill that just\n * returns the number given. This is usually okay to do, particularly if\n * `Math.fround` is only used to allow the JavaScript engine to use faster\n * 32-bit float operations, but could cause problems if program logic is\n * dependent on floats being truncated consistently.\n * @define {boolean}\n */\n$jscomp.SIMPLE_FROUND_POLYFILL = false;\n', + "js/util/finddescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n\n\n/**\n * Helper function to find a descriptor.\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {!ObjectPropertyDescriptor|undefined}\n */\n$jscomp.findDescriptor = function(target, propertyKey) {\n var /** ?Object */ obj = target;\n while (obj) {\n var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);\n if (property) {\n return property;\n }\n obj = Reflect.getPrototypeOf(obj);\n }\n return undefined;\n};\n", + "js/util/findinternal.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility for Array methods that find elements.\n */\n\'require base\';\n\n// TODO(sdh): would be nice to template on the ARRAY type as well,\n// so that the third arg type of callback can be refined to be\n// exactly the same as the array type, but then there\'s no way to\n// enforce that it must, in fact, be an array.\n/**\n * Internal implementation of find.\n * @param {!IArrayLike} array\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *} callback\n * @param {THIS} thisArg\n * @return {{i: number, v: (VALUE|undefined)}}\n * @template THIS, VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.findInternal = function(array, callback, thisArg) {\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n for (var i = 0; i < len; i++) {\n var value = array[i];\n if (callback.call(thisArg, value, i, array)) return {i: i, v: value};\n }\n return {i: -1, v: void 0};\n};\n', + "js/util/global.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n */\n\'require base\';\n\n\n/**\n * @param {!Object} maybeGlobal\n * @return {!Object} The global object.\n * @suppress {undefinedVars|reportUnknownTypes}\n */\n$jscomp.getGlobal = function(maybeGlobal) {\n // This logic can be simplified to be made more optimizable.\n return (typeof window != \'undefined\' && window === maybeGlobal) ?\n maybeGlobal :\n (typeof global != \'undefined\' && global != null) ?\n /** @type {!Object} */ (global) :\n maybeGlobal;\n};\n\n\n// TODO(sdh): This should be typed as "the global object" now that the type\n// of "Global" has landed in the type system.\n/**\n * The global object. For browsers we could just use `this` but in Node that\n * doesn\'t work.\n * @const {?}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n', +-"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", ++"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", + "js/util/owns.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Synonym for Object.prototype.hasOwnProperty.call(obj, prop).\n * @param {!Object} obj\n * @param {string} prop\n * @return {boolean}\n */\n$jscomp.owns = function(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n', + "js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n */\n'require util/defineproperty';\n'require util/global';\n\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * e.g. 'Array.prototype.includes' or 'Map'.\n * @param {?function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation. If null is returned, then no polyfill will be added. A\n * null argument for this parameter indicates that the function will not be\n * polyfilled, and is only useful for `build_polyfill_table.js` bookkeeping.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser. The compiler requires that\n * `languageOut < fromLang` before injecting a polyfill (i.e. if the\n * specified output language already includes the feature then there's no\n * need to polyfill it).\n * @param {string} toLang The language level required by the polyfill\n * implementation. The compiler will issue an error if a polyfill is\n * required, but `languageOut < toLang`. Additionally, the\n * `build_polyfill_table.js` script audits the polyfill dependency tree to\n * ensure that no polyfill with a lower `toLang` depends on one with a\n * higher `toLang`.\n * @suppress {reportUnknownTypes}\n * @noinline\n * NOTE: We prevent inlining so RemoveUnusedPolyfills can always recognize this\n * call.\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) obj[key] = {}; // Might want to be defineProperty.\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n", + "js/util/reflectobject.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Definition for object reflection.\n *\n * Internal compiler version of closure library goog.reflect.object.\n *\n * Use this if you have an object literal whose keys need to have the same names\n * as the properties of some class even after they are renamed by the compiler.\n *\n * @param {?Object} type class, interface, or record\n * @param {T} object Object literal whose properties must be renamed\n * consistently with type\n * @return {T} The object literal.\n * @template T\n */\n$jscomp.reflectObject = function(type, object) {\n return object;\n};\n\n/**\n * Definition for object property reflection.\n *\n * Internal compiler version of closure library goog.reflect.objectProperty.\n *\n * Use this if you have a string that needs renamed as if it were an unquoted\n * property of a class.\n *\n * @param {string} propName\n * @param {?Object} type class, interface, or record\n * @return {string}\n */\n$jscomp.reflectProperty = function(propName, type) {\n return propName;\n};\n', + "js/util/stringpadding.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/string/repeat';\n\n/**\n * Repeats the given string as necessary to reach the given length,\n * truncating any extra characters.\n * @param {string|undefined} padString\n * @param {number} padLength\n * @return {string}\n */\n$jscomp.stringPadding = function(padString, padLength) {\n var padding = padString !== undefined ? String(padString) : ' ';\n if (!(padLength > 0) || !padding) return '';\n var repeats = Math.ceil(padLength / padding.length);\n return padding.repeat(repeats).substring(0, padLength);\n};\n", + "js/polyfills.txt":"Array.from es6 es3 es6/array/from\nArray.of es6 es3 es6/array/of\nArray.prototype.copyWithin es6 es3 es6/array/copywithin\nArray.prototype.entries es6 es3 es6/array/entries\nArray.prototype.fill es6 es3 es6/array/fill\nArray.prototype.find es6 es3 es6/array/find\nArray.prototype.findIndex es6 es3 es6/array/findindex\nArray.prototype.flat es9 es5 es6/array/flat\nArray.prototype.flatMap es9 es5 es6/array/flatmap\nArray.prototype.includes es7 es3 es6/array/includes\nArray.prototype.keys es6 es3 es6/array/keys\nArray.prototype.values es8 es3 es6/array/values\nMap es6 es3 es6/map\nMath.acosh es6 es3 es6/math/acosh\nMath.asinh es6 es3 es6/math/asinh\nMath.atanh es6 es3 es6/math/atanh\nMath.cbrt es6 es3 es6/math/cbrt\nMath.clz32 es6 es3 es6/math/clz32\nMath.cosh es6 es3 es6/math/cosh\nMath.expm1 es6 es3 es6/math/expm1\nMath.fround es6 es3 es6/math/fround\nMath.hypot es6 es3 es6/math/hypot\nMath.imul es6 es3 es6/math/imul\nMath.log10 es6 es3 es6/math/log10\nMath.log1p es6 es3 es6/math/log1p\nMath.log2 es6 es3 es6/math/log2\nMath.sign es6 es3 es6/math/sign\nMath.sinh es6 es3 es6/math/sinh\nMath.tanh es6 es3 es6/math/tanh\nMath.trunc es6 es3 es6/math/trunc\nNumber.EPSILON es6 es3 es6/number/constants\nNumber.MAX_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.MIN_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.isFinite es6 es3 es6/number/isfinite\nNumber.isInteger es6 es3 es6/number/isinteger\nNumber.isNaN es6 es3 es6/number/isnan\nNumber.isSafeInteger es6 es3 es6/number/issafeinteger\nNumber.parseFloat es6 es3 es6/number/parsefloat\nNumber.parseInt es6 es3 es6/number/parseint\nObject.assign es6 es3 es6/object/assign\nObject.entries es8 es3 es6/object/entries\nObject.fromEntries es_2019 es3 es6/object/fromentries\nObject.getOwnPropertyDescriptors es8 es5 es6/object/getownpropertydescriptors\nObject.getOwnPropertySymbols es6 es5 es6/object/getownpropertysymbols\nObject.is es6 es3 es6/object/is\nObject.setPrototypeOf es6 es5 es6/object/setprototypeof\nObject.values es8 es3 es6/object/values\nPromise es6 es3 es6/promise/promise\nPromise.allSettled es_next es3 es6/promise/allSettled\nPromise.prototype.finally es9 es3 es6/promise/finally\nProxy es6 es6\nReflect.apply es6 es3 es6/reflect/apply\nReflect.construct es6 es3 es6/reflect/construct\nReflect.defineProperty es6 es5 es6/reflect/defineproperty\nReflect.deleteProperty es6 es3 es6/reflect/deleteproperty\nReflect.get es6 es5 es6/reflect/get\nReflect.getOwnPropertyDescriptor es6 es5 es6/reflect/getownpropertydescriptor\nReflect.getPrototypeOf es6 es5 es6/reflect/getprototypeof\nReflect.has es6 es3 es6/reflect/has\nReflect.isExtensible es6 es3 es6/reflect/isextensible\nReflect.ownKeys es6 es5 es6/reflect/ownkeys\nReflect.preventExtensions es6 es3 es6/reflect/preventextensions\nReflect.set es6 es5 es6/reflect/set\nReflect.setPrototypeOf es6 es5 es6/reflect/setprototypeof\nSet es6 es3 es6/set\nString.fromCodePoint es6 es3 es6/string/fromcodepoint\nString.prototype.codePointAt es6 es3 es6/string/codepointat\nString.prototype.endsWith es6 es3 es6/string/endswith\nString.prototype.includes es6 es3 es6/string/includes\nString.prototype.normalize es6 es6\nString.prototype.padEnd es8 es3 es6/string/padend\nString.prototype.padStart es8 es3 es6/string/padstart\nString.prototype.repeat es6 es3 es6/string/repeat\nString.prototype.startsWith es6 es3 es6/string/startswith\nString.prototype.trimEnd es_2019 es3 es6/string/trimend\nString.prototype.trimLeft es_2019 es3 es6/string/trimstart\nString.prototype.trimRight es_2019 es3 es6/string/trimend\nString.prototype.trimStart es_2019 es3 es6/string/trimstart\nString.raw es6 es6\nWeakMap es6 es3 es6/weakmap\nWeakSet es6 es3 es6/weakset\n", + "parsing/ParserConfig.properties":"# Copyright 2009 The Closure Compiler Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Configuration options for the Parser.\n#\n# Allows us to update the allowed JSDoc annotations independently of the\n# Compiler binary, so we can add new JSDoc annotations to old binaries.\n\n# The version of the compiler that we're currently building.\n# Should be formatted as:\n# Version# (Revision XXX)\ncompiler.version = ${compiler.version}\n\n# The datestamp of the compiler that we're currently building.\ncompiler.date = ${compiler.date}\n\n# A comma-delimited list.\n# Some of these are not used by JSCompiler, but appear in third-party JS code.\n# http://usejsdoc.org/\n# It's not strictly necessary for the natively-supported annotations to be\n# listed here, but it's nice to have them all in one place.\njsdoc.annotations =\\\n addon,\\\n alias,\\\n animations,\\\n appliesMixin,\\\n augments,\\\n author,\\\n base,\\\n borrows,\\\n bug,\\\n channel, \\\n class,\\\n classdesc,\\\n closurePrimitive,\\\n codepen,\\\n config,\\\n constructor,\\\n constructs,\\\n copyright,\\\n default,\\\n delegate,\\\n demo,\\\n deprecated,\\\n desc,\\\n description,\\\n dict,\\\n docsNotRequired,\\\n docs-private,\\\n element,\\\n enhance,\\\n enhanceable,\\\n enum,\\\n event,\\\n eventOf,\\\n eventType,\\\n example,\\\n exception,\\\n exec,\\\n export,\\\n exportDoc,\\\n exportInterface,\\\n expose,\\\n externs,\\\n field,\\\n file,\\\n fires,\\\n function,\\\n global,\\\n hassoydelcall,\\\n hassoydeltemplate,\\\n hideconstructor, \\\n id,\\\n idGenerator,\\\n ignore,\\\n inner,\\\n instance,\\\n kind,\\\n lends,\\\n link,\\\n meaning,\\\n member,\\\n memberOf,\\\n memberof,\\\n method,\\\n methodOf,\\\n mixes,\\\n mixin,\\\n modName,\\\n moddedBy,\\\n model,\\\n modifies,\\\n mods,\\\n module,\\\n multiElement,\\\n name,\\\n namespace,\\\n ngInject,\\\n ngdoc,\\\n nocompile,\\\n package,\\\n param,\\\n parent,\\\n pintomodule,\\\n preserveTry,\\\n priority,\\\n private,\\\n property,\\\n propertyOf,\\\n protected,\\\n provideGoog,\\\n pseudoElement,\\\n public,\\\n readonly,\\\n requirecss,\\\n requires,\\\n requireExtern,\\\n restrict,\\\n returns,\\\n scope,\\\n see,\\\n since,\\\n static,\\\n struct,\\\n summary,\\\n supported,\\\n this,\\\n throws,\\\n todo,\\\n transaction,\\\n tutorial,\\\n type,\\\n typedef,\\\n typeSummary,\\\n url,\\\n usage,\\\n version,\\\n virtual,\\\n visibility,\\\n wizSupportsSymbolicLookup,\\\n wizaction,\\\n wizmodule\n\n# Comma-delimited list of valid suppressions.\n# This should be a subset of the list of DiagnosticGroups.\njsdoc.suppressions =\\\n accessControls,\\\n checkDebuggerStatement,\\\n checkPrototypalTypes,\\\n checkRegExp,\\\n checkTypes,\\\n checkVars,\\\n closureDepMethodUsageChecks,\\\n const,\\\n constantProperty,\\\n deprecated,\\\n duplicate,\\\n es5Strict,\\\n externsValidation,\\\n extraProvide,\\\n extraRequire,\\\n fileoverviewTags,\\\n globalThis,\\\n invalidCasts,\\\n legacyGoogScopeRequire,\\\n lateProvide,\\\n lintChecks,\\\n messageConventions,\\\n misplacedTypeAnnotation,\\\n missingOverride, \\\n missingPolyfill, \\\n missingProperties,\\\n missingProvide,\\\n missingRequire,\\\n missingReturn,\\\n missingSourcesWarnings,\\\n moduleLoad,\\\n newCheckTypes,\\\n newCheckTypesAllChecks,\\\n nonStandardJsDocs,\\\n partialAlias,\\\n polymer,\\\n reportUnknownTypes,\\\n strictCheckTypes,\\\n strictMissingProperties,\\\n strictModuleDepCheck,\\\n strictPrimitiveOperators,\\\n suspiciousCode,\\\n transitionalSuspiciousCodeWarnings,\\\n undefinedNames,\\\n undefinedVars,\\\n underscore,\\\n unknownDefines,\\\n unusedLocalVariables,\\\n unusedPrivateMembers,\\\n uselessCode,\\\n visibility,\\\n with\n\n# A comma-delimited list of valid closure primitive ids.\n# This correspond to the ClosurePrimitive enum once normalized (see ClosurePrimitive.fromStringId)\njsdoc.primitives =\\\n asserts.fail,\\\n asserts.matchesReturn,\\\n asserts.truthy,\\\n\n# A comma-delimited list of reserved words that we should not rename variables\n# to. Used when an extension is released that steps on globals.\n# This prevents the compiler from renaming variables to these names, but not\n# from allowing externs for these names.\n#\n# i,j - common loop variables often overwritten by browser extensions\n# s \u2013 commonly defined by browser extensions when injecting scripts.\n# $j,$ - common jquery aliases often overwritten by browser extensions\n# o - overwritten by Norton Identity Protection's Chrome extension.\n# ga,_gaq - global variable names used by Google Analytics.\n# sun,java - May cause issues in older browsers with remnants of Java support.\n# XR - extern added by the webXR platform API.\n# TODO(tbreisacher): Remove 'ga' and '_gaq' if/when we enable\n# --isolation_mode=IIFE by default.\ncompiler.reserved.vars = i,j,s,$,$j,o,ga,_gaq,sun,XR,java\n", +-"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.mozilla.org/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; ++"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.m0z111a.qjz9zk/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; + function qra(a){if(a in pra)return pra[a];throw Ia("Resource not found: "+r(a)).s;}function rra(){}var sra;l(rra,n);function ky(a,b){a=a.a.a.get(b);if(null==a)throw a=new Mr,sa(a,"no key found"),a.f=b,a.a(Error(a)),a.s;return a} + function tra(a){ura();if("com.google.javascript.rhino.Messages"===a)a="rhino/Messages.properties";else if("com.google.javascript.jscomp.parsing.ParserConfig"===a)a="parsing/ParserConfig.properties";else throw Ia("ResourceBundle not available: "+r(a)).s;var b=sra.get(a);if(!b){b=qra(a);b=ri(b,"\r?\n",0);for(var c=gl(),d=0;d

    + Content +

    +- ++ + Span for John that can trigger a + hovercard. + +@@ -36,7 +36,7 @@ See the COPYING file for details. + attribute) + +
    +- ++ + Span for James that can trigger a + hovercard + +@@ -44,7 +44,7 @@ See the COPYING file for details. + + +
    +-
    ++
    + Doesn't trigger for Bill because + it's a div +
    +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html b/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html +--- a/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html +@@ -16,7 +16,7 @@ See the COPYING file for details. +

    + Content +

    +- ++ + Span for John that can trigger a + hovercard. + +@@ -26,7 +26,7 @@ See the COPYING file for details. + attribute) + +
    +- ++ + Span for James that can trigger a + hovercard + +@@ -34,7 +34,7 @@ See the COPYING file for details. + + +
    +-
    ++
    + Doesn't trigger for Bill because + it's a div +
    +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html b/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html +--- a/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html ++++ b/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html +@@ -26,7 +26,7 @@ See the COPYING file for details. + + + +- ++ + + + +@@ -34,7 +34,7 @@ See the COPYING file for details. + + + +- ++ + + + + +- ++ + + + +@@ -24,7 +24,7 @@ See the COPYING file for details. + + + +- ++ + +